• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 271
  • Last Modified:

Question in reading a file and writing a report. (File I/O)

My instructor give me this problem, but I have no idea how to start it...
Can someone give me a big picture or outline on how to solve it?
THX!

Read in the input file below and produce the report shown.

Input file
John,Doe,123456789,20,21,22,23,16,19,16,50,75
Francisco,Washington,987654321,10,0,20,13,18,19,16,30,70
Tom,Nguyen,111111111,18,23,24,25,17,22,20,38,90
Victoria,Black,333333333,22,21,22,21,20,22,21,45,64
Sally,Seinfield,444444444,17,12,19,23,24,12,11,34,94
Sylvester,De La Rosa,555555555,25,25,24,20,25,25,21,44,80
George,O'Neill,666666666,21,12,3,14,21,14,17,45,99
Sylvia,Smart,777777777,20,21,22,23,24,20,25,44,78
Judy,Yang,888888888,16,19,22,24,25,20,25,45,100
Charles,Black,222222222,20,21,22,22,21,25,16,40,86

                            Class Grades Report

Student Name          --- SSN ---  ---- Lab Grades ----  Mid  Fin  Pts   Perct  G
--------------------  -----------  -- -- -- -- -- -- --  ---  ---  ---   -----  -
Doe, John             123-45-6789  20 21 22 23 16 19 16   50   75  246   82.0%  B
Washington, Francisc  987-65-4321  10  0 20 13 18 19 16   30   70  196   65.3%  D
Nguyen, Tom           111-11-1111  18 23 24 25 17 22 20   38   90  260   86.7%  B
Black, Victoria       333-33-3333  22 21 22 21 20 22 21   45   64  238   79.3%  C
Seinfield, Sally      444-44-4444  17 12 19 23 24 12 11   34   94  234   78.0%  C
De La Rosa, Sylveste  555-55-5555  25 25 24 20 25 25 21   44   80  269   89.7%  B
O'Neill, George       666-66-6666  21 12  3 14 21 14 17   45   99  243   81.0%  B
Smart, Sylvia         777-77-7777  20 21 22 23 24 20 25   44   78  257   85.7%  B
Yang, Judy            888-88-8888  16 19 22 24 25 20 25   45  100  280   93.3%  A
Black, Charles        222-22-2222  20 21 22 22 21 25 16   40   86  253   84.3%  B

•     Use C++ input/output techniques and file I/O, no stdio.  You should declare one ifstream and one ofstream object.
•     Create at least 3 classes:
1.     Name consists of a first and last name.
2.     StudentInfo consists of a Name, SSN, 7 lab grades, a midterm, final, and whatever else you want.
3.     Class consists of an array of StudentInfo or an array of StudentInfo pointers
•     The rules for calculating points and grades are exactly like the 1st assignment or what was stated on the course syllabus.  Remember to discard the lowest lab grade, but not the last one.
•     Use the same input file shown.
•     Produce exactly the report, with the same spacing, formatting and text.  Turn in a copy of the report file along with your program listing.
•     If you are unsure of any program detail, ask the instructor for clarification.

1.     Sort the report by Name (major sort by last name, minor sort by first name)
2.     Handle a missing lab score instead of a 0.  Use this record for Francisco Washington: Francisco,Washington,987654321,10,,20,13,18,19,16,60,140
3.     Change the lab grades in the input file to octal, but print them out as hexadecimal.
 
0
naturechan
Asked:
naturechan
2 Solutions
 
Mayank SAssociate Director - Product EngineeringCommented:
Ya, we can help you out but that's by far too much of work! As for the basics:

class Name
{
  char fname[20] ; // private by default
  char lname[20] ;

// define constructors and other public member functions

} ; // class definition over

class StudentInfo
{
  Name name ;
  char ssn[12] ;
  int grades[7] ;
  int midterm ;
  int final ;
  int points ;
  float perc ;
  char grade ;

// define constructors and other public member functions

} ; // class definition over

class ClassOfStudents
{
  StudentInfo array[60] ;

// define constructors and other public member functions

} ; // class definition over


