COMP 2404 – Final Project
For this project, you will design and implement a C++ program that generates a set of reports based on
data from Canada’s National Graduate Survey (NGS) from the years 2000-2015. Your code will be correctly
separated into object design categories, and it will meet every principle of good software engineering that we
have covered in class.
2. Data Set and Reports
You will use the NGS data provided for you in the grad.dat file posted in cuLearn. This file contains data
on the number of post-secondary graduates, their gender, what degree they earned, and how many of them
were employed after graduation, for each province in Canada, and in Canada as a whole, in the years 2000,
2005, 2010, and 2015.
Each record (i.e. each line) in the data file gives us employment statistics for a given year, region, degree, and
gender (including the combination of data for “All” genders). That record tells us how many post-secondary
students who self-identified as that gender, who were living in that region, and who graduated that year, with
that degree, responded to the survey, and how many of those respondents were employed after graduation.
The records are formatted as follows: <year region degree gender numEmployed numGrads>
where year indicates a graduation year; region indicates a region (either a province, or CAN for all of Canada)
where graduates lived; degree specifies a post-secondary degree, as either College, Bachelor’s, Master’s, or
Doctorate; gender tells us whether the numbers in that record are for all genders, or males only, or females
only; numGrads tells us the total number of post-secondary graduates of that gender who graduated with that
degree, during that year, and who lived in that region; and numEmployed indicates the subset of that total
number who were employed after graduation.
3. Program Requirements
You will implement a program that reads in the graduate data from the grad.dat file posted in cuLearn, and
you will present the user with a menu of possible reports. When the user selects a report, your program will
compute the statistics required for the report using the graduate data, and print the information to the screen.
Your program will implement the following requirements:
3.1. Report requirements
Your program will allow the user to execute the following reports:
3.1.1. the three (3) reports that are described in section 2, and
3.1.2. two (2) additional reports of your own creation
The reports of your own creation must meet all of the following requirements:
3.1.3. they must represent a significant amount of new logic and new code
3.1.4. they must represent a different way of thinking from the existing reports described in section 2
3.1.5. they cannot be a simple variation of the existing reports
(a) for example, the first report in section 2 produces the employment percentages for all graduates,
by region, by degree; it would not be acceptable to simply do the same for male graduates or
female graduates only, since that would be the same logic as an existing report
3.1.6. they cannot be a simple inversion of the rows and columns of an existing report
3.1.7. your new reports must be thoroughly described in your README file; if your new reports are not
explained there, the corresponding code will not be graded
3.2. Design requirements
3.2.1. The program will be separated into objects that fit into the control, view, and entity object design
categories. You will have one view object, many entity objects, one primary control object that is in
charge of the program control flow, and several additional control objects that are responsible for
3.2.2. You may use the STL vector container anywhere you wish in this program. However, the use of STL
algorithms is prohibited.
3.2.3. You will design a class to hold each record read in from the data file. The data members must be
declared with the correct data type. For example, do not use strings to hold numeric values.
3.2.4. All entity and control objects must be dynamically allocated, with the exception of the primary control
object. All dynamically allocated memory must be explicitly deallocated when no longer in use. This
deallocation must be implemented manually. Do not use C++11 techniques like shared pointers.
3.3. User I/O requirements
3.3.1. Only the view object will read input from the user and print output to the screen. Because the view
object should never contain entity or control knowledge, all output must be formatted by the entity
and control objects as large strings. The primary control object will then print out these large strings
by calling a print string function on the view object.
You may use the stringstream class to format data into strings. You can refer to the simple coding
example found here.
3.3.2. A menu will be presented to the end user. The user will select an option, and the program will
compute and generate the statistics for the corresponding report. Once the report statistics have
been printed to the screen, the menu will be displayed again, until the user chooses to exit.