#include
#include
#include
using namespace std;
enum class FuelType {
PETROL,
DIESEL,
GAS,
ELECTRIC
};
class Vehicle {
protected:
string make_;
string model_;
int year_;
int odometer_;
public:
Vehicle(string make, string model, int year, int odometer)
: make_(make), model_(model), year_(year), odometer_(odometer) {}
string getMake() const { return make_; }
void setMake(string make) { make_ = make; }
string getModel() const { return model_; }
void setModel(string model) { model_ = model; }
int getYear() const { return year_; }
void setYear(int year) { year_ = year; }
int getOdometer() const { return odometer_; }
void setOdometer(int odometer) { odometer_ = odometer; }
virtual FuelType getFuelType() = 0;
};
//abstract class - containing one pure virtual method
class FuelVehicle : public Vehicle
{
public: //access specifier
int quarts; //data member
void checkOil() //member function
{
cout<>quarts;
if(quarts <= 1)
{
cout< 0) {
cout << "You should rotate your tires soon." << endl;
}
}
void checkPower() {
if (odometer_ % 400 == 0) {
cout << "Your car needs to be recharged." << endl;
} else {
cout << "Your car is good to go." << endl;
}
}
};
class MaintenanceLibrary {
private:
vector inventory_;
public:
void addVehicle(Vehicle* vehicle) {
cout << "Enter the make of the vehicle: ";
cin >> vehicle->make_;
cout << "Enter the model of the vehicle: ";
cin >> vehicle->model_;
cout << "Enter the year of the vehicle: ";
cin >> vehicle->year_;
cout << "Enter the odometer reading of the vehicle: ";
cin >> vehicle->odometer_;
inventory_.push_back(vehicle);
cout << "Vehicle added to inventory.\n";
}
void listInventory() {
if (inventory_.empty()) {
cout << "The inventory is empty." << endl;
return;
}
cout << "Inventory:" << endl;
for (size_t i = 0; i < inventory_.size(); i++) {
Vehicle* vehicle = inventory_[i];
cout << i << ". " << vehicle->getMake() << " " << vehicle->getModel() << " (" << vehicle->getYear() << ")" << endl;
}
}
void updateVehicle(int index, string make, string model, int year, int odometer) {
if (index >= inventory_.size()) {
cout << "Vehicle not found." << endl;
return;
}
Vehicle* vehicle = inventory_[index];
vehicle->setMake(make);
vehicle->setModel(model);
vehicle->setYear(year);
vehicle->setOdometer(odometer);
}
void removeVehicle() {
if (inventory_.empty()) {
cout << "Inventory is empty.\n";
return;
}
int vehicleIndex;
cout << "Enter the index of the vehicle to remove: ";
cin >> vehicleIndex;
if (vehicleIndex < 1 || vehicleIndex > inventory_.size()) {
cout << "Invalid vehicle index.\n";
return;
}
inventory_.erase(inventory_.begin() + vehicleIndex - 1);
cout << "Vehicle removed from inventory.\n";
}
void tireRotation() {
if (inventory_.empty()) {
cout << "Inventory is empty.\n";
return;
}
for (int i = 0; i < inventory_.size(); i++) {
Vehicle* vehicle = inventory_[i];
ElectricCar* electricCar = dynamic_cast(vehicle);
if (electricCar != nullptr) {
electricCar->checkTireRotation();
}
}
}
void oilChange() {
if (inventory_.empty()) {
cout << "Inventory is empty.\n";
return;
}
for (int i = 0; i < inventory_.size(); i++) {
Vehicle* vehicle = inventory_[i];
GasCar* gasCar = dynamic_cast(vehicle);
DieselCar* dieselCar = dynamic_cast(vehicle);
if (gasCar != nullptr || dieselCar != nullptr) {
int odometer = vehicle->getOdometer();
if (odometer % 10000 == 0) {
cout << "Vehicle " << i << " needs an oil change.\n";
}
}
}
}
void recharge() {
if (inventory_.empty()) {
cout << "Inventory is empty.\n";
return;
}
for (int i = 0; i < inventory_.size(); i++) {
Vehicle* vehicle = inventory_[i];
ElectricCar* electricCar = dynamic_cast(vehicle);
if (electricCar != nullptr) {
electricCar->checkPower();
}
}
}
};
vector inventory;
int main() {
MaintenanceLibrary library;
int userInput;
do {
cout << "Menu:\n";
cout << " 0. Quit.\n";
cout << " 1. List inventory.\n";
cout << " 2. Add vehicle.\n";
cout << " 3. Update vehicle.\n";
cout << " 4. Remove vehicle.\n";
cout << " 5. Tire rotation.\n";
cout << " 6. Oil change.\n";
cout << " 7. Recharge.\n";
cout << "Enter your choice: ";
cin >> userInput;
switch (userInput) {
case 0:
cout << "Exiting program.\n";
break;
case 1:
library.listInventory();
break;
case 2: {
string make, model;
int year, odometer;
cout << "Enter vehicle make: ";
cin >> make;
cout << "Enter vehicle model: ";
cin >> model;
cout << "Enter vehicle year: ";
cin >> year;
cout << "Enter vehicle odometer reading: ";
cin >> odometer;
library.addVehicle(new Vehicle(make, model, year, odometer));
break;
}
case 3: {
int index;
string make, model;
int year, odometer;
cout << "Enter the index of the vehicle to update: ";
cin >> index;
cout << "Enter the make of the vehicle: ";
cin >> make;
cout << "Enter the model of the vehicle: ";
cin >> model;
cout << "Enter the year of the vehicle: ";
cin >> year;
cout << "Enter the odometer reading of the vehicle: ";
cin >> odometer;
library.updateVehicle(index, make, model, year, odometer);
break;
}
case 4:
library.removeVehicle();
break;
case 5:
library.tireRotation();
break;
case 6:
library.oilChange();
break;
case 7:
library.recharge();
break;
default:
cout << "Invalid choice. Please try again.\n";
}
} while (userInput != 0);
return 0;
}