Challenge

Project 3

CODE:

#include <iostream>
#include <string>
#include <vector>

using namespace std;

enum class FuelType {
    PETROL,
    DIESEL,
    GAS,
    ELECTRIC
};

class Vehicle {
protected:
    string make_;
    string model_;
    int year_;
    int odometer_;

public:
    Vehicle(string make, string model, int year, int odometer)
        : make_(make), model_(model), year_(year), odometer_(odometer) {}

    string getMake() const { return make_; }
    void setMake(string make) { make_ = make; }

    string getModel() const { return model_; }
    void setModel(string model) { model_ = model; }

    int getYear() const { return year_; }
    void setYear(int year) { year_ = year; }

    int getOdometer() const { return odometer_; }
    void setOdometer(int odometer) { odometer_ = odometer; }

    virtual FuelType getFuelType() = 0;
};
//abstract class - containing one pure virtual method
class FuelVehicle : public Vehicle
{
 public: //access specifier
 int quarts; //data member
 void checkOil() //member function
 {
 cout<<endl<<" enter="" oil="" level="" (in="" quarts)="" :="" ";
="" cin="">>quarts;
 if(quarts <= 1)
 {
 cout<<endl<<" engine="" oil="" level="" :="" low";
="" }
="" else
="" cout<<endl<<"="" is="" fine";
="" friend="" void="" oilchange(fuelvehicle="" &oil);="" function="" declaration
};

class="" gascar="" public="" vehicle="" {
public:
="" gascar(string="" make,="" string="" model,="" int="" year,="" odometer)
="" vehicle(make,="" odometer)="" {}

="" fueltype="" getfueltype()="" override="" {="" return="" fueltype::gas;="" }
};

class="" dieselcar="" dieselcar(string="" fueltype::diesel;="" electriccar="" electriccar(string="" fueltype::electric;="" }

="" checktirerotation()="" {
="" if="" (odometer_="" %="" 50000="=" 0)="" cout="" <<="" "it's="" time="" for="" a="" tire="" rotation."="" endl;
="" }="" else=""> 0) {
            cout << "You should rotate your tires soon." << endl;
        }
    }

    void checkPower() {
        if (odometer_ % 400 == 0) {
            cout << "Your car needs to be recharged." << endl;
        } else {
            cout << "Your car is good to go." << endl;
        }
    }
};

class MaintenanceLibrary {
private:
    vector<vehicle*> inventory_;

public:
    void addVehicle(Vehicle* vehicle) {
        cout << "Enter the make of the vehicle: ";
        cin >> vehicle->make_;
        cout << "Enter the model of the vehicle: ";
        cin >> vehicle->model_;
        cout << "Enter the year of the vehicle: ";
        cin >> vehicle->year_;
        cout << "Enter the odometer reading of the vehicle: ";
        cin >> vehicle->odometer_;
        inventory_.push_back(vehicle);
        cout << "Vehicle added to inventory.\n";
    }

    void listInventory() {
        if (inventory_.empty()) {
            cout << "The inventory is empty." << endl;
            return;
        }

        cout << "Inventory:" << endl;

        for (size_t i = 0; i < inventory_.size(); i++) {
            Vehicle* vehicle = inventory_[i];
            cout << i << ". " << vehicle->getMake() << " " << vehicle->getModel() << " (" << vehicle->getYear() << ")" << endl;
        }
    }

    void updateVehicle(int index, string make, string model, int year, int odometer) {
        if (index >= inventory_.size()) {
            cout << "Vehicle not found." << endl;
            return;
        }

        Vehicle* vehicle = inventory_[index];
        vehicle->setMake(make);
        vehicle->setModel(model);
        vehicle->setYear(year);
        vehicle->setOdometer(odometer);
    }

    void removeVehicle() {
        if (inventory_.empty()) {
            cout << "Inventory is empty.\n";
            return;
        }
        int vehicleIndex;
        cout << "Enter the index of the vehicle to remove: ";
        cin >> vehicleIndex;
        if (vehicleIndex < 1 || vehicleIndex > inventory_.size()) {
            cout << "Invalid vehicle index.\n";
            return;
        }
        inventory_.erase(inventory_.begin() + vehicleIndex - 1);
        cout << "Vehicle removed from inventory.\n";
    }

    void tireRotation() {
        if (inventory_.empty()) {
            cout << "Inventory is empty.\n";
            return;
        }
        for (int i = 0; i < inventory_.size(); i++) {
            Vehicle* vehicle = inventory_[i];
            ElectricCar* electricCar = dynamic_cast<electriccar*>(vehicle);
            if (electricCar != nullptr) {
                electricCar->checkTireRotation();
            }
        }
    }

    void oilChange() {
        if (inventory_.empty()) {
            cout << "Inventory is empty.\n";
            return;
        }
        for (int i = 0; i < inventory_.size(); i++) {
            Vehicle* vehicle = inventory_[i];
            GasCar* gasCar = dynamic_cast<gascar*>(vehicle);
            DieselCar* dieselCar = dynamic_cast<dieselcar*>(vehicle);
            if (gasCar != nullptr || dieselCar != nullptr) {
                int odometer = vehicle->getOdometer();
                if (odometer % 10000 == 0) {
                    cout << "Vehicle " << i << " needs an oil change.\n";
                }
            }
        }
    }

    void recharge() {
        if (inventory_.empty()) {
            cout << "Inventory is empty.\n";
            return;
        }
        for (int i = 0; i < inventory_.size(); i++) {
            Vehicle* vehicle = inventory_[i];
            ElectricCar* electricCar = dynamic_cast<electriccar*>(vehicle);
            if (electricCar != nullptr) {
                electricCar->checkPower();
            }
        }
    }


};
vector<vehicle> inventory;

int main() {
    MaintenanceLibrary library;
    int userInput;

    do {
        cout << "Menu:\n";
        cout << " 0. Quit.\n";
        cout << " 1. List inventory.\n";
        cout << " 2. Add vehicle.\n";
        cout << " 3. Update vehicle.\n";
        cout << " 4. Remove vehicle.\n";
        cout << " 5. Tire rotation.\n";
        cout << " 6. Oil change.\n";
        cout << " 7. Recharge.\n";
        cout << "Enter your choice: ";
        cin >> userInput;

        switch (userInput) {
            case 0:
                cout << "Exiting program.\n";
                break;
            case 1:
                library.listInventory();
                break;
            case 2: {
                string make, model;
        int year, odometer;
        cout << "Enter vehicle make: ";
        cin >> make;
        cout << "Enter vehicle model: ";
        cin >> model;
        cout << "Enter vehicle year: ";
        cin >> year;
        cout << "Enter vehicle odometer reading: ";
        cin >> odometer;
        library.addVehicle(new Vehicle(make, model, year, odometer));

        break;
            }
            case 3: {
               int index;
               string make, model;
               int year, odometer;
               cout << "Enter the index of the vehicle to update: ";
               cin >> index;
               cout << "Enter the make of the vehicle: ";
               cin >> make;
               cout << "Enter the model of the vehicle: ";
               cin >> model;
               cout << "Enter the year of the vehicle: ";
               cin >> year;
               cout << "Enter the odometer reading of the vehicle: ";
               cin >> odometer;
               library.updateVehicle(index, make, model, year, odometer);
               break;
               }
            case 4:
               library.removeVehicle();
               break;
            case 5:
               library.tireRotation();
               break;
            case 6:
               library.oilChange();
               break;
            case 7:
               library.recharge();
               break;
            default:
               cout << "Invalid choice. Please try again.\n";
               }
} while (userInput != 0);

return 0;
}
OUTPUT:


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.