ספר חשבונות בנק
חלק מהיחידה תכנות מונחה עצמים במסלול ה-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, מאפשרת לכל היותר 2 משיכות בחודש (WithdrawalLimit) וב-monthEnd()מוסיפה ריבית של 1% (בעיגול כלפי מטה) ומאפסת את מונה המשיכות.- ל-
Bankיש אתopen(kind, id, owner), אתaccount(id)(זורקתNoAccount), אתtransfer(from, to, amount), שמאתרת תחילה את שני החשבונות ואז מבצעת משיכה והפקדה, אתmonthEnd()עבור כל חשבון ואתaccounts(), שמחזירה את החשבונות ממוינים לפי id.
הקוד שסופק קורא פקודות 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 ואימות נתוניםבנאים משנייםסיכום – כרטיס ספרייהתרגלו בעצמכם: Kotlin אונליין