Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

مراجعة - حساب بنكي

جزء من قسم البرمجة كائنية التوجه في رحلة Kotlin على Coddy. الدرس 11 من 57.

challenge icon

التحدي

متوسط

أكمل الصنف BankAccount(val owner: String, opening: Int). تتطلب كتلة init مالكًا غير فارغ أو مكوّنًا من مسافات فقط (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)
    }
}

جميع دروس البرمجة كائنية التوجه

تدرّب بنفسك: Playground لـ Kotlin