Banka Defteri
Coddy'nin Kotlin Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 57 / 57.
Görev
ZorKüçük bir banka oluşturun.
BankError(message),Exceptionsınıfını genişleten veInvalidAmount(invalid amount),Insufficient(id)(insufficient funds in 2),WithdrawalLimit(id)(withdrawal limit on 2) veNoAccount(id)(no account 9) alt sınıflarına sahip bir sealed sınıftır.Account(id, owner)soyuttur.balanceher yerden okunabilir ve yalnızca hesap sınıfları tarafından değiştirilebilir.deposit(amount)vewithdraw(amount), 1'in altındaki tutarlar içinInvalidAmounthatası oluşturur;withdrawise bakiye hesabınlowestBalancedeğerinin altına düşecekseInsufficienthatası oluşturur. Soyutkindözelliğini ve hiçbir şey yapmayan açıkmonthEnd()metodunu tanımlar.Checking, -100'e kadar kredili mevduata izin verir.Savingshiçbir zaman 0'ın altına düşmez, ayda en fazla 2 para çekme işlemine (WithdrawalLimit) izin verir vemonthEnd()içinde %1 faiz (aşağı yuvarlanmış) ekleyerek para çekme sayacını sıfırlar.Banksınıfındaopen(kind, id, owner),account(id)(NoAccounthatası oluşturur), önce her iki hesabı bulan ve ardından para çekme ve yatırma işlemlerini gerçekleştirentransfer(from, to, amount), her hesap içinmonthEnd()ve kimliğe göre sıralanmışaccounts()bulunur.
Sağlanan kod open checking 1 ada, open savings 2 bo, dep 1 100, wd 2 30, tr 1 2 50 veya month komutlarını okur; ok ya da hatanın mesajını yazdırır ve son olarak her hesabı 1 ada checking: -20 biçiminde yazdırır.
Kodunuz BankError.kt, InvalidAmount.kt, Insufficient.kt, WithdrawalLimit.kt, NoAccount.kt, Account.kt, Checking.kt, Savings.kt ve Bank.kt dosyalarına gelir. Main.kt, sağlanan girdi/çıktı kodunu içerir ve düzenlenemez.
Kendin dene
fun main() {
// Sağlanan girdi/çıktı kodu: olduğu gibi bırakın
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}")
}
Nesne Yönelimli Programlama bölümündeki tüm dersler
1Sınıflar ve Nesneler
Dosyalarla ÇalışmaSınıfları TanımlamaBirincil Yapıcılarinit Blokları ve Doğrulamaİkincil YapıcılarTekrar - Kütüphane Kartı4Kalıtım
Açık Sınıflar ve Alt SınıflarÜyeleri Geçersiz Kılmasuper ve YapıcılarSoyut SınıflarTekrar - Personel Dizini2Özellikler ve Kapsülleme
Özel ErişimcilerGörünürlük DeğiştiricileriÖzel Setter'larlazy ve lateinitTekrar - Banka Hesabı5Arayüzler
Arayüz BildirimleriVarsayılan MetotlarBirden Çok ArayüzTür Olarak ArayüzlerÖzet - Ödeme Yöntemleri8Generic'ler
Generic FonksiyonlarGeneric SınıflarTür Kısıtlamalarıin ve out ile VaryansTekrar - Öncelik Kuyruğu11Proje: Kütüphane Yönetimi
Kitaplar ve ÜyelerKitap Ödünç AlmaKendi başına pratik yap: Kotlin playground