Project 3
#include <iostream>
#include <string>
#include <vector>
enum class FuelType {
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) {}
virtual ~Vehicle() {}
std::string getMake() const { return make; }
std::string getModel() const { return model; }
int getYear() const { return year; }
int getOdometer() const { return odometer; }
virtual FuelType getFuelType() const = 0;
virtual void checkTireRotation() const = 0;
virtual void getCarInformation() const {
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) {}
FuelType getFuelType() const override { return FuelType::GAS; }
void checkTireRotation() const override {
if (odometer % 50000 == 0) {
std::cout << "Gas car requires tire rotation." << std::endl;
} else {
std::cout << "No tire rotation needed for gas car." << 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) {}
FuelType getFuelType() const override { return FuelType::DIESEL; }
void checkTireRotation() const override {
if (odometer % 50000 == 0) {
std::cout << "Diesel car requires tire rotation." << std::endl;
} else {
std::cout << "No tire rotation needed for diesel car." << 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) {}
FuelType getFuelType() const override { return FuelType::ELECTRIC; }
void checkTireRotation() const override {
if (odometer % 50000 == 0) {
std::cout << "Electric car requires tire rotation." << std::endl;
} else {
std::cout << "No tire rotation needed for electric car." << std::endl;
}
}
void checkChargerPower() const {
if (odometer % 400 == 0) {
std::cout << "Electric car needs recharging." << std::endl;
} else {
std::cout << "No recharge needed for electric car." << std::endl;
}
}
};
class MaintenanceLibrary {
private:
std::vector<Vehicle*> inventory;
public:
~MaintenanceLibrary() {
for (Vehicle* vehicle : inventory) {
delete vehicle;
}
}
void addVehicle(Vehicle* vehicle) {
inventory.push_back(vehicle);
}
void listVehicles() const {
std::cout << "Vehicle Inventory:" << std::endl;
for (size_t i = 0; i < inventory.size(); ++i) {
const Vehicle* vehicle = inventory[i];
std::cout << "Vehicle " << i << ":" << std::endl;
vehicle->getCarInformation();
std::cout << "Fuel Type: " << static_cast<int>(vehicle->getFuelType()) << std::endl;
std::cout << std::endl;
}
}
void updateVehicle(int index, int newOdometerReading) {
if (index >= 0 && index < inventory.size()) {
Vehicle* vehicle = inventory[index];
vehicle->checkTireRotation();
// vehicle->checkChargerPower(); // Only applicable to ElectricCar
vehicle->getFuelType();
// vehicle->setOdometer(newOdometerReading);
} else {
std::cout << "Invalid index." << std::endl;
}
}
void removeVehicle(int index) {
if (index >= 0 && index < inventory.size()) {
delete inventory[index];
inventory.erase(inventory.begin() + index);
std::cout << "Vehicle removed." << std::endl;
} else {
std::cout << "Invalid index." << std::endl;
}
}
};
int main() {
MaintenanceLibrary library;
while (true) {
std::cout << "Menu:" << std::endl;
std::cout << " 0. Quit." << std::endl;
std::cout << " 1. List inventory." << std::endl;
std::cout << " 2. Add vehicle." << std::endl;
std::cout << " 3. Update vehicle." << std::endl;
std::cout << " 4. Remove vehicle." << std::endl;
int choice;
std::cout << "Enter your choice: ";
std::cin >> choice;
if (choice == 0) {
break;
}
switch (choice) {
case 1: {
library.listVehicles();
break;
}
case 2: {
std::string make, model;
int year, odometer;
int type;
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;
std::cout << "Enter fuel type (0-Gas, 1-Diesel, 2-Electric): ";
std::cin >> type;
Vehicle* vehicle = nullptr;
switch (static_cast<FuelType>(type)) {
case FuelType::GAS:
vehicle = new GasCar(make, model, year, odometer);
break;
case FuelType::DIESEL:
vehicle = new DieselCar(make, model, year, odometer);
break;
case FuelType::ELECTRIC:
vehicle = new ElectricCar(make, model, year, odometer);
break;
default:
std::cout << "Invalid fuel type." << std::endl;
break;
}
if (vehicle) {
library.addVehicle(vehicle);
std::cout << "Vehicle added." << std::endl;
}
break;
}
case 3: {
int index, newOdometerReading;
std::cout << "Enter the index of the vehicle to update: ";
std::cin >> index;
std::cout << "Enter new odometer reading: ";
std::cin >> newOdometerReading;
library.updateVehicle(index, newOdometerReading);
break;
}
case 4: {
int index;
std::cout << "Enter the index of the vehicle to remove: ";
std::cin >> index;
library.removeVehicle(index);
break;
}
default:
std::cout << "Invalid choice. Try again." << std::endl;
break;
}
std::cout << std::endl;
}
return 0;
}
[?2004l
Menu:
0. Quit.
1. List inventory.
2. Add vehicle.
3. Update vehicle.
4. Remove vehicle.
Enter your choice: 1
Vehicle Inventory:
Menu:
0. Quit.
1. List inventory.
2. Add vehicle.
3. Update vehicle.
4. Remove vehicle.
Enter your choice: 2
Enter make: g maruti
Enter model: baleno
Enter year: 209 09 16
Enter odometer reading: 45678
Enter fuel type (0-Gas, 1-Diesel, 2-Electric): 2
Vehicle added.
Menu:
0. Quit.
1. List inventory.
2. Add vehicle.
3. Update vehicle.
4. Remove vehicle.
Enter your choice: 2
Enter make: toyota
Enter model: camry
Enter year: 1 20000
Enter odometer reading: 45678 343
Enter fuel type (0-Gas, 1-Diesel, 2-Electric): 1
Vehicle added.
Menu:
0. Quit.
1. List inventory.
2. Add vehicle.
3. Update vehicle.
4. Remove vehicle.
Enter your choice: 1
Vehicle Inventory:
Vehicle 0:
Make: maruti
Model: baleno
Year: 2016
Odometer: 45678 km
Fuel Type: 2
Vehicle 1:
Make: toyota
Model: camry
Year: 2000
Odometer: 45343 km
Fuel Type: 1
Menu:
0. Quit.
1. List inventory.
2. Add vehicle.
3. Update vehicle.
4. Remove vehicle.
Enter your choice: 3
Enter the index of the vehicle to update: 1
Enter new odometer reading: 77687897
No tire rotation needed for diesel car.
Menu:
0. Quit.
1. List inventory.
2. Add vehicle.
3. Update vehicle.
4. Remove vehicle.
Enter your choice: 4
Enter the index of the vehicle to remove: 2
Invalid index.
Menu:
0. Quit.
1. List inventory.
2. Add vehicle.
3. Update vehicle.
4. Remove vehicle.
Enter your choice: 4
Enter the index of the vehicle to remove: 1
Vehicle removed.
Menu:
0. Quit.
1. List inventory.
2. Add vehicle.
3. Update vehicle.
4. Remove vehicle.
Enter your choice: 1
Vehicle Inventory:
Vehicle 0:
Make: maruti
Model: baleno
Year: 2016
Odometer: 45678 km
Fuel Type: 2
Menu:
0. Quit.
1. List inventory.
2. Add vehicle.
3. Update vehicle.
4. Remove vehicle.
Enter your choice:0