Menu
Coddy logo textTech

Метод снятия

Часть раздела Object Oriented Programming путешествия по Lua на Coddy — урок 21 из 70.

challenge icon

Задание

Легко

Ваш Цифровой Банк растет! Счета теперь могут принимать депозиты, но настоящий банк также должен позволять клиентам снимать деньги. Давайте добавим метод :withdraw(amount) — но с важной проверкой безопасности.

В отличие от депозитов, снятие средств может не удаться. Если клиент пытается снять больше денег, чем у него есть, банк не должен этого позволять. Ваш метод снятия должен проверять наличие достаточного количества средств перед вычетом суммы.

Вы продолжите работу с вашими двумя файлами:

  • Account.lua: Добавьте метод :withdraw(amount) в ваш существующий класс Account. Если на счету достаточно средств, вычтите сумму и верните true. Если средств недостаточно, выведите Insufficient funds и верните false, не изменяя баланс.
  • main.lua: Создайте счет, внесите депозит, чтобы на нем появились средства, а затем попытайтесь совершить несколько снятий, чтобы увидеть как успешные, так и неудачные транзакции.

Вы получите четыре входных значения:

  1. Сумма начального депозита
  2. Сумма первого снятия
  3. Сумма второго снятия
  4. Сумма третьего снятия

В вашем основном файле создайте счет, внесите начальную сумму, а затем попытайтесь выполнить каждое снятие по порядку. После каждой попытки снятия выводите текущий баланс на новой строке. Помните, что при неудачных попытках снятия также будет выводиться Insufficient funds перед тем, как вы напечатаете баланс.

Например, если входные данные — 100, 30, 50 и 40, вывод должен быть следующим:

70
20
Insufficient funds
20

После депозита на счету оказывается 100. Первое снятие 30 проходит успешно (баланс: 70), второе снятие 50 проходит успешно (баланс: 20), но третье снятие 40 не удается, так как осталось всего 20 — поэтому баланс остается равным 20.

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

-- Подключить модуль Account
local Account = require('Account')

-- Прочитать четыре входных значения
local initialDeposit = tonumber(io.read())
local withdrawal1 = tonumber(io.read())
local withdrawal2 = tonumber(io.read())
local withdrawal3 = tonumber(io.read())

-- Создать один аккаунт
local account = Account:new()

-- Внести начальную сумму
account:deposit(initialDeposit)

-- Попытаться выполнить первое снятие и вывести баланс
-- TODO: вызвать account:withdraw(withdrawal1) здесь
print(account.balance)

-- Попытаться выполнить второе снятие и вывести баланс
-- TODO: вызвать account:withdraw(withdrawal2) здесь
print(account.balance)

-- Попытаться выполнить третье снятие и вывести баланс
-- TODO: вызвать account:withdraw(withdrawal3) здесь
print(account.balance)

Все уроки раздела Object Oriented Programming