Findryan

Untitled

Dec 9th, 2016
310
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 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