Menu
Coddy logo textTech

Повторение — банковский счёт

Часть раздела Объектно-ориентированное программирование путешествия по Kotlin на Coddy. Урок 11 из 57.

challenge icon

Задание

Средне

Завершите класс BankAccount(val owner: String, opening: Int). Его блок init требует непустого значения owner (owner is empty) и неотрицательного начального вклада (opening must not be negative). У balance установлен приватный сеттер. Транзакции хранятся в приватном списке MutableList и предоставляются как val transactions: List<String>. deposit(amount) и withdraw(amount) возвращают true при успешном выполнении: суммы меньше 1 отклоняются, а снятие суммы, превышающей баланс, отклоняется; успешные изменения записываются как +50 или -20. statement() возвращает Ada: 30 (+50, -20) или Ada: 0 (no transactions).

Предоставленный код считывает владельца и начальный вклад (name,amount), затем команды d n или w n. Для неудачных команд он выводит refused, а в конце — выписку; для недействительного счёта выводится сообщение об ошибке.

Ваш код должен находиться в файле BankAccount.kt. В Main.kt содержится предоставленный код ввода/вывода, и его нельзя редактировать.

Попробуйте сами

fun main() {
    // Предоставленный код ввода/вывода: оставьте его как есть
    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)
    }
}

Все уроки раздела Объектно-ориентированное программирование

Потренируйтесь самостоятельно: Песочница Kotlin