Разработать базовые классы для приложения банкомата.
- Репозиторий счетов AccountRepository отвечающий за добавление, получение и поиск счетов по номеру
- Репозиторий дебетовых карт CardRepository отвечающий за добавление, получение и поиск карт
- Класс описывающий дебетовую карту (номер карты, пинкод, номер счета к которому карта привязана)
- Класс описывающий счет (номер, количество доступных средств)
- Класс банкомата и функции взаимодействия со счетом.
// Создание репозитория счетов
$accountRepository = new AccountdRepository();
// Создание репозитория карт
$cardRepository = new CardRepository($accountRepository);
// номер счета
$accountNumber = "3000400050006000";
// количество средств на счете
$amount = 10000;
// Добавление счета
$accountRepository->add(new Account($accountNumber, $amount));
// Номер карты
$cardNumber = "4444-5555-5555-5555";
// Пинкод
$pin = "1234";
// Добавление карты
$cardManager->add(new Card($cardNumber, $pin, $accountNumber));
//Создание класса банкомата
$atm = new ATM($accountRepository, $cardRepository);
//Вставляем карту в приемник
$atm->insertCard($cardNumber);
//Указываем пинкод, если пинкод не подходит, выдаем ошибку
$atm->enterPin($pin);
//Получение средств,
// Если средств недостаточно, ошибка
// Если карта не вставлена или не указан пинкод, то также ошибка
$atm->cashOut(1000);
//Снятие средств, ошибки аналогично если карта не вставлена или пинкод не прошел проверку
$atm->cashIn(500);
// Получение баланса, должно вывести 10000-1000+500 = 9500;
echo $atm->balance();
//Завершение работы, забираем карту
$atm->finish()