farizmpr

Untitled

Oct 19th, 2017
363
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.22 KB | None | 0 0
  1. public class ATM
  2. {
  3.     private boolean userAuthenticated;  // whether user is authenticated
  4.     private int currentAccountNumber;   // current user's account number
  5.     private Screen screen;  // ATM's screen
  6.     private Keypad keypad;  // ATM's keypad
  7.     private CashDispenser cashDispenser;    // ATM's cash dispenser
  8.     private DepositSlot depositSlot;        // ATM's deposit slot
  9.     private BankDatabase bankDatabase;      // account information database
  10.    
  11.     // constants corresponding to main menu options
  12.     private static final int BALANCE_INQUIRY = 1;
  13.     private static final int WITHDRAWAL = 2;
  14.     private static final int DEPOSIT = 3;
  15.     private static final int EXIT = 4;
  16.    
  17.     // no-argument ATM constructor initializes instance variables
  18.     public ATM(){
  19.         userAuthenticated = false;  // user is not authenticated to start
  20.         currentAccountNumber = 0;   // no current account number to start
  21.         screen = new Screen();      // create screen
  22.         keypad = new Keypad();      // create keypad
  23.         cashDispenser = new CashDispenser();    // create cash dispenser
  24.         depositSlot = new DepositSlot();        // create deposit slot
  25.         bankDatabase = new BankDatabase();      // create account info database
  26.     }   // end no argument ATM constructor
  27.    
  28.     // start ATM
  29.     public void run(){
  30.         // welcome and authenticate user; perform transactions
  31.         while(true){
  32.             // loop while user is not yet authenticated
  33.             while(!userAuthenticated){
  34.                 screen.displayMessageLine("\nWelcome!");
  35.                 authenticateUser();     // authenticate user
  36.             }   // end while
  37.            
  38.             performTransactions();      // user is now authenticated
  39.             userAuthenticated = false;  // reset before next ATM session
  40.             currentAccountNumber = 0;   // reset before next ATM session
  41.             screen.displayMessageLine("\nThank You!\nGoodbye!");
  42.         }   // end while
  43.     }   // end method run
  44.    
  45.     // attempts to authenticate user against database
  46.     private void authenticateUser(){
  47.         screen.displayMessage("\nPlease enter your account number : ");
  48.         int accountNumber = keypad.getInput();  // input account number
  49.         screen.displayMessage("\nEnter your PIN : ");   // prompt for PIN
  50.         int pin = keypad.getInput();    // input PIN
  51.        
  52.         // set userAuthenticated to boolean value returned by database
  53.         userAuthenticated = bankDatabase.authenticateUser(accountNumber, pin);
  54.        
  55.         // check whether authentication succeeded
  56.         if(userAuthenticated){
  57.             currentAccountNumber = accountNumber;   // save user's account
  58.         }   // end if
  59.         else{
  60.             screen.displayMessageLine("Invalid Account Number or PIN.");
  61.             screen.displayMessageLine("Please Try Again.");
  62.         }
  63.     }   // end method authenticateUser
  64.    
  65.     // display the main menu and perform transactions
  66.     private void performTransactions(){
  67.         // local variable to store transaction currently being processed
  68.         Transaction currentTransaction = null;
  69.         boolean userExited = false;     // user has not chosen to exit
  70.        
  71.         // loop while user has not chosen option to exit system
  72.         while(!userExited){
  73.             // show main menu and get user selection
  74.             int mainMenuSelection = displayMainMenu();
  75.            
  76.             // decide how to proceed based on user's menu selection
  77.             switch(mainMenuSelection){
  78.                 // user choose to perform one of three transaction types
  79.                 case BALANCE_INQUIRY :
  80.                 case WITHDRAWAL :
  81.                 case DEPOSIT :
  82.                
  83.                     // initialize as new object choosen type
  84.                     currentTransaction = createTransaction(mainMenuSelection);
  85.                    
  86.                     currentTransaction.execute();   // execute transaction
  87.                     break;
  88.                
  89.                 case EXIT :
  90.                 // user choose to terminate session
  91.                     screen.displayMessageLine("\nExiting the system...");
  92.                     userExited = true;      // this ATM session should end
  93.                     break;
  94.                    
  95.                 default :
  96.                 // user did not enter an integer between 1-4
  97.                     screen.displayMessageLine("\nYou did not enter a valid selection.");
  98.                     screen.displayMessageLine("Please 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.         screen.displayMessageLine("\nMain Menu :");
  107.         screen.displayMessageLine("1 - View my balance");
  108.         screen.displayMessageLine("2 - Withdraw cash");
  109.         screen.displayMessageLine("3 - Deposit funds");
  110.         screen.displayMessageLine("4 - Exit\n");
  111.         screen.displayMessage("Enter a choice : ");
  112.         return keypad.getInput();   // return user's selection
  113.     }   // end method of displayMainMenu
  114.    
  115.     // return object of specified Transaction subclass
  116.     private Transaction createTransaction(int type){
  117.         Transaction temp = null;        // temporary Transaction variable
  118.        
  119.         // determine which type of Transaction to create
  120.         switch(type){
  121.             case BALANCE_INQUIRY :
  122.             // create new BalanceInquiry transaction
  123.                 temp = new BalanceInquiry(currentAccountNumber, screen, bankDatabase);
  124.                 break;
  125.                
  126.             case WITHDRAWAL :
  127.             // create new Withdrawal transaction
  128.                 temp = new Withdrawal(currentAccountNumber, screen, bankDatabase, keypad, cashDispenser);
  129.                 break;
  130.                
  131.             case DEPOSIT :
  132.             // create new Deposit transaction
  133.                 temp = new Deposit(currentAccountNumber, screen, bankDatabase, keypad, depositSlot);
  134.                 break;
  135.         }   // end switch
  136.        
  137.         return temp;    // return newly created object
  138.     }   // end method createTransaction
  139. }   // end class ATM
Add Comment
Please, Sign In to add comment