PROGRAM 39
// FILE NAME: PROG39.CPP PROGRAMMER NAME: ANTHONY F. ORTIZ // THIS PROGRAM USES A CLASS CALLED LINK LIST. THE MEMBER FUNCTIONS // INITIALIZE THE COUNT AND LINKLIST OBJECT, ENTER OBJECTS FROM THE // KEYBOARD, AND DISPLAY TOTAL, AVERAGE, AND COUNT OF THE OBJECTS. #include "linklist.h" print_menu (); char get_selection (linklist & expenses); pause_program (); int main () { char choice; linklist expenses; do { print_menu (); choice = get_selection (expenses); } while (choice != 'Q'); return 0; } print_menu () { clrscr (); gotoxy (25, 1); cout << "MENU OPTIONS"; gotoxy (30, 3); cout << "E -- ENTER OBJECT"; gotoxy (30, 4); cout << "T -- PRINT COUNT"; gotoxy (30, 5); cout << "Q -- QUIT PROGRAM"; gotoxy (25, 7); cout << "ENTER SELECTION "; return 0; } char get_selection (linklist & expenses) { char choice; cin >> choice; choice = toupper (choice); switch (choice) { case ('E'): { expenses.enteritem (); break; } case ('T'): { expenses.printtotal (); pause_program (); break; } case ('Q'): { clrscr (); break; } } return (choice); } pause_program () { cout << endl << "PRESS ENTER KEY TO CONTINUE ..... "; getch (); return 0; } // FILE NAME: LINKLIST.H // THIS FILE CONTAINS THE DECLARATION OF THE LINKLIST CLASS. #ifndef linklist_h #define linklist_h #include #include #include #include #include typedef float data; struct node { data listdata; node * link; }; class linklist { protected: node * head; int count; public: linklist (); // POST: CONSTRUCTOR, THE LINKLIST OBJECT IS INITIALIZED TO AN EMPTY LIST. ~linklist (); // POST: DESTRUCTOR, THE LINKLIST OBJECT IS DEALLOCATED. void enteritem (); // POST: PROMPTS FOR DATA ITEM FROM THE KEYBOARD TO ENTER INTO THE LIST; // ITEM IS ADDED TO THE BEGINNING OF THE LIST VIA MEMBER FUNCTION // ADD (ITEM). void printtotal (void); // POST: PRINTS THE TOTAL OF ALL CURRENT ENTRIES. ALSO PRINTS THE CURRENT // COUNT AND AVERAGE. void viewlist (void); // POST: DISPLAY CURRENT LIST WITH POSITION NUMBERS 1, 2, 3, ..., COUNT. void changelist (void); // POST: THIS FUNCTION IS TO CALL VIEWLIST AUTOMATICALLY WHEN INVOKED. // USER SHOULD BE ABLE TO 'CANCEL' WITHOUT MAKING ANY CHANGES IF // DESIRED. THERE WILL BE TWO POSSIBLE CHANGES: // A) USER MAY ENTER A NEW ITEM TO REPLACE AN EXISTING ITEM OF THEIR // CHOICE. // B) USER MAY DELETE AN ITEM FROM THE LIST. void add (data item); // POST: ADDS A NODE TO THE HEAD OF THE LIST. void del (); // POST: DELETES THE POINTER TO THE FIRST NODE IN THE LIST. PRESUMES THE // LIST IS NOT EMPTY. void delall (); // POST: DELETES ALL POINTERS TO THE NODES IN THE LIST. USES THE DEL () // FUNCTION. USED BY THE DESTRUCTOR. }; #include "linklist.cpp" #endif // FILE NAME: LINKLIST.CPP // THIS FILE CONTAINS THE IMPLEMENTATION OF THE CLASS LINKLIST. linklist :: linklist () { head = 0; count = 0; cout << "CONSTRUCTOR INVOKED." << endl << endl; cout.setf (ios :: showpoint); cout.setf (ios :: fixed); cout << setprecision (2); } linklist :: ~linklist () { delall (); cout << "DESTRUCTOR INVOKED" << endl << endl; } void linklist :: enteritem (void) { data item; clrscr (); cout << "ENTER A OBJECT. "; cin >> item; add (item); count++; } void linklist :: printtotal (void) { float sum, average; sum = average = 0; clrscr (); for (node * p = head; p != 0; p = p -> link) { sum = sum + p -> listdata; } average = sum / count; cout << "THE TOTAL IS " << sum << ". THE AVERAGE IS " << average; cout << ". THE COUNT IS " << count << "." << endl; } void linklist :: viewlist (void) { int count2 = 1; clrscr (); cout << "HERE ARE ALL THE OBJECTS OF THE LIST: " << endl << endl; for (node * p = head; p != 0; p = p -> link) { cout << "OBJECT " << setw (2) << count2 << ": " << setw (8); cout << p -> listdata << endl; count2++; } } // THIS MEMBER FUNCTION IS STILL UNDER CONSTRUCTION. void linklist :: changelist (void) { char choice, ans; int position, count2; data change; clrscr (); gotoxy (25, 1); cout << "MENU CHOICES"; gotoxy (30, 3); cout << "D -- DELETE AN ITEM"; gotoxy (30, 4); cout << "C -- CHANGE AN ITEM"; gotoxy (25, 6); cout << "ENTER A CHOICE: "; cin >> choice; choice = toupper (choice); if (choice == 'D' || choice == 'C') { clrscr (); do { cout << "ENTER A # FROM 1 .. " << count; cout << " TO CHANGE AN ITEM. "; cin >> position; cout << endl; } while (position < 1 || position > count); } count2 = 1; for (node * p = head; p != 0; p = p -> link) { if (count2 == position) { break; } count2++; } switch (choice) { case ('D'): { clrscr (); cout << "DELETE OBJECT " << position << " "; cout << p -> listdata << " (Y/N)? "; cin >> ans; ans = toupper (ans); if (ans == 'Y') { node * prevptr; if (p == head) { head = head -> link; } else { prevptr = head; while (prevptr -> link != p) { prevptr = prevptr -> link; } prevptr -> link = p -> link; } delete p; count--; cout << endl << "OBJECT DELETED " << endl; } else { cout << endl << "OBJECT NOT DELETED" << endl; } break; } case ('C'): { clrscr (); cout << "ENTER NEW OBJECT " << position << ": "; cin >> change; cout << endl << "CHANGE OBJECT " << position; cout << " " << p -> listdata << " (Y/N)? "; cin >> ans; ans = toupper (ans); if (ans == 'Y') { p -> listdata = change; cout << endl << "OBJECT CHANGED" << endl; } else { cout << endl << "OBJECT NOT CHANGED" << endl; } break; } } } void linklist :: add (data item) { node * temp = new node; temp -> link = head; temp -> listdata = item; head = temp; } void linklist :: del () { node * temp = head; head = temp -> link; delete temp; count--; } void linklist :: delall () { while (head != 0) { del (); } } // OUTFILE: PROG39.OUT MENU OPTIONS E -- ENTER OBJECT T -- PRINT COUNT Q -- QUIT PROGRAM ENTER SELECTION q DESTRUCTOR INVOKED
BACK TO COMP251 PAGE.