Project 3
LIVE BATCH(PREETI)
1)program
#include <iostream>
#include <vector>
enum class Type {
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() const = 0;
virtual void maintenanceActivities() = 0;
};
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 maintenanceActivities() override {
checkPower();
}
private:
void checkPower() {
int powerDistance = 400;
int distance = getOdometer();
if (distance >= powerDistance) {
std::cout << "Recharge the battery.\n";
} else {
std::cout << "Vehicle is good to go.\n";
}
}
};
class Inventory {
private:
std::vector<Vehicle*> vehicles;
public:
~Inventory() {
for (Vehicle* vehicle : vehicles) {
delete vehicle;
}
}
void addVehicle(Vehicle* vehicle) {
vehicles.push_back(vehicle);
}
void listVehicles() const {
for (const Vehicle* vehicle : vehicles) {
std::cout << "Make: " << vehicle->getMake() << ", Model: " << vehicle->getModel()
<< ", Year: " << vehicle->getYear() << ", Odometer: " << vehicle->getOdometer()
<< ", Fuel Type: " << getTypeName(vehicle->getType()) << std::endl;
}
}
void updateVehicle(int index, int newOdometer) {
if (index >= 0 && index < vehicles.size()) {
Vehicle* vehicle = vehicles[index];
vehicle->odometer = newOdometer;
}
}
void removeVehicle(int index) {
if (index >= 0 && index < vehicles.size()) {
delete vehicles[index];
vehicles.erase(vehicles.begin() + index);
}
}
private:
std::string getTypeName(Type type) const {
switch (type) {
case Type::ELECTRIC:
return "Electric";
default:
return "Unknown";
}
}
};
int main() {
Inventory inventory;
while (true) {
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";
int choice;
std::cin >> choice;
switch (choice) {
case 0:
return 0;
case 1:
inventory.listVehicles();
break;
case 2: {
std::cout << "Enter make: ";
std::string make;
std::cin >> make;
std::cout << "Enter model: ";
std::string model;
std::cin >> model;
std::cout << "Enter year: ";
int year;
std::cin >> year;
std::cout << "Enter odometer: ";
int odometer;
std::cin >> odometer;
std::cout << "Enter fuel type (0 = Gas, 1 = Diesel, 2 = Electric): ";
int fuelTypeInt;
std::cin >> fuelTypeInt;
Vehicle* vehicle = nullptr;
switch (fuelTypeInt) {
case 1:
vehicle = new ElectricCar(make, model, year, odometer);
break;
default:
std::cout << "Invalid fuel type.\n";
break;
}
if (vehicle != nullptr) {
inventory.addVehicle(vehicle);
std::cout << "Vehicle added to the inventory.\n";
}
break;
}
case 3: {
std::cout << "Enter the index of the vehicle to update: ";
int index;
std::cin >> index;
std::cout << "Enter the new odometer reading: ";
int newOdometer;
std::cin >> newOdometer;
inventory.updateVehicle(index, newOdometer);
std::cout << "Vehicle updated.\n";
break;
}
case 4: {
std::cout << "Enter the index of the vehicle to remove: ";
int index;
std::cin >> index;
inventory.removeVehicle(index);
std::cout << "Vehicle removed from the inventory.\n";
break;
}
case 5: {
std::cout << "Enter the index of the vehicle for tire rotation: ";
int index;
std::cin >> index;
if (index >= 0 && index < inventory.size()) {
Vehicle* vehicle = inventory[index];
vehicle->maintenanceActivities();
}
break;
}
case 6: {
std::cout << "Enter the index of the vehicle for oil change: ";
int index;
std::cin >> index;
if (index >= 0 && index < inventory.size()) {
Vehicle* vehicle = inventory[index];
vehicle->maintenanceActivities();
}
break;
}
case 7: {
std::cout << "Enter the index of the electric vehicle for power recharge: ";
int index;
std::cin >> index;
if (index >= 0 && index < inventory.size()) {
Vehicle* vehicle = inventory[index];
vehicle->maintenanceActivities();
}
break;
}
default:
std::cout << "Invalid choice. Please try again.\n";
break;
}
}
return 0;
}