/* * ATM Example system - file Withdrawal.java     * * copyright (c) 2001 - Russell C. Bjork * */ package atm.transaction;import atm.ATM;import atm.Session;import atm.physical.*;import banking.AccountInformation;import banking.Card;import banking.Message;import banking.Money;import banking.Status;import banking.Receipt;/** Representation for a cash withdrawal transaction */public class Withdrawal extends Transaction{    /** Constructor     *     *  @param atm the ATM used to communicate with customer     *  @param session the session in which the transaction is being performed     *  @param card the customer's card     *  @param pin the PIN entered by the customer     */    public Withdrawal(ATM atm, Session session, Card card, int pin)    {        super(atm, session, card, pin);    }        /** Get specifics for the transaction from the customer     *     *  @return message to bank for initiating this transaction     *  @exception CustomerConsole.Cancelled if customer cancelled this transaction     */    protected Message getSpecificsFromCustomer() throws CustomerConsole.Cancelled    {        from = atm.getCustomerConsole().readMenuChoice(            "Account to withdraw from",            AccountInformation.ACCOUNT_NAMES);        String [] amountOptions = { "$20", "$40", "$60", "$100", "$200" };        Money [] amountValues = {                                   new Money(20), new Money(40), new Money(60),                                  new Money(100), new Money(200)                                };                                          String amountMessage = "";        boolean validAmount = false;                while (! validAmount)        {            amount = amountValues [                 atm.getCustomerConsole().readMenuChoice(                    amountMessage + "Amount of cash to withdraw", amountOptions) ];                                        validAmount = atm.getCashDispenser().checkCashOnHand(amount);            if (! validAmount)                amountMessage = "Insufficient cash available\n";        }                return new Message(Message.WITHDRAWAL,                            card, pin, serialNumber, from, -1, amount);    }        /** Complete an approved transaction     *     *  @return receipt to be printed for this transaction     */    protected Receipt completeTransaction()    {        atm.getCashDispenser().dispenseCash(amount);        return new Receipt(this.atm, this.card, this, this.balances) {            {                detailsPortion = new String[2];                detailsPortion[0] = "WITHDRAWAL FROM: " +                                     AccountInformation.ACCOUNT_ABBREVIATIONS[from];                detailsPortion[1] = "AMOUNT: " + amount.toString();            }        };    }        /** Account to withdraw from     */     private int from;        /** Amount of money to withdraw     */    private Money amount;           }