Withdrawal.java
上传用户:ljt780218
上传日期:2022-07-30
资源大小:110k
文件大小:6k
源码类别:

金融证券系统

开发平台:

Java

  1. // Withdrawal.java
  2. // Represents a withdrawal ATM transaction
  3. public class Withdrawal extends Transaction
  4. {
  5.    private int amount; // amount to withdraw
  6.    private Keypad keypad; // reference to keypad
  7.    private CashDispenser cashDispenser; // reference to cash dispenser
  8.    // constant corresponding to menu option to cancel
  9.    private final static int CANCELED = 6;
  10.    // Withdrawal constructor
  11.    public Withdrawal( int userAccountNumber, Screen atmScreen, 
  12.       BankDatabase atmBankDatabase, Keypad atmKeypad, 
  13.       CashDispenser atmCashDispenser )
  14.    {
  15.       // initialize superclass variables
  16.       super( userAccountNumber, atmScreen, atmBankDatabase );
  17.       
  18.       // initialize references to keypad and cash dispenser
  19.       keypad = atmKeypad;
  20.       cashDispenser = atmCashDispenser;
  21.    } // end Withdrawal constructor
  22.    // perform transaction
  23.    public void execute()
  24.    {
  25.       boolean cashDispensed = false; // cash was not dispensed yet
  26.       double availableBalance; // amount available for withdrawal
  27.       // get references to bank database and screen
  28.       BankDatabase bankDatabase = getBankDatabase(); 
  29.       Screen screen = getScreen();
  30.       // loop until cash is dispensed or the user cancels
  31.       do
  32.       {
  33.          // obtain a chosen withdrawal amount from the user 
  34.          amount = displayMenuOfAmounts();
  35.          
  36.          // check whether user chose a withdrawal amount or canceled
  37.          if ( amount != CANCELED )
  38.          {
  39.             // get available balance of account involved
  40.             availableBalance = 
  41.                bankDatabase.getAvailableBalance( getAccountNumber() );
  42.       
  43.             // check whether the user has enough money in the account 
  44.             if ( amount <= availableBalance )
  45.             {   
  46.                // check whether the cash dispenser has enough money
  47.                if ( cashDispenser.isSufficientCashAvailable( amount ) )
  48.                {
  49.                   // update the account involved to reflect withdrawal
  50.                   bankDatabase.debit( getAccountNumber(), amount );
  51.                   
  52.                   cashDispenser.dispenseCash( amount ); // dispense cash
  53.                   cashDispensed = true; // cash was dispensed
  54.                   // instruct user to take cash
  55.                   screen.displayMessageLine( 
  56.                      "nPlease take your cash now." );
  57.                } // end if
  58.                else // cash dispenser does not have enough cash
  59.                   screen.displayMessageLine( 
  60.                      "nInsufficient cash available in the ATM." +
  61.                      "nnPlease choose a smaller amount." );
  62.             } // end if
  63.             else // not enough money available in user's account
  64.             {
  65.                screen.displayMessageLine( 
  66.                   "nInsufficient funds in your account." +
  67.                   "nnPlease choose a smaller amount." );
  68.             } // end else
  69.          } // end if
  70.          else // user chose cancel menu option 
  71.          {
  72.             screen.displayMessageLine( "nCanceling transaction..." );
  73.             return; // return to main menu because user canceled
  74.          } // end else
  75.       } while ( !cashDispensed );
  76.    } // end method execute
  77.    // display a menu of withdrawal amounts and the option to cancel;
  78.    // return the chosen amount or 0 if the user chooses to cancel
  79.    private int displayMenuOfAmounts()
  80.    {
  81.       int userChoice = 0; // local variable to store return value
  82.       Screen screen = getScreen(); // get screen reference
  83.       
  84.       // array of amounts to correspond to menu numbers
  85.       int amounts[] = { 0, 20, 40, 60, 100, 200 };
  86.       // loop while no valid choice has been made
  87.       while ( userChoice == 0 )
  88.       {
  89.          // display the menu
  90.          screen.displayMessageLine( "nWithdrawal Menu:" );
  91.          screen.displayMessageLine( "1 - $20" );
  92.          screen.displayMessageLine( "2 - $40" );
  93.          screen.displayMessageLine( "3 - $60" );
  94.          screen.displayMessageLine( "4 - $100" );
  95.          screen.displayMessageLine( "5 - $200" );
  96.          screen.displayMessageLine( "6 - Cancel transaction" );
  97.          screen.displayMessage( "nChoose a withdrawal amount: " );
  98.          int input = keypad.getInput(); // get user input through keypad
  99.          // determine how to proceed based on the input value
  100.          switch ( input )
  101.          {
  102.             case 1: // if the user chose a withdrawal amount 
  103.             case 2: // (i.e., chose option 1, 2, 3, 4 or 5), return the
  104.             case 3: // corresponding amount from amounts array
  105.             case 4:
  106.             case 5:
  107.                userChoice = amounts[ input ]; // save user's choice
  108.                break;       
  109.             case CANCELED: // the user chose to cancel
  110.                userChoice = CANCELED; // save user's choice
  111.                break;
  112.             default: // the user did not enter a value from 1-6
  113.                screen.displayMessageLine( 
  114.                   "nIvalid selection. Try again." );
  115.          } // end switch
  116.       } // end while
  117.       return userChoice; // return withdrawal amount or CANCELED
  118.    } // end method displayMenuOfAmounts
  119. } // end class Withdrawal
  120. /**************************************************************************
  121.  * (C) Copyright 1992-2005 by Deitel & Associates, Inc. and               *
  122.  * Pearson Education, Inc. All Rights Reserved.                           *
  123.  *                                                                        *
  124.  * DISCLAIMER: The authors and publisher of this book have used their     *
  125.  * best efforts in preparing the book. These efforts include the          *
  126.  * development, research, and testing of the theories and programs        *
  127.  * to determine their effectiveness. The authors and publisher make       *
  128.  * no warranty of any kind, expressed or implied, with regard to these    *
  129.  * programs or to the documentation contained in these books. The authors *
  130.  * and publisher shall not be liable in any event for incidental or       *
  131.  * consequential damages in connection with, or arising out of, the       *
  132.  * furnishing, performance, or use of these programs.                     *
  133.  *************************************************************************/