Final Project A small project that pulls together a series of concepts from CSC2430. ATTENTION: This Final Project will be used instead of a Final Exam in CSC XXXXXXXXXXTherefore, there will be no...

1 answer below »
C++ Final



Final Project A small project that pulls together a series of concepts from CSC2430.   ATTENTION: This Final Project will be used instead of a Final Exam in CSC2430- 40094. Therefore, there will be no final exam, only this final project. Be sure to submit your code to this Canvas Assignment by the due date deadline. No project submissions can be accepted after the deadline (the end of the scheduled Final Exam period). Only your last submission will be graded, so you can submit to this assignment multiple times if you would like.   Assignment Instructions [Here is an MSWord doc version of the instructions, in case you would like to print them out and check things off as you do them: Final Project CSC2430 S21.docx   ] 1. Model the following data in C++: data_v1.csv A. Be sure to create an effective and efficient class structure for the data. This will be part of your grade. The grading rubric is below. B. Take note that the reports have some internal structure and behavior as well. Create an effective and efficient object hierarchy for your reports. C. DESIGN NOTES: I. IMPORTANT: Give this first step some serious, deep thought before you jump into writing code. 1. Draw out all your objects. You might want to use UML; it's powerful and compact. Use whatever works for you, but draw it out and then use your diagrams as you are writing your code. 2. List all your instance variables, methods, operators, comparators, and iterators. 3. Decide what should be private, public or protected? 4. Think about the constructors, setters, and getters you will need. Will you overload any of them? Will you override any methods? 5. Employ multiple inheritances, overloading and overriding, as appropriate. 6. Are there any virtual functions? Any pure virtual functions? 7. I will be using different datasets to grade your project, so be thinking about general coding concerns and expected edge cases. For example, what does your code do with an empty file, a non-existent file, a file with one line, a file where every line is repeated twice. 8. Are there any other important questions to answer at this stage? II. Be sure to reread this first section after you have read through the entire assignment instructions once. III. And then read it once again after you complete your initial design, to make sure you have handled everything in your design for the assignment.   2. Read the data from the CSV file into the internal data structure you have designed. A. DATA NOTES: 1. CSV stands for Comma Separated Values, and it is a very common file format. The only commas in this data file are the commas (delimiters) that separate the different fields (columns) on each record (row) of data. 2. I am supplying everyone with a working piece of code readCSV.cpp that reads CSV files so that no one gets stuck on this early task. It's crude, but it does work on the supplied data file. You may use any of this code in your project, so long as you properly cite it at the end of your main.cpp file. 3. Use any ADT containers you would like to manage the data. I would expect to see at least one. 4. Handle problems in the input data via exceptions. The supplied dataset will include the following errors, and there may be others: I. Missing field value(s), aka incomplete data – report a warning on input, then ignore this row. (Missing data will appear as two or more consecutive commas on one line (row) in the CSV file.) II. Duplicate rows - report a warning on input, then ignore these as well. 5. You might want to get things working first without handling the input exceptions (try-catch-throw). Partial credit will be awarded in that case. But note that the reports with incorrect data will be wrong. GIGO   3. Create the following 3 data reports: A. An "Employee Phone Number List" Report that lists: ID, FirstName, LastName, and PhoneNumber. Sorting is optional. B. An "Input Data Quality Report" that lists all the data, in the order it was input. It follows the input data with 3 error sections that describe the data quality problems that may have occurred. You might want to do this report after everything else is working. 1. While listing the data that was read, print a single line with a single "*" (asterisk) to indicate when there was a problem with a row of input data. You can include a description of the problem after the asterisk. 2. At the end of the "Input Data Quality Report", provide 3 "Data Quality Exceptions Sections": 1. A list of any "Duplicates" (duplicates should be ignored as data). 1. Records are considered duplicates if the ID is duplicated. 2. List each duplicated original input line in this section. 3. Summarize this section with the "Total Count of Duplicate Records". 2. A list of any "Incomplete Records" (these should be ignored as data, and not included in the other report). 1. Records are considered incomplete if any field is missing a value. 2. Print each incomplete record by printing the entire original input line in this section. 3. Summarize this section with the "Total Count of Incomplete Records". 3. Finally, in an " Exceptions Section Summary", list the "Total Error Count" (the sum of 1 and 2 above), and "Total Good Records Count". 3. This "Input Data Quality Report" report can be requested at any time by the user. (See #6 below.) 4. Be sure to include a data header row in the appropriate places in this multi-part report. C. For the 3rd report, design your own report that takes advantage of your object-oriented design. D. REPORT NOTES: 1. All reports should have: 1. A Title, 2. A header row (column names), 3. Followed by all the report data. 4. At the end of every report, you should print a message indicating how many "Total Rows" were in the report. Do not count the header in this count. 2. Reports should be written to "cout". 3. You should consider creating a method called InfoToString to create the output strings that will be printed in each report. 1. Use this method to create the strings (lines) that you will print out in all the reports. 2. See if you can also use some form of this method to create the "Column Header" line for each report. 3. Then each PrintReport method just prints out all these strings, each on a separate line, followed by the report line total count. 4. Ideally, the columns of each report will line up vertically. 1. You might choose to get this "columnization" to work after you have everything else working, unless not having things in columns makes your code debugging too difficult. [A hint on how to do this is in the readCVS.cpp example file.] 5. The Employee ID is expected to be unique. You will enforce this by ignoring rows with duplicate IDs. Employee names and locations may not be unique. 6. IMPORTANT: CLion has a default 120 character limit on output. See the "Removing CLion's 120 character output limit" section below on how you can remove that limit so your reports will display properly.   4. Create the following 3 analytical reports: 1. An "Employee Cluster Report" shows the number of employees living in each ZipCode. The report lists the ZipCode, City, State, and EmployeeCount. 1. List each ZipCode only once. 2. Sorting by ZipCode is optional. 3. This report might be used to help decide where to build the next company office building. 2. An "Employee Pay Raise Report" shows: EmployeeName, Salary, NewSalary, and RaiseAmount, where each employee gets a 3% raise. 1. Write a CalculateEmployeeRaise method that takes one double argument, the percentRaise. Use it to give each employee a raise. 2. Note that NewSalary is a data element not in the original data file. 3. Sorting the report by the RaiseAmount is optional. 4. Be sure to include the employee's full name in the report. 3. An "Employee Regional Raises Report", showing the total of the raises by ZipCode, together with the average of the raises for that zipcode. Sorting is optional.   5. Create 2 Unit Tests in a simple Test Harness. 1. Test01: Test that you get the correct number of rows printed in one of your reports. Provide a small test dataset (in the code), create the objects that would be created if this data had been read in, and then check that the resulting total number of rows that would be printed is correct. Return an appropriate value to the test harness. 2. Test02: Test the analysis of one of your analytic reports by providing a small test dataset (in the code), build your objects from it, generate the report, and check the result of the analysis. The "Employee Cluster Report" or the "Employee Regional Raises Report" are good candidates for this test, as they each have a summary number you can check in your test. Return an appropriate value to the test harness. 3. TEST NOTES: 1. Creating good test cases involves both good coding design and good test data choices. 2. Ideally, these test cases should not read from files. They should have all their data in the code. But it's ok to implement your test cases that read from specific test data files. 3. It is the test harness that executes the tests. The test harness then takes the result from a test case being called and prints out an appropriate test result message, based on the result of the test. 4. Add any additional test cases that you think are appropriate.   6. Finally, orchestrate everything with a main menu loop that asks the user what they would like to do. 1. Determine the input file name to use: 1. Provide an option "F" that will read the file: data_v1.csv 2. Provide an option "I" for the user to type in the filename to be read. You might find this useful in your own testing. 2. Determine the user's desired processing: 1. Allows the user to select any report, any test case, or eXit. 2. Provide a 'Run All Reports and Tests' option "A" that runs all
Answered 12 days AfterMay 24, 2021

Answer To: Final Project A small project that pulls together a series of concepts from CSC2430. ATTENTION: This...

Rushendra answered on Jun 06 2021
140 Votes
Employee_reports/.vscode/settings.json
{
"files.associations": {
"string": "cpp",
"memory": "cpp",
"istream"
: "cpp",
"functional": "cpp",
"array": "cpp",
"*.tcc": "cpp",
"ranges": "cpp",
"tuple": "cpp",
"utility": "cpp",
"iostream": "cpp",
"atomic": "cpp",
"bit": "cpp",
"cctype": "cpp",
"clocale": "cpp",
"cmath": "cpp",
"compare": "cpp",
"concepts": "cpp",
"cstdarg": "cpp",
"cstddef": "cpp",
"cstdint": "cpp",
"cstdio": "cpp",
"cstdlib": "cpp",
"cwchar": "cpp",
"cwctype": "cpp",
"deque": "cpp",
"map": "cpp",
"set": "cpp",
"unordered_map": "cpp",
"vector": "cpp",
"exception": "cpp",
"algorithm": "cpp",
"iterator": "cpp",
"memory_resource": "cpp",
"numeric": "cpp",
"optional": "cpp",
"random": "cpp",
"string_view": "cpp",
"system_error": "cpp",
"type_traits": "cpp",
"fstream": "cpp",
"initializer_list": "cpp",
"iosfwd": "cpp",
"limits": "cpp",
"new": "cpp",
"ostream": "cpp",
"sstream": "cpp",
"stdexcept": "cpp",
"streambuf": "cpp",
"typeinfo": "cpp"
...
SOLUTION.PDF

Answer To This Question Is Available To Download

Related Questions & Answers

More Questions »

Submit New Assignment

Copy and Paste Your Assignment Here