Instructions In this assignment you will build upon the program worked on in the previous assignment. You are free to build upon your solution or start from the skeleton code provided. Task 1: Overloading Operators In this part of the assignment we will go through and overload some operators for some of the classes in this program. Some of these overloaded operators will replace some functions that are already present.
Vehicle Class ● Overload the << operator so that it prints the contents of the Vehicle object in the same manner that it is printed when the “Print Customer Database” option is selected from the main menu of the program. ● Overload the < and operators to compare Vehicle objects based on their year. Change the code that compares Vehichle objects in the VehicleList class during insertion to use these operators instead of comparing the Vehicle objects’ years directly. VehicleList Class ● Overload the += operator that takes a Vehicle pointer and adds it to the VehicleList. Once implemented, remove the add function and fix any other code in the program to use this operator instead of that function. ● Overload the -= so that it takes a Vehicle pointer and removes it from the VehicleList. If the Vehicle does not exist in the VehicleList simply do nothing. This is new functionality for this program that we will use later in this assignment.
● Overload the [] operator so that it takes an integer subscript as a parameter and returns a pointer to the Vehicle object at that position in the list. If the specified index is invalid, return null. ● Overload the << operator so that it prints the contents of the VehicleList. You are to do this by iterating over the list using your newly implemented [] operator. You are not allowed to make this operator a friend to the Node class, only to the VehicleList (so you have to use your [] operator). Be sure to make use of the << operator you implemented in the Vehicle class. Once this is completed, remove the toString function. Update any other code in the program to now use this operator instead.
Customer Class ● Overload the += operator that takes a Vehicle pointer and adds it to the VehicleList. This should make use of the += operator now available in the VehicleList class. Once implemented, remove the addVehicle function and fix any other code in the program to use this operator instead of that function. ● Overload the << operator so that it prints the contents of the Customer object in the same manner that it is printed when the “Print Customer Database” option is selected from the main menu of the program. In this operation, make use of the << operator now available to you from the Vehicle class. ● Overload the < and operators to compare Customer objects based on their last name. Change the code that compares Customer objects in the CustomerList class during insertion to use these operators instead of comparing the Customer objects’ last name directly.
CustomerList Class ● Overload the += operator that takes a Customer pointer and adds it to the CustomerList. Once implemented, remove the add function and fix any other code in the program to use this operator instead of that function. ● Overload the -= so that it takes a Customer pointer and removes it from the CustomerList. If the Customer does not exist in the CustomerList simply do nothing. This is new functionality for this program that we will use later in this assignment. ● Overload the [] operator so that it takes an integer subscript as a parameter and returns a pointer to the Customer object at that position in the list. If the specified index is invalid, return null. ● Overload the << operator so that it prints the contents of the CustomerList. You are to do this by iterating over the list using your newly implemented [] operator. You are not allowed to make this operator a friend to the Node class, only to the CustomerList (so you have to use your [] operator). Be sure to make use of the << operator you implemented in the Customer class. Once this is completed, remove the toString function. Update any other code in the program to now use this operator instead. You
should now be able to run your program and when selecting “Print Customer Database”, the output should look more or less the same as it did before.
Shop Class ● Overload the += operator that takes a Customer pointer and adds it to the CustomerList stored in the Shop. This should make use of the += operator defined in the CustomerList class. Once implemented, remove the addCustomer function and fix any other code in the program to use this operator instead of that function. ● Overload the -= so that it takes a Customer pointer and removes it from the CustomerList stored in the Shop. This should make use of the -= operator defined in the CustomerList class. This is new functionality for this program that we will use later in this assignment.
Task 2: Adding to the Main Menu We will now add two new options to our main menu: 4. Remove Customer and 5. Remove Vehicle. These functions will work similarly to the respective add functionality and will maintain the design principles of this program. You will need to implement functionality in a few classes to achieve this. If the user chooses Remove Customer, they are prompted for a Customer ID. If they enter an invalid ID, this is reported and nothing happens. Otherwise, the Customer identified is removed. If the user chooses Remove Vehicle, they are prompted for a Customer ID. If they enter an invalid ID, this is reported and nothing happens. Otherwise, the user is prompted to indicate which vehicle (a number from 0 - the number of vehicles the customer has registered -1). If they enter an invalid number, this is reported and nothing happens. Otherwise the Vehicle identified is removed.
In both cases the objects should be completely destroyed and all allocated memory associated with those objects should be freed.
Task 3: Introducing a Class Hierarchy We will now introduce a relatively simple class hierarchy into this program. We will create a Person class that has the following members: firstName, lastName, address and phoneNumber. It will also have a constructor that is responsible for initializing these members and a getter function for each member. It is up to you whether you make these members private, protected or public, keeping with the idea of encapsulation we have been talking about in class.
Once implemented, you will update the Customer class to inherit from the Person class properly.
Task 4: Introducing the Mechanic Class On top of keeping track of our customers, we also want to keep track of our Mechanics. Implement a Mechanic class which inherits from the Person class. On top of the inherited members, the Mechanic class needs to have the following: ● A constant integer ID member. This ID is taken from a static integer declared in the class which is initialized to start at 5000, and is incremented every time a new Mechanic is created, similar to the id in the Customer class. ● A salary data member, stored as an integer. ● A constructor which initializes the object properly. ● Overloaded << operator which prints a Mechanic object in a similar manner to a Customer object, replacing the Vehicles with the salary. Once this is created, add an array of pointers for Mechanic objects to the Shop class. Since our shop is relatively small, this will have a fixed size of 5. Overload the += operator in the Shop class to take a pointer to a Mechanic object and add it to this array, if there is room. If there isn’t, do nothing. In the initCustomers function in the ShopController class, create at least 3 Mechanic and add them to the Shop object using your += operator. Keep in mind that these objects should be dynamically allocated and you will therefore decide where and when this memory needs to be free. We will rename this function initShop which better aligns with its new functionality. We will now add one more option to our main menu: 6. Print Mechanics. This functions will work similarly to the Print Customer Database option and will maintain the design principles of this program. You will need to implement functionality in a few classes to achieve this.
Constraints ● your program must not have any memory leaks (don’t worry if valgrind reports that some memory on the heap is “still reachable”) ● do not use any global variables ● your program must reuse functions everywhere possible ● your program must be thoroughly commented ● your program must compile and run in COMP2404-2406- W18 Virtual Machine
Submission You will submit in cuLearn, before the due date and time, one tar file that includes all the following: ● all source code, including the code provided ● a readme file that includes: ○ a preamble (program author, purpose, list of source/header/data files) ○ the exact compilation command ○ launching and operating instructions
Grading [out of 50 marks] Marking components: ● 28 marks: operator overloading ○ Vehicle class ■ 2 marks: << ■ 2 marks: < and ○ VehicleList class ■ 2 marks: += ■ 2 marks: -= ■ 2 marks: [] ■ 2 marks: << ○ Customer class ■ 2 marks: += ■ 2 marks: << ■ 2 marks: < and ○ CustomerList class ■ 2 marks: += ■ 2 marks: -= ■ 2 marks: [] ■ 2 marks: << ○ Shop class ■ 2 marks: += and -= ● 8 marks: 4. Remove Customer and 5. Remove Vehicle Menu options ○ 4 marks: Remove Customer ○ 4 marks: Remove Vehicle ● 3 marks: Person class ● 2 marks: Customer class ● 4 marks: Mechanic class ○ 2 marks: overall consturction ○ 2 marks: << ● 2 marks: Mechanic array in Shop class ● 3 marks: 6. Print Mechanics Menu option Notes: In order to get credit for a marking component, the program must prove that the marking component executes successfully. This is usually accomplished by printing out correct data.
Deductions ● Packaging errors: ○ 10% for missing readme ● Major programming and design errors: ○ 50% of a marking component that uses global variables ○ 50% of a marking component that consistently fails to use correct design principles, including separate functions ○ 50% of a marking component where unauthorized changes have been made to provided code or prototypes ● Minor programming errors: ○ 10% for consistently missing comments or other bad style ○ 10% for consistently failing to perform basic error checking ● Execution errors: ○ 100% of a marking component that can’t be tested because the code doesn’t compile or execute in the VM ○ 100% of a marking component that can’t be tested because the feature isn’t used in the code ○ 100% of a marking component that can’t be proven to run successfully because data is not printed out
Sample Console Output User input highlighted. make g++ -c main.cc g++ -c ShopController.cc g++ -c View.cc g++ -c Shop.cc g++ -c CustomerList.cc g++ -c VehicleList.cc g++ -c Customer.cc g++ -c Vehicle.cc g++ -c Mechanic.cc g++ -c Person.cc g++ -o mechanicshop main.o ShopController.o View.o Shop.o CustomerList.o VehicleList.o Customer.o Vehicle.o Mechanic.o Person.o ./mechanicshop
**** Toby's Auto Mechanic Information Management System **** MAIN MENU 1. Print Customer Database
2. Add Customer 3. Add Vehicle 4. Remove Customer 5. Remove Vehicle 6. Print Mechanics 0. Exit Enter your selection: 1 CUSTOMERS: Customer ID 1001 Name: Abigail Atwood Address: 43 Carling Dr. Phone Number: (613)345-6743 1 vehicle(s): Green 2016 Subaru Forester (40000km)
Customer ID 1002 Name: Brook Banding Address: 1 Bayshore Dr. Phone Number: (613)123-7456 2 vehicle(s): White 2018 Honda Accord (5000km) White 1972 Volkswagon Beetle (5000km)
Customer ID 1004 Name: Eve Engram Address: 75 Bronson Ave. Phone Number: (613)456-2345 3 vehicle(s): Blue 2017 Toyota Prius (10000km) Gold 2015 Toyota Rav4 (20000km)
Green 2013 Toyota Corolla (80000km)
Customer ID 1003 Name: Ethan Esser Address: 245 Rideau St. Phone Number: (613)234-9677 1 vehicle(s): Black 2010 Toyota Camery (50000km)
Customer ID 1000 Name: Maurice Mooney Address: 2600 Colonel By Dr. Phone Number: (613)728-9568 1 vehicle(s): Red 2007 Ford Fiesta (100000km)
Customer ID 1005 Name: Victor Vanvalkenburg Address: 425 O'Connor St. Phone Number: (613)432-7622 4 vehicle(s): Black 2016 GM Escalade (40000km) Red 2015 GM Malibu (20000km) Purple 2012 GM Envoy (60000km) Orange 2012 GM Trailblazer (90000km)
Press enter to continue...
**** Toby's Auto Mechanic Information Management System **** MAIN MENU 1. Print Customer Database
2. Add Customer 3. Add Vehicle 4. Remove Customer 5. Remove Vehicle 6. Print Mechanics 0. Exit Enter your selection: 4 Customer ID: 1006 Invalid choice. Press enter to continue...
**** Toby's Auto Mechanic Information Management System **** MAIN MENU 1. Print Customer Database 2. Add Customer 3. Add Vehicle 4. Remove Customer 5. Remove Vehicle 6. Print Mechanics 0. Exit Enter your selection: 4 Customer ID: 1000 Press enter to continue...
**** Toby's Auto Mechanic Information Management System **** MAIN MENU
1. Print Customer Database 2. Add Customer 3. Add Vehicle 4. Remove Customer 5. Remove Vehicle 6. Print Mechanics 0. Exit Enter your selection: 4 Customer ID: 1001 Press enter to continue...
**** Toby's Auto Mechanic Information Management System **** MAIN MENU 1. Print Customer Database 2. Add Customer 3. Add Vehicle 4. Remove Customer 5. Remove Vehicle 6. Print Mechanics 0. Exit Enter your selection: 4 Customer ID: 1002 Press enter to continue...
**** Toby's Auto Mechanic Information Management System **** MAIN MENU
1. Print Customer Database 2. Add Customer 3. Add Vehicle 4. Remove Customer 5. Remove Vehicle 6. Print Mechanics 0. Exit Enter your selection: 4 Customer ID: 1003 Press enter to continue...
**** Toby's Auto Mechanic Information Management System **** MAIN MENU 1. Print Customer Database 2. Add Customer 3. Add Vehicle 4. Remove Customer 5. Remove Vehicle 6. Print Mechanics 0. Exit Enter your selection: 4 Customer ID: 1004 Press enter to continue...
**** Toby's Auto Mechanic Information Management System **** MAIN MENU
1. Print Customer Database 2. Add Customer 3. Add Vehicle 4. Remove Customer 5. Remove Vehicle 6. Print Mechanics 0. Exit Enter your selection: 1 CUSTOMERS: Customer ID 1005 Name: Victor Vanvalkenburg Address: 425 O'Connor St. Phone Number: (613)432-7622 4 vehicle(s): Black 2016 GM Escalade (40000km) Red 2015 GM Malibu (20000km) Purple 2012 GM Envoy (60000km) Orange 2012 GM Trailblazer (90000km)
Press enter to continue...
**** Toby's Auto Mechanic Information Management System **** MAIN MENU 1. Print Customer Database 2. Add Customer 3. Add Vehicle 4. Remove Customer 5. Remove Vehicle
6. Print Mechanics 0. Exit Enter your selection: 5 Customer ID: 1005 Vehicle (0 - 3): 4 Invalid choice. Press enter to continue...
**** Toby's Auto Mechanic Information Management System **** MAIN MENU 1. Print Customer Database 2. Add Customer 3. Add Vehicle 4. Remove Customer 5. Remove Vehicle 6. Print Mechanics 0. Exit Enter your selection: 5 Customer ID: 1005 Vehicle (0 - 3): 3 Press enter to continue...
**** Toby's Auto Mechanic Information Management System **** MAIN MENU 1. Print Customer Database 2. Add Customer
3. Add Vehicle 4. Remove Customer 5. Remove Vehicle 6. Print Mechanics 0. Exit Enter your selection: 1 CUSTOMERS: Customer ID 1005 Name: Victor Vanvalkenburg Address: 425 O'Connor St. Phone Number: (613)432-7622 3 vehicle(s): Black 2016 GM Escalade (40000km) Red 2015 GM Malibu (20000km) Purple 2012 GM Envoy (60000km)
Press enter to continue...
**** Toby's Auto Mechanic Information Management System **** MAIN MENU 1. Print Customer Database 2. Add Customer 3. Add Vehicle 4. Remove Customer 5. Remove Vehicle 6. Print Mechanics 0. Exit
Enter your selection: 6 MECHANICS: Employee ID 5000 Name: Bill Taylor Address: 54 Park Place Phone Number: (613)826-9847 Salary: 75000 Employee ID 5001 Name: Steve Bane Address: 77 Oak St. Phone Number: (613)223-4653 Salary: 60000 Employee ID 5002 Name: Jane Smyth Address: 10 5th Ave. Phone Number: (613)762-4678 Salary: 71000
Press enter to continue...
**** Toby's Auto Mechanic Information Management System **** MAIN MENU 1. Print Customer Database 2. Add Customer 3. Add Vehicle 4. Remove Customer 5. Remove Vehicle 6. Print Mechanics 0. Exit Enter your selection: 0