Challenge

Project 3

Note:- I use online resources to get learn and complete this code/project.

code:-


/*For fuel it will indicate 0,1,2 it mean "0"-indicates - Gas "1"-indicates - Fuel "2"-indicates - Electric
like wise the dealing with the oilcahnge it will ask index numbers that mean 0->1st car 1-> 2nd car and so on*/
#include <iostream>
#include <vector>

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

virtual Type getType() = 0;

virtual void checkTireRotation() = 0;

void getCarInformation() { //getting car information
std::cout << "Make: " << make << std::endl;
std::cout << "Model: " << model << std::endl;
std::cout << "Year: " << year << std::endl;
std::cout << "Odometer Reading: " << odometer << 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) {}

Type getType() override { return GAS; }

void checkTireRotation() override {
int remainder = odometer % 50000; //checking the distance travelled over 50,000km.
if (remainder >= 0)
std::cout << "Rotate the tires." << std::endl;
else
std::cout << "Tires are good to go." << std::endl;
}

std::string getFuelType() { return "Gas"; }
};

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() override { return DIESEL; }

void checkTireRotation() override {
int remainder = odometer % 50000;
if (remainder >= 0)
std::cout << "Rotate the tires." << std::endl;
else
std::cout << "Tires are good to go." << std::endl;
}

std::string getFuelType() { return "Diesel"; }
};

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() override { return ELECTRIC; }

void checkTireRotation() override {
int remainder = odometer % 50000;
if (remainder >= 0)
std::cout << "Rotate the tires." << std::endl;
else
std::cout << "Tires are good to go." << std::endl;
}

void checkChargerPower() {
int remainder = odometer % 400; // for elctrical vehicle's distance over 400km
if (remainder == 0)
std::cout << "Recharge the battery." << std::endl;
else
std::cout << "Your vehicle is good to go." << std::endl;
}
};

class Inventory {
private:
std::vector<Vehicle*> vehicles;

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

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

void listVehicles() {
for (auto vehicle : vehicles) {
vehicle->getCarInformation();
std::cout << "Fuel Type: " << vehicle->getType() << std::endl;
std::cout << std::endl;
}
}

void updateVehicle(int index, int newOdometer) {
if (index >= 0 && index < vehicles.size()) {
Vehicle* vehicle = vehicles[index];
vehicle->getCarInformation();
vehicle->checkTireRotation();

ElectricCar* electricCar = dynamic_cast<ElectricCar*>(vehicle);
if (electricCar)
electricCar->checkChargerPower();
else
std::cout << "Cannot check charger power for this vehicle." << std::endl;

vehicle->getCarInformation();
vehicle->checkTireRotation();
}
}

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

void performTireRotation(int index) {
if (index >= 0 && index < vehicles.size()) {
Vehicle* vehicle = vehicles[index];
vehicle->checkTireRotation();
}
}

void performOilChange(int index) {
if (index >= 0 && index < vehicles.size()) {
Vehicle* vehicle = vehicles[index];
// Perform oil change specific to vehicle type (if applicable)
GasCar* gasCar = dynamic_cast<GasCar*>(vehicle);
DieselCar* dieselCar = dynamic_cast<DieselCar*>(vehicle);

if (gasCar)
std::cout << "Perform oil change for gas car." << std::endl;
else if (dieselCar)
std::cout << "Perform oil change for diesel car." << std::endl;
else
std::cout << "Oil change not applicable for this vehicle type." << std::endl;
}
}

void performRecharge(int index) {
if (index >= 0 && index < vehicles.size()) {
Vehicle* vehicle = vehicles[index];
ElectricCar* electricCar = dynamic_cast<ElectricCar*>(vehicle);

if (electricCar)
electricCar->checkChargerPower();
else
std::cout << "Recharge not applicable for this vehicle type." << std::endl;
}
}
};

