Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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(); //crate deposit slot
- bankDatabase = new BankDatabase(); //create acct info database
- } //end no-argument ATM constructor
- //start ATM
- public void run()
- {
- //welcome and authenticate user; perform transaction
- while(true)
- {
- //loop while user is not yet authenticated
- while(!userAuthenticated)
- {
- screen.displayMessageLine("\nSelamat Datang!");
- authenticateUser(); //authenticated user
- } //end while
- performTransactions(); //user is now authenticated
- userAuthenticated = false; //reset before next ATM session
- currentAccountNumber = 0; //reset before next ATM session
- screen.displayMessageLine("\nTerima Kasih!\nSampai Jumpa!");
- }
- } //end method run
- //attempts to authenticate user against database
- private void authenticateUser()
- {
- screen.displayMessage("\nSilahkan masukkan nomor akun anda : ");
- int accountNumber = keypad.getInput(); //input account number
- screen.displayMessage("\nSilahkan masukkan PIN anda : "); //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
- }
- else
- {
- screen.displayMessageLine("Nomor akun atau PIN anda tidak valid.");
- screen.displayMessageLine("Silahkan coba lagi.");
- }
- }
- //display the main menu and perform transaction
- 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();
- break;
- case EXIT :
- screen.displayMessageLine("\nKeluar dari sistem...");
- userExited = true;
- break;
- default : //user didn't enter an integer from 1-4
- screen.displayMessageLine("\nMenu yang anda pilih tidak valid.");
- screen.displayMessageLine("Silahkan coba lagi.");
- break;
- } //end switch
- } //end while
- } //end method performTransaction
- private int displayMainMenu()
- {
- screen.displayMessageLine("\nMain Menu :");
- screen.displayMessageLine("1. Lihat Saldo"); //view my balance
- screen.displayMessageLine("2. Tarik Uang"); //withdraw cash
- screen.displayMessageLine("3. Simpan Uang"); //deposit funds
- screen.displayMessageLine("4. Keluar\n");
- screen.displayMessage("Masukkan pilihan : ");
- return keypad.getInput(); //return user's selection
- }
- private Transaction createTransaction(int type)
- {
- Transaction temp = null;
- switch(type){
- case BALANCE_INQUIRY :
- temp = new BalanceInquiry(currentAccountNumber, screen, bankDatabase);
- break;
- case WITHDRAWAL :
- temp = new Withdrawal(currentAccountNumber, screen, bankDatabase, keypad, cashDispenser);
- break;
- case DEPOSIT :
- temp = new Deposit(currentAccountNumber, screen, bankDatabase, keypad, depositSlot);
- break;
- }
- return temp;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment