// FILE: listtest.cxx // An interactive test program for the new List ADT. #include // Provides toupper #include // Provides cout and cin #include // Provides EXIT_SUCCESS and size_t #include "list1.h" // With Item defined as double // PROTOTYPES for functions used by this test program: void print_menu( ); // Postcondition: A menu of choices for this program has been written to cout. char get_user_command( ); // Postcondition: The user has been prompted to enter a one character command. // The next character has been read (skipping blanks and newline characters), // and this character has been returned. void show_list(List display); // Postcondition: The items on display have been printed to cout (one per line). double get_number( ); // Postcondition: The user has been prompted to enter a real number. The // number has been read, echoed to the screen, and returned by the function. int main( ) { List test; // A List that we'll perform tests on char choice; // A command character entered by the user cout << "I have initialized an empty List of real numbers." << endl; do { print_menu( ); choice = toupper(get_user_command( )); switch (choice) { case '!': test.start( ); break; case '+': test.advance( ); break; case '?': if (test.is_item( )) cout << "There is an item." << endl; else cout << "There is no current item." << endl; break; case 'C': if (test.is_item( )) cout << "Current item is: " << test.current( ) << endl; else cout << "There is no current item." << endl; break; case 'P': show_list(test); break; case 'S': cout << "The List size is " << test.size( ) << endl; break; case 'I': test.insert(get_number( )); break; case 'A': test.attach(get_number( )); break; case 'R': test.remove_current( ); cout << "The current item has been removed" << endl; break; case 'Q': cout << "Ridicule is the best test of truth." << endl; break; default: cout << choice << " is invalid. Sorry." << endl; } } while (cin && (choice != 'Q')); if (!cin) cerr << "Bad input character." << endl; return EXIT_SUCCESS; } void print_menu( ) // Library facilities used: iostream.h { cout << endl; // Print blank line before the menu cout << "The following choices are available: " << endl; cout << " ! Activate the start( ) function" << endl; cout << " + Activate the advance( ) function" << endl; cout << " ? Print the result from the is_item( ) function" << endl; cout << " C Print the result from the current( ) function" << endl; cout << " P Print a copy of the entire List" << endl; cout << " S Print the result from the size( ) function" << endl; cout << " I Insert a new number with the insert(...) function" << endl; cout << " A Attach a new number with the attach(...) function" << endl; cout << " R Activate the remove_current( ) function" << endl; cout << " Q Quit this test program" << endl; } char get_user_command( ) // Library facilities used: iostream.h { char command; cout << "Enter choice: "; cin >> command; // Input of characters skips blanks and newline character return command; } void show_list(List display) // Library facilities used: iostream.h { for (display.start( ); display.is_item( ); display.advance( )) cout << display.current( ) << endl; } double get_number( ) // Library facilities used: iostream.h { double result; cout << "Please enter a real number for the List: "; cin >> result; cout << result << " has been read." << endl; return result; }