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.
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:
- ID tài khoản 1
- ID tài khoản 2
- ID tài khoản 3
- Khoản tiền gửi ban đầu cho tài khoản 1
- Khoản tiền gửi ban đầu cho tài khoản 2
- 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:
- Tạo ba tài khoản với các ID đã cho
- Gửi khoản tiền ban đầu vào từng tài khoản tương ứng
- Tài khoản 1 chuyển 100 cho tài khoản 2
- Tài khoản 2 chuyển 150 cho tài khoản 3
- Tài khoản 3 chuyển 50 cho tài khoản 1
- 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
- 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 = 300Hã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
1Khái niệm “self”
Bảng với hàm“self” tường minhCú pháp dấu hai chấmDấu chấm và dấu hai chấmÔn tập: Điểm chuyển động4Dự án: Ngân hàng số
Thiết lập dự ánPhương thức nạp tiền2Mẫu Prototype cho lớp
Khái niệm PrototypeLiên kết bằng __indexHàm khởi tạo :new()Khởi tạo thuộc tínhCác instance độc lậpÔn tập: Nhà máy ô tô5Nạp chồng toán tử trong OOP
Cộng các đối tượngTrừ các đối tượngNối các đối tượngSo sánh các đối tượng (<, >)Ôn tập: phép tính với ví tiền8Đóng gói
Quy ước đặt tênClosure để bảo mậtTruy cập qua closureBảng chỉ đọcLogic kiểm tra hợp lệTổng kết: Két an toàn11Mẫu thiết kế (cơ bản)
Hàm tạo đối tượngBảng SingletonMẫu IteratorObserver (Listener)Ôn tập: Factory Logger3Trạng thái và hành vi của đối tượng
Biến instancePhương thức getterPhương thức setterThuộc tính tính toánĐịnh dạng chuỗiKiểm tra tính bằng nhauÔn tập: điểm số học sinh6Cơ bản về kế thừa
Thiết lập kế thừaKế thừa phương thứcMở rộng hàm khởi tạoThêm phương thức cho lớp conDùng chung và riêngÔn tập: hệ phân cấp hình dạngTự luyện tập: Trình biên dịch Lua online