مراجعة - الحساب البنكي
جزء من قسم البرمجة كائنية التوجه في رحلة Swift على Coddy. الدرس 21 من 57.
التحدي
متوسطأكمل الصنف 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")
}
جميع دروس البرمجة كائنية التوجه
1الأصناف والكائنات
العمل مع الملفاتتعريف الأصنافالأساليب وselfالمُهيِّئاتالأصناف هي مراجعمراجعة - بطاقة المكتبة4التغليف
التحكم في الوصولللقراءة فقط من الخارجحماية الحالةالمهيئات القابلة للفشلمراجعة - الحساب البنكي7تعدد الأشكال والأنواع العامة
تعدد الأشكالتحويل الأنواعالدوال العامةالأنواع العامةمراجعة - حاسبة الأشكالتدرّب بنفسك: Playground لـ Swift