int main() {
Inventory inventory;
//The menu fot the Inventory.
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;
std::cout << "5. Tire Rotation" << std::endl;
std::cout << "6. Oil Change" << std::endl;
std::cout << "7. Recharge" << std::endl;

int choice;
std::cin >> choice;

if (choice == 0)
break;
//conditional case for the choice operations in the menu system.
switch (choice) {
case 1:
inventory.listVehicles();
break;
case 2: {
std::string make, model;
int year, odometer;
int type;

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

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

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

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

std::cout << "Enter type (0 - Gas, 1 - Diesel, 2 - Electric): ";
std::cin >> type;

Vehicle* vehicle;
switch (type) {
case 0:
vehicle = new GasCar(make, model, year, odometer);
break;
case 1:
vehicle = new DieselCar(make, model, year, odometer);
break;
case 2:
vehicle = new ElectricCar(make, model, year, odometer);
break;
default:
std::cout << "Invalid type. Vehicle not added." << std::endl;
continue;
}

inventory.addVehicle(vehicle);
break;
}
case 3: {
int index, newOdometer;
std::cout << "Enter the index of the vehicle to update: ";
std::cin >> index;
std::cout << "Enter the new odometer reading: ";
std::cin >> newOdometer;
inventory.updateVehicle(index, newOdometer);
break;
}
case 4: {
int index;
std::cout << "Enter the index of the vehicle to remove: ";
std::cin >> index;
inventory.removeVehicle(index);
break;
}
case 5: {
int index;
std::cout << "Enter the index of the vehicle for tire rotation: ";
std::cin >> index;
inventory.performTireRotation(index);
break;
}
case 6: {
int index;
std::cout << "Enter the index of the vehicle for oil change: ";
std::cin >> index;
inventory.performOilChange(index);
break;
}
case 7: {
int index;
std::cout << "Enter the index of the vehicle for recharge: ";
std::cin >> index;
inventory.performRecharge(index);
break;
}
default:
std::cout << "Invalid choice. Try again." << std::endl;
continue;
}
}

return 0;
}

output:-

Menu:
0. Quit
1. List inventory
2. Add vehicle
3. Update vehicle
4. Remove vehicle
5. Tire Rotation
6. Oil Change
7. Recharge
2
Enter make: Toyota
Enter model: Corolla
Enter year: 2018
Enter odometer reading: 60000
Enter type (0 - Gas, 1 - Diesel, 2 - Electric): 0
Menu:
0. Quit
1. List inventory
2. Add vehicle
3. Update vehicle
4. Remove vehicle
5. Tire Rotation
6. Oil Change
7. Recharge
2
Enter make: Ford
Enter model: F-150
Enter year: 2015
Enter odometer reading: 85000
Enter type (0 - Gas, 1 - Diesel, 2 - Electric): 1
Menu:
0. Quit
1. List inventory
2. Add vehicle
3. Update vehicle
4. Remove vehicle
5. Tire Rotation
6. Oil Change
7. Recharge
2
Enter make: Tesla
Enter model: Model S
Enter year: 2022
Enter odometer reading: 25000
Enter type (0 - Gas, 1 - Diesel, 2 - Electric): 2
Menu:
0. Quit
1. List inventory
2. Add vehicle
3. Update vehicle
4. Remove vehicle
5. Tire Rotation
6. Oil Change
7. Recharge
2
Enter make: Honda
Enter model: Civic
Enter year: 2019
Enter odometer reading: 40000
Enter type (0 - Gas, 1 - Diesel, 2 - Electric): 1
Menu:
0. Quit
1. List inventory
2. Add vehicle
3. Update vehicle
4. Remove vehicle
5. Tire Rotation
6. Oil Change
7. Recharge
2
Enter make: Volkswagen
Enter model: Golf
Enter year: 2017
Enter odometer reading: 72000
Enter type (0 - Gas, 1 - Diesel, 2 - Electric): 1
Menu:
0. Quit
1. List inventory
2. Add vehicle
3. Update vehicle
4. Remove vehicle
5. Tire Rotation
6. Oil Change
7. Recharge
2
Enter make: Nissan
Enter model: Leaf
Enter year: 2020
Enter odometer reading: 32000
Enter type (0 - Gas, 1 - Diesel, 2 - Electric): 2
Menu:
0. Quit
1. List inventory
2. Add vehicle
3. Update vehicle
4. Remove vehicle
5. Tire Rotation
6. Oil Change
7. Recharge
1
Make: Toyota
Model: Corolla
Year: 2018
Odometer Reading: 60000
Fuel Type: 0

