public class Withdrawal extends Transaction
{
private int amount;
private Keypad keypad;
private CashDispenser cashDispenser;
private final static int CANCELED = 6;
public Withdrawal(int userAccountNumber, Screen atmScreen, BankDatabase atmBankDatabase, Keypad atmKeypad, CashDispenser atmCashDispenser){
super(userAccountNumber, atmScreen, atmBankDatabase);
keypad = atmKeypad;
cashDispenser = atmCashDispenser;
}
@Override
public void execute(){
boolean cashDispensed = false;
double availableBalance;
BankDatabase bankDatabase = getBankDatabase();
Screen screen = getScreen();
do{
amount = displayMenuOfAmounts();
if(amount != CANCELED){
availableBalance = bankDatabase.getAvailableBalance(getAccountNumber());
if(amount <= availableBalance){
if(cashDispenser.isSufficientCashAvailable(amount)){
bankDatabase.debit(getAccountNumber(), amount);
cashDispenser.dispenseCash(amount);
cashDispensed = true;
// instructs user to take cash
screen.displayMessageLine("\\nYour cash has been dispensed. Please take your cash now.");
} // end if
else{
// cash dispenser does not have enough cash
screen.displayMessageLine("\\nInsufficient cash available in the ATM.");
screen.displayMessageLine("\\nPlease choose a smaller amount.");
} // end if
} // end if
else{
// not enough money available in user's account
screen.displayMessageLine("\\nInsufficient funds in your account.");
screen.displayMessageLine("\\nPlease choose a smaller amount.");
} // end if
} // end if
else{
// user choose cancel menu option
screen.displayMessageLine("\\nCancelling transactions...");
return; // return to main menu because user canceled
} // end if
} while(!cashDispensed);
} // end method execute
// display a menu of withdrawal amounts and the options to cancel
// return the chosen amount or 0 if the user chooses to cancel
private int displayMenuOfAmounts(){
int userChoice = 0; // local variable to store return value
Screen screen = getScreen(); // get screen references
// array of amounts to correspond to menu numbers
int[] amounts = {0, 20, 40, 60, 100, 200};
// loop while no valid choice has been made
while(userChoice == 0){
// display the withdrawal menu
screen.displayMessageLine("\\nWithdrawal Menu : ");
screen.displayMessageLine("1 - $20");
screen.displayMessageLine("2 - $40");
screen.displayMessageLine("3 - $60");
screen.displayMessageLine("4 - $100");
screen.displayMessageLine("5 - $200");
screen.displayMessageLine("6 - Cancel Transaction");
screen.displayMessage("\\nChoose a withdrawal amount : ");
int input = keypad.getInput(); // get user input through keypad
// determine how to proceed based on the input value
switch(input){
// if the user choose a withdrawal amount
// i.e choose option 1, 2, 3, 4 or 5
// return the corresponding amount from amounts's array
case 1 :
case 2 :
case 3 :
case 4 :
case 5 :
userChoice = amounts[input]; // save user's choice
break;
case CANCELED :
// the user choose to cancel
userChoice = CANCELED; // save user's choice
break;
default :
// the user did not enter value between 1-6
screen.displayMessageLine("\\nInvalid selection.");
screen.displayMessageLine("Try again.");
} // end switch
} // end while
return userChoice; // return withdrawal amount or CANCELED
} // end method displayMenuOfAmounts
} // end class Withdrawal