Challenge

Project 3

Ans 1).

#include
#include
#include
#include  
using namespace std;
// 

// Enum for Fuel types
enum Type {
GAS,
DIESEL,
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) {}

// Getter and setter functions
string getMake() const { return make; }
void setMake(const string& make) { this->make = make; }

string getModel() const { return model; }
void setModel(const string& model) { this->model = model; }

int getYear() const { return year; }
void setYear(int year) { this->year = year; }

int getOdometer() const { return odometer; }
void setOdometer(int odometer) { this->odometer = odometer; }

// Maintenance activities
void checkTireRotation() const {
int cycle = 50000;
int remainder = odometer % cycle;
if (remainder >= 0)
cout << "Rotate tires!" << endl;
else
cout << "Tires are good to go!" << endl;
}

virtual Type getType() const = 0;

virtual void maintenanceActivities() = 0;

virtual ~Vehicle() {}
};

class GasCar : public Vehicle {
public:
GasCar(string make, string model, int year, int odometer)
: Vehicle(make, model, year, odometer) {}

Type getType() const override { return GAS; }

void maintenanceActivities() override {
// Perform gas car-specific maintenance activities here
}
};

class DieselCar : public Vehicle {
public:
DieselCar(string make, string model, int year, int odometer)
: Vehicle(make, model, year, odometer) {}

Type getType() const override { return DIESEL; }

void maintenanceActivities() override {
// Perform diesel car-specific maintenance activities here
}
};

class ElectricCar : public Vehicle {
public:
ElectricCar(string make, string model, int year, int odometer)
: Vehicle(make, model, year, odometer) {}

Type getType() const override { return ELECTRIC; }

void maintenanceActivities() override {
// Perform electric car-specific maintenance activities here
}

// Additional ElectricCar specific functions
void checkChargerPower() const {
int distance = 400;
if (odometer % distance == 0)
cout << "Recharge the battery!" << endl;
else
cout << "Battery is good to go!" << endl;
}
};

class MaintenanceInventory {
private:
vector vehicles;

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

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

void listVehicles() const {
int i = 1;
for (const Vehicle* vehicle : vehicles) {
cout << "Vehicle " << i++ << ": ";
cout << "Make: " << vehicle->getMake()
<< ", Model: " << vehicle->getModel()
<< ", Year: " << vehicle->getYear()
<< ", Odometer: " << vehicle->getOdometer()
<< ", Fuel Type: " << getFuelTypeName(vehicle->getType()) << endl;
}
}

void updateVehicle(int index) {
if (index >= 1 && index <= vehicles.size()) {
cout << "Enter updated details for the vehicle:" << endl;
string make, model;
int year, odometer;

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

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

cout << "Year: ";
cin >> year;

cout << "Odometer: ";
cin >> odometer;

Vehicle* vehicle = vehicles[index - 1];
vehicle->setMake(make);
vehicle->setModel(model);
vehicle->setYear(year);
vehicle->setOdometer(odometer);
} else {
cout << "Invalid vehicle index!" << endl;
}
}

void removeVehicle(int index) {
if (index >= 1 && index <= vehicles.size()) {
delete vehicles[index - 1];
vehicles.erase(vehicles.begin() + index - 1);
} else {
cout << "Invalid vehicle index!" << endl;
}
}

void performMaintenanceActivities(int index) {
if (index >= 1 && index <= vehicles.size()) {
Vehicle* vehicle = vehicles[index - 1];
vehicle->checkTireRotation();
vehicle->maintenanceActivities();
if (ElectricCar* electricCar = dynamic_cast(vehicle)) {
electricCar->checkChargerPower();
}
} else {
cout << "Invalid vehicle index!" << endl;
}
}

std::string getFuelTypeName(Type fuelType) const {
switch (fuelType) {
case GAS:
return "Gas";
case DIESEL:
return "Diesel";
case ELECTRIC:
return "Electric";
default:
return "Unknown";
}
}
};

// Helper function to get user input and handle invalid input
template
T getUserInput(const string& prompt) {
T input;
while (true) {
cout << prompt;
if (cin >> input) {
return input;
}
cout << "Invalid input. Please try again." < cin.clear();
cin.ignore(numeric_limits::max(), '\n');
}
}

int main() {
MaintenanceInventory inventory;

while (true) {
cout << "Select an option:" < cout << "0. Quit." < cout << "1. List inventory." << endl;
cout << "2. Add vehicle." << endl;
cout << "3. Update vehicle." << endl;
cout << "4. Remove vehicle." << endl;
cout << "5. Tire Rotation." << endl;
cout << "6. Oil Change." << endl;
cout << "7. Recharge." << endl;

int choice = getUserInput("Enter your choice: ");
switch (choice) {
case 0:
return 0;
case 1:
inventory.listVehicles();
break;
case 2: {
string make, model;
int year, odometer;
int fuelType;

cout << "Enter details for the new vehicle:" << endl;

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

cout << "Model: ";
getline(cin, model);

year = getUserInput("Year: ");

odometer = getUserInput("Odometer: ");

cout << "Fuel Type (0 - Gas, 1 - Diesel, 2 - Electric): ";
fuelType = getUserInput("Enter fuel type: ");
if (fuelType >= 0 && fuelType <= 2) {
Vehicle* vehicle;
switch (fuelType) {
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;
}
inventory.addVehicle(vehicle);
} else {
cout << "Invalid fuel type!" << endl;
}
break;
}
case 3: {
int index = getUserInput("Enter the index of the vehicle to update: ");
inventory.updateVehicle(index);
break;
}
case 4: {
int index = getUserInput("Enter the index of the vehicle to remove: ");
inventory.removeVehicle(index);
break;
}
case 5: {
int index = getUserInput("Enter the index of the vehicle for tire rotation: ");
inventory.performMaintenanceActivities(index);
break;
}
case 6: {
// Implement oil change
break;
}
case 7: {
// Implement recharge
break;
}
default:
cout << "Invalid choice! Please try again." << endl;
}
}

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.