@@ -17,7 +17,6 @@ public class ATMFrame extends JFrame implements ActionListener {
17
17
// Static variable to hold the single instance of ATMFrame
18
18
private static ATMFrame instance ;
19
19
private static Screen screen ; // ATM's screen
20
- private final Keypad keypad ; // ATM's keypad
21
20
private final CardPanel cardPanel ;
22
21
private final CashDispenser cashDispenser ; // ATM's cash dispenser
23
22
private final BankDatabase bankDatabase ; // account information database
@@ -59,36 +58,30 @@ private ATMFrame() {
59
58
userAuthenticated = false ; // user is not authenticated to start
60
59
currentAccountNumber = 0 ; // no current account number to start
61
60
screen = new Screen (); // create screen
62
- keypad = new Keypad (); // create keypad
63
61
cashDispenser = new CashDispenser (); // create cash dispenser
64
62
bankDatabase = new BankDatabase (); // create acct info database
65
- GlobalState .ATMState = "waitingCard" ; // Change ui state to login
66
- screen .displayMessageLine ("Welcome!" );
67
- screen .displayMessageLine ("Please insert your card" );
68
-
69
- // Create a timer to display the account number prompt after 3 seconds (3000 milliseconds)
70
- /**
71
- Timer timer = new Timer(3000, new ActionListener() {
72
- @Override
73
- public void actionPerformed(ActionEvent e) {
74
- screen.displayMessage("Please enter your account number: ");
75
- ((Timer)e.getSource()).stop(); // Stop the timer after it runs once
76
- }
77
- });
78
- timer.setRepeats(false); // Only execute once
79
- timer.start(); // Start the timer
80
- **/
63
+ welcomeMessage ();
81
64
82
65
}
83
66
67
+
68
+ private void wait (int mSec ) {
69
+ try {
70
+ Thread .sleep (mSec ); // Wait for 3000 milliseconds (3 seconds)
71
+ } catch (InterruptedException e ) {
72
+ e .printStackTrace (); // Handle the exception
73
+ }
74
+ }
75
+
76
+
84
77
static void displayMainMenu () {
85
78
GlobalState .ATMState = "Menu" ;
86
79
screen .clearScreen ();
87
80
screen .displayMessageLine ("Main menu:" );
88
81
screen .displayMessageLine ("1 - View my balance" );
89
82
screen .displayMessageLine ("2 - Withdraw cash" );
90
83
screen .displayMessageLine ("3 - Transfer" );
91
- screen .displayMessageLine ("4 - Exit \n " );
84
+ screen .displayMessageLine ("Eject card to exit ATM \n " );
92
85
screen .displayMessage ("Enter a choice: " );
93
86
94
87
} // end method displayMainMenu
@@ -105,6 +98,17 @@ public static void appendMessage(String text) {
105
98
messageField .appendMessage (text );
106
99
}
107
100
101
+ public static void welcomeMessage () {
102
+ screen .clearScreen ();
103
+ GlobalState .ATMState = "waitingCard" ; // Change ui state to login
104
+ screen .displayMessageLine ("Welcome!" );
105
+ screen .displayMessageLine ("Please insert your card" );
106
+ }
107
+
108
+ public static void loginMessage () {
109
+ screen .displayMessage ("Please Enter your account number: " );
110
+ }
111
+
108
112
private void authenticateUser (int input ) {
109
113
GlobalState .allowDecimal = false ;
110
114
if (!isPinInput ) {
@@ -150,22 +154,14 @@ private void menuSelection(int choice) {
150
154
break ;
151
155
case WITHDRAWAL :
152
156
GlobalState .ATMState = "Withdrawal" ;
153
- temp = new Withdrawal (currentAccountNumber , screen , bankDatabase , keypad , cashDispenser );
157
+ temp = new Withdrawal (currentAccountNumber , screen , bankDatabase , cashDispenser );
154
158
temp .execute (0 );
155
159
break ;
156
160
case TRANSFER :
157
161
GlobalState .ATMState = "Transfer" ;
158
- temp = new Transfer (currentAccountNumber , screen , bankDatabase , keypad );
162
+ temp = new Transfer (currentAccountNumber , screen , bankDatabase );
159
163
temp .execute (0 );
160
164
break ;
161
- case EXIT : // user chose to terminate session
162
- screen .clearScreen ();
163
- screen .displayMessageLine ("\n Exiting the system..." );
164
- screen .displayMessageLine ("\n Welcome!" );
165
- screen .displayMessage ("\n Please enter your account number: " );
166
- GlobalState .ATMState = "login" ;
167
- userAuthenticated = false ;
168
- break ;
169
165
default : // user did not enter an integer from 1-4
170
166
screen .clearScreen ();
171
167
screen .displayMessageLine (
@@ -190,21 +186,15 @@ public void actionPerformed(ActionEvent e) {
190
186
if ("login" .equals (GlobalState .ATMState )) {
191
187
GlobalState .allowDecimal = false ;
192
188
screen .clearScreen ();
193
- screen .displayMessageLine ("\n Welcome!" );
194
- screen .displayMessage ("\n Please enter your account number: " );
189
+ screen .displayMessage ("Please enter your account number: " );
195
190
accountNumber = 0 ; // Reset account number
196
191
isPinInput = false ; // Reset flag for next authentication attempt
197
192
userAuthenticated = false ;
198
193
} else if ("Menu" .equals (GlobalState .ATMState )) {
199
- GlobalState .allowDecimal = false ;
200
- screen .clearScreen ();
201
- screen .displayMessageLine ("\n Welcome!" );
202
- screen .displayMessage ("\n Please enter your account number: " );
203
- GlobalState .ATMState = "login" ;
204
- } else if ("waitingCard" .equals (GlobalState .ATMState )){
205
194
206
- }
207
- else {
195
+ } else if ("waitingCard" .equals (GlobalState .ATMState )) {
196
+
197
+ } else {
208
198
GlobalState .allowDecimal = false ;
209
199
displayMainMenu ();
210
200
}
@@ -226,20 +216,50 @@ public void actionPerformed(ActionEvent e) {
226
216
} else if (source == keypadPanel .numberButtons [11 ]) { // "00" Button
227
217
textField .appendInput ("00" ); // Append "00" to user input
228
218
229
- } else if (source == cardPanel .insertCardButton ){
219
+ } else if (source == cardPanel .insertCardButton ) {
230
220
System .out .println ("aaa" );
231
- if ("waitingCard" .equals (GlobalState .ATMState )){
221
+ if ("waitingCard" .equals (GlobalState .ATMState )) {
232
222
screen .clearScreen ();
233
223
screen .displayMessageLine ("Card read successful!" );
234
224
GlobalState .ATMState = "login" ; // Change ui state to login
225
+ loginMessage ();
226
+ }
227
+ } else if (source == cardPanel .ejectCardButton ) {
228
+ if (!"waitingCard" .equals (GlobalState .ATMState )) {
229
+ startCardEjectTimer ();
230
+
235
231
}
236
- } else if (source == cardPanel .ejectCardButton ){
232
+ }
233
+ }
234
+
235
+ private void startCardEjectTimer () {
236
+ if (!"waitingCard" .equals (GlobalState .ATMState )) {
237
+ // Display the initial message immediately
237
238
screen .clearScreen ();
238
239
screen .displayMessageLine ("Ejecting card..." );
239
- GlobalState .ATMState = "waitingCard" ;
240
+
241
+ // Create a timer to execute actions after 3 seconds
242
+ Timer timer = new Timer (3000 , x -> {
243
+ screen .clearScreen (); // Clear the screen after 3 seconds
244
+ screen .displayMessageLine ("Remember to take your card!" ); // Display this message
245
+
246
+ // Start another timer to wait before calling welcomeMessage
247
+ Timer welcomeTimer = new Timer (3000 , y -> {
248
+ welcomeMessage (); // Call welcomeMessage after another 3 seconds
249
+ });
250
+ welcomeTimer .setRepeats (false ); // Ensure this timer only runs once
251
+ welcomeTimer .start (); // Start the welcome timer
252
+ });
253
+
254
+ timer .setRepeats (false ); // Ensure the first timer only runs once
255
+ timer .start (); // Start the first timer
256
+ GlobalState .ATMState = "waitingCard" ; // Update the state
240
257
}
241
258
}
242
259
260
+
261
+
262
+
243
263
private void handler (String text ) {
244
264
System .out .println (GlobalState .ATMState );
245
265
if ("login" .equals (GlobalState .ATMState )) {
0 commit comments