Challenge

Project 3

*
 * automobile.cpp
 *
 *  Created on: Aug 3, 2023
 *      Author: Asus
 */
#include
#include

enum Type {
    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) {}

    std::string getMake() const { return make; }
    std::string getModel() const { return model; }
    int getYear() const { return year; }
    int getOdometer() const { return odometer; }

    void setMake(const std::string& make) { this->make = make; }
    void setModel(const std::string& model) { this->model = model; }
    void setYear(int year) { this->year = year; }
    void setOdometer(int odometer) { this->odometer = odometer; }

    virtual Type getType() const = 0;
    virtual void performMaintenance() = 0;

    void getCarInformation() const {
        std::cout << "Make: " << make>    }

    // Add a virtual destructor to ensure proper deletion of derived classes.
    virtual ~Vehicle() {}
};

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 performMaintenance() override {
        checkTireRotation();
        // Add other maintenance tasks specific to Gas Cars
    }

    void checkTireRotation() const {
        int tireCycle = 50000;
        int distanceRun = odometer % tireCycle;
        if (distanceRun >= 0) {
            std::cout << "Advise tire rotation.\n";
        } else {
            std::cout << "Tires are good to go.\n";
        }
    }
};

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 performMaintenance() override {
        checkTireRotation();
        // Add other maintenance tasks specific to Diesel Cars
    }

    void checkTireRotation() const {
        int tireCycle = 50000;
        int distanceRun = odometer % tireCycle;
        if (distanceRun >= 0) {
            std::cout << "Advise tire rotation.\n";
        } else {
            std::cout << "Tires are good to go.\n";
        }
    }
};

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 performMaintenance() override {
        checkTireRotation();
        checkChargerPower();
        // Add other maintenance tasks specific to Electric Cars
    }

    void checkTireRotation() const {
        int tireCycle = 50000;
        int distanceRun = odometer % tireCycle;
        if (distanceRun >= 0) {
            std::cout << "Advise tire rotation.\n";
        } else {
            std::cout << "Tires are good to go.\n";
        }
    }

    void checkChargerPower() const {
        int distanceRun = odometer @0;
        if (distanceRun == 0) {
            std::cout << "Advise battery recharge.\n";
        } else {
            std::cout << "Battery is good to go.\n";
        }
    }
};

class MaintenanceInventory {
private:
    std::vector vehicles;

public:
    ~MaintenanceInventory() {
        for (auto& vehicle : vehicles) {
            delete vehicle;
        }
    }

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

    void listVehicles() const {
        std::cout << "Inventory:\n";
        for (size_t i = 0; i < vehicles>            std::cout << i>            vehicles[i]->getCarInformation();
        }
    }

    void updateVehicle(size_t index) {
        if (index < vehicles>            Vehicle* vehicle = vehicles[index];
            std::string make, model;
            int year, odometer;

            std::cout << "Enter new make: ";
            std::cin.ignore();
            std::getline(std::cin, make);

            std::cout << "Enter new model: ";
            std::getline(std::cin, model);

            std::cout << "Enter new year: ";
            std::cin >> year;

            std::cout << "Enter new odometer reading: ";
            std::cin >> odometer;

            vehicle->setMake(make);
            vehicle->setModel(model);
            vehicle->setYear(year);
            vehicle->setOdometer(odometer);
        } else {
            std::cout << "Invalid index.\n";
        }
    }

    void removeVehicle(size_t index) {
        if (index < vehicles>            delete vehicles[index];
            vehicles.erase(vehicles.begin() + index);
            std::cout << "Vehicle removed from inventory.\n";
        } else {
            std::cout << "Invalid index.\n";
        }
    }
    size_t getNumVehicles() const {
            return vehicles.size();
        }
    Vehicle* getVehicle(size_t index) const {
            if (index < vehicles>                return vehicles[index];
            } else {
                return nullptr;
            }
        }

};

int main() {
    MaintenanceInventory inventory;

    int choice;
    std::string make, model;

    do {
        std::cout << "Menu:\n";
        std::cout << "0. Quit.\n";
        std::cout << "1. List inventory.\n";
        std::cout << "2. Add vehicle.\n";
        std::cout << "3. Update vehicle.\n";
        std::cout << "4. Remove vehicle.\n";
        std::cout << "5. Tire Rotation.\n";
        std::cout << "6. Oil Change.\n";
        std::cout << "7. Recharge.\n";
        std::cout << "Select an option: ";
        std::cin >> choice;

        switch (choice) {
            case 0: // Quit
                break;
            case 1: // List inventory
                inventory.listVehicles();
                break;
            case 2: // Add vehicle
                        {
                            int typeChoice;
                            std::cout << "Select the vehicle type:\n";
                            std::cout << "1. Gas\n";
                            std::cout << "2. Diesel\n";
                            std::cout << "3. Electric\n";
                            std::cout << "Enter your choice: ";
                            std::cin >> typeChoice;

                            std::cout << "Enter make: ";
                            std::cin.ignore();
                            std::getline(std::cin, make);

                            std::cout << "Enter model: ";
                            std::getline(std::cin, model);

                            int year, odometer;
                            std::cout << "Enter year: ";
                            std::cin >> year;

                            std::cout << "Enter odometer reading: ";
                            std::cin >> odometer;

                            Vehicle* newVehicle = nullptr;
                            switch (typeChoice) {
                                case 1: // Gas Car
                                    newVehicle = new GasCar(make, model, year, odometer);
                                    break;
                                case 2: // Diesel Car
                                    newVehicle = new DieselCar(make, model, year, odometer);
                                    break;
                                case 3: // Electric Car
                                    newVehicle = new ElectricCar(make, model, year, odometer);
                                    break;
                                default:
                                    std::cout << "Invalid vehicle type.\n";
                                    break;
                            }

                            if (newVehicle != nullptr) {
                                inventory.addVehicle(newVehicle);
                                std::cout << "Vehicle added to inventory.\n";
                            }

                            break;
                        }
            case 3: // Update vehicle
                inventory.listVehicles();
                std::cout << "Select the vehicle index to update: ";
                size_t index;
                std::cin >> index;
                if (index < inventory>                    inventory.updateVehicle(index);
                } else {
                    std::cout << "Invalid index.\n";
                }
                break;
            case 4: // Remove vehicle
                inventory.listVehicles();
                std::cout << "Select the vehicle index to remove: ";
                std::cin >> index;
                if (index < inventory>                    inventory.removeVehicle(index);
                } else {
                    std::cout << "Invalid index.\n";
                }
                break;
            case 5: // Tire Rotation
                inventory.listVehicles();
                std::cout << "Select the vehicle index for tire rotation: ";
                std::cin >> index;
                if (index < inventory>                    inventory.getVehicle(index)->performMaintenance();
                } else {
                    std::cout << "Invalid index.\n";
                }
                break;

            case 6: // Oil Change
                // Code to perform oil change for the selected vehicle
                break;
            case 7: // Recharge
                // Code to perform recharge for the selected electric vehicle
                break;
            default:
                std::cout << "Invalid option. Try again.\n";
        }
    } while (choice != 0);

    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.