دفتر الأستاذ المصرفي
جزء من قسم البرمجة كائنية التوجه في رحلة Kotlin على Coddy. الدرس 57 من 57.
التحدي
صعبأنشئ بنكًا صغيرًا.
BankError(message)فئة مختومة تمتد منException، مع الفئات الفرعيةInvalidAmount(invalid amount)، وInsufficient(id)(insufficient funds in 2)، وWithdrawalLimit(id)(withdrawal limit on 2)، وNoAccount(id)(no account 9).- الفئة
Account(id, owner)مجردة. يمكن قراءةbalanceفي كل مكان، ولا يمكن تغييره إلا بواسطة فئات الحسابات. ترميdeposit(amount)وwithdraw(amount)الخطأInvalidAmountللمبالغ الأقل من 1، وترميwithdrawالخطأInsufficientعندما ينخفض الرصيد إلى ما دونlowestBalanceالخاص بالحساب. وتعلن عنkindالمجردة وmonthEnd()المفتوحة التي لا تفعل شيئًا. - تسمح
Checkingبالسحب على المكشوف حتى -100. ولا ينخفض رصيدSavingsأبدًا عن 0، وتسمح بحد أقصى بعمليتي سحب شهريًا (WithdrawalLimit)، وتضيف فيmonthEnd()فائدة بنسبة 1% (مع التقريب إلى الأسفل) وتعيد ضبط عدد عمليات السحب. - تحتوي
Bankعلىopen(kind, id, owner)، وaccount(id)(التي ترميNoAccount)، وtransfer(from, to, amount)التي تبحث عن الحسابين أولًا ثم تنفذ السحب والإيداع، وmonthEnd()لكل حساب، وaccounts()المرتبة حسب المعرّف.
يقرأ الكود المقدم الأوامر open checking 1 ada، وopen savings 2 bo، وdep 1 100، وwd 2 30، أو tr 1 2 50، أو month، ويطبع ok أو رسالة الخطأ، ثم يطبع أخيرًا كل حساب مثل 1 ada checking: -20.
يجب وضع الكود الخاص بك في BankError.kt، وInvalidAmount.kt، وInsufficient.kt، وWithdrawalLimit.kt، وNoAccount.kt، وAccount.kt، وChecking.kt، وSavings.kt، وBank.kt. يحتوي Main.kt على كود الإدخال/الإخراج المقدم، ولا يمكن تعديله.
جرّب بنفسك
fun main() {
// كود الإدخال/الإخراج المُزوَّد: أبقِه كما هو
val input = generateSequence(::readLine).toList()
val bank = Bank()
for (cmd in input) {
val p = cmd.split(" ")
try {
when (p[0]) {
"open" -> bank.open(p[1], p[2].toInt(), p[3])
"dep" -> bank.account(p[1].toInt()).deposit(p[2].toInt())
"wd" -> bank.account(p[1].toInt()).withdraw(p[2].toInt())
"tr" -> bank.transfer(p[1].toInt(), p[2].toInt(), p[3].toInt())
else -> bank.monthEnd()
}
println("ok")
} catch (e: BankError) {
println(e.message)
}
}
for (a in bank.accounts()) println("${a.id} ${a.owner} ${a.kind}: ${a.balance}")
}
جميع دروس البرمجة كائنية التوجه
1الفئات والكائنات
العمل مع الملفاتتعريف الفئاتالمنشئات الأساسيةكتل init والتحقق من الصحةالمنشئات الثانويةمراجعة - بطاقة المكتبة4الوراثة
الأصناف المفتوحة والأصناف الفرعيةتجاوز الأعضاءsuper والمنشئاتالأصناف المجرّدةمراجعة - دليل الموظفينتدرّب بنفسك: Playground لـ Kotlin