COMP282 – Advanced Object-Oriented C Languages
Project Overview
You will create a small interactive program to input details about people, manipulate them, and display them. The project consists of several tasks, which you should tackle in order. Each task builds on the previous one. Do as much as you can and then package your project for submission.
Read through this entire document before you start coding, so you are aware of all the tasks and the overall structure of the program. Your solution should demonstrate your knowledge of C++.
Important: Each task requires you to add extra code. You shouldn’t need to remove any code. Keep the code from previous tasks in your program so we can see it and mark it.
Important: Each part requires you to change the code in the main() function, potentially losing the previous version. Therefore we have provided functions called main_part1(), main_part2() and main_part3(). Place your code for each part inside the relevant function. You can uncomment the relevant lines in the real main() function to run and test each part.
Part 1 (Worth 15%)
Task 1 – Person Class Definition (5%)
Task 2 – Person I/O (5%)
In other words, the name of the person is output followed by the age. When the user types a similar string as input, the first token (up to the space) should be stored as the name, and the second (after the space) as the age. For this task you do not need to do any input validation or error handling. Assume the user will always type the correct format.
Task 3 – Comparison Operators (5%)
Implement comparison operators (<, >, and ==) for the Person class. These should work numerically, based on the ages of the people involved.
Add relevant test code to the main_part1() function. Make sure it’s sufficient to test all the implemented aspects of the Person class from all tasks so far.
Part 2 (Worth 45%)
Task 4 – Adding & Listing People (Fixed Storage) (20%)
Implement this and subsequent tasks in the main_part2() function. Create a loop to present menu items and input user choices. At this stage the menu will only have three options.
Enter Option: Q
You should check that the storage is not full up (ie. already holds 9 people) before allowing a new person to be added. Display an error message if the user tries to add too many people.
Task 5 – Finding the Oldest Person (10%)
Add another menu option so the user can find the oldest person in the data structure. An example run is shown on the next page, assuming there is already some data in the system. You’ve already defined comparison operators for the Person class that should be useful in this task. The algorithm itself is fairly straightforward.
Task 6 – Removing People (15%)
Enter Option: Q
You should make sure that you handle a situation where the user enters an index greater than the number of people in the data structure.
Part 3 (Worth 40%)
Task 7 – Refactored Program (Dynamic Data) (25%)
Implement this and subsequent tasks in the main_part3() function. You might like to copy the code from the previous part as a starting point.
Refactor the program so it uses a dynamic data structure. In other words, there is no limit on the number of people the program could store (assuming unlimited memory). The actual behaviour of the program won’t change from the user’s perspective, but internally it will be very different.
You should use a dynamic data structure from the Standard Template Library, such as a vector. You should also use a corresponding STL iterator. Note that the vector class has an erase() function to remove items. Make full use of functions and algorithms from the STL where appropriate.
Task 8 – Sorting the Data (15%)
Add another menu option to sort the data in ascending order of age. Note that this will only sort the data, not display it. If the user wants to see the sorted list, they can select that option afterwards.
Q. Quit
You should use the full range of functions and algorithms provided by the Standard Template Library, and implement any necessary helper functions, as explained in the relevant lecture material.
How to Submit
Locate your Visual Studio project folder and compress it into a single .zip archive. If you use any other format we won’t be able to extract and mark your work. Rename your archive so it has the module code and your student ID in the filename (eg. comp282_cw1_201212345.zip).
If you want to draw our attention to anything, make a comment in the code itself. We will not read or mark any other documents.
Submit your archive via the link provided on Vital. You can submit multiple attempts. If you submit more than one, we will only look at and mark the most recent.
Marking Descriptors
We draw your attention to the standard Department Grade Descriptors, which are listed in the Student Handbook.
2020-03-25