// FILE: QueueTestt.cpp // PURPOSE: driver for implementation of Queue class in file Queuet.cpp //--------------------------------------------------------------------- // SUPPORTING FILES: Queuet.cpp, Queuet.h // COMPILE COMMAND: g++ (or gxx) QueueTestt.cpp //----------------------------------------------------------------------- #include #include #include #include "Queuet.cpp" struct Student { Student(void); Student(string name2, double gpa2); string name; double gpa; }; Student::Student(void) : name("New record"), gpa(-9.9) {} Student::Student(string name2, double gpa2) : name(name2), gpa(gpa2) {} istream &operator>>(istream &is, Student &student) { cout << "\nEnter student name: "; is >> student.name; cout << "Enter student GPA: "; is >> student.gpa; is.ignore(10, '\n'); return is; } ostream &operator<<(ostream &os, const Student &student) { os << student.name << " " << student.gpa; return os; } void menu(char &); void insertProc(Queue &); void removeProc(Queue &); void removeProc2(Queue &); void destroyProc(Queue &); void assignProc(Queue &); void lengthProc(const Queue &); void testFront(Queue &); void testCopyCon(Queue &); void cls(void); int main() { Queue x; char ch; do { menu(ch); switch( ch ) { case '1': insertProc(x); break; //enqueue case '2': removeProc(x); break; //dequeue(item); case '3': removeProc2(x); break; //dequeue(); case '4': break; //** print case '5': destroyProc(x); break; case '6': testFront(x); break; case '7': lengthProc(x); break; case '8': testCopyCon(x); break; case '9': assignProc(x); break; case '0': return 0; default: break; } // switch cout << "\n\n"; x.print(); cout << "\nPress : "; cin.ignore(80, '\n'); } while (ch != '0'); return 0; } void menu(char &choice) { const int left = 22; const string PAD('\n' + string(left, ' ')); int top = 5; string title("Queue Operations on Queue Class Objects"); cls(); cout << setw(40 + title.length()/2) << title.c_str();; cout << PAD << "----------------------------------"; cout << PAD << "Enqueue an item 1"; cout << PAD << "Dequeue an item 2"; cout << PAD << "Dequeue Queue (disregard item) 3"; cout << PAD << "Print Queue 4"; cout << PAD << "Destroy Queue 5"; cout << PAD << "Test front() member function 6"; cout << PAD << "Length (# of elements) 7"; cout << PAD << "Test copy constructor 8"; cout << PAD << "Test overloaded = operator 9"; cout << PAD << "Quit program 0"; cout << PAD << "----------------------------------"; cout << PAD << " SELECTION==> "; cin.get(choice); cin.ignore(80, '\n'); while ( choice < '0' || choice > '9' ) { cout << PAD << "*** Invalid choice. Try again: "; cin.get(choice); cin.ignore(80, '\n'); }// while } //*** menu void insertProc(Queue &s) { Student data; cin >> data; s.enqueue(data); }//*** insertProc void removeProc(Queue &s) { Student data; bool wasEmpty = s.isEmpty(); s.dequeue(data); if ( !wasEmpty ) cout << "Item dequeued = " << data << endl; }//*** removeProc void removeProc2(Queue &s) { bool wasEmpty = s.isEmpty(); s.dequeue(); if ( !wasEmpty ) cout << "Queue dequeued." << endl; }//*** removeProc2 void testFront(Queue &s) { if ( !s.isEmpty() ) cout << "s.top() = " << s.front() << endl; }//*** testFront void destroyProc(Queue &s) { s.makeEmpty(); }//*** destroyProc void reverseProc2(Queue &s) { cout << "State of s before reverse code: "; s.print(); const int SIZE(s.length()); Student tmp; vector v(SIZE); for (int k = 0; k < SIZE; k++) { s.dequeue(v[k]); } for (int k = 0; k < SIZE; k++) { s.enqueue( v[k] ); } cout << "State of s after reverse code: "; s.print(); }//*** reverseProc2 void lengthProc(const Queue &s) { cout << "\nQueue contains " << s.length() << " elements\n"; }//*** lengthProc void testCopyCon(Queue &Q) { string title("Testing copy constructor"); cls(); cout << setw(40 + title.length()/2) << title.c_str() << endl << endl; Queue q; q.enqueue( Student("Ava", 3.8) ); Q.enqueue( Student("Ava", 3.8) ); q.enqueue( Student("Bob", 2.7) ); Q.enqueue( Student("Bob", 2.7) ); q.enqueue( Student("Cyd", 3.6) ); Q.enqueue( Student("Cyd", 3.6) ); Queue X(q); cout << "Queue S = "; q.print(); cout << "After Queue X(S), X = "; X.print(); q.makeEmpty(); Queue Y(q); cout << "\nQueue S = "; q.print(); cout << "After Queue Y(S), Y = " ; Y.print(); } void assignProc(Queue &dummy) { string title("Testing overloaded operator="); cls(); cout << setw(40 + title.length()/2) << title.c_str() << endl << endl; Queue q; q.enqueue( Student("Ava", 3.8) ); q.enqueue( Student("Bob", 2.7) ); q.enqueue( Student("Cyd", 3.6) ); Queue X; X = q; cout << "Queue Q = "; q.print(); cout << "After X = Q, X = "; X.print(); q.makeEmpty(); X = q; cout << "\nQueue Q = "; q.print(); cout << "After X = Q, X = "; X.print(); q.enqueue( Student("Ava", 3.8) ); q.enqueue( Student("Bob", 2.7) ); q.enqueue( Student("Cyd", 3.6) ); cout << "\nQueue Q = "; q.print(); q = q; cout << "After Q = Q, Q = "; q.print(); }//*** assignProc void cls(void) { for (int k = 0; k < 55; k++) cout << endl; }