|
@@ -1,9 +1,16 @@
|
|
|
package com.company;
|
|
|
|
|
|
+import java.io.*;
|
|
|
+import java.util.ArrayList;
|
|
|
+
|
|
|
/**
|
|
|
* Класс реализующий "банк"
|
|
|
*/
|
|
|
public class Bank {
|
|
|
+ /**
|
|
|
+ * Список клиентов банка
|
|
|
+ */
|
|
|
+ private static ArrayList<User> users = new ArrayList<>();
|
|
|
/**
|
|
|
* Голова списка счетов банка
|
|
|
*/
|
|
@@ -19,6 +26,132 @@ public class Bank {
|
|
|
*/
|
|
|
private static String name;
|
|
|
|
|
|
+ /**
|
|
|
+ * Сохранить в файл список всех зарегистрированных клиентов
|
|
|
+ */
|
|
|
+ public static void saveClients() {
|
|
|
+ try {
|
|
|
+ FileOutputStream fos = new FileOutputStream("clients.bin");
|
|
|
+
|
|
|
+ ObjectOutputStream objectOutputStream = new ObjectOutputStream(fos);
|
|
|
+
|
|
|
+ objectOutputStream.writeObject(users);
|
|
|
+ objectOutputStream.close();
|
|
|
+ } catch (IOException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Загрузить из файла список всех зарегистрированных клиентов
|
|
|
+ */
|
|
|
+ public static void loadClients() {
|
|
|
+
|
|
|
+ try {
|
|
|
+ FileInputStream fos = new FileInputStream("clients.bin");
|
|
|
+
|
|
|
+ ObjectInputStream objectOutputStream = new ObjectInputStream(fos);
|
|
|
+
|
|
|
+ Object o = objectOutputStream.readObject();
|
|
|
+
|
|
|
+ ArrayList<?> array;
|
|
|
+ if (o instanceof ArrayList<?>) {
|
|
|
+ array = (ArrayList<?>) o;
|
|
|
+
|
|
|
+ for (Object object : array) {
|
|
|
+ if (object instanceof User) {
|
|
|
+ User user = (User) object;
|
|
|
+ users.add(user);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ for (User u : users) {
|
|
|
+ System.out.println(u.getUuid());
|
|
|
+ }
|
|
|
+
|
|
|
+ objectOutputStream.close();
|
|
|
+ } catch (IOException | ClassNotFoundException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Сохранить список всех счетов в файл
|
|
|
+ */
|
|
|
+ public static void saveBills() {
|
|
|
+
|
|
|
+ // Пересчитать количество счетов
|
|
|
+ count = 0;
|
|
|
+
|
|
|
+ Bill current = head;
|
|
|
+ while (current != null) {
|
|
|
+ count++;
|
|
|
+ current = current.next;
|
|
|
+ }
|
|
|
+
|
|
|
+ current = head;
|
|
|
+
|
|
|
+ Bill[] bills = new Bill[count];
|
|
|
+
|
|
|
+ count = 0;
|
|
|
+
|
|
|
+ while (current != null) {
|
|
|
+ bills[count++] = current;
|
|
|
+ current = current.next;
|
|
|
+ }
|
|
|
+
|
|
|
+ try {
|
|
|
+ FileOutputStream fos = new FileOutputStream("bills.bin");
|
|
|
+
|
|
|
+ ObjectOutputStream objectOutputStream = new ObjectOutputStream(fos);
|
|
|
+
|
|
|
+ objectOutputStream.writeObject(bills);
|
|
|
+ objectOutputStream.close();
|
|
|
+ } catch (IOException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Загрузить из файла список всех счетов
|
|
|
+ */
|
|
|
+ public static void loadBills() {
|
|
|
+ try {
|
|
|
+ FileInputStream fos = new FileInputStream("bills.bin");
|
|
|
+
|
|
|
+ ObjectInputStream objectInputStream = new ObjectInputStream(fos);
|
|
|
+
|
|
|
+ Object o = objectInputStream.readObject();
|
|
|
+
|
|
|
+ if (o instanceof Bill[]) {
|
|
|
+ Bill[] bills = (Bill[]) o;
|
|
|
+
|
|
|
+ Bill current = head;
|
|
|
+ count = 0;
|
|
|
+
|
|
|
+ for (Object object : bills) {
|
|
|
+ if (object instanceof Bill) {
|
|
|
+ Bill bill = (Bill) object;
|
|
|
+
|
|
|
+ if (count == 0) {
|
|
|
+ head = bill;
|
|
|
+ current = head;
|
|
|
+ count++;
|
|
|
+ } else {
|
|
|
+ current.next = bill;
|
|
|
+ current = current.next;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ objectInputStream.close();
|
|
|
+ } catch (IOException | ClassNotFoundException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* Возвращает количество клиентов
|
|
|
*
|
|
@@ -28,6 +161,20 @@ public class Bank {
|
|
|
return count;
|
|
|
}
|
|
|
|
|
|
+ public static void registerUser(User user) {
|
|
|
+ users.add(user);
|
|
|
+ }
|
|
|
+
|
|
|
+ public static boolean authorizedUser(String login, String password) {
|
|
|
+ for (User u : users) {
|
|
|
+ if (u.check(login, password)) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* Возвращает наименование банка
|
|
|
*
|
|
@@ -72,13 +219,12 @@ public class Bank {
|
|
|
/**
|
|
|
* Вставить новый элемент в конец списока (открытие нового счёта)
|
|
|
*
|
|
|
- * @param passport серия и номер паспорта
|
|
|
- * @param phone мобильный телефон
|
|
|
- * @param name фамилия и имя клиента
|
|
|
- * @param balance начальный баланс
|
|
|
+ * @param user пользователь, открывающий счёт
|
|
|
+ * @param balance начальный баланс
|
|
|
+ * @return регистрационные данные
|
|
|
*/
|
|
|
- public static SecretData insert(String passport, String phone, String name, double balance) {
|
|
|
- Bill newBill = new Bill(balance, passport, phone, name, count);
|
|
|
+ public static SecretData insert(User user, double balance) {
|
|
|
+ Bill newBill = new Bill(user.getUuid(), balance, count);
|
|
|
|
|
|
if (head == null) {
|
|
|
head = newBill;
|
|
@@ -100,14 +246,12 @@ public class Bank {
|
|
|
/**
|
|
|
* Вставить новый элемент после указанного indexAfter (открытие ранее удалённого счёта)
|
|
|
*
|
|
|
- * @param indexAfter индекс элемента, после которого будет вставлен новый
|
|
|
- * @param passport серия и номер паспорта клиента
|
|
|
- * @param phone мобильный телефон
|
|
|
- * @param name фамилия и имя клиента
|
|
|
+ * @param user пользователь, открывающий счёт
|
|
|
+ * @param indexAfter индекс элемента, после которого будет вставлен новыйа
|
|
|
* @param balance начальный баланс
|
|
|
*/
|
|
|
- public static void insertAt(int indexAfter, String passport, String phone, String name, double balance) {
|
|
|
- Bill newBill = new Bill(balance, passport, phone, name, count);
|
|
|
+ public static void insertAt(User user, int indexAfter, double balance) {
|
|
|
+ Bill newBill = new Bill(user.getUuid(), balance, count);
|
|
|
|
|
|
Bill current = head;
|
|
|
if (indexAfter > count) {
|
|
@@ -135,7 +279,7 @@ public class Bank {
|
|
|
|
|
|
System.out.println("\nStart client list info:");
|
|
|
while (current != null) {
|
|
|
- System.out.printf("Bill number: %s; Client: %s; Passport: %s; Phone: %s; Balance: %.2f;\n", current.getNumber(), current.getName(), current.getPassport(), current.getPhone(), current.getBalance());
|
|
|
+ System.out.printf("Bill number: %s; Balance: %.2f;\n", current.getNumber(), current.getBalance());
|
|
|
current = current.next;
|
|
|
}
|
|
|
System.out.println("End client list info.\n");
|