Project 3
//* P3: Project on vehicle details *//
#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;
};
class GasCar : public Vehicle {
public:
GasCar(string make, string model, int year, int odometer) : Vehicle(make, model, year, odometer) {}
FuelType getFuelType() override { return FuelType::GAS; }
};
class DieselCar : public Vehicle {
public:
DieselCar(string make, string model, int year, int odometer) : Vehicle(make, model, year, odometer) {}
FuelType getFuelType() override { return FuelType::DIESEL; }
};
class ElectricCar : public Vehicle {
public:
ElectricCar(string make, string model, int year, int odometer) : Vehicle(make, model, year, odometer) {}
FuelType getFuelType() override { return FuelType::ELECTRIC; }
void checkTireRotation() {
if (odometer_ % 50000 == 0) {
cout << "It's time for a tire rotation." << endl;
} else {
int remainder = odometer_ % 50000;
if (remainder >= 0) {
cout << "You should rotate your tires soon." << endl;
}
}
}
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) {
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++) {
if (inventory_[i]->needsTireRotation) {
cout << "Vehicle " << i+1 << " needs a tire rotation.\n";
}
}
}
void oilChange() {
if (inventory_.empty()) {
cout << "Inventory is empty.\n";
return;
}
for (int i = 0; i < inventory_.size(); i++) {
if (inventory_[i].needsOilChange) {
cout << "Vehicle " << i+1 << " needs an oil change.\n";
}
}
}
void recharge() {
if (inventory_.empty()) {
cout << "Inventory is empty.\n";
return;
}
for(int i = 0; i < inventory_.size(); i++) {
if (inventory_[i].needsRecharge) {
cout << "Vehicle " << i+1 << " needs a recharge.\n";
}
}
}
};
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: {
Vehicle* newVehicle = newVehicle();
library.addVehicle(newVehicle);
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;
}