Challenge

Project 3

Note: i have some compiler files issue on my system hence i am pasting code one can run and obtain results

#include <iostream>
#include <string>
#include <vector>

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; }
std::string getModel() const { return model; }
int getYear() const { return year; }
int getOdometer() const { return odometer; }
void setOdometer(int newOdometer) { odometer = newOdometer; }

virtual FuelType getFuelType() const = 0;

virtual void checkTireRotation() const = 0;
virtual void checkPower() 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) {}

FuelType getFuelType() const override { return FuelType::GAS; }

void checkTireRotation() const override {
if (odometer >= 50000 && odometer % 50000 == 0) {
std::cout << "Tire rotation advised for " << make << " " << model << std::endl;
} else {
int remainder = 50000 - (odometer % 50000);
if (remainder >= 0) {
std::cout << "Tires are good for " << remainder << " km more" << std::endl;
}
}
}

void checkPower() const override {
if (odometer >= 400 && odometer % 400 == 0) {
std::cout << "Recharge advised for " << make << " " << model << std::endl;
} else {
std::cout << "Your vehicle is good to go" << 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) {}

FuelType getFuelType() const override { return FuelType::DIESEL; }

void checkTireRotation() const override {
if (odometer >= 50000 && odometer % 50000 == 0) {
std::cout << "Tire rotation advised for " << make << " " << model << std::endl;
} else {
int remainder = 50000 - (odometer % 50000);
if (remainder >= 0) {
std::cout << "Tires are good for " << remainder << " km more" << std::endl;
}
}
}

void checkPower() const override {
if (odometer >= 400 && odometer % 400 == 0) {
std::cout << "Recharge advised for " << make << " " << model << std::endl;
} else {
std::cout << "Your vehicle is good to go" << 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) {}

FuelType getFuelType() const override { return FuelType::ELECTRIC; }

void checkTireRotation() const override {
if (odometer >= 50000 && odometer % 50000 == 0) {
std::cout << "Tire rotation advised for " << make << " " << model << std::endl;
} else {
int remainder = 50000 - (odometer % 50000);
if (remainder >= 0) {
std::cout << "Tires are good for " << remainder << " km more" << std::endl;
}
}
}

void checkPower() const override {
if (odometer >= 400 && odometer % 400 == 0) {
std::cout << "Recharge advised for " << make << " " << model << std::endl;
} else {
std::cout << "Your vehicle is good to go" << std::endl;
}
}
};

class Library {
private:
std::vector<Vehicle*> vehicles;

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

void updateVehicle(int index, int newOdometer) {
vehicles[index]->setOdometer(newOdometer);
}

void checkVehicles() const {
for (const Vehicle* vehicle : vehicles) {
std::cout << "Make: " << vehicle->getMake() << std::endl;
std::cout << "Model: " << vehicle->getModel() << std::endl;
std::cout << "Year: " << vehicle->getYear() << std::endl;
std::cout << "Odometer: " << vehicle->getOdometer() << std::endl;
std::cout << "Fuel Type: ";

FuelType fuelType = vehicle->getFuelType();
switch (fuelType) {
case FuelType::GAS:
std::cout << "Gas" << std::endl;
break;
case FuelType::DIESEL:
std::cout << "Diesel" << std::endl;
break;
case FuelType::ELECTRIC:
std::cout << "Electric" << std::endl;
break;
}

vehicle->checkTireRotation();
vehicle->checkPower();

std::cout << std::endl;
}
}
};

int main() {
Library library;

GasCar car1("Honda", "Civic", 2020, 20000);
DieselCar car2("Ford", "F-150", 2018, 80000);
ElectricCar car3("Tesla", "Model 3", 2019, 5000);

library.addVehicle(&car1);
library.addVehicle(&car2);
library.addVehicle(&car3);

std::cout << "Before update:" << std::endl;
library.checkVehicles();

library.updateVehicle(0, 30000);
library.updateVehicle(1, 90000);
library.updateVehicle(2, 10000);

std::cout << "After update:" << std::endl;
library.checkVehicles();

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.