Powtórka – konto bankowe
Część sekcji Programowanie obiektowe ścieżki Kotlin w Coddy. Lekcja 11 z 57.
Wyzwanie
ŚredniUzupełnij klasę BankAccount(val owner: String, opening: Int). Jej blok init wymaga niepustego właściciela (owner is empty) i nieujemnej wpłaty początkowej (opening must not be negative). balance ma prywatny setter. Transakcje są przechowywane na prywatnej liście MutableList i udostępniane jako val transactions: List<String>. deposit(amount) i withdraw(amount) zwracają true w przypadku powodzenia: kwoty mniejsze niż 1 są odrzucane, a wypłata większa niż saldo jest odrzucana; pomyślne zmiany są zapisywane jako +50 lub -20. statement() zwraca Ada: 30 (+50, -20) lub Ada: 0 (no transactions).
Dostarczony kod odczytuje właściciela i wpłatę początkową (name,amount), a następnie polecenia d n lub w n. W przypadku nieudanych poleceń wypisuje refused, a na końcu zestawienie; w przypadku nieprawidłowego konta wypisuje komunikat o błędzie.
Twój kod umieść w pliku BankAccount.kt. Plik Main.kt zawiera dostarczony kod wejścia/wyjścia i nie można go edytować.
Spróbuj swoich sił
fun main() {
// Dostarczony kod wejścia/wyjścia: pozostaw go bez zmian
val input = generateSequence(::readLine).toList()
try {
val (name, amount) = input[0].split(",")
val account = BankAccount(name, amount.toInt())
for (cmd in input.drop(1)) {
val (op, n) = cmd.split(" ")
val ok = if (op == "d") account.deposit(n.toInt()) else account.withdraw(n.toInt())
if (!ok) println("refused")
}
println(account.statement())
} catch (e: IllegalArgumentException) {
println(e.message)
}
}
Wszystkie lekcje w sekcji Programowanie obiektowe
1Klasy i obiekty
Praca z plikamiDefiniowanie klasKonstruktory główneBloki init i walidacjaKonstruktory dodatkowePodsumowanie — karta biblioteczna4Dziedziczenie
Klasy otwarte i podklasyNadpisywanie składowychsuper i konstruktoryKlasy abstrakcyjnePodsumowanie – katalog pracowników7Klasy specjalne
Klasy danychKlasy wyliczenioweHierarchie zapieczętowaneequals, hashCode, toStringPodsumowanie — śledzenie zamówień10Wzorce projektowe, część 2
Delegowanie za pomocą byWzorzec dekoratoraWzorzec budowniczegoWzorzec stanu2Właściwości i hermetyzacja
Własne akcesoryModyfikatory widocznościPrywatne setterylazy i lateinitPowtórka – konto bankowe5Interfejsy
Deklarowanie interfejsówMetody domyślneWiele interfejsówInterfejsy jako typyPowtórzenie – metody płatności8Typy generyczne
Funkcje generyczneKlasy generyczneOgraniczenia typówKowariancja i kontrawariancja: in i outPodsumowanie — kolejka priorytetowa11Projekt: Zarządzanie biblioteką
Książki i czytelnicyWypożyczanie książekPoćwicz samodzielnie: Edytor online Kotlin