Challenge

Project 3

#include <iostream>
#include <string>
#include <vector>
// Define an enumeration for fuel types
enum class FuelType{
 GAS,
 DIESEL,
 ELECTRIC
};
// Define a base class Vehicle
class Vehicle
{
protected:
 std::string make;
 std::string model;
 int year;
 int odometer;
public:
 // Constructor for Vehicle class
 Vehicle(const std::string& make, const std::string& model, int year, int odometer)
 : make(make), model(model), year(year), odometer(odometer) {}
 // Getter methods for Vehicle class
 std::string getMake() const { return make; }
 std::string getModel() const { return model; }
 int getYear() const { return year; }
 int getOdometer() const { return odometer; }
 // Setter method for odometer
 void setOdometer(int newOdometer) { odometer = newOdometer; }
 // Pure virtual function to get the fuel type of the vehicle
 virtual FuelType getFuelType() const = 0;
 // Pure virtual function to perform maintenance on the vehicle
 virtual void performMaintenance() = 0;
 // Virtual function to rotate tires
 virtual void rotateTires()
 {
 std::cout << "Rotating tires for " << make << " " << model << std::endl;
 }
 // Virtual function to perform oil change
 virtual void performOilChange()
 {
 std::cout << "Performing oil change for " << make << " " << model << std::endl;
 }
 // Virtual function to recharge the vehicle
 virtual void recharge()
 {
 std::cout << "Recharging " << make << " " << model << std::endl;
 }
 // Virtual function to check if tire rotation is needed
 virtual void checkTireRotation()
 {
 int tireCycle = 50000; // Tire rotation cycle in kilometers
 int distanceRun = getOdometer() % tireCycle;
 if (distanceRun == 0)
 {
 std::cout << "Time to rotate tires for " << make << " " << model << 
std::endl;
 }
 else
 {
 std::cout << "Tires are good to go for " << make << " " << model << 
std::endl;
 int remainder = tireCycle - distanceRun;
 std::cout << "Remaining distance for tire rotation: " << remainder << " km"
<< std::endl;
 }
 }
 // Virtual function to check if battery recharge is needed
 virtual void checkPower()
 {
 int rechargeDistance = 400; // Recharge distance in kilometers
 int distanceRun = getOdometer() % rechargeDistance;
 if (distanceRun == 0)
 {
 std::cout << "Time to recharge the battery for " << make << " " << model << 
std::endl;
 }
 else
 {
 std::cout << "Your vehicle is good to go for " << make << " " << model << 
std::endl;
 int remainder = rechargeDistance - distanceRun;
 std::cout << "Remaining distance for recharge: " << remainder << " km" << 
std::endl;
 }
 }
 // Virtual destructor for the base class
 virtual ~Vehicle() {}
};
class GasCar : public Vehicle {
public:
 // Constructor for GasCar class
 GasCar(const std::string& make, const std::string& model, int year, int odometer)
 : Vehicle(make, model, year, odometer) {}
 // Return the fuel type of GasCar
 FuelType getFuelType() const override {
 return FuelType::GAS;
 }
 // Perform maintenance on GasCar
 void performMaintenance() override {
 std::cout << "Performing maintenance on GasCar" << std::endl;
 }
 // Rotate tires for GasCar
 void rotateTires() override {
 std::cout << "Rotating tires for GasCar" << std::endl;
 }
 // Perform oil change for GasCar
 void performOilChange() override {
 std::cout << "Performing oil change for GasCar" << std::endl;
 }
};
class DieselCar : public Vehicle {
public:
 // Constructor for DieselCar class
 DieselCar(const std::string& make, const std::string& model, int year, int odometer)
 : Vehicle(make, model, year, odometer) {}
 // Return the fuel type of DieselCar
 FuelType getFuelType() const override {
 return FuelType::DIESEL;
 }
 // Perform maintenance on DieselCar
 void performMaintenance() override {
 std::cout << "Performing maintenance on DieselCar" << std::endl;
 }
 // Rotate tires for DieselCar
 void rotateTires() override {
 std::cout << "Rotating tires for DieselCar" << std::endl;
 }
 // Perform oil change for DieselCar
 void performOilChange() override {
 std::cout << "Performing oil change for DieselCar" << std::endl;
 }
};
class ElectricCar : public Vehicle {
public:
 // Constructor for ElectricCar class
 ElectricCar(const std::string& make, const std::string& model, int year, int
odometer)
 : Vehicle(make, model, year, odometer) {}
 // Return the fuel type of ElectricCar
 FuelType getFuelType() const override {
 return FuelType::ELECTRIC;
 }
 // Perform maintenance on ElectricCar
 void performMaintenance() override {
 std::cout << "Performing maintenance on ElectricCar" << std::endl;
 }
 // Recharge ElectricCar
 void recharge() override {
 std::cout << "Recharging ElectricCar" << std::endl;
 }
};
class MaintenanceLibrary {
private:
 std::vector<Vehicle*> inventory;
public:
 // Destructor for MaintenanceLibrary class
 ~MaintenanceLibrary() {
 // Delete each vehicle in the inventory
 for (Vehicle* vehicle : inventory) {
 delete vehicle;
 }
 }
 // Add a vehicle to the inventory
 void addVehicle(Vehicle* vehicle) {
 inventory.push_back(vehicle);
 }
 // List all vehicles in the inventory
 void listVehicles() const {
 int index = 0;
 // Iterate over each vehicle in the inventory
 for (const Vehicle* vehicle : inventory) {
 std::cout << "Index: " << index << std::endl;
 std::cout << "Make: " << vehicle->getMake() << std::endl;
 std::cout << "Model: " << vehicle->getModel() << std::endl;
 std::cout << "Year: " << vehicle->getYear() << std::endl;
 std::cout << "Odometer: " << vehicle->getOdometer() << std::endl;
 std::cout << "Fuel Type: ";
 // Print the fuel type based on the enum value
 switch (vehicle->getFuelType()) {
 case FuelType::GAS:
 std::cout << "Gas" << std::endl;
 break;
 case FuelType::DIESEL:
 std::cout << "Diesel" << std::endl;
 break;
 case FuelType::ELECTRIC:
 std::cout << "Electric" << std::endl;
 break;
 }
 std::cout << std::endl;
 ++index;
 }
 }
 // Update the odometer reading of a vehicle in the inventory
 void updateVehicle(int index, int newOdometer) {
 if (index >= 0 && static_cast<std::size_t>(index) < inventory.size()) {
 Vehicle* vehicle = inventory[index];
 vehicle->performMaintenance();
 vehicle->setOdometer(newOdometer);
 }
 }
 // Remove a vehicle from the inventory
 void removeVehicle(int index) {
 if (index >= 0 && static_cast<std::size_t>(index) < inventory.size()) {
 delete inventory[index];
 inventory.erase(inventory.begin() + index);
 }
 }
 // Rotate tires for a vehicle in the inventory
 void rotateTires(int index) {
 if (index >= 0 && static_cast<std::size_t>(index) < inventory.size()) {
 Vehicle* vehicle = inventory[index];
 vehicle->rotateTires();
 }
 }
 // Perform an oil change for a vehicle in the inventory
 void performOilChange(int index) {
 if (index >= 0 && static_cast<std::size_t>(index) < inventory.size()) {
 Vehicle* vehicle = inventory[index];
 vehicle->performOilChange();
 }
 }
 // Recharge an electric vehicle in the inventory
 void recharge(int index) {
 if (index >= 0 && static_cast<std::size_t>(index) < inventory.size()) {
 Vehicle* vehicle = inventory[index];
 vehicle->recharge();
 }
 }
 // Check if tire rotation is due for a vehicle in the inventory
 void checkTireRotation(int index) {
 if (index >= 0 && static_cast<std::size_t>(index) < inventory.size()) {
 Vehicle* vehicle = inventory[index];
 int currentOdometer = vehicle->getOdometer();
 int tireCycle = 50000;
 int remainder = currentOdometer % tireCycle;
 if (currentOdometer >= tireCycle && remainder >= 0) {
 std::cout << "Tire rotation is due for " << vehicle->getMake() << " "
<< vehicle->getModel() << std::endl;
 std::cout << "Current odometer reading: " << currentOdometer << " km"
<< std::endl;
 std::cout << "Tire rotation cycle: " << tireCycle << " km" << std::endl;
 std::cout << "Remaining distance for tire rotation: " << tireCycle -
remainder << " km" << std::endl;
 } else {
 std::cout << "Tires are good to go for " << vehicle->getMake() << " "
<< vehicle->getModel() << std::endl;
 std::cout << "Current odometer reading: " << currentOdometer << " km"
<< std::endl;
 std::cout << "Tire rotation cycle: " << tireCycle << " km" << std::endl;
 std::cout << "Remaining distance for tire rotation: " << tireCycle -
remainder << " km" << std::endl;
 }
 }
 }
 // Check if battery recharge is due for an electric vehicle in the inventory
 void checkBatteryPower(int index) {
 if (index >= 0 && static_cast<std::size_t>(index) < inventory.size()) {
 Vehicle* vehicle = inventory[index];
 int currentOdometer = vehicle->getOdometer();
 int powerCycle = 400;
 int remainder = currentOdometer % powerCycle;
 if (currentOdometer >= powerCycle && remainder == 0) {
 std::cout << "Battery recharge is due for " << vehicle->getMake() << "" << vehicle->getModel() << std::endl;
 std::cout << "Current odometer reading: " << currentOdometer << " km"
<< std::endl;
 std::cout << "Battery recharge cycle: " << powerCycle << " km" << 
std::endl;
 } else {
 std::cout << "Battery is good to go for " << vehicle->getMake() << " "
<< vehicle->getModel() << std::endl;
 std::cout << "Current odometer reading: " << currentOdometer << " km"
<< std::endl;
 std::cout << "Battery recharge cycle: " << powerCycle << " km" << 
std::endl;
 std::cout << "Remaining distance for battery recharge: " << powerCycle 
- remainder << " km" << std::endl;
 }
 }
 }
};
int main() {
MaintenanceLibrary library;
 while (true) {
 // Display menu options
 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;
 std::cout << "5. Check tire rotation." << std::endl;
 std::cout << "6. Check battery power." << std::endl;
 std::cout << "7. Rotate tires." << std::endl;
 std::cout << "8. Perform oil change." << std::endl;
 std::cout << "9. Recharge vehicle." << std::endl;
 std::cout << "Select an option: ";
 int option;
 std::cin >> option;
 if (option == 0) {
 break; // Exit the loop and quit the program
 } else if (option == 1) {
 library.listVehicles(); // List the vehicles in the inventory
 } else if (option == 2) {
 // Add a new vehicle to the inventory
 std::cout << "Enter vehicle make: ";
 std::string make;
 std::cin >> make;
 std::cout << "Enter vehicle model: ";
 std::string model;
 std::cin >> model;
 std::cout << "Enter vehicle year: ";
 int year;
 std::cin >> year;
 std::cout << "Enter vehicle odometer reading: ";
 int odometer;
 std::cin >> odometer;
 std::cout << "Select fuel type (0: Gas, 1: Diesel, 2: Electric): ";
 int fuelTypeOption;
 std::cin >> fuelTypeOption;
 FuelType fuelType;
 if (fuelTypeOption == 0) {
 fuelType = FuelType::GAS;
 } else if (fuelTypeOption == 1) {
 fuelType = FuelType::DIESEL;
 } else if (fuelTypeOption == 2) {
 fuelType = FuelType::ELECTRIC;
 } else {
 std::cout << "Invalid fuel type. Vehicle not added." << std::endl;
 continue; // Skip to the next iteration of the loop
 }
 // Create a new vehicle based on the selected fuel type
 Vehicle* vehicle = nullptr;
 switch (fuelType) {
 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;
 }
 library.addVehicle(vehicle); // Add the vehicle to the inventory
 std::cout << "Vehicle added successfully." << std::endl;
 }
else if (option == 3) {
 // Update the odometer reading of a vehicle in the inventory
 std::cout << "Enter index of the vehicle to update: ";
 int index;
 std::cin >> index;
 std::cout << "Enter new odometer reading: ";
 int newOdometer;
 std::cin >> newOdometer;
 library.updateVehicle(index, newOdometer);
 } else if (option == 4) {
 // Remove a vehicle from the inventory
 std::cout << "Enter index of the vehicle to remove: ";
 int index;
 std::cin >> index;
 library.removeVehicle(index);
 } else if (option == 5) {
 // Check tire rotation for a vehicle in the inventory
 std::cout << "Enter index of the vehicle to check tire rotation: ";
 int index;
 std::cin >> index;
 library.checkTireRotation(index);
 } else if (option == 6) {
 // Check battery power for an electric vehicle in the inventory
 std::cout << "Enter index of the vehicle to check battery power: ";
 int index;
 std::cin >> index;
 library.checkBatteryPower(index);
 } else if (option == 7) {
 // Rotate tires for a vehicle in the inventory
 std::cout << "Enter index of the vehicle to rotate tires: ";
 int index;
 std::cin >> index;
 library.rotateTires(index);
 } else if (option == 8) {
 // Perform an oil change for a vehicle in the inventory
 std::cout << "Enter index of the vehicle to perform oil change: ";
 int index;
 std::cin >> index;
 library.performOilChange(index);
 } else if (option == 9) {
 // Recharge the battery of an electric vehicle in the inventory
 std::cout << "Enter index of the vehicle to recharge: ";
 int index;
 std::cin >> index;
 library.recharge(index);
 } else {
 std::cout << "Invalid option. Try again." << std::endl;
 }
 std::cout << std::endl;
 }
 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.