CMPT 212 Assignment 1

David Simpson (simpson@cs.sfu.ca)
Wed, 17 Sep 1997 15:00:45 -0700 (PDT)


CMPT 212                      Assignment 1
Fall 1997                     ------------


Due date:  Start of class, Wednesday, October 1, 1997.


1. Goal

   - To become familiar with C++ header files and separate compilation.
   - To become familiar with pointers and dynamic memory allocation
       and release.
   - To become familiar with the Borland C++ IDE.

2. Overview

   - The program will be a simple program to store and retrieve 
       information about people.  In future assignments, you will be
       adding more features to the program and using more sophisticated
       programming techniques.

3. Description

   3.1 General
       - The program will be a text-based, menu-driven program.
       - The program will maintain a list of people.  For each person,
          the person's first name, the person's last name, and the person's
          age will be kept.
       - The program will have three functions:
            a.  Add a person to the end of the list.
            b.  Display the list.
            c.  Empty the list.
  
   3.2 Main Menu
      - The menu will look exactly like this:

              1.  Add person
              2.  Print list
              3.  Empty list
              4.  Quit
 
              > _

          (The "_" is the cursor, waiting for the user's input.)
      - When the user enters a choice, the program will carry out
          the operation selected by the user.
      - After the operation has been carried out, the program will
          display the Main Menu and wait for the user to enter 
          another choice.  (If the user selects "Quit", the program
          will quit instead of displaying the Main Menu.)
   
   3.3 "Add Person" Operation
      - When the user presses "1" at the Main Menu, the program
          will prompt the user to enter the person's first name,
          the person's last name, and the person's age.
      - This information about the person will be added to the end
          of the list.

   3.4 "Print List" Operation
      - When the user presses "2" at the Main Menu, the program
          will display the contents of the list on the screen.
      - For each person in the list, the information displayed
          will look exactly like this:
               First name:  <first name> 
               Last name:   <last name>
               Age:         <age>
      - After the list has been displayed (whether the list is
          empty or not), this message will be displayed:
              "There are X people in the list."
          where X is the number of people in the list.

   3.5 "Empty List" Operation
      - When the user presses "3" at the Main Menu, the program
          will remove every person from the list.
   
   3.6 "Quit" Operation
      - When the user presses "4" at the Main Menu, the program
          will exit.

4. Design of the Program

   4.1 Modules
      - The program will consist of three modules: a "Person" module,
          a "Person List" module, and "Main" module.
 
   4.2 The Person Module
      - This module defines the data types and functions to manipulate
          the information about a person.
      - The source files for this module will be called "person.h" and
          "person.cpp".
      - This module contains these publicly-available data types and
          functions:
          a. the structure which holds the information about a 
               person,
          b. a function called "readPerson" which prompts the user
               to enter information about a person, then reads the
               input into a "person" structure,
          c. a function called "printPerson" which displays the
               information about a person on the screen.
           
   4.3 The Person-List Module
      - This module defines the data types and functions to manipulate
          a list of information about people.
      - The source files for this module will be called "plist.h" and
          "plist.cpp".
      - This module contains these publicly-available data types and
          functions:
          a. a function called "addToEnd" which adds a given person
               to the end of the list,
          b. a function called "getFirst" which returns the first 
               person in the list,
          c. a function called "getNext" which returns the next 
               person in the list,
          d. a function called "atEnd" which determines if the end
               of the list has been reached,
          e. a function called "clearList" which removes every person
               from the list.

   4.4 The Main Module
      - The source file for this module will be called "asgn1.cpp".
      - This modules contains the main function of the program.

5. Design Features

   5.1 Error Checking
      - Very little error checking needs to be done.
      - The program does not have to check for out-of-memory errors
          or input errors.
  
   5.2 Given Code
      - The header file (plist.h) for the Person-List module is given 
          to you.  You must use it.  You must not change it.
      - plist.h will be sent out by email, and it will be available
	  in the Assignment Lab and on the class web pages.  

   5.3 List Implementation
      - The elements in the list must be allocated using the memory
          allocation operator "new", and must be released using the
          memory release operator "delete".
      - There will be only one list in the program, and it must not
          be publicly available.  The only functions which are allowed
          to operate on the list are the functions in the Person-List
          module.

   5.4 Constants
      - The maximum length of a person's first name and the maximum
          length of a person's last name must be defined as constants
          in the program.  Each of these constants must be defined in 
          one location so that it can be changed easily.

   5.5 Bool Type
      - If you are using a compiler which does not support the "bool"
          type, you must define the "bool" type yourself in a header
          file called "bool.h".  Your program must be able to compile
          without errors under the Borland C++ in the Assignment Lab. 

   5.6 I/O
      - All input and output must be done using the ">>" and "<<"
          operators.

   5.7 Miscellaneous
      - Use "const" wherever possible.
      - Use referenes ("&") when appropriate.  Pass all structures 
          by reference.
      - Do not define any classes for this assignment.
      - Use the smallest scope and lifetime for every variable, 
          constant, and function. 

6. Source Code Comments
   - Your source code must be fully commented.
   - An example of good commenting style is shown in plist.h.

7. Test Runs
   - Run these two tests of the program:
        a. Start, Print list, Quit. 
        b. Start, Enter 3 people, Print list, Empty List, Print list,
             Enter 1 person, Print List, Quit.

8. What to Hand In
   - Title page containing: 
        a. Course number
        b. Assignment number
        c. Student name
        d. Student number
        e. Student email address
   - Listing of the source code in this order:
        a. main.cpp
        b. person.h
        c. person.cpp
        d. plist.h
        e. plist.cpp
        f. bool.h  (if written -- see Section 5.5 above)
   - Scripts of the two test runs (see Section 7 above).

9. Marking
   - Besides the usual reasons for deducting marks (such as not
       handing in all of your code, or your program doesn't work
       completely), marks may be deducted for these reasons:
         - bad coding style
         - inconsistent coding style
         - bad commenting style
         - code which is difficult to understand
         - poor variable/constant/function names
	 - failing to meet the requirements described here

10. Ammendments to this Assignment
   - Ammendments to this assignment may be emailed or posted on the
       web page.  Ammendments may be made to correct errors here
       or to clarify points.  Check your email regularly.


(end of assignment)