Project 3
#include
#include
#include
// Enum to represent different car fuel types
enum class FuelType {
GAS,
DIESEL,
ELECTRIC
};
// Base class for Vehicle
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) {}
// Getter and setter functions
std::string getMake() const { return make; }
void setMake(const std::string& make) { this->make = make; }
std::string getModel() const { return model; }
void setModel(const std::string& model) { this->model = model; }
int getYear() const { return year; }
void setYear(int year) { this->year = year; }
int getOdometer() const { return odometer; }
void setOdometer(int odometer) { this->odometer = odometer; }
// Virtual function to get the fuel type (to be overridden in derived classes)
virtual FuelType getFuelType() const = 0;
// Maintenance activities
void checkTireRotation() const {
int tireCycle = 50000;
int distance = odometer % tireCycle;
int remainder = tireCycle - distance;
if (remainder >= 0) {
std::cout << "Tire rotation needed.\n";
} else {
std::cout << "Tire rotation not needed.\n";
}
}
void checkChargerPower() const {
int distance = 400;
if (odometer % distance == 0) {
std::cout << "Battery recharge needed.\n";
} else {
std::cout << "Battery recharge not needed.\n";
}
}
};
// GasCar class derived from Vehicle
class GasCar : public Vehicle {
public:
GasCar(const std::string& make, const std::string& model, int year, int odometer)
: Vehicle(make, model, year, odometer) {}
// Implementing the virtual function to get the fuel type
FuelType getFuelType() const override { return FuelType::GAS; }
};
// DieselCar class derived from Vehicle
class DieselCar : public Vehicle {
public:
DieselCar(const std::string& make, const std::string& model, int year, int odometer)
: Vehicle(make, model, year, odometer) {}
// Implementing the virtual function to get the fuel type
FuelType getFuelType() const override { return FuelType::DIESEL; }
};
// ElectricCar class derived from Vehicle
class ElectricCar : public Vehicle {
public:
ElectricCar(const std::string& make, const std::string& model, int year, int odometer)
: Vehicle(make, model, year, odometer) {}
// Implementing the virtual function to get the fuel type
FuelType getFuelType() const override { return FuelType::ELECTRIC; }
};
int main() {
std::vector
// Menu loop
int choice = -1;
while (choice != 0) {
std::cout << "Menu:\n"
<< " 0. Quit\n"
<< " 1. List inventory\n"
<< " 2. Add vehicle\n"
<< " 3. Update vehicle\n"
<< " 4. Remove vehicle\n"
<< " 5. Tire Rotation\n"
<< " 6. Oil Change\n"
<< " 7. Recharge\n\n"
<< "Enter your choice: ";
std::cin >> choice;
std::cout << "\n";
switch (choice) {
case 0:
std::cout << "Quitting program.\n";
break;
case 1:
std::cout << "Inventory:\n";
for (const auto& vehicle : vehicles) {
std::cout << "Make: " << vehicle->getMake() << ", Model: " << vehicle->getModel()
<< ", Year: " << vehicle->getYear() << ", Odometer: " << vehicle->getOdometer() << "\n";
}
std::cout << "\n";
break;
case 2: {
std::string make, model;
int year, odometer;
int fuelType;
std::cout << "Enter make: ";
std::cin.ignore();
std::getline(std::cin, make);
std::cout << "Enter model: ";
std::getline(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 >> fuelType;
Vehicle* newVehicle = nullptr;
switch (static_cast
case FuelType::GAS:
newVehicle = new GasCar(make, model, year, odometer);
break;
case FuelType::DIESEL:
newVehicle = new DieselCar(make, model, year, odometer);
break;
case FuelType::ELECTRIC:
newVehicle = new ElectricCar(make, model, year, odometer);
break;
}
if (newVehicle != nullptr) {
vehicles.push_back(newVehicle);
std::cout << "Vehicle added to inventory.\n\n";
}
break;
}
case 3: {
int selectedCar;
std::cout << "Enter the index of the vehicle to update: ";
std::cin >> selectedCar;
if (selectedCar >= 0 && selectedCar < vehicles.size()) {
std::string make, model;
int year, odometer;
std::cout << "Enter make: ";
std::cin.ignore();
std::getline(std::cin, make);
std::cout << "Enter model: ";
std::getline(std::cin, model);
std::cout << "Enter year: ";
std::cin >> year;
std::cout << "Enter odometer reading: ";
std::cin >> odometer;
vehicles[selectedCar]->setMake(make);
vehicles[selectedCar]->setModel(model);
vehicles[selectedCar]->setYear(year);
vehicles[selectedCar]->setOdometer(odometer);
std::cout << "Vehicle updated.\n\n";
} else {
std::cout << "Invalid index.\n\n";
}
break;
}
case 4: {
int selectedCar;
std::cout << "Enter the index of the vehicle to remove: ";
std::cin >> selectedCar;
if (selectedCar >= 0 && selectedCar < vehicles.size()) {
delete vehicles[selectedCar];
vehicles.erase(vehicles.begin() + selectedCar);
std::cout << "Vehicle removed.\n\n";
} else {
std::cout << "Invalid index.\n\n";
}
break;
}
case 5: {
int selectedCar;
std::cout << "Enter the index of the vehicle to check tire rotation: ";
std::cin >> selectedCar;
if (selectedCar >= 0 && selectedCar < vehicles.size()) {
vehicles[selectedCar]->checkTireRotation();
std::cout << "\n";
} else {
std::cout << "Invalid index.\n\n";
}
break;
}
case 6: {
int selectedCar;
std::cout << "Enter the index of the vehicle to check oil change: ";
std::cin >> selectedCar;
if (selectedCar >= 0 && selectedCar < vehicles.size()) {
// Perform oil change based on the vehicle's type
// ...
std::cout << "Oil change performed.\n\n";
} else {
std::cout << "Invalid index.\n\n";
}
break;
}
case 7: {
int selectedCar;
std::cout << "Enter the index of the vehicle to check recharge: ";
std::cin >> selectedCar;
if (selectedCar >= 0 && selectedCar < vehicles.size()) {
// Perform recharge based on the vehicle's type
// ...
std::cout << "Recharge performed.\n\n";
} else {
std::cout << "Invalid index.\n\n";
}
break;
}
default:
std::cout << "Invalid choice. Please try again.\n\n";
break;
}
}
// Clean up memory
for (const auto& vehicle : vehicles) {
delete vehicle;
}
return 0;
}
OUTPUT:
