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

金融证券系统

开发平台:

Java

  1. // ATM.java
  2. // Represents an automated teller machine
  3. public class ATM 
  4. {
  5.    private boolean userAuthenticated; // whether user is authenticated
  6.    private int currentAccountNumber; // current user's account number
  7.    private Screen screen; // ATM's screen
  8.    private Keypad keypad; // ATM's keypad
  9.    private CashDispenser cashDispenser; // ATM's cash dispenser
  10.    private DepositSlot depositSlot; // ATM's deposit slot
  11.    private BankDatabase bankDatabase; // account information database
  12.    // constants corresponding to main menu options
  13.    private static final int BALANCE_INQUIRY = 1;
  14.    private static final int WITHDRAWAL = 2;
  15.    private static final int DEPOSIT = 3;
  16.    private static final int EXIT = 4;
  17.    // no-argument ATM constructor initializes instance variables
  18.    public ATM() 
  19.    {
  20.       userAuthenticated = false; // user is not authenticated to start
  21.       currentAccountNumber = 0; // no current account number to start
  22.       screen = new Screen(); // create screen
  23.       keypad = new Keypad(); // create keypad 
  24.       cashDispenser = new CashDispenser(); // create cash dispenser
  25.       depositSlot = new DepositSlot(); // create deposit slot
  26.       bankDatabase = new BankDatabase(); // create acct info database
  27.    } // end no-argument ATM constructor
  28.    // start ATM 
  29.    public void run()
  30.    {
  31.       // welcome and authenticate user; perform transactions
  32.       while ( true )
  33.       {
  34.          // loop while user is not yet authenticated
  35.          while ( !userAuthenticated ) 
  36.          {
  37.             screen.displayMessageLine( "nWelcome!" );       
  38.             authenticateUser(); // authenticate user
  39.          } // end while
  40.          
  41.          performTransactions(); // user is now authenticated 
  42.          userAuthenticated = false; // reset before next ATM session
  43.          currentAccountNumber = 0; // reset before next ATM session 
  44.          screen.displayMessageLine( "nThank you! Goodbye!" );
  45.       } // end while   
  46.    } // end method run
  47.    // attempts to authenticate user against database
  48.    private void authenticateUser() 
  49.    {
  50.       screen.displayMessage( "nPlease enter your account number: " );
  51.       int accountNumber = keypad.getInput(); // input account number
  52.       screen.displayMessage( "nEnter your PIN: " ); // prompt for PIN
  53.       int pin = keypad.getInput(); // input PIN
  54.       
  55.       // set userAuthenticated to boolean value returned by database
  56.       userAuthenticated = 
  57.          bankDatabase.authenticateUser( accountNumber, pin );
  58.       
  59.       // check whether authentication succeeded
  60.       if ( userAuthenticated )
  61.       {
  62.          currentAccountNumber = accountNumber; // save user's account #
  63.       } // end if
  64.       else
  65.          screen.displayMessageLine( 
  66.              "Invalid account number or PIN. Please try again." );
  67.    } // end method authenticateUser
  68.    // display the main menu and perform transactions
  69.    private void performTransactions() 
  70.    {
  71.       // local variable to store transaction currently being processed
  72.       Transaction currentTransaction = null;
  73.       
  74.       boolean userExited = false; // user has not chosen to exit
  75.       // loop while user has not chosen option to exit system
  76.       while ( !userExited )
  77.       {     
  78.          // show main menu and get user selection
  79.          int mainMenuSelection = displayMainMenu();
  80.          // decide how to proceed based on user's menu selection
  81.          switch ( mainMenuSelection )
  82.          {
  83.             // user chose to perform one of three transaction types
  84.             case BALANCE_INQUIRY: 
  85.             case WITHDRAWAL: 
  86.             case DEPOSIT:
  87.                // initialize as new object of chosen type
  88.                currentTransaction = 
  89.                   createTransaction( mainMenuSelection );
  90.                currentTransaction.execute(); // execute transaction
  91.                break; 
  92.             case EXIT: // user chose to terminate session
  93.                screen.displayMessageLine( "nExiting the system..." );
  94.                userExited = true; // this ATM session should end
  95.                break;
  96.             default: // user did not enter an integer from 1-4
  97.                screen.displayMessageLine( 
  98.                   "nYou did not enter a valid selection. Try again." );
  99.                break;
  100.          } // end switch
  101.       } // end while
  102.    } // end method performTransactions
  103.    
  104.    // display the main menu and return an input selection
  105.    private int displayMainMenu()
  106.    {
  107.       screen.displayMessageLine( "nMain menu:" );
  108.       screen.displayMessageLine( "1 - View my balance" );
  109.       screen.displayMessageLine( "2 - Withdraw cash" );
  110.       screen.displayMessageLine( "3 - Deposit funds" );
  111.       screen.displayMessageLine( "4 - Exitn" );
  112.       screen.displayMessage( "Enter a choice: " );
  113.       return keypad.getInput(); // return user's selection
  114.    } // end method displayMainMenu
  115.          
  116.    // return object of specified Transaction subclass
  117.    private Transaction createTransaction( int type )
  118.    {
  119.       Transaction temp = null; // temporary Transaction variable
  120.       
  121.       // determine which type of Transaction to create     
  122.       switch ( type )
  123.       {
  124.          case BALANCE_INQUIRY: // create new BalanceInquiry transaction
  125.             temp = new BalanceInquiry( 
  126.                currentAccountNumber, screen, bankDatabase );
  127.             break;
  128.          case WITHDRAWAL: // create new Withdrawal transaction
  129.             temp = new Withdrawal( currentAccountNumber, screen, 
  130.                bankDatabase, keypad, cashDispenser );
  131.             break; 
  132.          case DEPOSIT: // create new Deposit transaction
  133.             temp = new Deposit( currentAccountNumber, screen, 
  134.                bankDatabase, keypad, depositSlot );
  135.             break;
  136.       } // end switch
  137.       return temp; // return the newly created object
  138.    } // end method createTransaction
  139. } // end class ATM
  140. /**************************************************************************
  141.  * (C) Copyright 1992-2005 by Deitel & Associates, Inc. and               *
  142.  * Pearson Education, Inc. All Rights Reserved.                           *
  143.  *                                                                        *
  144.  * DISCLAIMER: The authors and publisher of this book have used their     *
  145.  * best efforts in preparing the book. These efforts include the          *
  146.  * development, research, and testing of the theories and programs        *
  147.  * to determine their effectiveness. The authors and publisher make       *
  148.  * no warranty of any kind, expressed or implied, with regard to these    *
  149.  * programs or to the documentation contained in these books. The authors *
  150.  * and publisher shall not be liable in any event for incidental or       *
  151.  * consequential damages in connection with, or arising out of, the       *
  152.  * furnishing, performance, or use of these programs.                     *
  153.  *************************************************************************/