Sổ cái ngân hàng
Thuộc phần Lập trình hướng đối tượng trong hành trình R của Coddy. Bài học 57 trên 57.
Thử thách
KhóTạo một ngân hàng nhỏ bằng các lớp tham chiếu trong bốn tệp. Tất cả định nghĩa đều được bọc trong suppressMessages(); dùng call. = FALSE trong mọi stop().
Account.R: các trườngid,owner,balance(bằng 0 lúc bắt đầu).deposit(x)vàwithdraw(x)dừng với thông báoinvalid amountkhixbị thiếu hoặc nhỏ hơn 1;withdraw()dừng với thông báoinsufficient funds in 2nếu số dư giảm xuống dướilowest(), giá trị này là 0.month_end()không làm gì;line()trả về1 ada checking: -20bằng cách dùngkind().Checking.R: loạichecking; số dư có thể giảm xuống -100.Savings.R: loạisavings; mỗi tháng được rút tối đa 2 lần (withdrawal limit on 2), chỉ tính những lần rút thành công;month_end()cộng lãi suất 1%, làm tròn xuống, rồi đặt lại số lần rút.Bank.R:open_account(kind, id, owner)(account 2 exists),get_account(id)(no account 9),transfer(from, to, amount), không thay đổi gì nếu rút tiền thất bại,month_end()áp dụng cho mọi tài khoản vàstatement()trả về các dòng của tất cả tài khoản, được sắp xếp theo id.
Code được cung cấp đọc các lệnh open checking 1 ada, dep 1 100, wd 2 30, tr 1 2 50 hoặc month, in ra ok hoặc thông báo lỗi tương ứng cho mỗi lệnh, rồi in bảng kê.
Code của bạn nằm trong Account.R, Checking.R, Savings.R và Bank.R. main.R chứa code đầu vào/đầu ra được cung cấp và bạn không thể chỉnh sửa tệp này.
Tự làm thử
source("Account.R")
source("Checking.R")
source("Savings.R")
source("Bank.R")
# Đoạn code đầu vào/đầu ra đã được cung cấp: giữ nguyên
input <- suppressWarnings(readLines(file("stdin")))
bank <- Bank$new()
for (line in input) {
p <- strsplit(line, " ")[[1]]
n <- suppressWarnings(as.numeric(p[-1]))
msg <- tryCatch({
switch(p[1],
open = bank$open_account(p[2], as.numeric(p[3]), p[4]),
dep = bank$get_account(n[1])$deposit(n[2]),
wd = bank$get_account(n[1])$withdraw(n[2]),
tr = bank$transfer(n[1], n[2], n[3]),
month = bank$month_end())
"ok"
}, error = function(e) conditionMessage(e))
cat(line, ": ", msg, "\n", sep = "")
}
for (l in bank$statement()) cat(l, "\n", sep = "")
Tất cả bài học trong Lập trình hướng đối tượng
1Kiến thức cơ bản về S3
Làm việc với tệpDanh sách với một lớpHàm khởi tạoPhương thức in ra và định dạngTrình xác thực và hàm hỗ trợÔn tập: nhiệt độ4Tính đóng gói trong R
Closure dưới dạng đối tượngMôi trường dưới dạng đối tượngHàm truy cậpBảo vệ trạng tháiÔn tập: đồng hồ tính phí đỗ xe2S3, hàm generic và phương thức
Hàm generic và UseMethodPhương thức mặc địnhPhương thức cho hàm generic cơ sởCơ bản về NextMethodÔn tập: diện tích hình5Các lớp S4
Định nghĩa lớp S4Slot và quyền truy cậpKiểm tra tính hợp lệPhương thức showÔn tập: Danh mục sản phẩmTự luyện tập: Trình biên dịch R online