-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathTransfer.java
More file actions
140 lines (109 loc) · 5.17 KB
/
Transfer.java
File metadata and controls
140 lines (109 loc) · 5.17 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
// Transfer.java
// Represents a transfer ATM transaction
public class Transfer extends Transaction{
private Keypad keypad; // reference to keypad
private Screen screen; // reference to screen
private int accountNumber; // indicates Transferor account involved
private int transfereeAccountNumber; // indicates transferee account involved
private BankDatabase bankDatabase; // account info database
private double amount; // amount to deposit
private final static int CANCELED = 0; // constant for cancel option
// Transfer constructor
public Transfer( int userAccountNumber, Screen atmScreen,
BankDatabase atmBankDatabase, Keypad atmKeypad )
{
// initialize superclass variables
super( userAccountNumber, atmScreen, atmBankDatabase );
accountNumber = userAccountNumber;
screen = atmScreen;
bankDatabase = atmBankDatabase;
keypad = atmKeypad; // initialize references to keypad
transfereeAccountNumber = 0; // no current account number to start
} // end Transfer constructor
// Execute transfer for GUI
public void executeGUI(int targetAccount, double amount) {
BankDatabase bankDatabase = getBankDatabase();
Screen screen = getScreen();
// Validate the target account
if (!bankDatabase.isValidAccount(targetAccount)) {
screen.displayMessageLine("Target account does not exist.");
return;
}
// Validate sufficient funds
if (bankDatabase.getAvailableBalance(getAccountNumber()) < amount) {
screen.displayMessageLine("Insufficient funds in your account.");
return;
}
// Perform the transfer
bankDatabase.debit(getAccountNumber(), amount); // Debit sender
bankDatabase.credit(targetAccount, amount); // Credit receiver
screen.displayMessageLine("Transfer successful!");
}
@Override
public void execute(){
//Start inputing transferee account number
while(bankDatabase.isValidAccount(transfereeAccountNumber) == false || transfereeAccountNumber == 0){
//Exclude the base case
if(transfereeAccountNumber != 0)
screen.displayMessageLine( "\nThe transferee account you entered does not exist. Please Enter again. \n");
//Input transferee account number
screen.displayMessage( "\nPlease enter transferee account number" +
"(or 0 to cancel): ");
transfereeAccountNumber = keypad.getInput();
//Cancel transfer
if(transfereeAccountNumber == CANCELED)
return;
//Invalid Transfer account - transfering to Transferor's account
if(transfereeAccountNumber == accountNumber) {
screen.displayMessageLine( "\nYou cannot transfer to yourself. Please Enter again. \n");
transfereeAccountNumber = 0;
}
}
//Confirmation
screen.displayMessage( "\nTransferee account number :" + transfereeAccountNumber);
if(!isConfirmed())
return;
//Input amount to transfer
amount = -1; // Initialize to an invalid state
while (true) {
screen.displayMessage("\nPlease enter a transfer amount in HK$ (or 0 to cancel): ");
amount = keypad.getInputDouble();
// Cancel transfer
if (amount == CANCELED)
return;
// Check if the amount is valid
if (amount <= 0.00) {
screen.displayMessageLine("\nYou should enter a positive amount. Please enter again.\n");
} else if (amount > bankDatabase.getAvailableBalance(accountNumber)) {
screen.displayMessageLine("\nYou do not have enough money in your account. Please enter an amount less than or equal to your available balance.\n");
} else {
break; // Valid amount, exit the loop
}
}
screen.displayMessageLine( "\nTransferor account number: " + accountNumber );
screen.displayMessageLine( "Transferee account number: " + transfereeAccountNumber );
screen.displayMessage( "Transfer amount: ");
screen.displayDollarAmount( amount );
if(!isConfirmed())
return;
startTransfer();
}
public void startTransfer() {
bankDatabase.debit(accountNumber, amount);
bankDatabase.credit(transfereeAccountNumber, amount);
screen.displayMessage("\nYou successfully transfered ");
screen.displayDollarAmount(amount);
screen.displayMessageLine(" to Account " + transfereeAccountNumber + ".");
screen.displayMessage("Your remaining Available balance:");
screen.displayDollarAmount( bankDatabase.getAvailableBalance(accountNumber) );
screen.displayMessageLine( "" );
}
public boolean isConfirmed() {
int confirmation = 0;
screen.displayMessage( "\nPress any number (except 0) to confirm (or 0 to cancel): " );
confirmation = keypad.getInput();
if(confirmation == CANCELED)
return false;
return true;
}
}