Project 2
#include <iostream>
#include <string>
#include <vector>
// Enum for fuel types
enum class Type {
GAS,
DIESEL,
ELECTRIC
};
// Abstract class Vehicle
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
std::string getMake() const { return make; }
void setMake(const std::string& newMake) { make = newMake; }
std::string getModel() const { return model; }
void setModel(const std::string& newModel) { model = newModel; }
int getYear() const { return year; }
void setYear(int newYear) { year = newYear; }
int getOdometer() const { return odometer; }
void setOdometer(int newOdometer) { odometer = newOdometer; }
// Virtual functions
virtual Type getType() const = 0;
virtual void getCarInformation() const = 0;
};
// Derived class GasCar
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: Make - " << make << ", Model - " << model << ", Year - " << year << ", Odometer - " << odometer << std::endl;
}
};
// Derived class DieselCar
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: Make - " << make << ", Model - " << model << ", Year - " << year << ", Odometer - " << odometer << std::endl;
}
};
// Derived class ElectricCar
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: Make - " << make << ", Model - " << model << ", Year - " << year << ", Odometer - " << odometer << std::endl;
}
};
// Class to manage inventory and maintenance
class CarManager {
private:
std::vector<Vehicle*> inventory;
public:
~CarManager() {
for (auto& vehicle : inventory) {
delete vehicle;
}
}
void addVehicle(Vehicle* vehicle) {
inventory.push_back(vehicle);
}
void listInventory() const {
std::cout << "Inventory:" << std::endl;
for (const auto& vehicle : inventory) {
vehicle->getCarInformation();
}
}
// Add more functions for update, remove, maintenance tasks
};
int main() {
CarManager manager;
// Add some vehicles to the inventory
manager.addVehicle(new GasCar("Toyota", "Camry", 2020, 50000));
manager.addVehicle(new DieselCar("Ford", "F-150", 2019, 60000));
manager.addVehicle(new ElectricCar("Tesla", "Model S", 2021, 40000));
// List the inventory
manager.listInventory();
return 0;
}