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

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

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

challenge icon

التحدي

متوسط

أكمل الصنف BankAccount. يرفض المُهيئ القابل للفشل init?(owner:deposit:) المالك الفارغ أو الإيداع الافتتاحي السالب. كلٌّ من balance وtransactions هما private(set). ترمي deposit(_:) وwithdraw(_:) الخطأ AccountError.invalidAmount للمبالغ الأقل من 1، كما ترمي withdraw الخطأ AccountError.insufficient(balance:) عندما يكون المبلغ أكبر من الرصيد؛ ويُسجَّل كل تغيير ناجح في transactions بصيغة +50 أو -20. تُرجع statement() القيمة Ada: 30 (+50, -20) أو Ada: 0 (no transactions).

يقرأ الكود المُزوَّد اسم المالك والإيداع الافتتاحي (name,amount)، ثم يقرأ الأوامر d n أو w n. ويطبع cannot open account عند فشل المُهيئ؛ وإلا فإنه يطبع invalid amount أو insufficient funds (balance 10) للأوامر الفاشلة، ثم يطبع البيان في النهاية.

يجب وضع الكود الخاص بك في AccountError.swift وBankAccount.swift. يحتوي main.swift على كود الإدخال/الإخراج المُزوَّد، ولا يمكن تعديله.

جرّب بنفسك

// كود الإدخال/الإخراج المُزوَّد: أبقِه كما هو
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")
}

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

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