Challenge

Project 3

#include <iostream>
#include <string>
#include <limits>

using namespace std;

enum Type {
GAS,
DIESEL,
ELECTRIC
};

class Vehicle {
protected:
string make;
string model;
int year;
long int odometer;

public:
Vehicle(string _make = "", string _model = "", int _year = 0, int _odo = 0) {
make = _make;
model = _model;
year = _year;
odometer = _odo;
}

string getMake() {
return make;
}

string getModel() {
return model;
}

int getYear() {
return year;
}

long int getOdo() {
return odometer;
}

void setModel(string val) {
model = val;
}

void setMake(string val) {
make = val;
}

void setYear(int val) {
year = val;
}

void setOdo(int val) {
odometer = val;
}

virtual Type getType() = 0;

virtual void getCarInformation() {
cout << "Make: " << make << endl;
cout << "Model: " << model << endl;
cout << "Year: " << year << endl;
cout << "Odometer: " << odometer << " km" << endl;
}

void checkTireRotation() {
int remainder = odometer % 50000;
if (remainder >= 0) {
cout << "Please replace tires" << endl;
} else {
cout << "Tires are good to go" << endl;
}
}

void checkOil() {
int remainder = odometer % 400;
if (remainder >= 0) {
cout << "Oil change required" << endl;
} else {
cout << "Oil change not required" << endl;
}
}

void checkRecharge() {
int remainder = odometer % 400;
if (remainder >= 0) {
cout << "Recharge battery" << endl;
} else {
cout << "Battery charge is sufficient" << endl;
}
}
};

class GasCar : public Vehicle {
public:
Type getType() {
return GAS;
}
};

class DieselCar : public Vehicle {
public:
Type getType() {
return DIESEL;
}
};

class ElectricCar : public Vehicle {
public:
Type getType() {
return ELECTRIC;
}

void checkTireRotation() {
int remainder = odometer % 50000;
if (remainder >= 0) {
cout << "Please replace tires" << endl;
} else {
cout << "Tires are good to go" << endl;
}
}

void checkRecharge() {
int remainder = odometer % 400;
if (remainder >= 0) {
cout << "Recharge battery" << endl;
} else {
cout << "Battery charge is sufficient" << endl;
}
}
};

string getNewMake() {
string make;
cout << "Enter make: ";
cin.ignore();
getline(cin, make);

while (make.empty()) {
cout << "Make cannot be blank. Enter make: ";
getline(cin, make);
}

return make;
}

string getNewModel() {
string model;
cout << "Enter model: ";
getline(cin, model);

while (model.empty()) {
cout << "Model cannot be blank. Enter model: ";
getline(cin, model);
}

return model;
}

int getYear() {
int year;
cout << "Enter year of manufacture: ";
cin >> year;

while (year < 1000 || year > 9999) {
cout << "Invalid year. Enter year of manufacture (4 digits): ";
cin >> year;
}

return year;
}

long int getNewOdometer() {
long int odometer;
cout << "Enter odometer reading: ";
cin >> odometer;

while (cin.fail()) {
cout << "Invalid input. Enter odometer reading (numeric): ";
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cin >> odometer;
}

return odometer;
}

int getNewType() {
int type;
cout << "Enter type (0: GasCar, 1: DieselCar, 2: ElectricCar): ";
cin >> type;

while (type < 0 || type > 2) {
cout << "Invalid type. Enter type (0: GasCar, 1: DieselCar, 2: ElectricCar): ";
cin >> type;
}

return type;
}

int selectCar(int vehCount) {
int carIndex;
cout << "Enter vehicle index: ";
cin >> carIndex;

while (carIndex < 0 || carIndex >= vehCount) {
cout << "Invalid vehicle index. Enter vehicle index: ";
cin >> carIndex;
}

return carIndex;
}

long int getNewOdometerReading() {
long int newOdometer;
cout << "Enter new odometer reading: ";
cin >> newOdometer;

while (cin.fail()) {
cout << "Invalid input. Enter new odometer reading (numeric): ";
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cin >> newOdometer;
}

return newOdometer;
}

