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 Kotlin của Coddy. Bài học 11 trên 57.

challenge icon

Thử thách

Trung bình

Hoàn thiện lớp BankAccount(val owner: String, opening: Int). Khối init yêu cầu tên chủ tài khoản không được để trống (owner is empty) và khoản tiền gửi ban đầu không âm (opening must not be negative). balance có setter riêng tư. Các giao dịch được lưu trong MutableList riêng tư và hiển thị dưới dạng val transactions: List<String>. deposit(amount) và withdraw(amount) trả về true khi thành công: các khoản tiền nhỏ hơn 1 bị từ chối, và khoản rút lớn hơn số dư cũng bị từ chối; các thay đổi thành công được ghi lại 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 refused cho các lệnh thất bại, rồi in sao kê; tài khoản không hợp lệ sẽ in thông báo lỗi.

Viết code của bạn trong BankAccount.kt. Main.kt chứa code đầu vào/đầu ra được cung cấp và không thể chỉnh sửa.

Tự làm thử

fun main() {
    // Đoạn code đầu vào/đầu ra có sẵn: giữ nguyên
    val input = generateSequence(::readLine).toList()
    try {
        val (name, amount) = input[0].split(",")
        val account = BankAccount(name, amount.toInt())
        for (cmd in input.drop(1)) {
            val (op, n) = cmd.split(" ")
            val ok = if (op == "d") account.deposit(n.toInt()) else account.withdraw(n.toInt())
            if (!ok) println("refused")
        }
        println(account.statement())
    } catch (e: IllegalArgumentException) {
        println(e.message)
    }
}

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

Tự luyện tập: Playground Kotlin