Menu
Coddy logo textTech

Перевод средств

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

challenge icon

Задание

Легко

Ваш Digital Bank почти готов! Последняя важная функция — возможность переводить деньги между account. Именно здесь по-настоящему проявляются преимущества объектно-ориентированного дизайна: один объект account может напрямую взаимодействовать с другим объектом account.

Вы добавите метод :transfer(targetAccount, amount), который перемещает деньги с одного account на другой. Подумайте, что на самом деле включает эта операция: это снятие средств с исходного account, за которым следует внесение средств на targetAccount. Преимущество в том, что вы можете повторно использовать уже созданные методы!

Продолжайте работать с существующими файлами:

  • Account.lua: добавьте метод :transfer(targetAccount, amount) в свой Account class. Этот метод должен попытаться снять amount с self и, если операция успешна, внести этот amount на targetAccount. Если снятие не удалось (недостаточно средств), перевод не должен выполняться. Сохраните всю существующую функциональность (constructor с ID, deposit, withdraw, getBalance и __tostring).
  • main.lua: создайте несколько account и продемонстрируйте переводы между ними, показывая, как изменяются балансы разных объектов account.

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

  1. ID первого account
  2. ID второго account
  3. Начальное пополнение первого account
  4. Сумма первого перевода (с account 1 на account 2)
  5. Сумма второго перевода (с account 1 на account 2)

В основном файле создайте два account с указанными ID (оба начинают с балансом 0), внесите начальную сумму на первый account, затем попытайтесь выполнить оба перевода с первого account на второй. После каждой попытки перевода выведите оба account (метод __tostring покажет их текущее состояние).

Например, если входные значения — 101, 102, 500, 200 и 400, результат должен быть таким:

Account [101]: Balance = 300
Account [102]: Balance = 200
Insufficient funds
Account [101]: Balance = 300
Account [102]: Balance = 200

После пополнения на 500 первый account начинает с балансом 500. Первый перевод в размере 200 выполняется успешно, поэтому на account 101 остаётся 300, а на account 102 становится 200. Второй перевод в размере 400 завершается неудачей, поскольку на account 101 есть только 300, поэтому оба баланса остаются без изменений.

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

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

-- Прочитать пять входных значений
local id1 = io.read()
local id2 = io.read()
local initialDeposit = tonumber(io.read())
local transfer1 = tonumber(io.read())
local transfer2 = tonumber(io.read())

-- Создать два счёта с ID
local account1 = Account:new(id1)
local account2 = Account:new(id2)

-- Внести начальную сумму на первый счёт
account1:deposit(initialDeposit)

-- TODO: Попытаться выполнить первый перевод с account1 на account2

-- TODO: Вывести оба счёта после первого перевода

-- TODO: Попытаться выполнить второй перевод с account1 на account2

-- TODO: Вывести оба счёта после второго перевода

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

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