NOTE: The prototypes appearing in these operation description forms reflect the C++ implementation. With one exception, the corresponding Java methods have the same parameters, but the prototypes differ slightly due to syntactic differences between C++ and Java. In particular:
   [ Intro ]
   [ Requirements ]
   [ Domain Objects ]
   [ Use Cases ]
   [ State Diagram ]
   [ Interaction Diagram ] 
   
   [ CRC Cards ]
   [ Class Diagram ]
   [ Class Desc. Forms ]
   [ Operation Desc. Forms ]
   [ Code ]
   [ Executable ]
| ATM:: | ATM | 
|---|---|
| Prototype | ATM(int number, const char * location, Bank & bank) | 
| Purpose | Constructor | 
| Receives | number - the ATM's number | 
| location - the ATM's location | |
| bank - the ATM's Bank | |
| Returns | |
| Remarks | 
[ View C++ implementation ] [ View Java implementation ]
| ATM:: | startupOperation | 
|---|---|
| Prototype | Money startupOperation() | 
| Purpose | Perform startup tasks when the ATM's switch is turned on | 
| Receives | |
| Returns | Initial cash in the cash dispenser | 
| Remarks | Waits for operator to turn switch on. Sets _state to RUNNING. Asks operator how much cash is in the dispenser. | 
[ View C++ implementation ] [ View Java implementation ]
| ATM:: | serviceCustomers | 
|---|---|
| Prototype | void serviceCustomers(Money initialCash) | 
| Purpose | Run the ATM until the switch is turned off | 
| Receives | initialCash - amount of money in cash dispenser to start | 
| Returns | |
| Remarks | Creates a new Session when a readable card is inserted. Polls operator switch when no session is active, sets _state to STOPPED and exits when switch is turned off. | 
[ View C++ implementation ] [ View Java implementation ]
| ATM:: | getPIN | 
|---|---|
| Prototype | int getPIN() const | 
| Purpose | Get personal identification number (PIN) from customer | 
| Receives | |
| Returns | PIN entered by customer | 
| Remarks | Displays request on screen, then reads PIN from keyboard. PIN digits are echoed as asterisks to preserve secrecy. | 
[ View C++ implementation ] [ View Java implementation ]
| ATM:: | getMenuChoice | ||
|---|---|---|---|
| Prototype | int getMenuChoice( 
 | ||
| Purpose | Get choice from a menu of options from customer | ||
| Receives | whatToChoose - explanation of what customer is choosing numItems - number of items to choose from items - descriptions of individual items | ||
| Returns | Customer choice (1 .. numItems) or 0 if cancelled | ||
| Remarks | Displays list of choices, then requests customer to choose one using keyboard. | 
[ View C++ implementation ] [ View Java implementation ]
| ATM:: | getAmountEntry | 
|---|---|
| Prototype | Money getAmountEntry() const | 
| Purpose | Ask customer to enter an amount of money for a deposit, etc. | 
| Receives | |
| Returns | Amount of money customer entered. | 
| Remarks | Asks user to enter amount, then reads amount typed at keyboard. | 
[ View C++ implementation ] [ View Java implementation ]
| ATM:: | checkIfCashAvailable | 
|---|---|
| Prototype | bool checkIfCashAvailable(Money amount) const | 
| Purpose | Determine if cash dispenser has enough cash left to satisfy a withdrawl request | 
| Receives | amount - amount desired | 
| Returns | True iff requested amount is available. | 
| Remarks | 
[ View C++ implementation ] [ View Java implementation ]
| ATM:: | dispenseCash | 
|---|---|
| Prototype | void dispenseCash(Money amount) const | 
| Purpose | Dispense cash to customer | 
| Receives | amount - amount of money to dispense | 
| Returns | |
| Remarks | Caller must check that requested amount is available before invoking this method. | 
[ View C++ implementation ] [ View Java implementation ]
| ATM:: | acceptEnvelope | 
|---|---|
| Prototype | bool acceptEnvelope() const | 
| Purpose | Accept a deposit envelope from customer. | 
| Receives | |
| Returns | True iff envelope is successfully accepted. | 
| Remarks | Displays request for customer to insert envelope and waits for customer to do so. Times out if customer does not do so within a specified time. | 
[ View C++ implementation ] [ View Java implementation ]
| ATM:: | issueReceipt | ||
|---|---|---|---|
| Prototype | void issueReceipt( 
 | ||
| Purpose | Print a receipt for a transaction. | ||
| Receives | cardNumber - number appearing on customer's card serialNumber - transaction serial number - same as sent to bank description - brief description of transaction amount - amount of transaction - 0 if this does not apply balance - balance in account after transaction availableBalance - available balance after transaction | ||
| Returns | |||
| Remarks | 
[ View C++ implementation ] [ View Java implementation ]
| ATM:: | reEnterPIN | 
|---|---|
| Prototype | int reEnterPIN() const | 
| Purpose | Ask customer to re-enter PIN if PIN entered originally was not valid | 
| Receives | |
| Returns | PIN entered by customer | 
| Remarks | Displays request for customer to re-enter PIN, then reads PIN from keyboard. PIN digits are echoed as asterisks to preserve secrecy. | 
[ View C++ implementation ] [ View Java implementation ]
| ATM:: | reportTransactionFailure | 
|---|---|
| Prototype | bool reportTransactionFailure(const char * explanation) const | 
| Purpose | Tell customer a transaction has failed and why; ask customer if he/she would like to do another. | 
| Receives | explanation - reason for failure | 
| Returns | true if customer would like to do another, false if not | 
| Remarks | 
[ View C++ implementation ] [ View Java implementation ]
| ATM:: | ejectCard | 
|---|---|
| Prototype | void ejectCard() const | 
| Purpose | Return ATM card to customer at end of session. | 
| Receives | |
| Returns | |
| Remarks | 
[ View C++ implementation ] [ View Java implementation ]
| ATM:: | retainCard | 
|---|---|
| Prototype | void retainCard() const | 
| Purpose | Permanently retain card due to failure to enter correct PIN. | 
| Receives | |
| Returns | |
| Remarks | Displays screen telling customer the card has been retained and instructing customer to contact the bank. | 
[ View C++ implementation ] [ View Java implementation ]
| ATM:: | number | 
|---|---|
| Prototype | int number() const | 
| Purpose | Provide the ATM's identifying number for inclusion in messages to the bank and on receipts. | 
| Receives | |
| Returns | ATM's identifying number | 
| Remarks | 
[ View C++ implementation ] [ View Java implementation ]
| CardReader:: | CardReader | 
|---|---|
| Prototype | CardReader() | 
| Purpose | Constructor | 
| Receives | |
| Returns | |
| Remarks | 
| CardReader:: | ejectCard | 
|---|---|
| Prototype | void ejectCard() | 
| Purpose | Physically eject customer's ATM card. | 
| Receives | |
| Returns | |
| Remarks | 
| CardReader:: | retainCard | 
|---|---|
| Prototype | void retainCard() | 
| Purpose | Physically retain customer's ATM card. | 
| Receives | |
| Returns | |
| Remarks | 
| CardReader:: | checkForCardInserted | 
|---|---|
| Prototype | CardReader::ReaderStatus checkForCardInserted() | 
| Purpose | Report whether or not a readable card has been inserted. | 
| Receives | |
| Returns | NO_CARD if no card has been inserted UNREADABLE_CARD if a card has been inserted incorrectly or is damaged CARD_HAS_BEEN_READ if a card has been inserted and read | 
| Remarks | 
| CardReader:: | cardNumber | 
|---|---|
| Prototype | int cardNumber() const | 
| Purpose | Return number read from back of card. | 
| Receives | |
| Returns | Card number of card that is currently in the machine. | 
| Remarks | Should only be called after a call to checkForCardInserted has returned CARD_HAS_BEEN_READ. | 
| Display:: | Display | 
|---|---|
| Prototype | Display() | 
| Purpose | Constructor | 
| Receives | |
| Returns | |
| Remarks | 
| Display:: | requestCard | 
|---|---|
| Prototype | void requestCard() | 
| Purpose | Ask customer to insert card into machine. | 
| Receives | |
| Returns | |
| Remarks | 
| Display:: | requestPIN | 
|---|---|
| Prototype | void requestPIN() | 
| Purpose | Ask customer to enter PIN on keyboard. | 
| Receives | |
| Returns | |
| Remarks | 
| Display:: | displayMenu | ||
|---|---|---|---|
| Prototype | void displayMenu( 
 | ||
| Purpose | Display a menu of options for the customer to choose from. | ||
| Receives | |||
| Returns | |||
| Remarks | 
| Display:: | requestAmountEntry | 
|---|---|
| Prototype | void requestAmountEntry() | 
| Purpose | Ask customer to enter a dollar amount on keyboard. | 
| Receives | |
| Returns | |
| Remarks | 
| Display:: | requestDepositEnvelope | 
|---|---|
| Prototype | void requestDepositEnvelope() | 
| Purpose | Ask customer to insert a deposit envelope into machine. | 
| Receives | |
| Returns | |
| Remarks | 
| Display:: | reportCardUnreadable | 
|---|---|
| Prototype | void reportCardUnreadable() | 
| Purpose | Inform customer that card he/she inserted could not be read. | 
| Receives | |
| Returns | |
| Remarks | 
| Display:: | reportTransactionFailure | 
|---|---|
| Prototype | void reportTransactionFailure(const char * explanation) | 
| Purpose | Inform customer that a transaction failed and why. | 
| Receives | explanation - why transaction failed | 
| Returns | |
| Remarks | 
| Display:: | requestReEnterPIN | 
|---|---|
| Prototype | void requestReEnterPIN() | 
| Purpose | Inform customer that PIN was incorrect, and ask him/her to re-enter it | 
| Receives | |
| Returns | |
| Remarks | 
| Display:: | reportCardRetained | 
|---|---|
| Prototype | void reportCardRetained() | 
| Purpose | Inform customer that card has been retained because of too many incorrect PIN entries; customer should contact the bank. | 
| Receives | |
| Returns | |
| Remarks | 
| Display:: | echoInput | 
|---|---|
| Prototype | void echoInput(const char * echo) | 
| Purpose | Echo user input typed on the keyboard onto the screen | 
| Receives | echo - what to display | 
| Returns | |
| Remarks | 
| Display:: | clearDisplay | 
|---|---|
| Prototype | void clearDisplay() | 
| Purpose | Clear the display Screen | 
| Receives | |
| Returns | |
| Remarks | 
| Keyboard:: | Keyboard | 
|---|---|
| Prototype | Keyboard() | 
| Purpose | Constructor | 
| Receives | |
| Returns | |
| Remarks | 
| Keyboard:: | readPIN | 
|---|---|
| Prototype | int readPIN(Display & echoOn) | 
| Purpose | Read a PIN typed in by the user. | 
| Receives | echoOn - reference to display that asterisks are to be echoed onto | 
| Returns | PIN the user typed. | 
| Remarks | PIN is echoed as asterisks for security. | 
| Keyboard:: | readMenuChoice | 
|---|---|
| Prototype | int readMenuChoice(int numItems) | 
| Purpose | Allow customer to choose a specific item from a displayed menu | 
| Receives | numItems - number of items displayed | 
| Returns | Number of customer's choice (1..numItems) or 0 if customer presses Cancel. | 
| Remarks | 
| Keyboard:: | readAmountEntry | 
|---|---|
| Prototype | Money readAmountEntry(Display & echoOn) | 
| Purpose | Allow customer to enter a dollar amount. | 
| Receives | echoOn - reference to display that figures typed are to be echoed onto | 
| Returns | Dollar amount entered by customer. | 
| Remarks | Dollar amount is echoed on screen as customer types it. | 
| CashDispenser:: | CashDispenser | 
|---|---|
| Prototype | CashDispenser() | 
| Purpose | Constructor | 
| Receives | |
| Returns | |
| Remarks | 
| CashDispenser:: | setCash | 
|---|---|
| Prototype | void setCash(Money initialCash) | 
| Purpose | Set amount of cash in dispenser at start of run. | 
| Receives | initialCash - amount of money in dispenser | 
| Returns | |
| Remarks | 
| CashDispenser:: | dispenseCash | 
|---|---|
| Prototype | void dispenseCash(Money amount) | 
| Purpose | Physically dispense cash to customer | 
| Receives | amount - amount of cash to dispense | 
| Returns | |
| Remarks | 
| CashDispenser:: | currentCash | 
|---|---|
| Prototype | Money currentCash() const | 
| Purpose | Report amount of cash currently available to be dispensed. | 
| Receives | |
| Returns | Amount of cash currently available to be dispensed. | 
| Remarks | 
| EnvelopeAcceptor:: | EnvelopeAcceptor | 
|---|---|
| Prototype | EnvelopeAcceptor() | 
| Purpose | Constructor | 
| Receives | |
| Returns | |
| Remarks | 
| EnvelopeAcceptor:: | acceptEnvelope | 
|---|---|
| Prototype | bool acceptEnvelope() | 
| Purpose | Physically accept an envelope from customer. | 
| Receives | |
| Returns | True iff envelope is successfully accepted. | 
| Remarks | Times out and returns false if envelope is not inserted within allowed time | 
| ReceiptPrinter:: | ReceiptPrinter | 
|---|---|
| Prototype | ReceiptPrinter() | 
| Purpose | Constructor | 
| Receives | |
| Returns | |
| Remarks | 
| ReceiptPrinter:: | printReceipt | ||
|---|---|---|---|
| Prototype | void printReceipt( 
 | ||
| Purpose | Physically print a receipt. | ||
| Receives | theATMnumber - number of the particular ATM theATMlocation - location of the ATM cardNumber - number appearing on customer's card serialNumber - transaction serial number - same as sent to bank description - brief description of transaction amount - amount of transaction - 0 if this does not apply balance - balance in account after transaction availableBalance - available balance after transaction | ||
| Returns | |||
| Remarks | 
| OperatorPanel:: | OperatorPanel | 
|---|---|
| Prototype | OperatorPanel() | 
| Purpose | Constructor | 
| Receives | |
| Returns | |
| Remarks | 
| OperatorPanel:: | switchOn | 
|---|---|
| Prototype | bool switchOn() | 
| Purpose | Report physical setting of the switch. | 
| Receives | |
| Returns | True iff switch is in the "on" position | 
| Remarks | 
| OperatorPanel:: | getInitialCash | 
|---|---|
| Prototype | Money getInitialCash() | 
| Purpose | Get amount of cash in cash dispenser from operator. | 
| Receives | |
| Returns | Amount of money in cash dispenser. | 
| Remarks | 
| Session:: | Session | 
|---|---|
| Prototype | Session(int cardNumber, ATM & atm, Bank & bank) | 
| Purpose | Constructor | 
| Receives | cardNumber - card number read from customer's ATM card when it was inserted atm - ATM this session is serving bank - Bank the ATM is serving | 
| Returns | |
| Remarks | 
[ View C++ implementation ] [ View Java implementation ]
| Session:: | doSessionUseCase | 
|---|---|
| Prototype | void doSessionUseCase() | 
| Purpose | Implement session use case | 
| Receives | |
| Returns | |
| Remarks | 
[ View C++ implementation ] [ View Java implementation ]
| Session:: | doInvalidPINExtension | 
|---|---|
| Prototype | Status::Code doInvalidPINExtension() | 
| Purpose | Perform invalid PIN extension | 
| Receives | |
| Returns | Result of sending transaction to bank with newly entered PIN value | 
| Remarks | Asks user to re-enter PIN and then re-sends current transaction to the bank. If the bank still says the PIN is invalid, this process is repeated up to a maximum of three tries. A third failure will result in the card being retained and the session being aborted. | 
[ View C++ implementation ] [ View Java implementation ]
| Session:: | doFailedTransactionExtension | 
|---|---|
| Prototype | bool doFailedTransactionExtension(Status::Code reason) | 
| Purpose | Perform Failed Transaction extension | 
| Receives | reason - code indicating why transaction failed. | 
| Returns | true iff customer chooses to do another transaction | 
| Remarks | Displays reason for transaction failure, and asks customer if he/she wants to do another. Customer is allowed to choose yes or no from menu | 
[ View C++ implementation ] [ View Java implementation ]
| Session:: | cardNumber | 
|---|---|
| Prototype | int cardNumber() const | 
| Purpose | Return customer's ATM card number. | 
| Receives | |
| Returns | Customer's ATM card number. | 
| Remarks | 
[ View C++ implementation ] [ View Java implementation ]
| Session:: | PIN | 
|---|---|
| Prototype | int PIN() const | 
| Purpose | Return PIN that customer entered at start of session (or re-entered if original was invalid.) | 
| Receives | |
| Returns | PIN entered by customer. | 
| Remarks | 
[ View C++ implementation ] [ View Java implementation ]
| Transaction:: | Transaction | 
|---|---|
| Prototype | Transaction(Session & session, ATM & atm, Bank & bank) | 
| Purpose | Constructor | 
| Receives | session - reference to session which is creating this transaction atm - ATM this transaction is serving bank - Bank to perform transaction | 
| Returns | |
| Remarks | 
[ View C++ implementation ] [ View Java implementation ]
| Transaction:: | chooseTransaction | ||||||
|---|---|---|---|---|---|---|---|
| Prototype | static Transaction * chooseTransaction( 
 | ||||||
| Purpose | Ask user to choose a transaction type, and create a transaction object of the appropriate subclass | ||||||
| Receives | session - reference to session which is creating this transaction atm - ATM this transaction is serving bank - Bank to perform transaction | ||||||
| Returns | Newly created transaction object | ||||||
| Remarks | Calls constructor for appropriate subclass and returns result | 
[ View C++ implementation ] [ View Java implementation ]
| Transaction:: | doTransactionUseCase | 
|---|---|
| Prototype | Status::Code doTransactionUseCase() | 
| Purpose | Carry out transaction use case | 
| Receives | |
| Returns | Code indicating whether transaction succeeded or failed, and reason for failure if it failed. | 
| Remarks | This method implements features common to all transactions. The type-specific features are implemented by calling the three abstract methods defined below, in turn. | 
[ View C++ implementation ] [ View Java implementation ]
| Transaction:: and subclasses | getTransactionSpecificsFromCustomer | 
|---|---|
| Prototype | Status::Code getTransactionSpecificsFromCustomer() | 
| Purpose | Get specific information relevant to this transaction from customer. | 
| Receives | |
| Returns | Success code if valid information was obtained; otherwise, code indicating nature of the problem. | 
| Remarks | This method is abstract in class Transaction, and is implemented concretely for each of its subclasses. | 
[ View C++ implementation ] [ View Java implementation ]
| Transaction:: and subclasses | sendToBank | 
|---|---|
| Prototype | Status::Code sendToBank() | 
| Purpose | Send transaction to bank. | 
| Receives | |
| Returns | Code returned by Bank indicating successful completion or reason for rejection. | 
| Remarks | This method is abstract in class Transaction, and is implemented concretely for each of its subclasses. | 
[ View C++ implementation ] [ View Java implementation ]
| Transaction:: and subclasses | finishApprovedTransaction | 
|---|---|
| Prototype | Status::Code finishApprovedTransaction() | 
| Purpose | Finish a transaction once the bank has approved it. | 
| Receives | |
| Returns | Success code if completed successfully; otherwise, code indicating nature of the problem. | 
| Remarks | This method is abstract in class Transaction, and is implemented concretely for each of its subclasses. | 
[ View C++ implementation ] [ View Java implementation ]
| WithdrawlTransaction:: | WithdrawlTransaction | 
|---|---|
| Prototype | WithdrawlTransaction(Session & session, ATM & atm, Bank & bank) | 
| Purpose | Constructor | 
| Receives | session - reference to session which created this transaction atm - ATM this transaction is serving bank - Bank to perform transaction | 
| Returns | |
| Remarks | 
[ View C++ implementation ] [ View Java implementation ]
| DepositTransaction:: | DepositTransaction | 
|---|---|
| Prototype | DepositTransaction(Session & session, ATM & atm, Bank & bank) | 
| Purpose | Constructor | 
| Receives | session - reference to session which created this transaction atm - ATM this transaction is serving bank - Bank to perform transaction | 
| Returns | |
| Remarks | 
[ View C++ implementation ] [ View Java implementation ]
| TransferTransaction:: | TransferTransaction | 
|---|---|
| Prototype | TransferTransaction(Session & session, ATM & atm, Bank & bank) | 
| Purpose | Constructor | 
| Receives | session - reference to session which created this transaction atm - ATM this transaction is serving bank - Bank to perform transaction | 
| Returns | |
| Remarks | 
[ View C++ implementation ] [ View Java implementation ]
| InquiryTransaction:: | InquiryTransaction | 
|---|---|
| Prototype | InquiryTransaction(Session & session, ATM & atm, Bank & bank) | 
| Purpose | Constructor | 
| Receives | session - reference to session which created this transaction atm - ATM this transaction is serving bank - Bank to perform transaction | 
| Returns | |
| Remarks | 
[ View C++ implementation ] [ View Java implementation ]
| Bank:: | Bank | 
|---|---|
| Prototype | Bank() | 
| Purpose | Constructor | 
| Receives | |
| Returns | |
| Remarks | 
| Bank:: | initiateWithdrawl | ||
|---|---|---|---|
| Prototype | Status::Code initiateWithdrawl( 
 | ||
| Purpose | Initiate a withdrawl transaction. | ||
| Receives | cardNumber - number of the customer's ATM Card PIN - PIN entered by the customer ATMnumber - Identifying number of the ATM serialNumber - Serial number of the transaction assigned by ATM from - account from which money is to be withdrawn amount - amount of withdrawl | ||
| Returns | return value - indicates whether transaction was approved or rejected by the bank, and the reason for rejection if this is the case. newBalance - if the transaction is approved, this is set to balance in account after the transaction availableBalance - if the transaction is approved, this is set to available balance in account after the transaction | ||
| Remarks | If the transaction is approved, a call to finishWithdrawl must be done to indicate whether or not the transaction was physically completed. | 
| Bank:: | finishWithdrawl | ||
|---|---|---|---|
| Prototype | void finishWithdrawl( 
 | ||
| Purpose | Inform bank whether or not a withdrawl transaction was physically completed by the ATM. | ||
| Receives | ATMnumber - Identifying number of the ATM serialNumber - Serial number of the transaction assigned by ATM succeeded - true iff transaction was physically completed by the ATM | ||
| Returns | |||
| Remarks | 
| Bank:: | initiateDeposit | ||
|---|---|---|---|
| Prototype | Status::Code initiateDeposit( 
 | ||
| Purpose | Initiate a deposit transaction. | ||
| Receives | cardNumber - number of the customer's ATM Card PIN - PIN entered by the customer ATMnumber - Identifying number of the ATM serialNumber - Serial number of the transaction assigned by ATM to - account to which money is to be deposited amount - amount of deposit | ||
| Returns | return value - indicates whether transaction was approved or rejected by the bank, and the reason for rejection if this is the case. newBalance - if the transaction is approved, this is set to balance in account after the transaction availableBalance - if the transaction is approved, this is set to available balance in account after the transaction. | ||
| Remarks | If the transaction is approved, a call to finishDeposit must be done to indicate whether or not the transaction was physically completed. | 
| Bank:: | finishDeposit | ||
|---|---|---|---|
| Prototype | void finishDeposit( 
 | ||
| Purpose | Inform bank whether or not a deposit transaction was physically completed by the ATM. | ||
| Receives | ATMnumber - Identifying number of the ATM serialNumber - Serial number of the transaction assigned by ATM succeeded - true iff transaction was physically completed by the ATM | ||
| Returns | |||
| Remarks | 
| Bank:: | doTransfer | ||
|---|---|---|---|
| Prototype | Status::Code doTransfer( 
 | ||
| Purpose | Perform a transfer transaction. | ||
| Receives | cardNumber - number of the customer's ATM Card PIN - PIN entered by the customer ATMnumber - Identifying number of the ATM serialNumber - Serial number of the transaction assigned by ATM from - account from which money is to be transferred to - account to which money is to be transferred amount - amount of transfer | ||
| Returns | return value - indicates whether transaction was approved or rejected by the bank, and the reason for rejection if this is the case. newBalance - if the transaction is approved, this is set to balance in "to" account after the transaction availableBalance - if the transaction is approved, this is set to available balance in "to" account after the transaction. | ||
| Remarks | If the transaction is approved, it is completed by this operation. No second method call is needed for this case. | 
| Bank:: | doInquiry | ||
|---|---|---|---|
| Prototype | Status::Code doInquiry( 
 | ||
| Purpose | Perform an inquiry transaction. | ||
| Receives | cardNumber - number of the customer's ATM Card PIN - PIN entered by the customer ATMnumber - Identifying number of the ATM serialNumber - Serial number of the transaction assigned by ATM from - account whose balance is desired | ||
| Returns | return value - indicates whether transaction was approved or rejected by the bank, and the reason for rejection if this is the case. newBalance - if the transaction is approved, this is set to balance in account availableBalance - if the transaction is approved, this is set to available balance in account. | ||
| Remarks | If the transaction is approved, it is completed by this operation. No second method call is needed for this case. | 
| Bank:: | chooseAccountType | 
|---|---|
| Prototype | AccountType chooseAccountType(const char * purpose, ATM & atm) const | 
| Purpose | Allow customer to choose an account from a menu of options | 
| Receives | purpose - how this account will be used | 
| atm - ATM to use to dialog with customer | |
| Returns | Code for type of account chosen | 
| Remarks | 
| Bank:: | accountName | 
|---|---|
| Prototype | const char * accountName(AccountType type) const | 
| Purpose | Return a short name for an account for printing on receipt. | 
| Receives | type - account type whose name is desired | 
| Returns | Printable name for account | 
| Remarks | 
| Bank:: | rejectionExplanation | 
|---|---|
| Prototype | const char * rejectionExplanation(Status::Code code) const | 
| Purpose | Return a brief textual explanation of a particular rejection code the bank returned when a transaction was initiated. | 
| Receives | code - the rejection code the bank returned | 
| Returns | Explanation for the code. | 
| Remarks |