Challenge

Project 3

CHALLENGE 21 : PROJECT 3

//Build an object-oriented library which can be used to track automobile maintenance. There can be different car types such as petrol, diesel, gas, electric etc., This library should be able to support at least three of the car types.

Maintenance tasks include activities like oil change or replace oil filter, replace air filter, replace fuel filter, tire rotations, infotainment system debug, replace spark plugs, replace the cabin or a/c filter, check the level and refill clutch fluid or brake fluid, examine belts, wipers, hoses, check the tire conditions, check the charging systems and battery. //

PROGRAM

#include <iostream>

#include <string>

#include <vector>

using namespace std;

enum class FuelType

{

GAS,

DIESEL,

ELECTRIC

};

class Vehicle

{

protected:

string make;

string model;

int year;

double odometer;

public:

Vehicle(string make, string model, int year, double odometer)

: make(make), model(model), year(year), odometer(odometer) {}

// Getters and setters

string getMake() const

{

return make;

}

void setMake(const string& make)

{

this->make = make;

}

string getModel() const

{

return model;

}

void setModel(const string& model)

{

this->model = model;

}

int getYear() const

{

return year;

}

void setYear(int year)

{

this->year = year;

}

double getOdometer() const

{

return odometer;

}

void setOdometer(double odometer)

{

this->odometer = odometer;

}

virtual FuelType getFuelType() const = 0;

void checkTireRotation()

{

int tireCycle = 50000;

int distanceRun = static_cast<int>(odometer);

int remainder = distanceRun % tireCycle;

if (remainder >= 0)

{

cout << "Advice: Rotate tires." << endl;

}

else

{

cout << "Tires are good to go." << endl;

}

}

void getCarInformation()

{

cout << "Make: " << make << endl;

cout << "Model: " << model << endl;

cout << "Year: " << year << endl;

cout << "Odometer Reading: " << odometer << " miles" << endl;

}

};

class GasCar : public Vehicle

{

public:

GasCar(string make, string model, int year, double odometer)

: Vehicle(make, model, year, odometer) {}

FuelType getFuelType() const override

{

return FuelType::GAS;

}

};

class DieselCar : public Vehicle

{

public:

DieselCar(string make, string model, int year, double odometer)

: Vehicle(make, model, year, odometer) {}

FuelType getFuelType() const override

{

return FuelType::DIESEL;

}

};

class ElectricCar : public Vehicle

{

public:

ElectricCar(string make, string model, int year, double odometer)

: Vehicle(make, model, year, odometer) {}

FuelType getFuelType() const override

{

return FuelType::ELECTRIC;

}

void checkChargerPower()

{

int distanceRun = static_cast<int>(odometer);

int rechargeDistance = 400;

if (distanceRun >= rechargeDistance)

{

cout << "\nAdvice: Recharge the battery." << endl;

}

else

{

cout << "\nVehicle is good to go." << endl;

}

}

};

class Inventory

{

private:

vector<Vehicle*> vehicles;

public:

~Inventory()

{

// Clean up the dynamically allocated vehicles

for (Vehicle* vehicle : vehicles)

{

delete vehicle;

}

}

void addVehicle(Vehicle* vehicle)

{

vehicles.push_back(vehicle);

}

void listVehicles()

{

if (vehicles.empty())

{

cout << "\nNo vehicles in the inventory." << endl;

return;

}

cout << "Inventory:" << endl;

for (size_t i = 0; i < vehicles.size(); ++i)

{

cout << "Vehicle " << i + 1 << ":" << endl;

vehicles[i]->getCarInformation();

cout << endl;

}

}

void updateVehicle(int index)

{

if (index < 0 || index >= vehicles.size())

{

cout << "\nInvalid vehicle index." << endl;

return;

}

Vehicle* vehicle = vehicles[index];

string make, model;

int year;

double odometer;

cout << "\nEnter new make: ";

getline(cin, make);

vehicle->setMake(make);

cout << "Enter new model: ";

getline(cin, model);

vehicle->setModel(model);

cout << "Enter new year: ";

cin >> year;

cin.ignore(); // Ignore the newline character

vehicle->setYear(year);

cout << "Enter new odometer reading: ";

cin >> odometer;

cin.ignore(); // Ignore the newline character

vehicle->setOdometer(odometer);

}

void removeVehicle(int index)

{

if (index < 0 || index >= vehicles.size())

{

cout << "Invalid vehicle index." << endl;

return;

}

delete vehicles[index];

vehicles.erase(vehicles.begin() + index);

}

Vehicle* getVehicle(int index)

{

if (index < 0 || index >= vehicles.size())

{

cout << "Invalid vehicle index." << endl;

return nullptr;

}

return vehicles[index];

}

};

int main()

