yoshiputri

Untitled

Oct 19th, 2017
388
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.46 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.     {
  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(); //crate deposit slot
  26.         bankDatabase = new BankDatabase(); //create acct info database
  27.     } //end no-argument ATM constructor
  28.  
  29.     //start ATM
  30.     public void run()
  31.     {
  32.         //welcome and authenticate user; perform transaction
  33.         while(true)
  34.         {
  35.             //loop while user is not yet authenticated
  36.             while(!userAuthenticated)
  37.             {
  38.                 screen.displayMessageLine("\nSelamat Datang!");
  39.                 authenticateUser(); //authenticated user
  40.             }  //end while
  41.            
  42.             performTransactions(); //user is now authenticated
  43.             userAuthenticated = false;  //reset before next ATM session
  44.             currentAccountNumber = 0;  //reset before next ATM session
  45.             screen.displayMessageLine("\nTerima Kasih!\nSampai Jumpa!");
  46.         }
  47.     } //end method run
  48.  
  49.     //attempts to authenticate user against database
  50.     private void authenticateUser()
  51.     {
  52.         screen.displayMessage("\nSilahkan masukkan nomor akun anda : ");
  53.         int accountNumber = keypad.getInput(); //input account number
  54.         screen.displayMessage("\nSilahkan masukkan PIN anda : "); //prompt for PIN
  55.         int pin = keypad.getInput(); //input PIN
  56.        
  57.         //set userAuthenticated to boolean value returned by database
  58.         userAuthenticated = bankDatabase.authenticateUser(accountNumber, pin);
  59.  
  60.         //check whether authentication succeeded
  61.         if(userAuthenticated)
  62.         {
  63.             currentAccountNumber = accountNumber;  //save user's account
  64.         }
  65.         else
  66.         {
  67.             screen.displayMessageLine("Nomor akun atau PIN anda tidak valid.");
  68.             screen.displayMessageLine("Silahkan coba lagi.");
  69.         }
  70.     }
  71.  
  72.     //display the main menu and perform transaction
  73.     private void performTransactions()
  74.     {
  75.         //local variable to store transaction currently being processed
  76.         Transaction currentTransaction = null;
  77.         boolean userExited = false;  //user has not chosen to exit.
  78.        
  79.         //loop while user has not chosen option to exit system
  80.         while(!userExited)
  81.         {
  82.             //show main menu and get user selection
  83.             int mainMenuSelection = displayMainMenu();
  84.  
  85.             //decide how to proceed based on user's menu selection
  86.             switch(mainMenuSelection)
  87.             {
  88.                 //user chose to perform one of three transaction types
  89.                 case BALANCE_INQUIRY :
  90.                 case WITHDRAWAL :
  91.                 case DEPOSIT :
  92.                     //initialize as new object of chosen type
  93.                     currentTransaction = createTransaction(mainMenuSelection);
  94.                     currentTransaction.execute();
  95.                     break;
  96.                 case EXIT :
  97.                     screen.displayMessageLine("\nKeluar dari sistem...");
  98.                     userExited = true;    
  99.                     break;
  100.                 default : //user didn't enter an integer from 1-4
  101.                     screen.displayMessageLine("\nMenu yang anda pilih tidak valid.");
  102.                     screen.displayMessageLine("Silahkan coba lagi.");
  103.                     break;
  104.             }  //end switch
  105.         } //end while
  106.     }   //end method performTransaction
  107.  
  108.     private int displayMainMenu()
  109.     {
  110.         screen.displayMessageLine("\nMain Menu :");
  111.         screen.displayMessageLine("1. Lihat Saldo"); //view my balance
  112.         screen.displayMessageLine("2. Tarik Uang"); //withdraw cash
  113.         screen.displayMessageLine("3. Simpan Uang"); //deposit funds
  114.         screen.displayMessageLine("4. Keluar\n");
  115.         screen.displayMessage("Masukkan pilihan : ");
  116.         return keypad.getInput(); //return user's selection
  117.     }
  118.    
  119.     private Transaction createTransaction(int type)
  120.     {
  121.         Transaction temp = null;      
  122.         switch(type){
  123.             case BALANCE_INQUIRY :
  124.                 temp = new BalanceInquiry(currentAccountNumber, screen, bankDatabase);
  125.                 break;
  126.             case WITHDRAWAL :
  127.                 temp = new Withdrawal(currentAccountNumber, screen, bankDatabase, keypad, cashDispenser);
  128.                 break;
  129.             case DEPOSIT :
  130.                 temp = new Deposit(currentAccountNumber, screen, bankDatabase, keypad, depositSlot);
  131.                 break;
  132.         }  
  133.         return temp;  
  134.     }  
  135. }
Advertisement
Add Comment
Please, Sign In to add comment