Menu
Coddy logo textTech

Повторение — менеджер банковского счёта

Часть раздела Объектно-ориентированное программирование путешествия по PHP на Coddy. Урок 20 из 91.

challenge icon

Задание

Легко

Давайте создадим полноценную систему управления банковскими счетами, которая объединяет все изученные вами в этой главе концепции свойств class. Вы создадите class BankAccount, который правильно инкапсулирует данные account и одновременно отслеживает общую статистику банка.

Вы организуете код в двух файлах:

  • BankAccount.php: Define class BankAccount, который управляет отдельными account и отслеживает общую статистику банка. class должен включать:
    • constant MINIMUM_BALANCE, установленную в значение 100
    • public readonly property string $accountId, которую нельзя изменить после создания
    • public property $holderName для имени владельца account
    • private property $balance для защиты баланса account
    • private static property $totalAccounts, начинающуюся со значения 0
    • private static property $totalDeposits, начинающуюся со значения 0
    constructor должен принимать ID account, имя владельца и initial баланс. Он должен установить все properties instance и increment счётчик общего количества account. Добавьте следующие method:
    • getBalance(): возвращает current баланс
    • deposit($amount): добавляет сумму к балансу и обновляет счётчик общего количества Deposits, возвращает новый баланс
    • withdraw($amount): вычитает сумму из баланса только в том случае, если оставшийся баланс не опускается ниже constant минимального баланса, возвращает новый баланс (или неизменённый баланс, если снятие не allowed)
    • static method getTotalAccounts(): возвращает общее количество созданных account
    • static method getTotalDeposits(): возвращает сумму всех Deposits, выполненных по всем account
  • main.php: подключите файл с class BankAccount. Вы получите четыре inputs: ID first account, имя first владельца, ID second account и имя second владельца. Создайте два account, оба с initial балансом 500. Для first account: внесите 200, затем снимите 100. Выведите ID account, имя владельца и баланс в одной строке в формате: "[accountId]: [holderName] - $[balance]" Для second account: внесите 300, затем attempt снимите 800 (это должно завершиться неудачей из-за минимального баланса). Выведите информацию об этом account в том же формате. Наконец, выведите общее количество account и общее количество Deposits в отдельных строках:
    • "Total Accounts: [count]"
    • "Total Deposits: $[amount]"

Это challenge объединяет properties readonly для неизменяемых идентификаторов, private properties с method getter для защищённых данных, constants для фиксированных правил и static properties со static method для общей статистики банка.

Попробуйте сами

<?php

require_once 'BankAccount.php';

// Прочитать входные данные
$firstAccountId = trim(fgets(STDIN));
$firstHolderName = trim(fgets(STDIN));
$secondAccountId = trim(fgets(STDIN));
$secondHolderName = trim(fgets(STDIN));

// TODO: Создать первый счет с начальным балансом 500

// TODO: Создать второй счет с начальным балансом 500

// TODO: Первый счет: внести 200, затем снять 100

// TODO: Вывести информацию о первом счете: "[accountId]: [holderName] - $[balance]"

// TODO: Второй счет: внести 300, затем попытаться снять 800

// TODO: Вывести информацию о втором счете: "[accountId]: [holderName] - $[balance]"

// TODO: Print "Total Accounts: [count]"

// TODO: Print "Total Deposits: $[amount]"

?>

Все уроки раздела Объектно-ориентированное программирование

Потренируйтесь самостоятельно: Онлайн-компилятор PHP