Topical Information

This lab should provide you with practice in file handling, stream formatting, and some string manipulation. Classes might come in handy, too.

Program Information

Write a program that reads a list of enrollments from a file and prints a class roster for the teacher. Make the class roster line up as neatly as you can and still fit on the screen.

You can choose the actual values to use for your data. Make sure to do enough sets of data to well test your program! (Empty data set, normal data set, data with large values, data with short values, etc.)

Also, your program can't know ahead of time how many people are enrolled in the class...

Don't forget to read the file's name from the user and protect your program against any errors that may occur during the opening of the file.

Try to use functions to break up the program into more manageable pieces.


As an example, you might have the data file contain:

# name
# student number
# address1
# address2
# phone number
# major
Jason James
100400299
400 Maple Dr
Westfalia, HI  66554
555/555-1122
Computer Science
Faruk Ahmed
111222333
1200 West Jones Ave
Slimsville, PQ  22221
332-4546
Medeaval French Poetry
Sean Ramirez
200020020
10000 Snapple Lane
Fritter, HO  44331
1-444/411-4414
Underwater Basket Weaving
Happy Gilmore
313141455

Simonton, SZ  11246

Yellow Tail Migratory Patterns

(Note how Happy doesn't give out his address or phone number.)

And the program interaction might look something like (the parts in this color are typed by the user):

$ ./enroll.out

                 Welcome to the Roster Generator Program!!!

Please enter the name of your names file:  bob.dat

I'm sorry, I could not open 'bob.dat'.  Please enter another name:
csc442

File 'csc442' opened successfully!

 Name           | Major              | Phone #       | Town
----------------+--------------------+---------------+-------------------
Jason James     | Computer Science   | 555/555-1122  | Westfalia, HI  665
Faruk Ahmed     | Medeaval French Po | 332-4546      | Slimsville, PQ  22
Sean Ramirez    | Underwater Basket  | 1-444/411-441 | Fritter, HO  44331
Happy Gilmore   | Yellow Tail Migrat |               | Simonton, SZ  1124

 Total Enrollment:  4

Thank you for using the RGP!!

Endeavor to have a gyroscopic day!

$

(Note that we don't use all of the available data in our table -- on purpose!)

Don't forget about the occasion when there are no enrolled students in the file at all!

Thought Provoking Questions

  1. How do you handle not knowing how much data is in the file? What kind of loop do you use to process the file? (Hmm...maybe those two are related..?)

  2. What do you do if there are no students in the file?

  3. How can you skip/ignore those comments at the top of the data file?

  4. When reading in the data, which reading method should you use: setw or getline? (Hint: Is the data grouped by words or does it contain spaces? Especially, is any of the data not there -- i.e. completely blank?)

  5. How can you get past the parts of the data you don't want? How can you print the last piece of data second?

  6. How can you get the columns to line up exactly as you want them to?

  7. How can you print the line of '---+---' easily with stream formatting?

  8. How can you chop off the data value to fit inside your column? (Hint: You are trying to get a STRing to be a certaiN length... perhaps you could get a CoPY of it that's just that long?)

This assignment is (Level 2).

Options