Project 3
*
* automobile.cpp
*
* Created on: Aug 3, 2023
* Author: Asus
*/
#include
#include
enum 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) {}
std::string getMake() const { return make; }
std::string getModel() const { return model; }
int getYear() const { return year; }
int getOdometer() const { return odometer; }
void setMake(const std::string& make) { this->make = make; }
void setModel(const std::string& model) { this->model = model; }
void setYear(int year) { this->year = year; }
void setOdometer(int odometer) { this->odometer = odometer; }
virtual Type getType() const = 0;
virtual void performMaintenance() = 0;
void getCarInformation() const {
std::cout << "Make: " << make> }
// Add a virtual destructor to ensure proper deletion of derived classes.
virtual ~Vehicle() {}
};
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() const override { return Type::GAS; }
void performMaintenance() override {
checkTireRotation();
// Add other maintenance tasks specific to Gas Cars
}
void checkTireRotation() const {
int tireCycle = 50000;
int distanceRun = odometer % tireCycle;
if (distanceRun >= 0) {
std::cout << "Advise tire rotation.\n";
} else {
std::cout << "Tires are good to go.\n";
}
}
};
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() const override { return Type::DIESEL; }
void performMaintenance() override {
checkTireRotation();
// Add other maintenance tasks specific to Diesel Cars
}
void checkTireRotation() const {
int tireCycle = 50000;
int distanceRun = odometer % tireCycle;
if (distanceRun >= 0) {
std::cout << "Advise tire rotation.\n";
} else {
std::cout << "Tires are good to go.\n";
}
}
};
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() const override { return Type::ELECTRIC; }
void performMaintenance() override {
checkTireRotation();
checkChargerPower();
// Add other maintenance tasks specific to Electric Cars
}
void checkTireRotation() const {
int tireCycle = 50000;
int distanceRun = odometer % tireCycle;
if (distanceRun >= 0) {
std::cout << "Advise tire rotation.\n";
} else {
std::cout << "Tires are good to go.\n";
}
}
void checkChargerPower() const {
int distanceRun = odometer @0;
if (distanceRun == 0) {
std::cout << "Advise battery recharge.\n";
} else {
std::cout << "Battery is good to go.\n";
}
}
};
class MaintenanceInventory {
private:
std::vector
public:
~MaintenanceInventory() {
for (auto& vehicle : vehicles) {
delete vehicle;
}
}
void addVehicle(Vehicle* vehicle) {
vehicles.push_back(vehicle);
}
void listVehicles() const {
std::cout << "Inventory:\n";
for (size_t i = 0; i < vehicles> std::cout << i> vehicles[i]->getCarInformation();
}
}
void updateVehicle(size_t index) {
if (index < vehicles> Vehicle* vehicle = vehicles[index];
std::string make, model;
int year, odometer;
std::cout << "Enter new make: ";
std::cin.ignore();
std::getline(std::cin, make);
std::cout << "Enter new model: ";
std::getline(std::cin, model);
std::cout << "Enter new year: ";
std::cin >> year;
std::cout << "Enter new odometer reading: ";
std::cin >> odometer;
vehicle->setMake(make);
vehicle->setModel(model);
vehicle->setYear(year);
vehicle->setOdometer(odometer);
} else {
std::cout << "Invalid index.\n";
}
}
void removeVehicle(size_t index) {
if (index < vehicles> delete vehicles[index];
vehicles.erase(vehicles.begin() + index);
std::cout << "Vehicle removed from inventory.\n";
} else {
std::cout << "Invalid index.\n";
}
}
size_t getNumVehicles() const {
return vehicles.size();
}
Vehicle* getVehicle(size_t index) const {
if (index < vehicles> return vehicles[index];
} else {
return nullptr;
}
}
};
int main() {
MaintenanceInventory inventory;
int choice;
std::string make, model;
do {
std::cout << "Menu:\n";
std::cout << "0. Quit.\n";
std::cout << "1. List inventory.\n";
std::cout << "2. Add vehicle.\n";
std::cout << "3. Update vehicle.\n";
std::cout << "4. Remove vehicle.\n";
std::cout << "5. Tire Rotation.\n";
std::cout << "6. Oil Change.\n";
std::cout << "7. Recharge.\n";
std::cout << "Select an option: ";
std::cin >> choice;
switch (choice) {
case 0: // Quit
break;
case 1: // List inventory
inventory.listVehicles();
break;
case 2: // Add vehicle
{
int typeChoice;
std::cout << "Select the vehicle type:\n";
std::cout << "1. Gas\n";
std::cout << "2. Diesel\n";
std::cout << "3. Electric\n";
std::cout << "Enter your choice: ";
std::cin >> typeChoice;
std::cout << "Enter make: ";
std::cin.ignore();
std::getline(std::cin, make);
std::cout << "Enter model: ";
std::getline(std::cin, model);
int year, odometer;
std::cout << "Enter year: ";
std::cin >> year;
std::cout << "Enter odometer reading: ";
std::cin >> odometer;
Vehicle* newVehicle = nullptr;
switch (typeChoice) {
case 1: // Gas Car
newVehicle = new GasCar(make, model, year, odometer);
break;
case 2: // Diesel Car
newVehicle = new DieselCar(make, model, year, odometer);
break;
case 3: // Electric Car
newVehicle = new ElectricCar(make, model, year, odometer);
break;
default:
std::cout << "Invalid vehicle type.\n";
break;
}
if (newVehicle != nullptr) {
inventory.addVehicle(newVehicle);
std::cout << "Vehicle added to inventory.\n";
}
break;
}
case 3: // Update vehicle
inventory.listVehicles();
std::cout << "Select the vehicle index to update: ";
size_t index;
std::cin >> index;
if (index < inventory> inventory.updateVehicle(index);
} else {
std::cout << "Invalid index.\n";
}
break;
case 4: // Remove vehicle
inventory.listVehicles();
std::cout << "Select the vehicle index to remove: ";
std::cin >> index;
if (index < inventory> inventory.removeVehicle(index);
} else {
std::cout << "Invalid index.\n";
}
break;
case 5: // Tire Rotation
inventory.listVehicles();
std::cout << "Select the vehicle index for tire rotation: ";
std::cin >> index;
if (index < inventory> inventory.getVehicle(index)->performMaintenance();
} else {
std::cout << "Invalid index.\n";
}
break;
case 6: // Oil Change
// Code to perform oil change for the selected vehicle
break;
case 7: // Recharge
// Code to perform recharge for the selected electric vehicle
break;
default:
std::cout << "Invalid option. Try again.\n";
}
} while (choice != 0);
return 0;
}
