Project 3
#include<stdio.h>
#include<conio.h>
// Base class for vehicles
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) {}
// Getters and setters for vehicle details
std::string getMake() const { return make; }
std::string getModel() const { return model; }
int getYear() const { return year; }
int getOdometer() const { return odometer; }
};
// Derived classes for different car types
class PetrolCar : public Vehicle {
public:
PetrolCar(const std::string& make, const std::string& model, int year, int odometer)
: Vehicle(make, model, year, odometer) {}
// Additional functions specific to petrol cars
void performPetrolCarMaintenance() {
// Implement petrol car maintenance tasks here
std::cout << "Performing maintenance tasks for petrol car...\n";
}
};
class DieselCar : public Vehicle {
public:
DieselCar(const std::string& make, const std::string& model, int year, int odometer)
: Vehicle(make, model, year, odometer) {}
// Additional functions specific to diesel cars
void performDieselCarMaintenance() {
// Implement diesel car maintenance tasks here
std::cout << "Performing maintenance tasks for diesel car...\n";
}
};
class ElectricCar : public Vehicle {
public:
ElectricCar(const std::string& make, const std::string& model, int year, int odometer)
: Vehicle(make, model, year, odometer) {}
// Additional functions specific to electric cars
void performElectricCarMaintenance() {
// Implement electric car maintenance tasks here
std::cout << "Performing maintenance tasks for electric car...\n";
}
};
int main() {
// Create objects of different car types
PetrolCar petrolCar("Honda", "City", 2022, 5000);
DieselCar dieselCar("Ford", "F-150", 2021, 8000);
ElectricCar electricCar("Tesla", "Model 3", 2023, 2000);
// Access and modify vehicle details
std::cout << "Petrol Car: " << petrolCar.getMake() << " " << petrolCar.getModel() << " " << petrolCar.getYear() << std::endl;
petrolCar.performPetrolCarMaintenance();
std::cout << "Diesel Car: " << dieselCar.getMake() << " " << dieselCar.getModel() << " " << dieselCar.getYear() << std::endl;
dieselCar.performDieselCarMaintenance();
std::cout << "Electric Car: " << electricCar.getMake() << " " << electricCar.getModel() << " " << electricCar.getYear() << std::endl;
electricCar.performElectricCarMaintenance();
return 0;
}
2.
#include<stdio.h>
#include<conio.h>
#include<string.h>
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 getFuelType() = 0;
virtual void checkTireRotation() = 0;
virtual void checkChargerPower() = 0;
};
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 getFuelType() override { std::cout << "Fuel Type: Gas\n"; }
void checkTireRotation() override {
int distance = odometer % 50000;
if (distance >= 0) {
std::cout << "Tire rotation advised.\n";
} else {
std::cout << "Tires are good to go.\n";
}
}
void checkChargerPower() override {}
};
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 getFuelType() override { std::cout << "Fuel Type: Diesel\n"; }
void checkTireRotation() override {}
void checkChargerPower() override {}
};
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 getFuelType() override { std::cout << "Fuel Type: Electric\n"; }
void checkTireRotation() override {}
void checkChargerPower() override {
if (odometer >= 400) {
std::cout << "Battery recharge advised.\n";
} else {
std::cout << "Vehicle is good to go.\n";
}
}
};
class MaintenanceLibrary {
private:
std::vector<Vehicle*> inventory;
public:
~MaintenanceLibrary() {
for (Vehicle* vehicle : inventory) {
delete vehicle;
}
}
void addVehicle(const std::string& make, const std::string& model, int year, int odometer, Type type) {
Vehicle* vehicle;
if (type == GAS) {
vehicle = new GasCar(make, model, year, odometer);
} else if (type == DIESEL) {
vehicle = new DieselCar(make, model, year, odometer);
} else if (type == ELECTRIC) {
vehicle = new ElectricCar(make, model, year, odometer);
} else {
std::cout << "Invalid fuel type.\n";
return;
}
inventory.push_back(vehicle);
std::cout << "Vehicle added to inventory.\n";
}
void listVehicles() {
std::cout << "Inventory:\n";
for (const auto& vehicle : inventory) {
std::cout << "Make: " << vehicle->getMake() << ", Model: " << vehicle->getModel()
<< ", Year: " << vehicle->getYear() << ", Odometer: " << vehicle->getOdometer() << std::endl;
}
}
void updateVehicle(int index, int newOdometerReading) {
if (index >= 0 && index < inventory.size()) {
Vehicle* vehicle = inventory[index];
int currentOdometer = vehicle->getOdometer();
vehicle->checkTireRotation();
vehicle->checkChargerPower();
// Calculate oil change and other maintenance tasks based on newOdometerReading
// ...
// Update the odometer reading
vehicle->odometer = newOdometerReading;
std::cout << "Vehicle updated.\n";
} else {
std::cout << "Invalid index.\n";
}
}
void removeVehicle(int index) {
if (index >= 0 && index < inventory.size()) {
Vehicle* vehicle = inventory[index];
inventory.erase(inventory.begin() + index);
delete vehicle;
std::cout << "Vehicle removed from inventory.\n";
} else {
std::cout << "Invalid index.\n";
}
}
};
int main() {
MaintenanceLibrary library;
int choice;
do {
std::cout << "Menu:\n"
<< " 0. Quit.\n"
<< " 1. List inventory.\n"
<< " 2. Add vehicle.\n"
<< " 3. Update vehicle.\n"
<< " 4. Remove vehicle.\n"
<< " 5. Tire Rotation.\n"
<< " 6. Oil Change.\n"
<< " 7. Recharge.\n"
<< "Select an option: ";
std::cin >> choice;
switch (choice) {
case 0:
std::cout << "Quitting...\n";
break;
case 1:
library.listVehicles();
break;
case 2: {
std::string make, model;
int year, odometer;
int fuelType;
std::cout << "Enter make: ";
std::cin >> make;
std::cout << "Enter model: ";
std::cin >> model;
std::cout << "Enter year: ";
std::cin >> year;
std::cout << "Enter odometer reading: ";
std::cin >> odometer;
std::cout << "Enter fuel type (0-Gas, 1-Diesel, 2-Electric): ";
std::cin >> fuelType;
library.addVehicle(make, model, year, odometer, static_cast(fuelType));
break;
}
case 3: {
int index, newOdometerReading;
std::cout << "Enter vehicle index: ";
std::cin >> index;
std::cout << "Enter new odometer reading: ";
std::cin >> newOdometerReading;
library.updateVehicle(index, newOdometerReading);
break;
}
case 4: {
int index;
std::cout << "Enter vehicle index: ";
std::cin >> index;
library.removeVehicle(index);
break;
}
default:
std::cout << "Invalid option. Try again.\n";
break;
}
} while (choice != 0);
return 0;
}