Project 3
#include
#include
#include
#include
enum Type {
GAS,
DIESEL,
ELECTRIC
};
class Vehicle {
protected:
std::string make;
std::string model;
int year;
int odometer;
public:
Vehicle(const std::string& make, const std::string& model, int year, int odometer)
: make(make), model(model), year(year), odometer(odometer) {}
// Getter and setter functions
const std::string& getMake() const { return make; }
const std::string& getModel() const { return model; }
int getYear() const { return year; }
int getOdometer() const { return odometer; }
void setMake(const std::string& newMake) { make = newMake; }
void setModel(const std::string& newModel) { model = newModel; }
void setYear(int newYear) { year = newYear; }
void setOdometer(int newOdometer) { odometer = newOdometer; }
virtual Type getType() const = 0;
};
class GasCar : public Vehicle {
public:
GasCar(const std::string& make, const std::string& model, int year, int odometer)
: Vehicle(make, model, year, odometer) {}
Type getType() const override { return GAS; }
};
class DieselCar : public Vehicle {
public:
DieselCar(const std::string& make, const std::string& model, int year, int odometer)
: Vehicle(make, model, year, odometer) {}
Type getType() const override { return DIESEL; }
};
class ElectricCar : public Vehicle {
public:
ElectricCar(const std::string& make, const std::string& model, int year, int odometer)
: Vehicle(make, model, year, odometer) {}
Type getType() const override { return ELECTRIC; }
void checkTireRotation() const {
int tireCycle = 50000;
int distanceRun = getOdometer();
int remainder = distanceRun % tireCycle;
if (distanceRun >= tireCycle && remainder >= 0) {
std::cout << "Advice: Rotate tires.\n";
} else {
std::cout << "Tires are good to go.\n";
}
}
void checkChargerPower() const {
int rechargeDistance = 400;
int distanceRun = getOdometer();
if (distanceRun >= rechargeDistance) {
std::cout << "Advice: Recharge the battery.\n";
} else {
std::cout << "Vehicle is good to go.\n";
}
}
};
class FuelVehicle : public Vehicle {
public:
FuelVehicle(const std::string& make, const std::string& model, int year, int odometer)
: Vehicle(make, model, year, odometer) {}
virtual void checkOil() const {
std::cout << "Checking oil for fuel vehicles.\n";
}
virtual Type getFuelType() const = 0;
};
class CarMaintenanceSystem {
private:
std::vector
public:
void addVehicle(const std::string& make, const std::string& model, int year, int odometer, Type type) {
// Create a new vehicle based on the type
std::unique_ptr
switch (type) {
case GAS:
newVehicle = std::make_unique
break;
case DIESEL:
newVehicle = std::make_unique
break;
case ELECTRIC:
newVehicle = std::make_unique
break;
default:
std::cerr << "Invalid vehicle type.\n";
return;
}
// Add the new vehicle to the inventory
inventory.push_back(std::move(newVehicle));
}
void listVehicles() const {
std::cout << "Inventory:\n";
for (size_t i = 0; i < inventory>
const auto& vehicle = inventory[i];
std::cout << "Index: " << i>
<< ", Make: " << vehicle>getMake()
<< ", Model: " << vehicle>getModel()
<< ", Year: " << vehicle>getYear()
<< ", Odometer: " << vehicle>getOdometer()
<< ", Type: " << vehicle>getType() << "\n";
}
}
void updateVehicle(size_t index, const std::string& make, const std::string& model, int year, int odometer) {
if (index < inventory>
inventory[index]->setMake(make);
inventory[index]->setModel(model);
inventory[index]->setYear(year);
inventory[index]->setOdometer(odometer);
} else {
std::cerr << "Invalid index.\n";
}
}
void removeVehicle(size_t index) {
if (index < inventory>
inventory.erase(inventory.begin() + index);
} else {
std::cerr << "Invalid index.\n";
}
}
void tireRotation(size_t index) const {
if (index < inventory>
dynamic_cast
} else {
std::cerr << "Invalid index.\n";
}
}
void oilChange(size_t index) const {
if (index < inventory>
dynamic_cast
} else {
std::cerr << "Invalid index.\n";
}
}
void recharge(size_t index) const {
if (index < inventory>
dynamic_cast
} else {
std::cerr << "Invalid index.\n";
}
}
size_t size() const {
return inventory.size();
}
};
// Helper functions for user input
std::string getNewMake() {
std::string make;
do {
std::cout << "Enter make: ";
std::getline(std::cin, make);
} while (make.empty());
return make;
}
std::string getNewModel() {
std::string model;
do {
std::cout << "Enter model: ";
std::getline(std::cin, model);
} while (model.empty());
return model;
}
int getYear() {
int year;
do {
std::cout << "Enter year (4 digits): ";
std::cin >> year;
std::cin.ignore(std::numeric_limits
} while (year < 1000> 9999);
return year;
}
int getNewOdometerReading() {
int odometer;
do {
std::cout << "Enter odometer reading: ";
std::cin >> odometer;
std::cin.ignore(std::numeric_limits
} while (odometer < 0>
return odometer;
}
Type getNewType() {
int type;
do {
std::cout << "Enter type (0: GAS, 1: DIESEL, 2: ELECTRIC): ";
std::cin >> type;
std::cin.ignore(std::numeric_limits
} while (type < 0> 2);
return static_cast
}
size_t selectCar(const CarMaintenanceSystem& system) {
size_t index;
do {
system.listVehicles();
std::cout << "Select a car (enter the index): ";
std::cin >> index;
std::cin.ignore(std::numeric_limits
} while (index >= system.size());
return index;
}
int main() {
CarMaintenanceSystem maintenanceSystem;
int choice;
do {
std::cout << "Menu:\n"
<< " 0. Quit.\n"
<< " 1. List inventory.\n"
<< " 2. Add vehicle.\n"
<< " 3. Update vehicle.\n"
<< " 4. Remove vehicle.\n"
<< " 5. Tire Rotation.\n"
<< " 6. Oil Change.\n"
<< " 7. Recharge.\n"
<< "Enter your choice: ";
std::cin >> choice;
std::cin.ignore(std::numeric_limits
switch (choice) {
case 1: // List inventory
maintenanceSystem.listVehicles();
break;
case 2: // Add vehicle
maintenanceSystem.addVehicle(getNewMake(), getNewModel(), getYear(), getNewOdometerReading(), getNewType());
break;
case 3: // Update vehicle
maintenanceSystem.updateVehicle(selectCar(maintenanceSystem), getNewMake(), getNewModel(), getYear(), getNewOdometerReading());
break;
case 4: // Remove vehicle
maintenanceSystem.removeVehicle(selectCar(maintenanceSystem));
break;
case 5: // Tire Rotation
maintenanceSystem.tireRotation(selectCar(maintenanceSystem));
break;
case 6: // Oil Change
maintenanceSystem.oilChange(selectCar(maintenanceSystem));
break;
case 7: // Recharge
maintenanceSystem.recharge(selectCar(maintenanceSystem));
break;
case 0: // Quit
std::cout << "Quitting the program.\n";
break;
default:
std::cerr << "Invalid choice. Please try again.\n";
}
} while (choice != 0);
return 0;
}
Output
[?2004l
Menu:
0. Quit.
1. List inventory.
2. Add vehicle.
3. Update vehicle.
4. Remove vehicle.
5. Tire Rotation.
6. Oil Change.
7. Recharge.
Enter your choice: 1
Inventory:
Menu:
0. Quit.
1. List inventory.
2. Add vehicle.
3. Update vehicle.
4. Remove vehicle.
5. Tire Rotation.
6. Oil Change.
7. Recharge.
Enter your choice: 2
Enter type (0: GAS, 1: DIESEL, 2: ELECTRIC): 0
Enter odometer reading: 2500
Enter year (4 digits): 2022
Enter model: 2022
Enter make: toyota
Menu:
0. Quit.
1. List inventory.
2. Add vehicle.
3. Update vehicle.
4. Remove vehicle.
5. Tire Rotation.
6. Oil Change.
7. Recharge.
Enter your choice: 1
Inventory:
Index: 0, Make: toyota, Model: 2022, Year: 2022, Odometer: 2500, Type: 0
Menu:
0. Quit.
1. List inventory.
2. Add vehicle.
3. Update vehicle.
4. Remove vehicle.
5. Tire Rotation.
6. Oil Change.
7. Recharge.
Enter your choice: 5
Inventory:
Index: 0, Make: toyota, Model: 2022, Year: 2022, Odometer: 2500, Type: 0
Select a car (enter the index): 0