Challenge

Project 2

#include <iostream>
#include <vector>

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) {}

const std::string& getMake() const { return make; }
const std::string& getModel() const { return model; }
int getYear() const { return year; }
int getOdometer() const { return odometer; }

virtual Type getType() = 0;

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

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; }

void checkTireRotation() override {
int tireCycle = 50000; // Tire cycle in km
int distanceRun = odometer % tireCycle;
if (distanceRun >= 0) {
std::cout << "Advice: Rotate tires" << std::endl;
} else {
std::cout << "Tires are 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) {}

Type getType() override { return Type::DIESEL; }

void checkTireRotation() override {
int tireCycle = 50000; // Tire cycle in km
int distanceRun = odometer % tireCycle;
if (distanceRun >= 0) {
std::cout << "Advice: Rotate tires" << std::endl;
} else {
std::cout << "Tires are 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) {}

Type getType() override { return Type::ELECTRIC; }

void checkTireRotation() override {
int tireCycle = 50000; // Tire cycle in km
int distanceRun = odometer % tireCycle;
if (distanceRun >= 0) {
std::cout << "Advice: Rotate tires" << std::endl;
} else {
std::cout << "Tires are good to go" << std::endl;
}
}
};

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

public:
~Inventory() {
for (Vehicle* vehicle : vehicles) {
delete vehicle;
}
}

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

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

void updateVehicle(int index, int newOdometerReading) {
if (index >= 0 && index < vehicles.size()) {
vehicles[index]->getCarInformation();
vehicles[index]->checkTireRotation();
vehicles[index]->getCarInformation();
vehicles[index]->checkChargerPower();
vehicles[index]->getCarInformation();
vehicles[index]->setOdometer(newOdometerReading);
} 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);
} else {
std::cout << "Invalid vehicle index" << std::endl;
}
}
};

int main() {
Inventory inventory;

int choice;
do {
std::cout << "Menu:\n"
<< "0. Quit\n"
<< "1. List inventory\n"
<< "2. Add vehicle\n"
<< "3. Update vehicle\n"
<< "4. Remove vehicle\n"
<< "Enter your choice: ";
std::cin >> choice;

switch (choice) {
case 0: {
std::cout << "Exiting..." << std::endl;
break;
}
case 1: {
std::cout << "Inventory:" << std::endl;
inventory.listVehicles();
break;
}
case 2: {
std::string make, model;
int year, odometer;
std::cout << "Enter make: ";
std::cin >> make;
std::cout << "Enter model: ";
std::cin >> model;
std::cout << "Enter year: ";
std::cin >> year;
std::cout << "Enter odometer reading: ";
std::cin >> odometer;

int fuelType;
std::cout << "Enter fuel type (0 for GAS, 1 for DIESEL, 2 for ELECTRIC): ";
std::cin >> fuelType;

Vehicle* vehicle;
switch (fuelType) {
case 0: {
vehicle = new GasCar(make, model, year, odometer);
break;
}
case 1: {
vehicle = new DieselCar(make, model, year, odometer);
break;
}
case 2: {
vehicle = new ElectricCar(make, model, year, odometer);
break;
}
default: {
std::cout << "Invalid fuel type" << std::endl;
continue;
}
}

inventory.addVehicle(vehicle);
std::cout << "Vehicle added to inventory" << std::endl;
break;
}
case 3: {
int index, newOdometerReading;
std::cout << "Enter vehicle index to update: ";
std::cin >> index;
std::cout << "Enter new odometer reading: ";
std::cin >> newOdometerReading;

inventory.updateVehicle(index, newOdometerReading);
break;
}
case 4: {
int index;
std::cout << "Enter vehicle index to remove: ";
std::cin >> index;

inventory.removeVehicle(index);
break;
}
default: {
std::cout << "Invalid choice" << std::endl;
break;
}
}
} while (choice != 0);

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.