Project 3
#include <iostream>
#include <vector>
#include <string>
using namespace std;
enum class Type {
GAS,
DIESEL,
ELECTRIC
};
class Vehicle {
protected:
std::string make;
std::string model;
int year;
public:
int odometer;
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 GasCar : public Vehicle {
public:
GasCar(const std::string& make, const std::string& model, int year, int odometer)
: Vehicle(make, model, year, odometer) {}
Type getType() const override {
return Type::GAS;
}
void maintenanceActivities() override {
std::cout << "Performing maintenance activities for a gas car." << std::endl;
// Additional gas car-specific maintenance activities
}
};
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() const override {
return Type::DIESEL;
}
void maintenanceActivities() override {
std::cout << "Performing maintenance activities for a diesel car." << std::endl;
// Additional diesel car-specific maintenance activities
}
};
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 {
std::cout << "Performing maintenance activities for an electric car." << std::endl;
// Additional electric car-specific maintenance activities
}
};
class MaintenanceTracker
{
protected:
std::vector<Vehicle*> vehicles;
public:
~MaintenanceTracker() {
for (Vehicle* vehicle : vehicles) {
delete vehicle;
}
}
void addVehicle(Vehicle* vehicle) {
vehicles.push_back(vehicle);
}
void listVehicles() {
std::cout << "Vehicle Inventory:" << std::endl;
for (size_t i = 0; i < vehicles.size(); ++i) {
std::cout << "Vehicle " << (i + 1) << ":" << std::endl;
std::cout << "Make: " << vehicles[i]->getMake() << std::endl;
std::cout << "Model: " << vehicles[i]->getModel() << std::endl;
std::cout << "Year: " << vehicles[i]->getYear() << std::endl;
std::cout << "Odometer: " << vehicles[i]->getOdometer() << std::endl;
std::cout << "Fuel Type: " << static_cast<int>(vehicles[i]->getType()) << std::endl;
std::cout << std::endl;
}
}
void updateVehicle(int index, int newOdometer) {
if (index >= 0 && index < vehicles.size()) {
vehicles[index]->odometer = newOdometer;
}
}
void removeVehicle(int index) {
if (index >= 0 && index < vehicles.size()) {
delete vehicles[index];
vehicles.erase(vehicles.begin() + index);
}
}
void check_tiers()
{
for(int i =0;i<vehicles.size();i++)
{
long long int rotation = vehicles[i]->getOdometer();
if(rotation >= 50000)
{
cout<<"Vehicle no: "<<i+1<<endl;
cout<<vehicles[i]->getMake()<<endl;
cout<<"Check tier rotation"<<endl;
}
else
{
cout<<"Vehicle no: "<<i+1<<endl;
cout<<vehicles[i]->getMake()<<endl;
cout<<"Tier good to go"<<endl;
}
}
}
void check_oil()
{
for(int i =0;i<vehicles.size();i++)
{
long long int rotation = vehicles[i]->getOdometer();
if(rotation >= 10000)
{
cout<<"Vehicle no: "<<i+1<<endl;
cout<<vehicles[i]->getMake()<<endl;
cout<<"Check oil level"<<endl;
}
else
{
cout<<"Vehicle no: "<<i+1<<endl;
cout<<vehicles[i]->getMake()<<endl;
cout<<"Oil level is ok"<<endl;
}
}
}
void check_battery()
{
for(int i =0;i<vehicles.size();i++)
{
if(static_cast<int>(vehicles[i]->getType())== 2)
{
long long int rotation = vehicles[i]->getOdometer();
if(rotation >= 400)
{
cout<<"Vehicle no: "<<i+1<<endl;
cout<<vehicles[i]->getMake()<<endl;
cout<<"Recharge battery"<<endl;
}
else
{
cout<<"Vehicle no: "<<i+1<<endl;
cout<<vehicles[i]->getMake()<<endl;
cout<<"GOOD TO GO"<<endl;
}
}
}
}
};
int main()
{
MaintenanceTracker tracker;
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;
cout<<"5. Tire Rotation\n";
cout<<"6. Oil Change\n";
cout<<"7. Recharge\n";
std::cout << "Enter your choice: ";
int choice;
std::cin >> choice;
if (choice == 0) {
break;
}
switch (choice) {
case 1: {
tracker.listVehicles();
break;
}
case 2: {
std::string make, model;
int year, odometer;
int type;
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: ";
std::cin >> odometer;
std::cout << "Enter type (0 - Gas, 1 - Diesel, 2 - Electric): ";
std::cin >> type;
Vehicle* vehicle = nullptr;
switch (static_cast<Type>(type)) {
case Type::GAS: {
vehicle = new GasCar(make, model, year, odometer);
break;
}
case Type::DIESEL: {
vehicle = new DieselCar(make, model, year, odometer);
break;
}
case Type::ELECTRIC: {
vehicle = new ElectricCar(make, model, year, odometer);
break;
}
}
if (vehicle != nullptr) {
tracker.addVehicle(vehicle);
std::cout << "Vehicle added to inventory." << std::endl;
}
break;
}
case 3: {
int index, newOdometer;
std::cout << "Enter vehicle index: ";
std::cin >> index;
std::cout << "Enter new odometer: ";
std::cin >> newOdometer;
tracker.updateVehicle(index - 1, newOdometer);
std::cout << "Vehicle updated." << std::endl;
break;
}
case 4: {
int index;
std::cout << "Enter vehicle index: ";
std::cin >> index;
tracker.removeVehicle(index - 1);
std::cout << "Vehicle removed from inventory." << std::endl;
break;
}
case 5: {
tracker.check_tiers();
break;
}
case 6: {
tracker.check_oil();
break;
}
case 7: {
tracker.check_battery();
break;
}
default: {
std::cout << "Invalid choice. Please try again." << std::endl;
break;
}
}
std::cout << std::endl;
}
return 0;
}
Output:
Press 2 to add inventory:


Simillarly we added three vehicle in inventory.
Then press 1 to see the list of inventory:


Press 3 to update vehicle odometer reading:

Press 5 to check tyre rotation of vehicles which are in inventory:

Press 6 to check oil level of vehicles which are in inventory:

Press 7 to check battery of vehicles which are in inventory which runs on Electric only:

Press 4 to remove vehicle which are in inventory:
