CPSC 451 OPERATING SYSTEMS
PROJECT I (**** additional information added on July 19 at 1pm)
Due Date:July 28 at midnight.
Account Maintenance  

In this project, you will write a program in C++ (Click here for an introduction to C++ by Tom Anderson) to simulate the ATM machine  at a local bank. Use the "g++" compiler  (or CC compiler as shown below) available on "nova" server for this project. Ensure you document your code so that it is readable. Design and documentation will be a worth significant  part of the grade. The description of the ATM machine is as given below.

Customers at ``ABC Bank" will open new accounts, withdraw and deposit moneys. Customers may hold only checking accounts. When customer opens an account, the customer specifies a starting balance (should be non negative) and name. When withdrawing an amount, the customer is given cash if there is sufficient amount, otherwise the customer is charged $10 for insufficient fee. If the account has less than $10, the customer is charged whatever amount is in the account.

Various customers use the system by providing the necessary information to perform their transactions. Note that a customer's account must be in the database until the customer closes it, even if several  customers are using the ATM. The ATM provides the following menu choices. The program repeats the menu choices as many times as is provided in a command line option.

o -- open new account  (read name, initial deposit and then open  a checking account and give an account number to the customer. The choice of account number is yours. But it must be different for each customer.)
t --  transactions on existing account
c -- close an  account

Note that a  customer  must open account before doing transactions or closing the account.  If "c" or  "t"  is chosen the customer is asked to provide the account number and name , and if the account number and name are found in an account in the database,  then account is closed if "c" is chosen and the following menu appears if "t" is chosen.

d --- deposit (a given amount of cash is deposited into the account.)
w --- withdraw   (asks for the amount to withdraw, and withdraws and gives cash, if there is enough money in the account, otherwise insufficient service fee charged as described above. )
i ---- inquire balance (prints the current balance)
g --- go back to previous menu

The above menu repeats until the customer chooses "g".

Although there are variations in the design choice, here are the classes you must have:

1. Account: Contains common functions and variables for both accounts.
2. DataBase: Contains the database (array) of all the accounts and functions  to
   open/close accounts.
3. Menus:  Contains methods that display menus.

Turn in a hard copy of the program and a few sample runs illustrating that all of the above menu options function correctly. Also mail the program to "skanchi@kettering.edu" before midnight. The hard copies and sample runs are due by class time on the next morning of the due date.
 
NEW (Added on July 19 at 1pm): Here is some additional help for you to get going with your assignment. First to obtain a hard copy of the sample run, use the "script" command. If you type

>script output

then all the input and output the terminal is captured into a file named "output" until you type <CTRL>-D. Then you can print the output file to a printer.

To see an example of a seperate compilation of a C++ program, I have provided the following programs for you to try out.

Tree. cc

TreeNode.cc

Tree.h

TreeNode.h

main.cc

testfile

Use the following commands to compile the files above:

CC -c Tree.cc

CC -c TreeNode.cc

CC Tree.o TreeNode.o main.cc

The first two lines compile the files Tree.cc and TreeNode.cc respectively and they create the files Tree.o and TreeNode.o. The last line then links the object files (*.o) with the main.cc and creates a.out file. Now to run the program, type

a.out

It will ask for an input file, now provide the "testfile" as input file. It should produce an output. Please look into these files carefully and try to understand their dependencies. It should be a good guideline to design your program.


Note: You have to be in "nova" for the above commands to work, unless you want to set paths etc.


Saroja Kanchi's Homepage