{

Inventory inventory;

int choice;

do {

cout << "Menu:" << endl;

cout << "1. List inventory" << endl;

cout << "2. Add vehicle" << endl;

cout << "3. Update vehicle" << endl;

cout << "4. Remove vehicle" << endl;

cout << "5. Tire Rotation" << endl;

cout << "6. Oil Change" << endl;

cout << "7. Recharge" << endl;

cout << "Enter your choice: ";

cin >> choice;

cin.ignore(); // Ignore the newline character

switch (choice)

{

case 0:

cout << "Quitting..." << endl;

break;

case 1:

inventory.listVehicles();

break;

case 2:

{

string make, model;

int year;

double odometer;

cout << "Enter make: ";

getline(cin, make);

cout << "Enter model: ";

getline(cin, model);

cout << "Enter year: ";

cin >> year;

cin.ignore(); // Ignore the newline character

cout << "Enter odometer reading: ";

cin >> odometer;

cin.ignore(); // Ignore the newline character

int fuelTypeChoice;

cout << "Enter fuel type (0 - Gas, 1 - Diesel, 2 - Electric): ";

cin >> fuelTypeChoice;

cin.ignore(); // Ignore the newline character

Vehicle* vehicle = nullptr;

switch (fuelTypeChoice)

{

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:

cout << "Invalid fuel type." << endl;

continue;

}

inventory.addVehicle(vehicle);

cout << "Vehicle added to the inventory." << endl;

break;

}

case 3:

{

int index;

cout << "Enter the index of the vehicle to update: ";

cin >> index;

cin.ignore(); // Ignore the newline character

inventory.updateVehicle(index);

cout << "Vehicle updated." << endl;

break;

}

case 4:

{

int index;

cout << "Enter the index of the vehicle to remove: ";

cin >> index;

cin.ignore(); // Ignore the newline character

inventory.removeVehicle(index);

cout << "Vehicle removed from the inventory." << endl;

break;

}

case 5:

{

int index;

cout << "Enter the index of the vehicle to check tire rotation: ";

cin >> index;

cin.ignore(); // Ignore the newline character

Vehicle* vehicle = inventory.getVehicle(index);

vehicle->checkTireRotation();

break;

}

case 6:

{

int index;

cout << "Enter the index of the vehicle to check oil change: ";

cin >> index;

cin.ignore(); // Ignore the newline character

Vehicle* vehicle = inventory.getVehicle(index);

// Call the appropriate function for oil change

break;

}

case 7:

{

int index;

cout << "Enter the index of the vehicle to check power recharge: ";

cin >> index;

cin.ignore(); // Ignore the newline character

Vehicle* vehicle = inventory.getVehicle(index);

// Call the appropriate function for power recharge

break;

}

default:

cout << "Invalid choice. Please try again." << endl;

}

cout << endl;

} while (choice != 0);

return 0;

}

OUTPUT:

Menu:

  1. Quit.
  2. List inventory.
  3. Add vehicle.
  4. Update vehicle.
  5. Remove vehicle.
  6. Perform maintenance.

Enter your choice: 2

Enter make: Toyota

Enter model: Camry

Enter year: 2022

Enter odometer reading: 15000

Enter fuel type (0 - GAS, 1 - DIESEL, 2 - ELECTRIC): 0

Vehicle added to inventory.

Menu:

  1. Quit.
  2. List inventory.
  3. Add vehicle.
  4. Update vehicle.
  5. Remove vehicle.
  6. Perform maintenance.

Enter your choice: 2

Enter make: BMW

Enter model: X5

Enter year: 2021

Enter odometer reading: 25000

Enter fuel type (0 - GAS, 1 - DIESEL, 2 - ELECTRIC): 1

Vehicle added to inventory.

Menu:

  1. Quit.
  2. List inventory.
  3. Add vehicle.
  4. Update vehicle.
  5. Remove vehicle.
  6. Perform maintenance.

Enter your choice: 1

Type: Gas car, Make: Toyota, Model: Camry

Type: Diesel car, Make: BMW, Model: X5

Menu:

  1. Quit.
  2. List inventory.
  3. Add vehicle.
  4. Update vehicle.
  5. Remove vehicle.
  6. Perform maintenance.

Enter your choice: 5

Select a vehicle for maintenance:

Type: Gas car, Make: Toyota, Model: Camry

Type: Diesel car, Make: BMW, Model: X5

Select a vehicle (0-1): 0

Performing maintenance for Gas car: Toyota Camry

Menu:

  1. Quit.
  2. List inventory.
  3. Add vehicle.
  4. Update vehicle.
  5. Remove vehicle.
  6. Perform maintenance.

Enter your choice: 4

Select a vehicle to remove:

Type: Gas car, Make: Toyota, Model: Camry

Type: Diesel car, Make: BMW, Model: X5

Select a vehicle (0-1): 1

Removing vehicle: BMW X5

Menu:

  1. Quit.
  2. List inventory.
  3. Add vehicle.
  4. Update vehicle.
  5. Remove vehicle.
  6. Perform maintenance.

Enter your choice: 1

Type: Gas car, Make: Toyota, Model: Camry

Menu:

  1. Quit.
  2. List inventory.
  3. Add vehicle.
  4. Update vehicle.
  5. Remove vehicle.
  6. Perform maintenance.

Enter your choice: 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.