Challenge

Project 3

*/

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

using namespace std;

enum class FuelType {
PETROL,
DIESEL,
GAS,
ELECTRIC
};

class Vehicle {
protected:
string make_;
string model_;
int year_;
int odometer_;

public:
Vehicle(string make, string model, int year, int odometer)
: make_(make), model_(model), year_(year), odometer_(odometer) {}

string getMake() const { return make_; }
void setMake(string make) { make_ = make; }

string getModel() const { return model_; }
void setModel(string model) { model_ = model; }

int getYear() const { return year_; }
void setYear(int year) { year_ = year; }

int getOdometer() const { return odometer_; }
void setOdometer(int odometer) { odometer_ = odometer; }

virtual FuelType getFuelType() = 0;
};
//abstract class - containing one pure virtual method
class FuelVehicle
{
public: //access specifier
int quarts; //data member
void checkOil() //member function
{
cout<<" enter the oil level"<<endl;
cin>>quarts;

};

class gascar
{
public:


void checktirerotation()
{
int remainder = odometer-50000;
if (remainder>0)
cout<<"Please replace tires"<<0;
cout<<"Oil changed"<<400;
cout<<"Recharge battery"<<make;
}
void checkPower()
{

if (odometer_ % 400 == 0)
{
cout << "Your car needs to be recharged." << endl;
}
else
{
cout << "Your car is good to go." << endl;
}
}
};

class MaintenanceLibrary {
private:
vector<vehicle*> inventory_;

public:
void addVehicle(Vehicle* vehicle) {
cout << "Enter the make of the vehicle: ";
cin >> vehicle->make_;
cout << "Enter the model of the vehicle: ";
cin >> vehicle->model_;
cout << "Enter the year of the vehicle: ";
cin >> vehicle->year_;
cout << "Enter the odometer reading of the vehicle: ";
cin >> vehicle->odometer_;
inventory_.push_back(vehicle);
cout << "Vehicle added to inventory.\n";
}

void listInventory() {
if (inventory_.empty()) {
cout << "The inventory is empty." << endl;
return;
}

cout << "Inventory:" << endl;

for (size_t i = 0; i < inventory_.size(); i++) {
Vehicle* vehicle = inventory_[i];
cout << i << ". " << vehicle->getMake() << " " << vehicle->getModel() << " (" << vehicle->getYear() << ")" << endl;
}
}

void updateVehicle(int index, string make, string model, int year, int odometer) {
if (index >= inventory_.size()) {
cout << "Vehicle not found." << endl;
return;
}

Vehicle* vehicle = inventory_[index];
vehicle->setMake(make);
vehicle->setModel(model);
vehicle->setYear(year);
vehicle->setOdometer(odometer);
}

void removeVehicle() {
if (inventory_.empty()) {
cout << "Inventory is empty.\n";
return;
}
int vehicleIndex;
cout << "Enter the index of the vehicle to remove: ";
cin >> vehicleIndex;
if (vehicleIndex < 1 || vehicleIndex > inventory_.size()) {
cout << "Invalid vehicle index.\n";
return;
}
inventory_.erase(inventory_.begin() + vehicleIndex - 1);
cout << "Vehicle removed from inventory.\n";
}

void tireRotation() {
if (inventory_.empty()) {
cout << "Inventory is empty.\n";
return;
}
for (int i = 0; i < inventory_.size(); i++) {
Vehicle* vehicle = inventory_[i];
ElectricCar* electricCar = dynamic_cast<electriccar*>(vehicle);
if (electricCar != nullptr) {
electricCar->checkTireRotation();
}
}
}

void oilChange() {
if (inventory_.empty()) {
cout << "Inventory is empty.\n";
return;
}
for (int i = 0; i < inventory_.size(); i++) {
Vehicle* vehicle = inventory_[i];
GasCar* gasCar = dynamic_cast<gascar*>(vehicle);
DieselCar* dieselCar = dynamic_cast<dieselcar*>(vehicle);
if (gasCar != nullptr || dieselCar != nullptr) {
int odometer = vehicle->getOdometer();
if (odometer % 10000 == 0) {
cout << "Vehicle " << i << " needs an oil change.\n";
}
}
}
}

void recharge() {
if (inventory_.empty()) {
cout << "Inventory is empty.\n";
return;
}
for (int i = 0; i < inventory_.size(); i++) {
Vehicle* vehicle = inventory_[i];
ElectricCar* electricCar = dynamic_cast<electriccar*>(vehicle);
if (electricCar != nullptr) {
electricCar->checkPower();
}
}
}


};
vector<vehicle> inventory;

int main() {
MaintenanceLibrary library;
int userInput;

do {
cout << "Menu:\n";
cout << " 0. Quit.\n";
cout << " 1. List inventory.\n";
cout << " 2. Add vehicle.\n";
cout << " 3. Update vehicle.\n";
cout << " 4. Remove vehicle.\n";
cout << " 5. Tire rotation.\n";
cout << " 6. Oil change.\n";
cout << " 7. Recharge.\n";
cout << "Enter your choice: ";
cin >> userInput;

switch (userInput) {
case 0:
cout << "Exiting program.\n";
break;
case 1:
library.listInventory();
break;
case 2: {
string make, model;
int year, odometer;
cout << "Enter vehicle make: ";
cin >> make;
cout << "Enter vehicle model: ";
cin >> model;
cout << "Enter vehicle year: ";
cin >> year;
cout << "Enter vehicle odometer reading: ";
cin >> odometer;
library.addVehicle(new Vehicle(make, model, year, odometer));

break;
}
case 3: {
int index;
string make, model;
int year, odometer;
cout << "Enter the index of the vehicle to update: ";
cin >> index;
cout << "Enter the make of the vehicle: ";
cin >> make;
cout << "Enter the model of the vehicle: ";
cin >> model;
cout << "Enter the year of the vehicle: ";
cin >> year;
cout << "Enter the odometer reading of the vehicle: ";
cin >> odometer;
library.updateVehicle(index, make, model, year, odometer);
break;
}
case 4:
library.removeVehicle();
break;
case 5:
library.tireRotation();
break;
case 6:
library.oilChange();
break;
case 7:
library.recharge();
break;
default:
cout << "Invalid choice. Please try again.\n";
}
} while (userInput != 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.