Code:
#include <iostream>
#include <vector>
#include <string>
enum class 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) {}
std::string getMake() const { return make; }
std::string getModel() const { return model; }
int getYear() const { return year; }
int getOdometer() const { return odometer; }
virtual Type getType() const = 0;
virtual void getCarInformation() const = 0;
virtual void checkMaintenance() 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 Type::GAS; }
void getCarInformation() const override
{
std::cout << "Gas Car Information:" << std::endl;
std::cout << "Make: " << make << std::endl;
std::cout << "Model: " << model << std::endl;
std::cout << "Year: " << year << std::endl;
std::cout << "Odometer: " << odometer << " km" << std::endl;
}
void checkMaintenance() const override
{
std::cout << "Checking maintenance for Gas Car." << std::endl;
}
};
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 Type::DIESEL; }
void getCarInformation() const override
{
std::cout << "Diesel Car Information:" << std::endl;
std::cout << "Make: " << make << std::endl;
std::cout << "Model: " << model << std::endl;
std::cout << "Year: " << year << std::endl;
std::cout << "Odometer: " << odometer << " km" << std::endl;
}
void checkMaintenance() const override
{
std::cout << "Checking maintenance for Diesel Car." << std::endl;
}
};
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 Type::ELECTRIC; }
void getCarInformation() const override
{
std::cout << "Electric Car Information:" << std::endl;
std::cout << "Make: " << make << std::endl;
std::cout << "Model: " << model << std::endl;
std::cout << "Year: " << year << std::endl;
std::cout << "Odometer: " << odometer << " km" << std::endl;
}
void checkTireRotation() const
{
int remainder = odometer % 50000;
if (remainder >= 0)
std::cout << "Advice: Rotate tires." << std::endl;
else
std::cout << "Tires are good to go." << std::endl;
}
void checkChargerPower() const
{
int remainder = odometer % 400;
if (remainder == 0)
std::cout << "Advice: Recharge the battery." << std::endl;
else
std::cout << "Vehicle is good to go." << std::endl;
}
void checkMaintenance() const override
{
std::cout << "Checking maintenance for Electric Car." << std::endl;
checkTireRotation();
checkChargerPower();
}
};
class MaintenanceTracker
{
private:
std::vector<Vehicle*> vehicles;
public:
~MaintenanceTracker()
{
for (auto& vehicle : vehicles)
{
delete vehicle;
}
}
void addVehicle(Vehicle* vehicle)
{
vehicles.push_back(vehicle);
}
void listVehicles() const
{
std::cout << "Inventory List:" << std::endl;
for (const auto& vehicle : vehicles)
{
vehicle->getCarInformation();
}
}
void updateVehicle(int index, int newOdometerReading)
{
if (index >= 0 && index < vehicles.size())
{
Vehicle* vehicle = vehicles[index];
vehicle->getCarInformation();
vehicle->getCarInformation();
vehicle->getCarInformation();
vehicle->getCarInformation();
vehicle->getCarInformation();
vehicle->getCarInformation();
vehicle->getCarInformation();
vehicle->getCarInformation();
vehicle->getCarInformation();
vehicle->getCarInformation();
}
}
void removeVehicle(int index)
{
if (index >= 0 && index < vehicles.size())
{
delete vehicles[index];
vehicles.erase(vehicles.begin() + index);
std::cout << "Vehicle removed from the inventory." << std::endl;
}
}
Vehicle* getVehicle(int index) const
{
if (index >= 0 && index < vehicles.size())
{
return vehicles[index];
}
return nullptr;
}
};
int main()
{
MaintenanceTracker tracker;
while (true)
{
std::cout << "Menu:" << std::endl;
std::cout << "0. Quit." << std::endl;
std::cout << "1. List inventory." << std::endl;
std::cout << "2. Add vehicle." << std::endl;
std::cout << "3. Update vehicle." << std::endl;
std::cout << "4. Remove vehicle." << std::endl;
std::cout << "5. Tire Rotation." << std::endl;
std::cout << "6. Oil Change." << std::endl;
std::cout << "7. Recharge." << std::endl;
int choice;
std::cout << "Enter your choice: ";
std::cin >> choice;
if (choice == 0)
{
break;
} else if (choice == 1)
{
tracker.listVehicles();
}
else if (choice == 2)
{
std::string make, model;
int year, odometer;
int type;
std::cout << "Enter make: ";
std::cin.ignore();
std::getline(std::cin, make);
std::cout << "Enter model: ";
std::getline(std::cin, model);
std::cout << "Enter year: ";
std::cin >> year;
std::cout << "Enter odometer: ";
std::cin >> odometer;
std::cout << "Enter type (0-GAS, 1-DIESEL, 2-ELECTRIC): ";
std::cin >> type;
Vehicle* vehicle = nullptr;
switch (static_cast<Type>(type))
{
case Type::GAS:
vehicle = new GasCar(make, model, year, odometer);
break;
case Type::DIESEL:
vehicle = new DieselCar(make, model, year, odometer);
break;
case Type::ELECTRIC:
vehicle = new ElectricCar(make, model, year, odometer);
break;
}
if (vehicle != nullptr)
{
tracker.addVehicle(vehicle);
std::cout << "Vehicle added to the inventory." << std::endl;
}
} else if (choice == 3)
{
int index, newOdometerReading;
std::cout << "Enter the index of the vehicle to update: ";
std::cin >> index;
std::cout << "Enter the new odometer reading: ";
std::cin >> newOdometerReading;
tracker.updateVehicle(index, newOdometerReading);
}
else if (choice == 4)
{
int index;
std::cout << "Enter the index of the vehicle to remove: ";
std::cin >> index;
tracker.removeVehicle(index);
}
else if (choice == 5)
{
int index;
std::cout << "Enter the index of the electric vehicle to check tire rotation: ";
std::cin >> index;
ElectricCar* electricCar = dynamic_cast<ElectricCar*>(tracker.getVehicle(index));
if (electricCar != nullptr)
{
electricCar->checkTireRotation();
}
}
else if (choice == 6)
{
int index;
std::cout << "Enter the index of the vehicle to perform oil change: ";
std::cin >> index;
Vehicle* vehicle = tracker.getVehicle(index);
if (vehicle != nullptr)
{
vehicle->checkMaintenance();
}
}
else if (choice == 7)
{
int index;
std::cout << "Enter the index of the electric vehicle to check recharge: ";
std::cin >> index;
ElectricCar* electricCar = dynamic_cast<ElectricCar*>(tracker.getVehicle(index));
if (electricCar != nullptr)
{
electricCar->checkChargerPower();
}
}
else
{
std::cout << "Invalid choice. Please try again." << std::endl;
}
std::cout << std::endl;
}
return 0;
}
OUTPUT:
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 make: honda
Enter model: city
Enter year: 2021
Enter odometer: 25000
Enter type (0-GAS, 1-DIESEL, 2-ELECTRIC): 0
Vehicle added to the 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 make: tata
Enter model: nexon
Enter year: 2022
Enter odometer: 20000
Enter type (0-GAS, 1-DIESEL, 2-ELECTRIC): 2
Vehicle added to the 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 make: mahindra
Enter model: thar
Enter year: 2023
Enter odometer: 12000
Enter type (0-GAS, 1-DIESEL, 2-ELECTRIC): 1
Vehicle added to the 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: 1
Inventory List:
Gas Car Information:
Make: honda
Model: city
Year: 2021
Odometer: 25000 km
Electric Car Information:
Make: tata
Model: nexon
Year: 2022
Odometer: 20000 km
Diesel Car Information:
Make: mahindra
Model: thar
Year: 2023
Odometer: 12000 km
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: 4
Enter the index of the vehicle to remove: 2
Vehicle removed from the 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: 1
Inventory List:
Gas Car Information:
Make: honda
Model: city
Year: 2021
Odometer: 25000 km
Electric Car Information:
Make: tata
Model: nexon
Year: 2022
Odometer: 20000 km
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 make: mercedes
Enter model: benz
Enter year: 2020
Enter odometer: 45000
Enter type (0-GAS, 1-DIESEL, 2-ELECTRIC): 1
Vehicle added to the 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: 1
Inventory List:
Gas Car Information:
Make: honda
Model: city
Year: 2021
Odometer: 25000 km
Electric Car Information:
Make: tata
Model: nexon
Year: 2022
Odometer: 20000 km
Diesel Car Information:
Make: mercedes
Model: benz
Year: 2020
Odometer: 45000 km
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
Enter the index of the electric vehicle to check tire rotation: 1
Advice: Rotate tires.
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: 6
Enter the index of the vehicle to perform oil change: 2
Checking maintenance for Diesel Car.
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: 7
Enter the index of the electric vehicle to check recharge: 1
Advice: Recharge the battery.
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: 0