Project 3
#include
#include
enum class FuelType
{
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; }
void setMake(const std::string &make) { this->make = make; }
std::string getModel() const { return model; }
void setModel(const std::string &model) { this->model = model; }
int getYear() const { return year; }
void setYear(int year) { this->year = year; }
int getOdometer() const { return odometer; }
void setOdometer(int odometer) { this->odometer = odometer; }
virtual FuelType getFuelType() = 0; // Pure virtual function
virtual void maintenanceInfo() = 0; // Pure virtual function
};
class GasCar : public Vehicle {
public:
GasCar(const std::string &make, const std::string &model, int year, int odometer)
: Vehicle(make, model, year, odometer) {}
FuelType getFuelType() override { return FuelType::GAS; }
void maintenanceInfo() override {
std::cout << "Gas Car Maintenance Information:\n"
<< " - Check oil\n"
<< " - Replace air filter\n"
<< " - Check tire rotation\n"
<< " - Check fuel filter\n";
}
};
class DieselCar : public Vehicle {
public:
DieselCar(const std::string &make, const std::string &model, int year, int odometer)
: Vehicle(make, model, year, odometer) {}
FuelType getFuelType() override { return FuelType::DIESEL; }
void maintenanceInfo() override {
std::cout << "Diesel Car Maintenance Information:\n"
<< " - Check oil\n"
<< " - Replace fuel filter\n"
<< " - Check tire rotation\n"
<< " - Check belts\n";
}
};
class ElectricCar : public Vehicle {
public:
ElectricCar(const std::string &make, const std::string &model, int year, int odometer)
: Vehicle(make, model, year, odometer) {}
FuelType getFuelType() override { return FuelType::ELECTRIC; }
void maintenanceInfo() override {
std::cout << "Electric Car Maintenance Information:\n"
<< " - Check tire rotation\n"
<< " - Check charging systems and battery\n";
}
};
class Maintenance {
public:
static void checkTireRotation(Vehicle *vehicle) {
if (vehicle->getOdometer() P000 == 0)
std::cout << "It's time to rotate tires for the " << vehicle>getMake() << " " << vehicle>getModel() << ".\n";
else
std::cout << "Tire rotation is not required for the " << vehicle>getMake() << " " << vehicle>getModel() << ".\n";
}
static void checkPower(Vehicle *vehicle) {
if (vehicle->getOdometer() @0 == 0)
std::cout << "It's time to recharge the battery for the " << vehicle>getMake() << " " << vehicle>getModel() << ".\n";
else
std::cout << "No need to recharge the battery for the " << vehicle>getMake() << " " << vehicle>getModel() << ".\n";
}
};
class VehicleInventory {
private:
std::vector
public:
~VehicleInventory() {
for (auto vehicle : vehicles)
delete vehicle;
}
void addVehicle(Vehicle *vehicle) {
vehicles.push_back(vehicle);
}
void listVehicles() {
int index = 0;
for (const auto &vehicle : vehicles) {
std::cout << "Vehicle " << index>
std::cout << "Make: " << vehicle>getMake() << ", Model: " << vehicle>getModel() << ", Year: " << vehicle>getYear() << ", Odometer: " << vehicle>getOdometer() << "\n";
std::cout << "Fuel Type: " << static>(vehicle->getFuelType()) << "\n";
index++;
}
}
void updateVehicle(int index, int newOdometerReading) {
vehicles[index]->setOdometer(newOdometerReading);
}
void removeVehicle(int index) {
delete vehicles[index];
vehicles.erase(vehicles.begin() + index);
}
};
int main() {
VehicleInventory inventory;
GasCar gasCar("Toyota", "Corolla", 2020, 40000);
DieselCar dieselCar("Ford", "F-150", 2019, 55000);
ElectricCar electricCar("Tesla", "Model S", 2022, 30000);
inventory.addVehicle(&gasCar);
inventory.addVehicle(&dieselCar);
inventory.addVehicle(&electricCar);
inventory.listVehicles();
Maintenance::checkTireRotation(&gasCar);
Maintenance::checkTireRotation(&dieselCar);
Maintenance::checkTireRotation(&electricCar);
Maintenance::checkPower(&electricCar);
inventory.removeVehicle(0);
inventory.removeVehicle(0);
inventory.removeVehicle(0);
return 0;
}