Thats's to help you get started. As for using file I/O, you can use ifstream objects to read from a file as:

ifstream infile ( "filename" ) ;
char str[80] ;

while ( ! infile.eof () )
{
  infile.getline ( str, 80 ) ; // this will read one string from the file into 'str'

// Now, you can separate the fields by delimiting them at the commas using strtok () and storing them infname[], lname[], etc

} // end while

Sameway, for writing to a file, use ofstream:

ofstream outfile ( "file" ) ;

while ( <whatever-condition> )
{
  outfile << str << endl ; // write the string 'str' to the file
..
..

} // end while


Hope that helps!

Mayank.
0
 
SalteCommented:
This problem sounds like an obvious perl problem, so I suggest you should use perl.

What? You have to use C++, it's homework?

well, we can't help you with homework here.

We can help you with specific questions.

You esentially want to read a line, format it and print it out.

I don't see any sorting involved so you don't actually have to store the file's data in your program, just input an item, print it out in the proper format and then read the next item print it out, change to new line when it is end of line of the current item etc.

The input seem to be comma separated values so strchr(str,',') is probably the function you should use to locate the next ',', when this funciton return NULL pointer you have a string that doesn't contain any more commas and it is the last field.

Each field must be read and parsed on its own and output accordingly. The SSN is particularly easy to parse, it has a fixed number of digits, not sure if you have to check that they really are digits - you should probably complain if they aren't etc once verified you just break it into substrings.

if you have a string like this:

"foobarbaz"

you can format that to "foo-bar-baz" by doing:

char buf[12];
const char * src = "foobarbaz";
memcpy(buf,src,3);
buf[3] = '-';
memcpy(buf+4,src+3,3);
buf[7] = '-';
strcpy(buf+8,src+6);

buf is now "foo-bar-baz"

Note that buf must have room for 12 characters, the 9 characters from source string, the 2 '-' characters inserted and the null byte.

Then all you need to know is how to compute the fields of output that aren't copied from input. These are most likely computed based on selected input fields and so if you remember to store those input fields you probably should be well equipped to compute those values. One advice here is that you don't actually have to store all the input data.

For example if you want to compute an average you don't need to store 15 values to compute the average of 15 values. Storing the sum of them and storing a count of how many values you read is enough. Even if you want to compute the average of 1000 values you only need 2 variables.

Similarly if you ever need to compute the standard deviation you only need to store 3 variables:

one value remember how many values you've read so far.
one value keep the sum of all input values.
one value keep the sum of the square of all input values.

That is all you need to compute stddev.

ALso, the same variable can probably be used for several fields, if you have one value that keep the sum it can be used to compute the average and using the average you also possibly know what grade etc to give.

In any event the instructions appear to be very detailed and clear and you should have no problem doing the assignment based on the info given here and from the instructor.

One point is that you don't tell us the formula for computing the grades and the text doesn't tell that either, but it refers to it. The fact that you didn't provide that as additional info indicate to me that you haven't even read the text you just copy and paste it form the teacher directly to here and that just isn't the way you do your homework.

If you want us to provide help and give you of our time the least you could do is to actually read the assignment text before you copy and paste it to EE. Probably if you also read the agreement with EE You should know that we won't help you with homework and so you probably would have also tried to make an attempt to do something about it and then come to us with specific problems.

Not even bothering to read the assignment and just copy and paste it to EE is really shameful indeed. If you did read the assignment you would know that the formula was missing from the text and was only referenced in it and you would have provided it for us as additional info.

Alf
0
 
tinchosCommented:
No comment has been added lately, so it's time to clean up this TA.
I will leave a recommendation in the Cleanup topic area that this question is:

Split points between mayankeagle & Salte

Please leave any comments here within the next seven days.

PLEASE DO NOT ACCEPT THIS COMMENT AS AN ANSWER!

Tinchos
EE Cleanup Volunteer
0

Featured Post

Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Tackle projects and never again get stuck behind a technical roadblock.
Join Now