Challenge

Project 3

#include
#include

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() = 0;
virtual std::string getFuelType() = 0;

virtual void checkTireRotation() = 0;
virtual void checkChargerPower() = 0;

void getCarInformation() {
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;
std::cout << "Fuel Type: " << getFuelType() << std::endl;
}
};

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() override { return Type::GAS; }
std::string getFuelType() override { return "Gas"; }

void checkTireRotation() override {
if (odometer % 50000 == 0) {
std::cout << "Perform tire rotation for Gas car." << std::endl;
}
}

void checkChargerPower() override {}
};

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() override { return Type::DIESEL; }
std::string getFuelType() override { return "Diesel"; }

void checkTireRotation() override {
if (odometer % 50000 == 0) {
std::cout << "Perform tire rotation for Diesel car." << std::endl;
}
}

void checkChargerPower() override {}
};

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() override { return Type::ELECTRIC; }
std::string getFuelType() override { return "Electric"; }

void checkTireRotation() override {
if (odometer % 50000 == 0) {
std::cout << "Perform tire rotation for Electric car." << std::endl;
}
}

void checkChargerPower() override {
if (odometer % 400 == 0) {
std::cout << "Recharge the battery for Electric car." << std::endl;
}
}
};

class MaintenanceTracker {
private:
std::vector vehicles;

public:
~MaintenanceTracker() {
for (auto& vehicle : vehicles) {
delete vehicle;
}
}

void addVehicle(Vehicle* vehicle) {
vehicles.push_back(vehicle);
}

void listVehicles() {
for (const auto& vehicle : vehicles) {
vehicle->getCarInformation();
std::cout << std::endl;
}
}

void updateVehicle(int index, int newOdometer) {
if (index >= 0 && index < vehicles.size()) {
vehicles[index]->getCarInformation();
vehicles[index]->checkTireRotation();
vehicles[index]->checkChargerPower();
vehicles[index]->getCarInformation();
vehicles[index]->getOdometer();
std::cout << std::endl;
} else {
std::cout << "Invalid vehicle index." << std::endl;
}
}

void removeVehicle(int index) {
if (index >= 0 && index < vehicles.size()) {
delete vehicles[index];
vehicles.erase(vehicles.begin() + index);
std::cout << "Vehicle removed successfully." << std::endl;
} else {
std::cout << "Invalid vehicle index." << std::endl;
}
}
};

int main() {
MaintenanceTracker tracker;

// Example usage
GasCar gasCar("Honda", "Civic", 2020, 60000);
DieselCar dieselCar("Ford", "F-150", 2019, 75000);
ElectricCar electricCar("Tesla", "Model S", 2022, 8000);

tracker.addVehicle(&gasCar);
tracker.addVehicle(&dieselCar);
tracker.addVehicle(&electricCar);

tracker.listVehicles();

// Update vehicle information and perform maintenance checks
tracker.updateVehicle(0, 65000);
tracker.updateVehicle(1, 80000);
tracker.updateVehicle(2, 10000);

// Remove a vehicle from the list
tracker.removeVehicle(1);

return 0;
}

Your portfolio, next

Ship work like this
in your own course.

Talk to a career counsellor

Free 20-minute call. We'll map the right course to where you want to work.

By submitting you agree to our Terms and Privacy Policy.