Language: C++ Your first job will be to go through all of the code and decide wh
ID: 3724388 • Letter: L
Question
Language: C++
Your first job will be to go through all of the code and decide which functions should be declared const. You should find several places throughout the program where this makes sense. We will also make the id data member in the Customer class const, as once a customer has been created their ID will never change. You will have to alter the code to make this so. You can not alter the parameters or return type of any function to accomplish any of this. The program should work just as it did before.
----------------------Customer.cc-----------------------
#include <iostream>
using namespace std;
#include "Customer.h"
int Customer::nextId = 1000;
Customer::Customer(string fname, string lname, string add, string pnum) {
id = nextId++;
firstName = fname;
lastName = lname;
address = add;
phoneNumber = pnum;
}
int Customer::getId() { return id; }
string Customer::getFname() { return firstName; }
string Customer::getLname() { return lastName; }
string Customer::getAddress() { return address; }
string Customer::getPhoneNumber() { return phoneNumber; }
int Customer::getNumVehicles() { return vehicles.getSize(); }
VehicleArray& Customer::getVehicles() { return vehicles; }
int Customer::addVehicle(Vehicle* v) { return vehicles.add(v); }
----------------------Customer.h-----------------------
#ifndef CUSTOMER_H
#define CUSTOMER_H
#include <string>
#include "Vehicle.h"
#include "VehicleArray.h"
using namespace std;
class Customer {
public:
Customer(string="", string="", string="", string="");
int getId();
string getFname();
string getLname();
string getAddress();
string getPhoneNumber();
int getNumVehicles();
VehicleArray& getVehicles();
int addVehicle(Vehicle*);
private:
static int nextId;
int id;
string firstName;
string lastName;
string address;
string phoneNumber;
VehicleArray vehicles;
};
#endif
----------------------CustomerArray.cc-----------------------
#include "CustomerArray.h"
#include "Customer.h"
#include "defs.h"
CustomerArray::CustomerArray() { size = 0; }
CustomerArray::~CustomerArray() {
for(int i = 0; i < size; i++) {
delete elements[i];
}
}
int CustomerArray::getSize() { return size; }
int CustomerArray::add(Customer* c) {
if (size == MAX_CUSTOMERS) {
return C_NOK;
}
elements[size] = c;
size++;
return C_OK;
}
Customer* CustomerArray::get(int i) {
if ((i >= size) || (i < 0)) {
return 0;
}
return elements[i];
}
----------------------CustomerArray.h-----------------------
#ifndef CUSTOMERARRAY_H
#define CUSTOMERARRAY_H
#include "Customer.h"
class CustomerArray
{
public:
CustomerArray();
~CustomerArray();
int add(Customer*);
Customer* get(int);
int getSize();
private:
Customer* elements[MAX_CUSTOMERS];
int size;
};
#endif
----------------------defs.h-----------------------
#ifndef DEFS_H
#define DEFS_H
#define MAX_VEHICLES 4
#define MAX_CUSTOMERS 6
#define C_OK 0
#define C_NOK -1
#endif
----------------------main.cc-----------------------
#include "ShopController.h"
int main(int argc, char* argv[])
{
ShopController control;
control.launch();
return 0;
}
----------------------shop.cc-----------------------
#include "Shop.h"
#include "defs.h"
int Shop::addCustomer(Customer* c) { return customers.add(c); }
Customer* Shop::getCustomer(int i) { return (customers.get(i)); }
CustomerArray& Shop::getCustomers() { return customers; }
----------------------shop.h-----------------------
#ifndef SHOP_H
#define SHOP_H
#include "Customer.h"
#include "CustomerArray.h"
class Shop{
public:
int addCustomer(Customer*);
Customer* getCustomer(int);
CustomerArray& getCustomers();
private:
CustomerArray customers;
};
#endif
----------------------ShopController.cc-----------------------
#include "ShopController.h"
ShopController::ShopController() {
initCustomers();
}
void ShopController::launch() {
int choice;
while (1) {
choice = -1;
view.mainMenu(choice);
if (choice == 1) {
view.printCustomers(mechanicShop.getCustomers());
view.pause();
} /*else if (choice == 2) {
} else if (choice == 3) {
} else if (choice == 4) {
} ... */
else {
break;
}
}
}
void ShopController::initCustomers() {
Customer* newCustomer;
Vehicle* newVehicle;
newCustomer = new Customer("Maurice", "Mooney", "2600 Colonel By Dr.",
"(613)728-9568");
newVehicle = new Vehicle("Ford", "Fiesta", "Red", 2007, 100000);
newCustomer->addVehicle(newVehicle);
mechanicShop.addCustomer(newCustomer);
newCustomer = new Customer("Abigail", "Atwood", "43 Carling Dr.",
"(613)345-6743");
newVehicle = new Vehicle("Subaru", "Forester", "Green", 2016, 40000);
newCustomer->addVehicle(newVehicle);
mechanicShop.addCustomer(newCustomer);
newCustomer = new Customer("Brook", "Banding", "1 Bayshore Dr.",
"(613)123-7456");
newVehicle = new Vehicle("Honda", "Accord", "White", 2018, 5000);
newCustomer->addVehicle(newVehicle);
newVehicle = new Vehicle("Volkswagon", "Beetle", "White", 1972, 5000);
newCustomer->addVehicle(newVehicle);
mechanicShop.addCustomer(newCustomer);
newCustomer = new Customer("Ethan", "Esser", "245 Rideau St.",
"(613)234-9677");
newVehicle = new Vehicle("Toyota", "Camery", "Black", 2010, 50000);
newCustomer->addVehicle(newVehicle);
mechanicShop.addCustomer(newCustomer);
newCustomer = new Customer("Eve", "Engram", "75 Bronson Ave.",
"(613)456-2345");
newVehicle = new Vehicle("Toyota", "Corolla", "Green", 2013, 80000);
newCustomer->addVehicle(newVehicle);
newVehicle = new Vehicle("Toyota", "Rav4", "Gold", 2015, 20000);
newCustomer->addVehicle(newVehicle);
newVehicle = new Vehicle("Toyota", "Prius", "Blue", 2017, 10000);
newCustomer->addVehicle(newVehicle);
mechanicShop.addCustomer(newCustomer);
newCustomer = new Customer("Victor", "Vanvalkenburg", "425 O'Connor St.",
"(613)432-7622");
newVehicle = new Vehicle("GM", "Envoy", "Purple", 2012, 60000);
newCustomer->addVehicle(newVehicle);
newVehicle = new Vehicle("GM", "Escalade", "Black", 2016, 40000);
newCustomer->addVehicle(newVehicle);
newVehicle = new Vehicle("GM", "Malibu", "Red", 2015, 20000);
newCustomer->addVehicle(newVehicle);
newVehicle = new Vehicle("GM", "Trailblazer", "Orange", 2012, 90000);
newCustomer->addVehicle(newVehicle);
//newVehicle = new Vehicle("GM", "Vue", "Blue", 2015, 20000);
//newCustomer->addVehicle(newVehicle);
mechanicShop.addCustomer(newCustomer);
}
----------------------ShopController.h-----------------------
#ifndef SHOPCONTROLLER_H
#define SHOPCONTROLLER_H
#include "View.h"
#include "Shop.h"
class ShopController {
public:
ShopController();
void launch();
private:
Shop mechanicShop;
View view;
void initCustomers();
};
#endif
----------------------Vehicle.cc-----------------------
#include "Vehicle.h"
Vehicle::Vehicle(string ma, string mo, string col, int y, int m) {
make = ma;
model = mo;
colour = col;
year = y;
mileage = m;
}
string Vehicle::getMake() { return make; }
string Vehicle::getModel() { return model; }
string Vehicle::getColour() { return colour; }
int Vehicle::getYear() { return year; }
int Vehicle::getMilage() { return mileage; }
----------------------Vehicle.h-----------------------
#ifndef VEHICLE_H
#define VEHICLE_H
#include <string>
using namespace std;
class Vehicle {
public:
Vehicle(string, string, string, int, int);
string getMake();
string getModel();
string getColour();
int getYear();
int getMilage();
private:
string make;
string model;
string colour;
int year;
int mileage;
};
#endif
----------------------VehicleArray.cc-----------------------
#include "VehicleArray.h"
#include "Vehicle.h"
#include "defs.h"
VehicleArray::VehicleArray() { size = 0; }
VehicleArray::~VehicleArray() {
for(int i = 0; i < size; i++) {
delete elements[i];
}
}
int VehicleArray::getSize() { return size; }
int VehicleArray::add(Vehicle* v) {
if (size == MAX_VEHICLES) {
return C_NOK;
}
elements[size] = v;
size++;
return C_OK;
}
Vehicle* VehicleArray::get(int i) {
if ((i >= size) || (i < 0)) {
return 0;
}
return elements[i];
}
----------------------VehicleArray.h-----------------------
#ifndef VEHICLEARRAY_H
#define VEHICLEARRAY_H
#include "defs.h"
#include "Vehicle.h"
class VehicleArray
{
public:
VehicleArray();
~VehicleArray();
int add(Vehicle*);
Vehicle* get(int);
int getSize();
private:
Vehicle* elements[MAX_VEHICLES];
int size;
};
#endif
----------------------View.cc-----------------------
#include <sstream>
#include <iomanip>
#include <iostream>
using namespace std;
#include "View.h"
#include "CustomerArray.h"
#include "Customer.h"
#include "VehicleArray.h"
#include "Vehicle.h"
void View::mainMenu(int& choice) {
string str;
choice = -1;
cout<< " **** Toby's Auto Mechanic Information Management System **** ";
cout<< " MAIN MENU ";
cout<< " 1. Print Customer Database ";
cout<< " 0. Exit ";
while (choice < 0 || choice > 1) {
cout << "Enter your selection: ";
choice = readInt();
}
if (choice == 0) { cout << endl; }
}
void View::printCustomers(CustomerArray& arr) {
cout << endl << "CUSTOMERS: " << endl << endl;
for (int i = 0; i < arr.getSize(); i++) {
Customer* cust = arr.get(i);
ostringstream name;
name << cust->getFname() << " " << cust->getLname();
cout << "Customer ID " << cust->getId() << endl << endl
<< " Name: " << setw(40) << name.str() << endl
<< " Address: " << setw(37) << cust->getAddress() << endl
<< " Phone Number: " << setw(32) << cust->getPhoneNumber() << endl;
if (cust->getNumVehicles() > 0) {
cout << endl << " " << cust->getNumVehicles()
<< " vehicle(s): " << endl << endl;
}
VehicleArray& varr = cust->getVehicles();
for (int j = 0; j < varr.getSize(); j++) {
Vehicle* v = varr.get(j);
ostringstream make_model;
make_model << v->getMake() << " " << v->getModel();
cout << " " << j+1 << ") " << setw(7) << v->getColour() << " "
<< v->getYear() << " " << setw(17) << make_model.str() << " ("
<< v->getMilage() << "km)" << endl;
}
cout << endl << endl;
}
}
void View::pause() {
string str;
cout << "Press enter to continue...";
getline(cin, str);
}
int View::readInt() {
string str;
int num;
getline(cin, str);
stringstream ss(str);
ss >> num;
return num;
}
----------------------View.h-----------------------
#ifndef VIEW_H
#define VIEW_H
#include "CustomerArray.h"
class View {
public:
void mainMenu(int&);
void printCustomers(CustomerArray&);
void pause();
private:
int readInt();
};
#endif
Explanation / Answer
the code has corrected without errors
#include <iostream>
using namespace std;
#include "Customer.h"
int Customer::nextId = 1000;
Customer::Customer(string fname, string lname, string add, string pnum) {
id = nextId++;
firstName = fname;
lastName = lname;
address = add;
phoneNumber = pnum;
}
int Customer::getId() { return id; }
string Customer::getFname() { return firstName; }
string Customer::getLname() { return lastName; }
string Customer::getAddress() { return address; }
string Customer::getPhoneNumber() { return phoneNumber; }
int Customer::getNumVehicles() { return vehicles.getSize(); }
VehicleArray& Customer::getVehicles() { return vehicles; }
int Customer::addVehicle(Vehicle* v) { return vehicles.add(v); }
----------------------Customer.h-----------------------
#ifndef CUSTOMER_H
#define CUSTOMER_H
#include <string>
#include "Vehicle.h"
#include "VehicleArray.h"
using namespace std;
class Customer {
public:
Customer(string="", string="", string="", string="");
int getId();
string getFname();
string getLname();
string getAddress();
string getPhoneNumber();
int getNumVehicles();
VehicleArray& getVehicles();
int addVehicle(Vehicle*);
private:
static int nextId;
int id;
string firstName;
string lastName;
string address;
string phoneNumber;
VehicleArray vehicles;
};
#endif
----------------------CustomerArray.cc-----------------------
#include "CustomerArray.h"
#include "Customer.h"
#include "defs.h"
CustomerArray::CustomerArray() { size = 0; }
CustomerArray::~CustomerArray() {
for(int i = 0; i < size; i++) {
delete elements[i];
}
}
int CustomerArray::getSize() { return size; }
int CustomerArray::add(Customer* c) {
if (size == MAX_CUSTOMERS) {
return C_NOK;
}
elements[size] = c;
size++;
return C_OK;
}
Customer* CustomerArray::get(int i) {
if ((i >= size) || (i < 0)) {
return 0;
}
return elements[i];
}
----------------------CustomerArray.h-----------------------
#ifndef CUSTOMERARRAY_H
#define CUSTOMERARRAY_H
#include "Customer.h"
class CustomerArray
{
public:
CustomerArray();
~CustomerArray();
int add(Customer*);
Customer* get(int);
int getSize();
private:
Customer* elements[MAX_CUSTOMERS];
int size;
};
#endif
----------------------defs.h-----------------------
#ifndef DEFS_H
#define DEFS_H
#define MAX_VEHICLES 4
#define MAX_CUSTOMERS 6
#define C_OK 0
#define C_NOK -1
#endif
----------------------main.cc-----------------------
#include "ShopController.h"
int main(int argc, char* argv[])
{
ShopController control;
control.launch();
return 0;
}
----------------------shop.cc-----------------------
#include "Shop.h"
#include "defs.h"
int Shop::addCustomer(Customer* c) { return customers.add(c); }
Customer* Shop::getCustomer(int i) { return (customers.get(i)); }
CustomerArray& Shop::getCustomers() { return customers; }
----------------------shop.h-----------------------
#ifndef SHOP_H
#define SHOP_H
#include "Customer.h"
#include "CustomerArray.h"
class Shop{
public:
int addCustomer(Customer*);
Customer* getCustomer(int);
CustomerArray& getCustomers();
private:
CustomerArray customers;
};
#endif
----------------------ShopController.cc-----------------------
#include "ShopController.h"
ShopController::ShopController() {
initCustomers();
}
void ShopController::launch() {
int choice;
while (1) {
choice = -1;
view.mainMenu(choice);
if (choice == 1) {
view.printCustomers(mechanicShop.getCustomers());
view.pause();
} /*else if (choice == 2) {
} else if (choice == 3) {
} else if (choice == 4) {
} ... */
else {
break;
}
}
}
void ShopController::initCustomers() {
Customer* newCustomer;
Vehicle* newVehicle;
newCustomer = new Customer("Maurice", "Mooney", "2600 Colonel By Dr.",
"(613)728-9568");
newVehicle = new Vehicle("Ford", "Fiesta", "Red", 2007, 100000);
newCustomer->addVehicle(newVehicle);
mechanicShop.addCustomer(newCustomer);
newCustomer = new Customer("Abigail", "Atwood", "43 Carling Dr.",
"(613)345-6743");
newVehicle = new Vehicle("Subaru", "Forester", "Green", 2016, 40000);
newCustomer->addVehicle(newVehicle);
mechanicShop.addCustomer(newCustomer);
newCustomer = new Customer("Brook", "Banding", "1 Bayshore Dr.",
"(613)123-7456");
newVehicle = new Vehicle("Honda", "Accord", "White", 2018, 5000);
newCustomer->addVehicle(newVehicle);
newVehicle = new Vehicle("Volkswagon", "Beetle", "White", 1972, 5000);
newCustomer->addVehicle(newVehicle);
mechanicShop.addCustomer(newCustomer);
newCustomer = new Customer("Ethan", "Esser", "245 Rideau St.",
"(613)234-9677");
newVehicle = new Vehicle("Toyota", "Camery", "Black", 2010, 50000);
newCustomer->addVehicle(newVehicle);
mechanicShop.addCustomer(newCustomer);
newCustomer = new Customer("Eve", "Engram", "75 Bronson Ave.",
"(613)456-2345");
newVehicle = new Vehicle("Toyota", "Corolla", "Green", 2013, 80000);
newCustomer->addVehicle(newVehicle);
newVehicle = new Vehicle("Toyota", "Rav4", "Gold", 2015, 20000);
newCustomer->addVehicle(newVehicle);
newVehicle = new Vehicle("Toyota", "Prius", "Blue", 2017, 10000);
newCustomer->addVehicle(newVehicle);
mechanicShop.addCustomer(newCustomer);
newCustomer = new Customer("Victor", "Vanvalkenburg", "425 O'Connor St.",
"(613)432-7622");
newVehicle = new Vehicle("GM", "Envoy", "Purple", 2012, 60000);
newCustomer->addVehicle(newVehicle);
newVehicle = new Vehicle("GM", "Escalade", "Black", 2016, 40000);
newCustomer->addVehicle(newVehicle);
newVehicle = new Vehicle("GM", "Malibu", "Red", 2015, 20000);
newCustomer->addVehicle(newVehicle);
newVehicle = new Vehicle("GM", "Trailblazer", "Orange", 2012, 90000);
newCustomer->addVehicle(newVehicle);
//newVehicle = new Vehicle("GM", "Vue", "Blue", 2015, 20000);
//newCustomer->addVehicle(newVehicle);
mechanicShop.addCustomer(newCustomer);
}
----------------------ShopController.h-----------------------
#ifndef SHOPCONTROLLER_H
#define SHOPCONTROLLER_H
#include "View.h"
#include "Shop.h"
class ShopController {
public:
ShopController();
void launch();
private:
Shop mechanicShop;
View view;
void initCustomers();
};
#endif
----------------------Vehicle.cc-----------------------
#include "Vehicle.h"
Vehicle::Vehicle(string ma, string mo, string col, int y, int m) {
make = ma;
model = mo;
colour = col;
year = y;
mileage = m;
}
string Vehicle::getMake() { return make; }
string Vehicle::getModel() { return model; }
string Vehicle::getColour() { return colour; }
int Vehicle::getYear() { return year; }
int Vehicle::getMilage() { return mileage; }
----------------------Vehicle.h-----------------------
#ifndef VEHICLE_H
#define VEHICLE_H
#include <string>
using namespace std;
class Vehicle {
public:
Vehicle(string, string, string, int, int);
string getMake();
string getModel();
string getColour();
int getYear();
int getMilage();
private:
string make;
string model;
string colour;
int year;
int mileage;
};
#endif
----------------------VehicleArray.cc-----------------------
#include "VehicleArray.h"
#include "Vehicle.h"
#include "defs.h"
VehicleArray::VehicleArray() { size = 0; }
VehicleArray::~VehicleArray() {
for(int i = 0; i < size; i++) {
delete elements[i];
}
}
int VehicleArray::getSize() { return size; }
int VehicleArray::add(Vehicle* v) {
if (size == MAX_VEHICLES) {
return C_NOK;
}
elements[size] = v;
size++;
return C_OK;
}
Vehicle* VehicleArray::get(int i) {
if ((i >= size) || (i < 0)) {
return 0;
}
return elements[i];
}
----------------------VehicleArray.h-----------------------
#ifndef VEHICLEARRAY_H
#define VEHICLEARRAY_H
#include "defs.h"
#include "Vehicle.h"
class VehicleArray
{
public:
VehicleArray();
~VehicleArray();
int add(Vehicle*);
Vehicle* get(int);
int getSize();
private:
Vehicle* elements[MAX_VEHICLES];
int size;
};
#endif
----------------------View.cc-----------------------
#include <sstream>
#include <iomanip>
#include <iostream>
using namespace std;
#include "View.h"
#include "CustomerArray.h"
#include "Customer.h"
#include "VehicleArray.h"
#include "Vehicle.h"
void View::mainMenu(int& choice) {
string str;
choice = -1;
cout<< " **** Toby's Auto Mechanic Information Management System **** ";
cout<< " MAIN MENU ";
cout<< " 1. Print Customer Database ";
cout<< " 0. Exit ";
while (choice < 0 || choice > 1) {
cout << "Enter your selection: ";
choice = readInt();
}
if (choice == 0) { cout << endl; }
}
void View::printCustomers(CustomerArray& arr) {
cout << endl << "CUSTOMERS: " << endl << endl;
for (int i = 0; i < arr.getSize(); i++) {
Customer* cust = arr.get(i);
ostringstream name;
name << cust->getFname() << " " << cust->getLname();
cout << "Customer ID " << cust->getId() << endl << endl
<< " Name: " << setw(40) << name.str() << endl
<< " Address: " << setw(37) << cust->getAddress() << endl
<< " Phone Number: " << setw(32) << cust->getPhoneNumber() << endl;
if (cust->getNumVehicles() > 0) {
cout << endl << " " << cust->getNumVehicles()
<< " vehicle(s): " << endl << endl;
}
VehicleArray& varr = cust->getVehicles();
for (int j = 0; j < varr.getSize(); j++) {
Vehicle* v = varr.get(j);
ostringstream make_model;
make_model << v->getMake() << " " << v->getModel();
cout << " " << j+1 << ") " << setw(7) << v->getColour() << " "
<< v->getYear() << " " << setw(17) << make_model.str() << " ("
<< v->getMilage() << "km)" << endl;
}
cout << endl << endl;
}
}
void View::pause() {
string str;
cout << "Press enter to continue...";
getline(cin, str);
}
int View::readInt() {
string str;
int num;
getline(cin, str);
stringstream ss(str);
ss >> num;
return num;
}
----------------------View.h-----------------------
#ifndef VIEW_H
#define VIEW_H
#include "CustomerArray.h"
class View {
public:
void mainMenu(int&);
void printCustomers(CustomerArray&);
void pause();
private:
int readInt();
};
#endif
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.