//
//  NAME
//    asgn1.cpp
//
//  DESCRIPTION
//    This file contains the functions in the Main module.
//    This module contains the top-level functions of the program.
//    They display a menu, read the user input, and carry out the 
//    user's request.
//


//
//  Include files.
//

#include <iostream.h>
#include "bool.h"
#include "person.h"
#include "plist.h"


//
//  Function prototypes.
//

static void displayMenu();
static void doAdd();
static void doPrint();
static void doEmpty();


//
//  NAME
//    main
//
//  DESCRIPTION
//    This function is the top-level function of the program.  It 
//    displays a menu, reads the user's input, then carries out the 
//    user's request.
//
//  PARAMETERS
//    (none)
//
//  RETURNS
//    0
//

int main() {
   char choice = '1';        //  Menu choice enter by the user.
   bool done   = false;      //  true = we are finished.

   while (!done) {
      displayMenu();
      cin >> choice;

      switch (choice) {
         case '1': doAdd();     break;
         case '2': doPrint();   break;
         case '3': doEmpty();   break;
         case '4': done = true; break;
         }

      }

   return 0;
}


//
//  NAME
//    displayMenu
//
//  DESCRIPTION
//    This function displays the menu to the standard output.
//
//  PARAMETERS
//    (none)
//
//  RETURNS
//    (none)
//

static void displayMenu() {
   cout << endl;
   cout << "1.  Add person" << endl;
   cout << "2.  Print list"  << endl;
   cout << "3.  Empty list"  << endl;
   cout << "4.  Quit"        << endl;
   cout << endl;
   cout << "> ";
   return;
}


//
//  NAME
//    doAdd
//
//  DESCRIPTION
//    This function reads a person from the standard input stream
//    then adds then person to the list of people.
//
//  PARAMETERS
//    (none)
//
//  RETURNS
//    (none)
//

static void doAdd() {
   person p;

   readPerson(p);
   addToEnd(p);
   return;
}


//
//  NAME
//    doPrint
//
//  DESCRIPTION
//    This function prints the list of people to the standard output
//    stream.  It loops through the list, retrieving and printing each 
//    person.  After all people in the list have been printed, it 
//    prints the number of people in the list.
//
//  PARAMETERS
//    (none)
//
//  RETURNS
//    (none)
//

static void doPrint() {
   person p;
   int    count = 0;
   bool   done  = false;

   done = !getFirst(p);
   while (!done) {
      printPerson(p);
      count++;
      done = !getNext(p);
      }

   cout << "There are " << count << " people in the list." << endl;
   return;
}


//
//  NAME
//    doEmpty
//
//  DESCRIPTION
//    This function empties the list of people.
//
//  PARAMETERS
//    (none)
//
//  RETURNS
//    (none)
//

static void doEmpty() {
   clearList();
   return;
}


//
//  End of file.
//