Data file needed for assignment: cb1data.txt. Data file is also located on remote server at: ~dklick/examples/cb1data.txt
This assignment involves the creation of a level break report. The data file provided has already been put into the proper sorted order. The format of each record is as follows:
Your task is to read the records in from the data file (cb1data.txt) and produce a report to a file named cbreport.txt.
Although the following technique is "brittle", you may read the data from
the input file using the standard input extraction operator. For example,
if you wanted to read one whole record in one statement and had the
appropriate variables declared, you could write:
infile >> dept >> empID >> month >> day >> year >> hours;
A "priming read" is well-suited for this type of algorithm. A priming read makes a read from input just before a while loop starts, and then has the same read just before the end of the loop body. That type of read works very well when reading from a text file and checking for end-of-file. Instead of trying to read all of the fields from a single record though, it is better to just use the first field for the priming read, and read the remainder of the fields for that record as the first line within the loop. Example:
infile >> dept; while (infile) { infile >> empID >> month >> day >> year >> hours; ... other processing code ... infile >> dept; }
The report you
produce should match the sample report exactly, including ALL
formatting and spacing. A sample of the report is available on the remote server
at: ~dklick/examples/cbreport250.txt. You can compare your output file to the reference
outout file using the following command:
diff report.txt ~dklick/examples/cbreport250.txt
That command will display differences between the two files. If there are no
differences, then your report is correct.
You have been given an algorithm to implement. There are some ambiguities to simulate a real life situation - but no errors that the instructor is aware of. You are required to use ostream manipulators (left, right, setw, setprecision, fixed, showpoint, etc.) to get the correct output formatting for this project.
Daily hours worked by Department by Employee Dept EmpID Date Hours IT D4772 1/02/2011 8.25 IT D4772 1/03/2011 7.00 IT D4772 1/05/2011 9.25 IT D4772 1/06/2011 9.00 IT D4772 1/08/2011 7.25 Employee total 40.75 IT F9642 1/04/2011 8.25 IT F9642 1/06/2011 7.25 IT F9642 1/07/2011 5.25 IT F9642 1/08/2011 8.00 Employee total 28.75 IT V1001 1/03/2011 5.25 IT V1001 1/04/2011 8.50 IT V1001 1/05/2011 6.75 IT V1001 1/06/2011 6.75 IT V1001 1/07/2011 8.00 IT V1001 1/08/2011 6.00 Employee total 41.25 Department total 110.75 MGT A0010 1/02/2011 6.50 MGT A0010 1/03/2011 8.25 MGT A0010 1/04/2011 9.25 MGT A0010 1/05/2011 9.75 MGT A0010 1/06/2011 5.50 MGT A0010 1/07/2011 8.75 MGT A0010 1/08/2011 8.75 Employee total 56.75 MGT S0812 1/04/2011 5.25 MGT S0812 1/05/2011 7.75 MGT S0812 1/06/2011 7.25 MGT S0812 1/07/2011 6.00 MGT S0812 1/08/2011 9.50 Employee total 35.75 Department total 92.50 MKT H6554 1/02/2011 9.25 MKT H6554 1/03/2011 8.00 MKT H6554 1/04/2011 5.75 MKT H6554 1/05/2011 8.75 MKT H6554 1/06/2011 8.50 MKT H6554 1/08/2011 6.00 Employee total 46.25 Department total 46.25 MNT E5109 1/02/2011 8.75 MNT E5109 1/03/2011 5.50 MNT E5109 1/04/2011 6.00 MNT E5109 1/06/2011 5.00 MNT E5109 1/08/2011 6.50 Employee total 31.75 Department total 31.75 MSC E4100 1/03/2011 5.75 MSC E4100 1/04/2011 8.75 MSC E4100 1/05/2011 7.25 MSC E4100 1/07/2011 6.50 MSC E4100 1/08/2011 8.75 Employee total 37.00 Department total 37.00 PRD A0132 1/04/2011 9.00 PRD A0132 1/05/2011 8.00 PRD A0132 1/06/2011 8.75 PRD A0132 1/07/2011 9.00 PRD A0132 1/08/2011 5.00 Employee total 39.75 PRD E1231 1/02/2011 6.75 PRD E1231 1/03/2011 8.25 PRD E1231 1/04/2011 6.75 PRD E1231 1/06/2011 8.00 PRD E1231 1/07/2011 5.50 PRD E1231 1/08/2011 7.25 Employee total 42.50 PRD E1250 1/02/2011 9.75 PRD E1250 1/03/2011 7.75 PRD E1250 1/04/2011 7.75 PRD E1250 1/05/2011 7.50 Employee total 32.75 Department total 115.00 SLS L1776 1/02/2011 9.00 SLS L1776 1/03/2011 7.75 SLS L1776 1/04/2011 6.75 SLS L1776 1/06/2011 5.50 SLS L1776 1/08/2011 8.75 Employee total 37.75 SLS M5205 1/02/2011 7.00 SLS M5205 1/03/2011 5.00 SLS M5205 1/04/2011 7.75 SLS M5205 1/05/2011 6.00 SLS M5205 1/06/2011 7.75 SLS M5205 1/07/2011 5.25 SLS M5205 1/08/2011 8.25 Employee total 47.00 Department total 84.75 Total hours worked 518.00 70 records processed
To make life even easier for you, here's the pseudocode for your program:
open input file for sequential access open output (report) file print headings to report file totHours = empHours = deptHours = 0 prevID = prevDept = "$$$" recno = 0 while there are still more records in the input file get the next record from the input file recno = recno + 1 if record's dept is different than prevDept and recno > 1 // employee level break print employee's total hours to output file add empHours to deptHours empHours = 0 // department level break print department's total hours to output file add deptHours to totHours deptHours = 0 otherwise if record's employee id is different than prevID and recno > 1 // employee level break print employee's total hours to output file add empHours to deptHours empHours = 0 print formatted record detail to output file add record's hours to empHours prevID = record's employee id prevDept = record's department close input file // employee level break print employee's total hours to output file add empHours to deptHours empHours = 0 // department level break print department's total hours to output file add deptHours to totHours deptHours = 0 print grand totals to output file print footers to output file close output file end