Challenge

Project 3

//ANSWER//

#include<iostream>
#include<vector>
#include<string>
using namespace std;
enum class TypeFuel //using enum for variables predefined consts.
{
GAS,
DIESEL,
ELECTRIC
};
class Vehicle //base class
{
protected:
string make, model;
int year, odometer;
public:
Vehicle(const string& make, const string& model, int year, int odometer): make(make), model(model), year(year), odometer(odometer){}
//getters fun
string getModel()const
{return model;}
string getMake()const
{return make;}
int getYear()const
{return year;}
int getOdometer()const
{return odometer;}
//setter fun
void setOdometer(int newodo)
{odometer = newodo;}
virtual void recharge()
{
cout<<"Recharge in process:"<<make<<" "<<model<<endl;
}
virtual TypeFuel getTypeFuel()const =0;
virtual ~Vehicle(){}
};
class Gas : public Vehicle //derived class
{
public:
Gas(const string& make, string& model, int year, int odometer): Vehicle(make, model, year, odometer){}
TypeFuel getTypeFuel()const override
{
return TypeFuel::GAS;
}
};
class Diesel : public Vehicle //derived class
{
public:
Diesel(const string& make, string& model, int year, int odometer): Vehicle(make, model, year, odometer){}
TypeFuel getTypeFuel()const override
{
return TypeFuel::DIESEL;
}
};
class Electric : public Vehicle //derived class
{
public:
Electric(const string& make, string& model, int year, int odometer): Vehicle(make, model, year, odometer){}
TypeFuel getTypeFuel()const override
{
return TypeFuel::ELECTRIC;
}
};
class Vdetails //new class for vehicle details
{
private:
vector<Vehicle*> items;
public:
int index;
string make, model;
int year, odometer;
~Vdetails()
{
for (Vehicle* vehicle:items)
{
delete vehicle;
}
}
void addVehicle(Vehicle* vehicle)
{
items.push_back(vehicle);
}
void listVehicle()const
{
int index=0;
for(const Vehicle* vehicle:items)
{
cout<<"Index: "<<index<<endl;
cout<<"Make of vehicle: "<<vehicle->getMake()<< endl;
cout<<"Model of vehicle: "<<vehicle->getModel()<<endl;
cout<<"Year of vehicle: "<<vehicle->getYear()<<endl;
cout<<"Odometer of vehicle: "<<vehicle->getOdometer()<<" km"<<endl;
switch (vehicle->getTypeFuel())
{
case TypeFuel::GAS:
cout << "Gas" <<endl;
break;
case TypeFuel::DIESEL:
cout << "Diesel" <<endl;
break;
case TypeFuel::ELECTRIC:
cout << "Electric" <<endl;
break;
}
++index;
}
}
void updateVehicle(int index)
{
int newodo;
if(index>=0 && static_cast<size_t>(index)<items.size())
{
Vehicle* vehicle = items[index];
vehicle->setOdometer(newodo);
}
cout<<"Update details: "<<endl;
}
void deletevehicle(int index)
{
if(index>=0 && static_cast<size_t>(index)<items.size())
{
delete items[index];
items.erase(items.begin()+index);
}
cout<<"Details deleted! "<<endl;
}
void checkTireRotation()
{
int odokm = odometer;
if (odokm>50000)
cout<<"Please rotate tires!"<<endl;
else
cout<<"Tires are okay."<<endl;
}
void oilChange()
{
int oilkm = odometer;
if(oilkm>10000)
cout<<"Change brake oil!"<<endl;
else
cout<<"Brake oil okay."<<endl;
}
void recharge(int index)
{
if (index >= 0 && static_cast<size_t>(index) < items.size())
{
Vehicle* vehicle = items[index];
vehicle->recharge();
}
}
};
int main()
{
string make, model;
int year, odometer;
Vdetails vd;
while(true)
{
cout<< " 0. Quit.\n"
<< " 1. List inventory.\n"
<< " 2. Add vehicle.\n"
<< " 3. Update vehicle.\n"
<< " 4. Remove vehicle.\n"
<< " 5. Tire Rotation.\n"
<< " 6. Brake oil Change.\n"
<< " 7. Recharge battery." <<endl;
int selection;
cout<<"Enter your selection for the program: ";
cin>>selection;
if (selection ==0)
{
cout<<"Quit"<<endl;break;
}
else if(selection ==1)
{
vd.listVehicle();
}
else if(selection == 2)
{
cout<<"Make of vehicle: ";
cin>>make;
cout<<"Model of vehicle: ";
cin>>model;
cout<<"Year of vehicle manufacture: ";
cin>>year;
cout<<"Odometer reading of vehicle in km: ";
cin>>odometer;
int TypeFuelselect;
cout<<"Select fuel type:\n0:Gas\n1:Diesel\n2:Electric";
cin >> TypeFuelselect;
TypeFuel fueltype;
if (TypeFuelselect == 0)
{
fueltype = TypeFuel::GAS;
}
else if (TypeFuelselect == 1)
{
fueltype = TypeFuel::DIESEL;
}
else if (TypeFuelselect == 2)
{
fueltype = TypeFuel::ELECTRIC;
}
else
{
cout << "Invalid fuel type. Addition aborted." <<endl;
continue;
}
Vehicle* vehicle =nullptr;
switch(fueltype)
{
case TypeFuel::GAS:
vehicle = new Gas(make, model, year,odometer);
break;
case TypeFuel::DIESEL:
vehicle = new Diesel(make, model, year,odometer);
break;
case TypeFuel :: ELECTRIC:
vehicle = new Electric(make, model, year,odometer);
break;
}
vd.addVehicle(vehicle);
cout<<"Vehicle details added successfully!"<<endl;
}
else if(selection ==3)
{
cout<<"Enter index of vehicle to be updated."<<endl;
int index;cin>>index;
vd.updateVehicle(index);
cout<<"Update vehicle info:"<<endl;
}
else if(selection==4)
{
cout<<"Enter index of vehicle to be deleted:"<<endl;
int index;cin>>index;
vd.deletevehicle(index);
}
else if(selection ==5)
{
cout<<"Enter index of vehicle to be checked for tire rotation."<<endl;
int index;cin>>index;
vd.checkTireRotation();
}
else if(selection ==6)
{
cout<<"Enter index of vehicle to be checked for oil level."<<endl;
int index;cin>>index;
vd.oilChange();
}
else if(selection ==7)
{
cout<<"Enter index of vehicle to be checked for battery level."<<endl;
int index;cin>>index;
vd.recharge(index);
}
else
{
cout<<"Invalid selection."<<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.