Challenge

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

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.