ATM.java
上传用户:ljt780218
上传日期:2022-07-30
资源大小:110k
文件大小:7k
- // ATM.java
- // Represents an automated teller machine
- public class ATM
- {
- private boolean userAuthenticated; // whether user is authenticated
- private int currentAccountNumber; // current user's account number
- private Screen screen; // ATM's screen
- private Keypad keypad; // ATM's keypad
- private CashDispenser cashDispenser; // ATM's cash dispenser
- private DepositSlot depositSlot; // ATM's deposit slot
- private BankDatabase bankDatabase; // account information database
- // constants corresponding to main menu options
- private static final int BALANCE_INQUIRY = 1;
- private static final int WITHDRAWAL = 2;
- private static final int DEPOSIT = 3;
- private static final int EXIT = 4;
- // no-argument ATM constructor initializes instance variables
- public ATM()
- {
- userAuthenticated = false; // user is not authenticated to start
- currentAccountNumber = 0; // no current account number to start
- screen = new Screen(); // create screen
- keypad = new Keypad(); // create keypad
- cashDispenser = new CashDispenser(); // create cash dispenser
- depositSlot = new DepositSlot(); // create deposit slot
- bankDatabase = new BankDatabase(); // create acct info database
- } // end no-argument ATM constructor
- // start ATM
- public void run()
- {
- // welcome and authenticate user; perform transactions
- while ( true )
- {
- // loop while user is not yet authenticated
- while ( !userAuthenticated )
- {
- screen.displayMessageLine( "nWelcome!" );
- authenticateUser(); // authenticate user
- } // end while
-
- performTransactions(); // user is now authenticated
- userAuthenticated = false; // reset before next ATM session
- currentAccountNumber = 0; // reset before next ATM session
- screen.displayMessageLine( "nThank you! Goodbye!" );
- } // end while
- } // end method run
- // attempts to authenticate user against database
- private void authenticateUser()
- {
- screen.displayMessage( "nPlease enter your account number: " );
- int accountNumber = keypad.getInput(); // input account number
- screen.displayMessage( "nEnter your PIN: " ); // prompt for PIN
- int pin = keypad.getInput(); // input PIN
-
- // set userAuthenticated to boolean value returned by database
- userAuthenticated =
- bankDatabase.authenticateUser( accountNumber, pin );
-
- // check whether authentication succeeded
- if ( userAuthenticated )
- {
- currentAccountNumber = accountNumber; // save user's account #
- } // end if
- else
- screen.displayMessageLine(
- "Invalid account number or PIN. Please try again." );
- } // end method authenticateUser
- // display the main menu and perform transactions
- private void performTransactions()
- {
- // local variable to store transaction currently being processed
- Transaction currentTransaction = null;
-
- boolean userExited = false; // user has not chosen to exit
- // loop while user has not chosen option to exit system
- while ( !userExited )
- {
- // show main menu and get user selection
- int mainMenuSelection = displayMainMenu();
- // decide how to proceed based on user's menu selection
- switch ( mainMenuSelection )
- {
- // user chose to perform one of three transaction types
- case BALANCE_INQUIRY:
- case WITHDRAWAL:
- case DEPOSIT:
- // initialize as new object of chosen type
- currentTransaction =
- createTransaction( mainMenuSelection );
- currentTransaction.execute(); // execute transaction
- break;
- case EXIT: // user chose to terminate session
- screen.displayMessageLine( "nExiting the system..." );
- userExited = true; // this ATM session should end
- break;
- default: // user did not enter an integer from 1-4
- screen.displayMessageLine(
- "nYou did not enter a valid selection. Try again." );
- break;
- } // end switch
- } // end while
- } // end method performTransactions
-
- // display the main menu and return an input selection
- private int displayMainMenu()
- {
- screen.displayMessageLine( "nMain menu:" );
- screen.displayMessageLine( "1 - View my balance" );
- screen.displayMessageLine( "2 - Withdraw cash" );
- screen.displayMessageLine( "3 - Deposit funds" );
- screen.displayMessageLine( "4 - Exitn" );
- screen.displayMessage( "Enter a choice: " );
- return keypad.getInput(); // return user's selection
- } // end method displayMainMenu
-
- // return object of specified Transaction subclass
- private Transaction createTransaction( int type )
- {
- Transaction temp = null; // temporary Transaction variable
-
- // determine which type of Transaction to create
- switch ( type )
- {
- case BALANCE_INQUIRY: // create new BalanceInquiry transaction
- temp = new BalanceInquiry(
- currentAccountNumber, screen, bankDatabase );
- break;
- case WITHDRAWAL: // create new Withdrawal transaction
- temp = new Withdrawal( currentAccountNumber, screen,
- bankDatabase, keypad, cashDispenser );
- break;
- case DEPOSIT: // create new Deposit transaction
- temp = new Deposit( currentAccountNumber, screen,
- bankDatabase, keypad, depositSlot );
- break;
- } // end switch
- return temp; // return the newly created object
- } // end method createTransaction
- } // end class ATM
- /**************************************************************************
- * (C) Copyright 1992-2005 by Deitel & Associates, Inc. and *
- * Pearson Education, Inc. All Rights Reserved. *
- * *
- * DISCLAIMER: The authors and publisher of this book have used their *
- * best efforts in preparing the book. These efforts include the *
- * development, research, and testing of the theories and programs *
- * to determine their effectiveness. The authors and publisher make *
- * no warranty of any kind, expressed or implied, with regard to these *
- * programs or to the documentation contained in these books. The authors *
- * and publisher shall not be liable in any event for incidental or *
- * consequential damages in connection with, or arising out of, the *
- * furnishing, performance, or use of these programs. *
- *************************************************************************/