-
Notifications
You must be signed in to change notification settings - Fork 5.9k
Expand file tree
/
Copy pathATM.java
More file actions
60 lines (51 loc) · 2.35 KB
/
ATM.java
File metadata and controls
60 lines (51 loc) · 2.35 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
package atm;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Scanner;
import java.util.concurrent.atomic.AtomicLong;
public class ATM {
private final BankingService bankingService;
private final CashDispenser cashDispenser;
private static final AtomicLong transactionCounter = new AtomicLong(0);
public ATM(BankingService bankingService, CashDispenser cashDispenser) {
this.bankingService = bankingService;
this.cashDispenser = cashDispenser;
}
public void authenticateUser(Card card) {
Scanner scanner = new Scanner(System.in);
System.out.print("Enter PIN for card " + card.getCardNumber() + ": ");
String enteredPin = scanner.nextLine();
boolean isAuthenticated = bankingService.authenticate(card.getCardNumber(), enteredPin);
if (isAuthenticated) {
System.out.println("Authentication successful.");
} else {
System.out.println("Authentication failed.");
}
}
public double checkBalance(String accountNumber) {
Account account = bankingService.getAccount(accountNumber);
return account.getBalance();
}
public void withdrawCash(String accountNumber, double amount) {
Account account = bankingService.getAccount(accountNumber);
// Check if sufficient balance is available
if (account != null && account.getBalance() < amount) {
System.out.println("Error: Insufficient balance.");
return;
}
Transaction transaction = new WithdrawalTransaction(generateTransactionId(), account, amount);
bankingService.processTransaction(transaction);
cashDispenser.dispenseCash((int) amount);
}
public void depositCash(String accountNumber, double amount) {
Account account = bankingService.getAccount(accountNumber);
Transaction transaction = new DepositTransaction(generateTransactionId(), account, amount);
bankingService.processTransaction(transaction);
}
private String generateTransactionId() {
// Generate a unique transaction ID
long transactionNumber = transactionCounter.incrementAndGet();
String timestamp = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"));
return "TXN" + timestamp + String.format("%010d", transactionNumber);
}
}