document.write('
Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. public class Withdrawal extends Transaction
  2. {
  3. private int amount;
  4. private Keypad keypad;
  5. private CashDispenser cashDispenser;
  6.  
  7. private final static int CANCELED = 6;
  8.  
  9. public Withdrawal(int userAccountNumber, Screen atmScreen, BankDatabase atmBankDatabase, Keypad atmKeypad, CashDispenser atmCashDispenser){
  10. super(userAccountNumber, atmScreen, atmBankDatabase);
  11.  
  12. keypad = atmKeypad;
  13. cashDispenser = atmCashDispenser;
  14. }
  15.  
  16. @Override
  17. public void execute(){
  18. boolean cashDispensed = false;
  19. double availableBalance;
  20.  
  21. BankDatabase bankDatabase = getBankDatabase();
  22. Screen screen = getScreen();
  23.  
  24. do{
  25. amount = displayMenuOfAmounts();
  26.  
  27. if(amount != CANCELED){
  28. availableBalance = bankDatabase.getAvailableBalance(getAccountNumber());
  29.  
  30. if(amount <= availableBalance){
  31. if(cashDispenser.isSufficientCashAvailable(amount)){
  32.  
  33. bankDatabase.debit(getAccountNumber(), amount);
  34.  
  35. cashDispenser.dispenseCash(amount);
  36. cashDispensed = true;
  37. // instructs user to take cash
  38. screen.displayMessageLine("\\nYour cash has been dispensed. Please take your cash now.");
  39. } // end if
  40. else{
  41. // cash dispenser does not have enough cash
  42. screen.displayMessageLine("\\nInsufficient cash available in the ATM.");
  43. screen.displayMessageLine("\\nPlease choose a smaller amount.");
  44. } // end if
  45. } // end if
  46. else{
  47. // not enough money available in user's account
  48. screen.displayMessageLine("\\nInsufficient funds in your account.");
  49. screen.displayMessageLine("\\nPlease choose a smaller amount.");
  50. } // end if
  51. } // end if
  52. else{
  53. // user choose cancel menu option
  54. screen.displayMessageLine("\\nCancelling transactions...");
  55. return; // return to main menu because user canceled
  56. } // end if
  57. } while(!cashDispensed);
  58. } // end method execute
  59.  
  60. // display a menu of withdrawal amounts and the options to cancel
  61. // return the chosen amount or 0 if the user chooses to cancel
  62. private int displayMenuOfAmounts(){
  63. int userChoice = 0; // local variable to store return value
  64.  
  65. Screen screen = getScreen(); // get screen references
  66.  
  67. // array of amounts to correspond to menu numbers
  68. int[] amounts = {0, 20, 40, 60, 100, 200};
  69.  
  70. // loop while no valid choice has been made
  71. while(userChoice == 0){
  72. // display the withdrawal menu
  73. screen.displayMessageLine("\\nWithdrawal Menu : ");
  74. screen.displayMessageLine("1 - $20");
  75. screen.displayMessageLine("2 - $40");
  76. screen.displayMessageLine("3 - $60");
  77. screen.displayMessageLine("4 - $100");
  78. screen.displayMessageLine("5 - $200");
  79. screen.displayMessageLine("6 - Cancel Transaction");
  80. screen.displayMessage("\\nChoose a withdrawal amount : ");
  81.  
  82. int input = keypad.getInput(); // get user input through keypad
  83.  
  84. // determine how to proceed based on the input value
  85. switch(input){
  86. // if the user choose a withdrawal amount
  87. // i.e choose option 1, 2, 3, 4 or 5
  88. // return the corresponding amount from amounts's array
  89. case 1 :
  90. case 2 :
  91. case 3 :
  92. case 4 :
  93. case 5 :
  94. userChoice = amounts[input]; // save user's choice
  95. break;
  96.  
  97. case CANCELED :
  98. // the user choose to cancel
  99. userChoice = CANCELED; // save user's choice
  100. break;
  101.  
  102. default :
  103. // the user did not enter value between 1-6
  104. screen.displayMessageLine("\\nInvalid selection.");
  105. screen.displayMessageLine("Try again.");
  106. } // end switch
  107. } // end while
  108.  
  109. return userChoice; // return withdrawal amount or CANCELED
  110. } // end method displayMenuOfAmounts
  111. } // end class Withdrawal
');