Make: Ford
Model: F-150
Year: 2015
Odometer Reading: 85000
Fuel Type: 1

Make: Tesla
Model: Model S
Year: 2022
Odometer Reading: 25000
Fuel Type: 2

Make: Honda
Model: Civic
Year: 2019
Odometer Reading: 40000
Fuel Type: 1

Make: Volkswagen
Model: Golf
Year: 2017
Odometer Reading: 72000
Fuel Type: 1

Make: Nissan
Model: Leaf
Year: 2020
Odometer Reading: 32000
Fuel Type: 2

Menu:
0. Quit
1. List inventory
2. Add vehicle
3. Update vehicle
4. Remove vehicle
5. Tire Rotation
6. Oil Change
7. Recharge
1
Make: Toyota
Model: Corolla
Year: 2018
Odometer Reading: 60000
Fuel Type: 0

Make: Ford
Model: F-150
Year: 2015
Odometer Reading: 85000
Fuel Type: 1

Make: Tesla
Model: Model S
Year: 2022
Odometer Reading: 25000
Fuel Type: 2

Make: Honda
Model: Civic
Year: 2019
Odometer Reading: 40000
Fuel Type: 1

Make: Volkswagen
Model: Golf
Year: 2017
Odometer Reading: 72000
Fuel Type: 1

Make: Nissan
Model: Leaf
Year: 2020
Odometer Reading: 32000
Fuel Type: 2

Menu:
0. Quit
1. List inventory
2. Add vehicle
3. Update vehicle
4. Remove vehicle
5. Tire Rotation
6. Oil Change
7. Recharge
3
Enter the index of the vehicle to update: 0
Enter the new odometer reading: 14000
Make: Toyota
Model: Corolla
Year: 2018
Odometer Reading: 60000
Rotate the tires.
Cannot check charger power for this vehicle.
Make: Toyota
Model: Corolla
Year: 2018
Odometer Reading: 60000
Rotate the tires.
Menu:
0. Quit
1. List inventory
2. Add vehicle
3. Update vehicle
4. Remove vehicle
5. Tire Rotation
6. Oil Change
7. Recharge
4
Enter the index of the vehicle to remove: 0
Menu:
0. Quit
1. List inventory
2. Add vehicle
3. Update vehicle
4. Remove vehicle
5. Tire Rotation
6. Oil Change
7. Recharge
1
Make: Ford
Model: F-150
Year: 2015
Odometer Reading: 85000
Fuel Type: 1

Make: Tesla
Model: Model S
Year: 2022
Odometer Reading: 25000
Fuel Type: 2

Make: Honda
Model: Civic
Year: 2019
Odometer Reading: 40000
Fuel Type: 1

Make: Volkswagen
Model: Golf
Year: 2017
Odometer Reading: 72000
Fuel Type: 1

Make: Nissan
Model: Leaf
Year: 2020
Odometer Reading: 32000
Fuel Type: 2

Menu:
0. Quit
1. List inventory
2. Add vehicle
3. Update vehicle
4. Remove vehicle
5. Tire Rotation
6. Oil Change
7. Recharge
5
Enter the index of the vehicle for tire rotation: 0
Rotate the tires.
Menu:
0. Quit
1. List inventory
2. Add vehicle
3. Update vehicle
4. Remove vehicle
5. Tire Rotation
6. Oil Change
7. Recharge
6
Enter the index of the vehicle for oil change: 2
Perform oil change for diesel car.
Menu:
0. Quit
1. List inventory
2. Add vehicle
3. Update vehicle
4. Remove vehicle
5. Tire Rotation
6. Oil Change
7. Recharge
7
Enter the index of the vehicle for recharge: 1
Your vehicle is good to go.
Menu:
0. Quit
1. List inventory
2. Add vehicle
3. Update vehicle
4. Remove vehicle
5. Tire Rotation
6. Oil Change
7. Recharge

screenshorts:-

Note:- I use online resources to get learn and complete this code/project.

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.