35 points but there are a couple of ways to get extra points.
Due Friday 4PM. Important, Because this is the last day for our class, there is not late turn in. NIU rules say faculty cannot extend assignments into time that should be for finals studying.
But, if you get it in Wednesday midnigth, its worth 10 points more but you have to use it in the summation report after all data read.
If by Thursday midnight, +5.
Assignment has to work right to get points.
Given a file of expense entries of the following form :
,2014-01-06,Food,Aldis,26.76 3048,2014-01-06,Home,Bob's Heating,468 |
Set FS script before processing records. This is also a good place to
set up an array of month names in chronological order. Look at split().
5 points. + 5 points extra if you use split to create the indexed array
of month names.
The 1st entry is a charge on a debit card and the second entry is for
a written check.
Your script should sum the amount paid by check and by debit separately.
Do this by testing if field 1 is empty (debit) or has numbers in it (check).
Use an associative array to sum expenses on each catagory type. Use field
3, the expense catagory, as the key to select the array element and
use field 5, the amount to be accumulated.
Also, provide a summery of monthly totals by testing field 2 for the month.
The month is the middle 2 digits of field2, so -01- is January, -02- is
February, etc. You may use either an associative or indexed array. But
when you print out report, give month name.
Use printf to format nicely.
Most if not all of the output will be done after all data is processed, so
most of the print statements will appear in a END actoin block.
Tricks :
Use split to create an array of month names. If you do them in chronological
order, they will be indexed in that order.
Use substr to parse out the "2 digit" month number. This will yield 01, 02,
etc. which are strings and not nubmers whch is not exactly correct but
close. If you cut carefully, you should get just the 2 digits.
Use sprintf to convert the convert the string number to a real number.
sprintf works like printf except the output can be assigned to a variable
rather than going to the screen.
num = sprintf( "%d", strnum );
If you take the substring you cut from the date field and run it through
sprintf, you will get a real number which can be used to index the monthly
cost accumulation.
You can now use a straight index from 1 to 12 to get both the month's name
from the month name array and the costs for that month from the monthly
cost array with the same index.
What your output should look like. Make it look nice, but you can change
titles and spacing if you want.
If you want to try sorting the catagory section, feel free to do so.
The class lecture section on predefine variables has an example on using
asorti to work with an associative array's keys in ASCII order.
5 points each.
5 points
See below about using substr and sprintf to cut just the month out of the
date field and convert the string to a number.
10 points
10 points - remember left justify labels, right justify with 2 digit decimal.
Checks and debits
Checks : 9478.67
Debits : 9867.22
Expenses by catagory
Insurance 3285.00
Auto 219.23
Utility 5189.52
Health 455.02
Food 7492.91
Gas 110.27
Books 170.90
Computer 37.24
Utiity 157.76
Home 2228.04
Expenses by month
January 2749.11
February 1387.66
March 2054.58
April 1409.43
May 1269.69
June 2413.25
July 2091.96
August 2303.77
September 1269.73
October 1110.81
November 1085.27
December 200.63