package com.company; import java.io.Serializable; import java.util.Random; import java.util.UUID; public class Bill implements Serializable { /** * Ссылка на следующий элемент списка или null */ public Bill next; /** * Текущий баланс счёта */ private double balance; /** * Номер счёта (карты). Генерируется автоматически при открытии счёта. */ private String number; /** * Пин-код для авторизации. Генерируется рандомно при открытии счёта. */ private String pincode; /** * Уникальный идентификатор пользователя, к которому принадлежит данный счёт. */ private UUID uuid; /** * Конструктор. Открытие нового счёта. * * @param balance первоначальный баланс * @param num порядковый номер нового клиента */ public Bill(UUID userUUID, double balance, int num) { this.balance = balance; this.uuid = userUUID; // Генерация пин-кода Random random = new Random(System.currentTimeMillis()); pincode = String.format("%04d", random.nextInt(10000)); // Генерация номера карты number = String.format("%04d %04d %04d %04d", 3202, 2200, 5420, num); next = null; } /** * Проверка пин-кода * * @param pin пин-код для сравнения * @return true, если пин-коды совпадают */ public boolean checkPincode(String pin) { return pincode.equals(pin); } /** * Получить текущий баланс счёта * * @return баланс */ public double getBalance() { return balance; } /** * Пополнить баланс * * @param value пополняемое значение */ public void deposit(double value) { if (value > 0) { balance += value; } } /** * Списать со счёта * * @param value списываемое значение */ public void withdraw(double value) { if (value > 0) { if (balance >= value) { balance -= value; } } } /** * Получить номер счёта (карты) * @return номер карты */ public String getNumber() { return number; } /** * Получить регистрационные данные * * @return структура с номером карты и пин-кодом */ public SecretData getSecretData() { return new SecretData(number, pincode); } }