public class Withdraw extends Transaction
{
private int amount;
private Keypad keypad;
private CashDispenser cashDispenser;
private final static int CANCELED = 6;
public Withdraw(int userAccountNumber, Screen atmScreen, BankDatabase atmBankDatabase, Keypad atmKeypad, CashDispenser atmCashDispenser)
{
super( userAccountNumber, atmScreen, atmBankDatabase );
keypad = atmKeypad;
cashDispenser = atmCashDispenser;
}
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;
screen.displayMessageLine("\\nUang anda telah" + " dikeluarkan. Silahkan ambil uang anda.");
}
else
{
screen.displayMessageLine("\\nUang tidak cukup tersedia di ATM." + "\\n\\nSilakan pilih jumlah yang lebih kecil.");
}
}
else
{
screen.displayMessageLine("\\nUang di akun anda tidak mencukupi." + "\\n\\nSilakan pilih jumlah yang lebih kecil.");
}
}
else
{
screen.displayMessageLine( "\\nMembatalkan Transaksi..." );
return;
}
}while (!cashDispensed);
}
private int displayMenuOfAmounts()
{
int userChoice = 0;
Screen screen = getScreen();
int[] amounts = {0,20,40,60,100,200};
while(userChoice == 0)
{
screen.displayMessageLine( "\\nMenu Penarikan:" );
screen.displayMessageLine( "1 - $20" );
screen.displayMessageLine( "2 - $40" );
screen.displayMessageLine( "3 - $60" );
screen.displayMessageLine( "4 - $100" );
screen.displayMessageLine( "5 - $200" );
screen.displayMessageLine( "6 - Membatalkan Transaksi" );
screen.displayMessage( "\\nPilih menu penarikan: " );
int input = keypad.getInput();
switch(input)
{
case 1:
case 2:
case 3:
case 4:
case 5:
userChoice = amounts[input];
break;
case CANCELED:
userChoice = CANCELED;
break;
default:
screen.displayMessageLine("\\nPilihan anda salah. Silahkan coba lagi.");
}
}
return userChoice;
}
}