Menu
Coddy logo textTech

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

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

challenge icon

Задание

Легко

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

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

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

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

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

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

В вашем основном файле создайте два счета с заданными ID (оба начинаются с баланса 0), внесите начальную сумму на первый счет, затем попытайтесь выполнить оба перевода с первого счета на второй. После каждой попытки перевода выводите данные обоих счетов (метод __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 после депозита. Первый перевод на 200 проходит успешно, в результате чего на счету 101 остается 300, а на счету 102 становится 200. Второй перевод на 400 не удается, так как на счету 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())

-- Создать два аккаунта с идентификаторами
local account1 = Account:new(id1)
local account2 = Account:new(id2)

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

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

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

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

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

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