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
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
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.ignore(numeric_limits
}
}
int main() {
MaintenanceInventory inventory;
while (true) {
cout << "Select an option:" <
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
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
odometer = getUserInput
cout << "Fuel Type (0 - Gas, 1 - Diesel, 2 - Electric): ";
fuelType = getUserInput
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
inventory.updateVehicle(index);
break;
}
case 4: {
int index = getUserInput
inventory.removeVehicle(index);
break;
}
case 5: {
int index = getUserInput
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;
}