-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathBankSystem.java
More file actions
136 lines (109 loc) · 4.91 KB
/
BankSystem.java
File metadata and controls
136 lines (109 loc) · 4.91 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
package com.bankApp;
import java.util.*;
import java.io.*;
public class BankSystem implements Serializable {
private final Map<String, User> usersByUsername = new HashMap<>();
private final Map<String, Integer> giftCodes = new HashMap<>();
private static final String DATA_FILE = "users.dat";
private transient User currentUser;
// ---------------- Методы для сохранения/загрузки ----------------
public void saveData() {
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(DATA_FILE))) {
oos.writeObject(this);
} catch (IOException e) {
System.out.println("Ошибка при сохранении данных банка: " + e.getMessage());
}
}
public static BankSystem loadData() {
File file = new File(DATA_FILE);
if (!file.exists()) return new BankSystem();
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file))) {
return (BankSystem) ois.readObject();
} catch (IOException | ClassNotFoundException e) {
System.out.println("Ошибка при загрузке данных банка: " + e.getMessage());
return new BankSystem();
}
}
// ---------------- Пользователи ----------------
public boolean registerUser(String username, String password) {
if (username == null || password == null || usersByUsername.containsKey(username)) return false;
User user = new User(username, password, Role.USER);
usersByUsername.put(username, user);
return true;
}
public User login(String username, String password) {
User user = usersByUsername.get(username);
if (user != null && user.checkPassword(password)) {
currentUser = user;
return user;
}
return null;
}
public User getCurrentUser() {
return currentUser;
}
public void setCurrentUser(User user) {
this.currentUser = user;
}
public void logout() {
currentUser = null;
}
public boolean addMoney(String username, double amount) {
User user = usersByUsername.get(username);
return user != null && user.deposit(amount);
}
public boolean transfer(String toUsername, double amount) {
if (currentUser == null) return false;
User toUser = usersByUsername.get(toUsername);
return toUser != null && currentUser.transfer(toUser, amount);
}
public boolean addMoonsToUser(String username, int moons) {
User user = usersByUsername.get(username);
if (user == null) return false;
user.addMoons(moons);
return true;
}
public boolean sendGift(String toUsername, String giftName) {
if (currentUser == null) {
System.out.println("Сначала войдите в систему!");
return false;
}
User recipient = usersByUsername.get(toUsername);
if (recipient == null) {
System.out.println("Получатель не найден!");
return false;
}
// Проверяем наличие подарка по названию
if (!Gift.isGiftAvailable(giftName)) {
System.out.println("Такого подарка нет!");
return false;
}
// Создаём экземпляр подарка с указанием отправителя
Gift giftToSend = Gift.getGift(giftName, currentUser.getUsername());
// Списываем луны корректным методом (НЕ addMoons(-x), а removeMoons)
if (!currentUser.removeMoons(giftToSend.getCostInMoons())) {
System.out.println("Недостаточно лун для отправки подарка!");
return false;
}
recipient.receiveGift(giftToSend);
System.out.println("Подарок \"" + giftToSend.getName() + "\" отправлен пользователю " + recipient.getUsername());
return true;
}
// ---------------- Подарочные коды ----------------
public Map<String, Integer> getAllActiveGiftCodes() {
return Collections.unmodifiableMap(giftCodes);
}
public void addGiftCode(String code, int moons) {
if (code != null && !code.isEmpty()) giftCodes.put(code, moons);
}
public Integer redeemGiftCode(String code) {
return giftCodes.remove(code);
}
// ---------------- Доступ к пользователям ----------------
public User getUser(String username) {
return usersByUsername.get(username);
}
public Collection<User> getAllUsers() {
return Collections.unmodifiableCollection(usersByUsername.values());
}
}