Menu
CoddyTech

Ôn tập: Tài khoản ngân hàng

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

challenge icon

Thử thách

Trung bình

Hoàn thiện lớp BankAccount. Hàm khởi tạo có thể thất bại init?(owner:deposit:) từ chối chủ tài khoản trống hoặc khoản tiền gửi ban đầu âm. balance và transactions là private(set). deposit(_:) và withdraw(_:) ném AccountError.invalidAmount với số tiền nhỏ hơn 1; withdraw ném AccountError.insufficient(balance:) khi số tiền lớn hơn số dư. Mỗi thay đổi thành công được ghi lại trong transactions dưới dạng +50 hoặc -20. statement() trả về Ada: 30 (+50, -20), hoặc Ada: 0 (no transactions).

Code được cung cấp đọc tên chủ tài khoản và khoản tiền gửi ban đầu (name,amount), sau đó đọc các lệnh d n hoặc w n. Code in ra cannot open account nếu hàm khởi tạo thất bại; nếu không, code in ra invalid amount hoặc insufficient funds (balance 10) cho các lệnh thất bại, rồi cuối cùng in ra sao kê.

Đặt code của bạn trong AccountError.swift và BankAccount.swift. main.swift 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ử

// Đoạn code đầu vào/đầu ra đã cung cấp: giữ nguyên.
var input: [String] = []
while let line = readLine() { input.append(line) }
let head = input[0].split(separator: ",", omittingEmptySubsequences: false).map(String.init)
if let account = BankAccount(owner: head[0], deposit: Int(head[1])!) {
    for cmd in input.dropFirst() {
        let p = cmd.split(separator: " ")
        let n = Int(p[1])!
        do {
            if p[0] == "d" { try account.deposit(n) } else { try account.withdraw(n) }
        } catch AccountError.insufficient(let balance) {
            print("insufficient funds (balance \(balance))")
        } catch {
            print("invalid amount")
        }
    }
    print(account.statement())
} else {
    print("cannot open account")
}

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

Tự luyện tập: Playground Swift