int main() {
const int MAX_VEHICLES = 100;
Vehicle* vehicles[MAX_VEHICLES];
int vehCount = 0;

int selection;
do {
cout << "Enter 0: Quit\n1: List vehicles\n2: Add vehicle\n3: Update vehicle\n4: Remove vehicle\n5: Check tire rotation\n6: Check oil\n7: Check recharge\n";
cin >> selection;

switch (selection) {
case 1:
cout << "Vehicle List:" << endl;
for (int i = 0; i < vehCount; i++) {
cout << "Vehicle " << i << ":" << endl;
vehicles[i]->getCarInformation();
cout << endl;
}
break;

case 2: {
int type = getNewType();
string make = getNewMake();
string model = getNewModel();
long int odo = getNewOdometer();
int year = getYear();

if (type == 0) {
vehicles[vehCount] = new GasCar();
} else if (type == 1) {
vehicles[vehCount] = new DieselCar();
} else if (type == 2) {
vehicles[vehCount] = new ElectricCar();
}

vehicles[vehCount]->setMake(make);
vehicles[vehCount]->setModel(model);
vehicles[vehCount]->setOdo(odo);
vehicles[vehCount]->setYear(year);

vehCount++;

cout << "Added vehicle: " << make << endl;
break;
}

case 3: {
int carIndex = selectCar(vehCount);
int updateSelection;
cout << "Enter 1: Update year\n2: Update odometer\n";
cin >> updateSelection;

if (updateSelection == 1) {
int newYear = getYear();
vehicles[carIndex]->setYear(newYear);
} else if (updateSelection == 2) {
long int newOdo = getNewOdometer();
vehicles[carIndex]->setOdo(newOdo);
} else {
cout << "Invalid selection" << endl;
}
break;
}

case 4: {
int carIndex = selectCar(vehCount);
string make = vehicles[carIndex]->getMake();
delete vehicles[carIndex];
for (int i = carIndex; i < vehCount - 1; i++) {
vehicles[i] = vehicles[i + 1];
}
vehCount--;

cout << "Removed vehicle: " << make << endl;
break;
}

case 5: {
int carIndex = selectCar(vehCount);
vehicles[carIndex]->checkTireRotation();
break;
}

case 6: {
int carIndex = selectCar(vehCount);
vehicles[carIndex]->checkOil();
break;
}

case 7: {
int carIndex = selectCar(vehCount);
vehicles[carIndex]->checkRecharge();
break;
}

default:
cout << "Invalid selection" << endl;
break;
}
} while (selection != 0);

return 0;
}

/***************************OutPut******************************/

Enter 0: Quit
1: List vehicles
2: Add vehicle
3: Update vehicle
4: Remove vehicle
5: Check tire rotation
6: Check oil
7: Check recharge
1
Vehicle List:
Enter 0: Quit
1: List vehicles
2: Add vehicle
3: Update vehicle
4: Remove vehicle
5: Check tire rotation
6: Check oil
7: Check recharge
2
Enter type (0: GasCar, 1: DieselCar, 2: ElectricCar): 1
Enter make: swift
Enter model: di
Enter odometer reading: 10000
Enter year of manufacture: 1993
Added vehicle: swift
Enter 0: Quit
1: List vehicles
2: Add vehicle
3: Update vehicle
4: Remove vehicle
5: Check tire rotation
6: Check oil
7: Check recharge
2
Enter type (0: GasCar, 1: DieselCar, 2: ElectricCar): 0
Enter make: santro
Enter model: xing
Enter odometer reading: 50000
Enter year of manufacture: 2005
Added vehicle: santro
Enter 0: Quit
1: List vehicles
2: Add vehicle
3: Update vehicle
4: Remove vehicle
5: Check tire rotation
6: Check oil
7: Check recharge
2
Enter type (0: GasCar, 1: DieselCar, 2: ElectricCar): 1
Enter make: new
Enter model: vss
Enter odometer reading: 65000
Enter year of manufacture: 2000
Added vehicle: new
Enter 0: Quit
1: List vehicles
2: Add vehicle
3: Update vehicle
4: Remove vehicle
5: Check tire rotation
6: Check oil
7: Check recharge
5
Enter vehicle index: 1
Please replace tires
Enter 0: Quit
1: List vehicles
2: Add vehicle
3: Update vehicle
4: Remove vehicle
5: Check tire rotation
6: Check oil
7: Check recharge
6
Enter vehicle index: 2
Oil change required
Enter 0: Quit
1: List vehicles
2: Add vehicle
3: Update vehicle
4: Remove vehicle
5: Check tire rotation
6: Check oil
7: Check recharge
2
Enter type (0: GasCar, 1: DieselCar, 2: ElectricCar): 2
Enter make: tata
Enter model: electro
Enter odometer reading: 1000
Enter year of manufacture: 2023
Added vehicle: tata
Enter 0: Quit
1: List vehicles
2: Add vehicle
3: Update vehicle
4: Remove vehicle
5: Check tire rotation
6: Check oil
7: Check recharge
5
Enter vehicle index: 3
Please replace tires
Enter 0: Quit
1: List vehicles
2: Add vehicle
3: Update vehicle
4: Remove vehicle
5: Check tire rotation
6: Check oil
7: Check recharge
5
Enter vehicle index: 4
Invalid vehicle index. Enter vehicle index: 3
Please replace tires
Enter 0: Quit
1: List vehicles
2: Add vehicle
3: Update vehicle
4: Remove vehicle
5: Check tire rotation
6: Check oil
7: Check recharge
7
Enter vehicle index: 3
Recharge battery
Enter 0: Quit
1: List vehicles
2: Add vehicle
3: Update vehicle
4: Remove vehicle
5: Check tire rotation
6: Check oil
7: Check recharge
4
Enter vehicle index: 2
Removed vehicle: new
Enter 0: Quit
1: List vehicles
2: Add vehicle
3: Update vehicle
4: Remove vehicle
5: Check tire rotation
6: Check oil
7: Check recharge
1
Vehicle List:
Vehicle 0:
Make: swift
Model: di
Year: 1993
Odometer: 10000 km

Vehicle 1:
Make: santro
Model: xing
Year: 2005
Odometer: 50000 km

Vehicle 2:
Make: tata
Model: electro
Year: 2023
Odometer: 1000 km

Enter 0: Quit
1: List vehicles
2: Add vehicle
3: Update vehicle
4: Remove vehicle
5: Check tire rotation
6: Check oil
7: Check recharge

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.