COP 2224 C++ Programming
Design Project #2

(Due Tuesday, October 24 2000, by the start of Class)


To practice object oriented design, using multiple classes and objects, and basic design techniques such as encapsulation, abstraction, and inheritance.  To practice standard design techniques, such as UML, on a medium sized project.  This is an extra-credit project.


The HCC Student registration system needs some redesign.  In this project you will design a student registration system for a school similar to HCC.  The program will be limited in that there will be no graphic user interface, and no database connectivity.  Instead, all relevant information will be kept in plain old files.  A simple menu based user interface will be used.  However an HTML web browser interface may be used instead. 

Courses each have a description, a name (prefix and number, e.g., "COP 2224"), a number of credits, and a list of prerequisite courses.  Students each have a name, a student ID number, a phone number, and a list of courses they've previously taken.  The instructors each have a name, an office location, a phone number, and a list of the classes (not courses) they're teaching currently.  Beside the more obvious constraints on instructors (such as no instructor can teach two classes at the same time), each instructor has a maximum load of classes she can teach in any one semester. 

Before registration begins, the administration decides which courses to offer for the upcoming term and produces a schedule of classes.  Each class (sometime referred to as a section) contains a unique reference number, the corresponding course name, location (campus code, building code, and room number), instructor (there must be some way to say "tba" for to be announced when you don't know who is going to teach a class), an integer code which tells when the course meets, and the maximum and current enrollment.  (Note that the maximum enrollment for most classes depends only on which room the course is in, but as there are many exceptions so we will ignore this and just have an assigned maximum.)

There must be some way for administrators to add and remove classes from the schedule of classes.  When adding a class (really a section of a course), the administrator must specify when and where the class meets, and which instructor will teach it.

For each student, we need the ability to add a student or drop a student from any class.  The system must not allow students to register for classes that they don't have the prerequisites for (unlike the current HCC system!), or if the student is already enrolled in that (or a different) section of the same course, or if the class is full, or if the student is enrolled in another class that meets at the same time.  Students can take a class for credit, or they can audit the course.

Finally, we need to be able to print out some reports.  For each student we should be able to print out a transcript of courses taken in the past, and a current class schedule (assuming the student is currently enrolled in at least one class).

For each instructor we need to be able to print a weekly schedule.

For each class we should be able to print a class roll.

It should be possible to print out the current schedule of classes too.

Design Requirements:

To be turned in:

A printout of your design using the UML notation described in the text.

Additional Notes:

Both students and instructors have a lot in common.  It may make sense to use inheritance to express this.

In many parts of this project, you will need to deal with lists of objects.  The standard C++ library now comes with many different types of list containers you can use: vectors, maps, lists, etc.  You can create and use your own link lists or arrays, but you should think about using the standard ones first.

Saving (and later restoring) objects to disk is called serialization.  Being able to do this well, across different operating systems, different platforms, and possibly different languages, is a very hard problem!  There is a standard for this process, which is called CORBA.  This middleware software allows you to create objects that can be serialized and later used in different applications.  (But it is much, much easier to just save your data to "flat" files or to a database!)  A good reference for design and implementation of file formats is File Structures: An Object-Oriented Approach with C++ by Michael J. Folk, Bill Zoellick, and Greg Riccardi.  ©1998 by Addison Wesley Longman, Inc.  ISBN: 0-201-87401-6.

Send comments and email to the WebMaster.