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.