Assignment 3 Solutions
Solution to testDeque.cc code:
/**************************************************************
* Filename: testDeque.cc
* Author: Constance Royden
* Date Created: 2/20/04
* Course: CSCI262
* Assignment: Homework 3
* Purpose: Test deque functions
**************************************************************/
#include <ctype.h>
#include "deque.h"
#include <iostream.h>
char get_command();
void help();
bool do_command(char, Deque &);
int main( )
/* Post: Accepts commands from user as a menu-driven demonstration program
for the class deque.
Uses: The class deque and the functions introduction, get_command,
and do_command. */
{
Deque test_deque;
help( );
while (do_command(get_command( ), test_deque));
} // end main( )
void help()
/*
Pre: None
Post: A help screen for the program is printed, giving the meaning of each
command that the user may enter.
*/
{
cout << endl
<< "This program allows the user to enter one command" << endl
<< "(but only one)on each input line." << endl
<< "For example, if the command S is entered, then" << endl
<< "the program will serve the front of the queue." << endl
<< endl
<< " The valid commands are:" << endl
<< "A - Append the next input character to the rear." << endl
<< "P - Push the next input character to the front." << endl
<< "S - Serve the front of the queue" << endl
<< "X - Extract the rear of the queue" << endl
<< "R - Retrieve and print the front entry." << endl
<< "W - Retrieve and write the rear entry." << endl
<< "H - This help screen" << endl
<< "Q - Quit" << endl
<< "Press <Enter> to continue." << flush;
char c;
do {
cin.get(c);
} while (c != '\n');
} //end help( )
bool do_command(char c, Deque &test_queue)
/*
Pre: c represents a valid command.
Post: Performs the given command c on the Deque test_queue.
Returns false if c == ºqº, otherwise returns true.
Uses: The class Deque.
*/
{
bool continue_input = true;
Queue_entry x;
switch (c){
case 'w':
if (test_queue.retrieve_rear(x)== underflow)
cout << "Deque is empty." << endl << endl;
else
cout << "The last entry is: " << x
<< endl << endl;
break;
case 'r':
if (test_queue.retrieve_front(x)== underflow)
cout << "Deque is empty." << endl << endl;
else
cout << "The first entry is: " << x
<< endl << endl;
break;
case 'q':
cout << "Deque demonstration finished." << endl;
continue_input = false;
break;
case 'x':
if (test_queue.serve_rear()== underflow)
cout << "Serve failed, the Deque is empty." << endl
<< endl;
else
cout << "Successfully served the rear of the deque." << endl << endl;
break;
case 's':
if (test_queue.serve_front()== underflow)
cout << "Serve failed, the deque is empty." << endl
<< endl;
else
cout << "Successfully served the front of the deque. " << endl << endl;
break;
case 'p':
cout << "Enter new key to insert:" << flush;
cin >> x;
if (test_queue.append_front(x)!= success)
cout << "Operation failed: because the deque is full" << endl << endl;
else
cout << x << " appended to front of deque." << endl << endl;
break;
case 'a':
cout << "Enter new key to insert:" << flush;
cin >> x;
if (test_queue.append_rear(x)!= success)
cout << "Operation failed: because the deque is full" << endl << endl;
else
cout << x << " appended to rear of deque. " << endl << endl;
break;
case 'h':
help();
break;
}
return continue_input;
} //end do_command()
char get_command()
/*
Post: Gets a valid command from the user and,
after converting it to lower case if necessary,
returns it.
*/
{
char c;
cout << "Select command and press <Enter>:";
cin >> c;
c = tolower(c);
while ((c != 'a') && (c != 'p') && (c != 's') && (c != 'x') &&
(c != 'r') && (c != 'w') && (c != 'h') && (c != 'q')) {
cout << "Please enter a valid command or H for help:" << endl;
cin >> c;
c = tolower(c);
}
return c;
} //end get_command
Home | | Syllabus | | Assignments | | Lecture Notes