Challenge

Project 3

#include <iostream>
#include <vector>
#include <string>
using namespace std;
enum class Type {
    GAS,
    DIESEL,
    ELECTRIC
};
class Vehicle {
protected:
    std::string make;
    std::string model;
    int year;


public:
     int odometer;

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;
    }

    virtual Type getType() const = 0;

    virtual void maintenanceActivities() = 0;
};

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 maintenanceActivities() override {
        std::cout << "Performing maintenance activities for a gas car." << std::endl;
        // Additional gas car-specific maintenance activities
    }
};

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 maintenanceActivities() override {
        std::cout << "Performing maintenance activities for a diesel car." << std::endl;
        // Additional diesel car-specific maintenance activities
    }
};

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 maintenanceActivities() override {
        std::cout << "Performing maintenance activities for an electric car." << std::endl;
        // Additional electric car-specific maintenance activities
    }
};

class MaintenanceTracker
{
protected:
    std::vector<Vehicle*> vehicles;

public:
    ~MaintenanceTracker() {
        for (Vehicle* vehicle : vehicles) {
            delete vehicle;
        }
    }

    void addVehicle(Vehicle* vehicle) {
        vehicles.push_back(vehicle);
    }

    void listVehicles() {
        std::cout << "Vehicle Inventory:" << std::endl;
        for (size_t i = 0; i < vehicles.size(); ++i) {
            std::cout << "Vehicle " << (i + 1) << ":" << std::endl;
            std::cout << "Make: " << vehicles[i]->getMake() << std::endl;
            std::cout << "Model: " << vehicles[i]->getModel() << std::endl;
            std::cout << "Year: " << vehicles[i]->getYear() << std::endl;
            std::cout << "Odometer: " << vehicles[i]->getOdometer() << std::endl;
            std::cout << "Fuel Type: " << static_cast<int>(vehicles[i]->getType()) << std::endl;
            std::cout << std::endl;
        }
    }

    void updateVehicle(int index, int newOdometer) {
        if (index >= 0 && index < vehicles.size()) {
            vehicles[index]->odometer = newOdometer;
        }
    }

    void removeVehicle(int index) {
        if (index >= 0 && index < vehicles.size()) {
            delete vehicles[index];
            vehicles.erase(vehicles.begin() + index);
        }
    }

    void check_tiers()
    {
        for(int i =0;i<vehicles.size();i++)
        {
            long long int rotation = vehicles[i]->getOdometer();
            if(rotation >= 50000)
            {
                cout<<"Vehicle no: "<<i+1<<endl;
                cout<<vehicles[i]->getMake()<<endl;
                cout<<"Check tier rotation"<<endl;
            }
            else
            {
                cout<<"Vehicle no: "<<i+1<<endl;
                cout<<vehicles[i]->getMake()<<endl;
                cout<<"Tier good to go"<<endl;
            }
        }
    }


void check_oil()
    {
        for(int i =0;i<vehicles.size();i++)
        {
            long long int rotation = vehicles[i]->getOdometer();
            if(rotation >= 10000)
            {
                cout<<"Vehicle no: "<<i+1<<endl;
                cout<<vehicles[i]->getMake()<<endl;
                cout<<"Check oil level"<<endl;
            }
            else
            {
                cout<<"Vehicle no: "<<i+1<<endl;
                cout<<vehicles[i]->getMake()<<endl;
                cout<<"Oil level is ok"<<endl;
            }
        }

    }
    void check_battery()
    {
        for(int i =0;i<vehicles.size();i++)
        {
            if(static_cast<int>(vehicles[i]->getType())== 2)
               {
                   long long int rotation = vehicles[i]->getOdometer();
                   if(rotation >= 400)
                    {
                        cout<<"Vehicle no: "<<i+1<<endl;
                        cout<<vehicles[i]->getMake()<<endl;
                        cout<<"Recharge battery"<<endl;
                    }
                    else
                    {
                        cout<<"Vehicle no: "<<i+1<<endl;
                        cout<<vehicles[i]->getMake()<<endl;
                        cout<<"GOOD TO GO"<<endl;
                    }
               }

               }
        }
    };


int main()
{
    MaintenanceTracker tracker;

    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;
             cout<<"5. Tire Rotation\n";
             cout<<"6. Oil Change\n";
             cout<<"7. Recharge\n";

        std::cout << "Enter your choice: ";

        int choice;
        std::cin >> choice;

        if (choice == 0) {
            break;
        }

        switch (choice) {
            case 1: {
                tracker.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: ";
                std::cin >> odometer;
                std::cout << "Enter type (0 - Gas, 1 - Diesel, 2 - Electric): ";
                std::cin >> type;

                Vehicle* vehicle = nullptr;

                switch (static_cast<Type>(type)) {
                    case Type::GAS: {
                        vehicle = new GasCar(make, model, year, odometer);
                        break;
                    }
                    case Type::DIESEL: {
                        vehicle = new DieselCar(make, model, year, odometer);
                        break;
                    }
                    case Type::ELECTRIC: {
                        vehicle = new ElectricCar(make, model, year, odometer);
                        break;
                    }
                }

                if (vehicle != nullptr) {
                    tracker.addVehicle(vehicle);
                    std::cout << "Vehicle added to inventory." << std::endl;
                }

                break;
            }
            case 3: {
                int index, newOdometer;

                std::cout << "Enter vehicle index: ";
                std::cin >> index;
                std::cout << "Enter new odometer: ";
                std::cin >> newOdometer;

                tracker.updateVehicle(index - 1, newOdometer);
                std::cout << "Vehicle updated." << std::endl;

                break;
            }
            case 4: {
                int index;

                std::cout << "Enter vehicle index: ";
                std::cin >> index;

                tracker.removeVehicle(index - 1);
                std::cout << "Vehicle removed from inventory." << std::endl;

                break;
            }

          case 5: {
                   tracker.check_tiers();
                   break;
                  }
          case 6: {
                   tracker.check_oil();
                   break;
                  }

          case 7: {
                   tracker.check_battery();
                   break;
                   }
            default: {
                std::cout << "Invalid choice. Please try again." << std::endl;
                break;
            }
        }

        std::cout << std::endl;
    }

    return 0;
}

Output:

Press 2 to add inventory:

Simillarly we added three vehicle in inventory.

Then press 1 to see the list of inventory:

Press 3 to update vehicle odometer reading:

Press 5 to check tyre rotation of vehicles which are in inventory:

Press 6 to check oil level of vehicles which are in inventory:

Press 7 to check battery of vehicles which are in inventory which runs on Electric only:

Press 4 to remove vehicle which are in inventory:

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.