PROGRAM 38
// FILE NAME: PROG38.CPP PROGRAMMER NAME: ANTHONY F. ORTIZ // THIS PROGRAM USES A TEMPLATE CLASS CALLED ARRYLIST. THE MEMBER FUNCTIONS // OF ARRAYLIST WILL INITIALIZE THE SIZE OF THE ARRAY, ADD A ITEM TO THE // ARRAY, SHOW THE SIZE OF THE ARRAY, DISPLAY ALL ARRAY ITEMS, AND CHANGE A // ARRAY ITEM. ARRAY IS OF FLOAT TYPE. #include "alist2.h" typedef arraylist list; print_menu (); char get_selection (list & expenses); pause_program (); int main () { char choice; list 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 << "C -- CHANGE OBJECT"; gotoxy (30, 6); cout << "D -- DISPLAY OBJECTS"; gotoxy (30, 7); cout << "Q -- QUIT PROGRAM"; gotoxy (25, 9); cout << "ENTER SELECTION "; return 0; } char get_selection (list & expenses) { char choice; cin >> choice; choice = toupper (choice); switch (choice) { case ('E'): { expenses.enteritem (); break; } case ('T'): { expenses.printtotal (); pause_program (); break; } case ('C'): { expenses.changelist (); pause_program (); break; } case ('D'): { expenses.viewlist (); pause_program (); break; } case ('Q'): { clrscr (); break; } } return (choice); } pause_program () { cout << endl << "PRESS ENTER KEY TO CONTINUE ..... "; getch (); return 0; } // FILE NAME: ALIST2.H // THIS FILE CONTAINS THE DECLARATION OF THE CLASS CALLED ARRAYLIST. #ifndef alist2_h #define alist2_h #include #include #include #include const int max = 100; template class arraylist { public: arraylist (); // POST: CONSTRUCTOR, INITIALIZES THE PRIVATE MEMBER COUNT TO 0 // AND ALLOCATES MEMORY FOR ARRAYLIST CLASS WITH THE NEW // OPERATOR. ~arraylist (); // POST: DESTRUCTOR, DEALLOCATES MEMORY FOR ARRAYLIST CLASS WITH // THE DELETE OPERATOR. void initcount (void); // POST: INITIALIZES THE PRIVATE MEMBER COUNT TO 0. void enteritem (void); // POST: PROMPTS FOR OBJECT TO ENTER INTO THE LIST FROM THE KEYBOARD. void printtotal (void); // POST: PRINTS THE CURRENT COUNT. void viewlist (void); // POST: DISPLAY CURRENT LIST WITH POSITION NUMBERS 1, 2, 3, ..., N WHERE // N EQUALS COUNT + 1. 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 AT A // POSITION OF THEIR CHOICE. // (B) USER MAY DELETE AN ITEM FROM THE LIST, THUS AFFECTING THE // POSITION NUMBERS OF THE REMAINING ITEMS. private: type * list; int count; }; #include "alist2.cpp" #endif // FILE NAME: ALIST2.CPP // THIS FILE CONTAINS THE IMPLEMENTATION OF THE ARRAYLIST CLASS. template arraylist :: arraylist () { list = new type [max]; count = 0; cout.setf (ios :: showpoint); cout.setf (ios :: fixed); cout << setprecision (2); } template arraylist :: ~arraylist () { delete [] list; } template void arraylist :: initcount (void) { count = 0; } template void arraylist :: enteritem (void) { clrscr (); cout << "ENTER A OBJECT. "; cin >> list [count]; count++; } template void arraylist :: printtotal (void) { clrscr (); cout << "THE SIZE OF THE ARRAY IS " << count << endl; } template void arraylist :: viewlist (void) { clrscr (); cout << "HERE ARE ALL THE ITEMS OF THE OBJECT ARRAY: " << endl << endl; for (int a = 0; a < count; a++) { cout << "OBJECT " << (a + 1) << ": " << setw (8) << list [a]; cout << endl; } } template void arraylist :: changelist (void) { char choice, ans; int position, flag; type 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); } switch (choice) { case ('D'): { clrscr (); cout << "DELETE OBJECT " << position << " "; cout << list [position - 1] << " (Y/N)? "; cin >> ans; ans = toupper (ans); if (ans == 'Y') { flag = 0; for (int a = 0; a < count; a++) { if (a == (position - 1) || flag == 1) { list [a] = list [a + 1]; flag = 1; } } 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 << " " << list [position - 1] << " (Y/N)? "; cin >> ans; ans = toupper (ans); if (ans == 'Y') { for (int a = 0; a < count; a++) { if (a == (position - 1)) { list [a] = change; } } cout << endl << "OBJECT CHANGED" << endl; } else { cout << endl << "OBJECT NOT CHANGED" << endl; } break; } } } // OUTFILE: PROG38.OUT MENU OPTIONS E -- ENTER OBJECT T -- PRINT COUNT C -- CHANGE OBJECT D -- DISPLAY OBJECTS Q -- QUIT PROGRAM ENTER SELECTION q
BACK TO COMP251 PAGE.