Menu
CoddyTech

Kiểm tra ngân hàng lần cuối

Thuộc phần Lập trình hướng đối tượng trong hành trình Lua của Coddy. Bài học 25 trên 70.

challenge icon

Thử thách

Dễ

Chúc mừng bạn đã xây dựng một hệ thống ngân hàng số hoàn chỉnh! Lớp Account hiện xử lý các khoản tiền gửi, tiền rút, việc kiểm tra số dư, nhận diện tài khoản và chuyển tiền giữa các tài khoản. Hãy thử nghiệm hệ thống bằng một tình huống ngân hàng thực tế có nhiều tài khoản.

Trong thử thách cuối cùng này, bạn sẽ mô phỏng một ngân hàng nhỏ có ba khách hàng thực hiện nhiều giao dịch khác nhau. Việc này sẽ kiểm tra xem tất cả các phương thức có hoạt động chính xác cùng nhau hay không, đồng thời xác nhận rằng mỗi tài khoản thật sự duy trì trạng thái độc lập.

Hai tệp của bạn:

  • Account.lua: Lớp Account hoàn chỉnh với tất cả chức năng bạn đã xây dựng trong suốt dự án này: hàm khởi tạo có ID, gửi tiền, rút tiền, getBalance, __tostring và chuyển tiền.
  • main.lua: Tập lệnh mô phỏng tạo nhiều tài khoản và thực hiện một loạt giao dịch giữa các tài khoản đó.

Bạn sẽ nhận sáu đầu vào:

  1. ID tài khoản 1
  2. ID tài khoản 2
  3. ID tài khoản 3
  4. Khoản tiền gửi ban đầu cho tài khoản 1
  5. Khoản tiền gửi ban đầu cho tài khoản 2
  6. Khoản tiền gửi ban đầu cho tài khoản 3

Trong tệp chính, hãy mô phỏng ngày giao dịch ngân hàng sau:

  1. Tạo ba tài khoản với các ID đã cho
  2. Gửi khoản tiền ban đầu vào từng tài khoản tương ứng
  3. Tài khoản 1 chuyển 100 cho tài khoản 2
  4. Tài khoản 2 chuyển 150 cho tài khoản 3
  5. Tài khoản 3 chuyển 50 cho tài khoản 1
  6. Tài khoản 1 thử chuyển 1000 cho tài khoản 3, giao dịch này sẽ thất bại
  7. In lần lượt cả ba tài khoản, tài khoản 1, rồi đến tài khoản 2 và tài khoản 3

Ví dụ, nếu đầu vào là A001, A002, A003, 500, 300 và 200, đầu ra sẽ là:

Insufficient funds
Account [A001]: Balance = 450
Account [A002]: Balance = 250
Account [A003]: Balance = 300

Hãy cùng theo dõi các giao dịch: Tài khoản 1 bắt đầu với 500, chuyển 100 cho tài khoản 2 (còn 400), rồi nhận 50 từ tài khoản 3 (còn 450). Tài khoản 2 bắt đầu với 300, nhận 100 (có 400), rồi chuyển 150 cho tài khoản 3 (còn 250). Tài khoản 3 bắt đầu với 200, nhận 150 (có 350), rồi chuyển 50 cho tài khoản 1 (còn 300). Giao dịch chuyển 1000 cuối cùng thất bại vì tài khoản 1 chỉ có 450.

Tự làm thử

-- Nạp module Account bằng require
local Account = require('Account')

-- Đọc sáu đầu vào
local id1 = io.read()
local id2 = io.read()
local id3 = io.read()
local initialDeposit1 = tonumber(io.read())
local initialDeposit2 = tonumber(io.read())
local initialDeposit3 = tonumber(io.read())

-- Tạo ba tài khoản có ID
-- TODO: tạo account1, account2, account3 bằng Account:new()

-- Nạp số tiền ban đầu vào từng tài khoản tương ứng
-- TODO: nạp initialDeposit1 vào account1, initialDeposit2 vào account2, initialDeposit3 vào account3

-- Tài khoản 1 chuyển 100 cho tài khoản 2
-- TODO: account1:transfer(account2, 100)

-- Tài khoản 2 chuyển 150 cho tài khoản 3
-- TODO: account2:transfer(account3, 150)

-- Tài khoản 3 chuyển 50 cho tài khoản 1
-- TODO: account3:transfer(account1, 50)

-- Tài khoản 1 thử chuyển 1000 sang tài khoản 3 (thao tác này sẽ thất bại)
-- TODO: account1:transfer(account3, 1000)

-- In ra cả ba tài khoản theo thứ tự
-- TODO: in ra account1, account2, account3

Tất cả bài học trong Lập trình hướng đối tượng

Tự luyện tập: Trình biên dịch Lua online