Bankbuch
Teil des Abschnitts Objektorientierte Programmierung der R-Journey von Coddy. Lektion 57 von 57.
Aufgabe
SchwerErstelle aus Reference Classes in vier Dateien eine kleine Bank. Alle Definitionen sind in suppressMessages() eingeschlossen; verwende in jedem stop() call. = FALSE.
Account.R: Felderid,owner,balance(zu Beginn 0).deposit(x)undwithdraw(x)brechen mitinvalid amountab, wennxfehlt oder kleiner als 1 ist;withdraw()bricht mitinsufficient funds in 2ab, wenn das Guthaben unterlowest()sinken würde, das 0 ist.month_end()tut nichts;line()gibt mithilfe vonkind()1 ada checking: -20zurück.Checking.R: Artchecking; das Guthaben darf bis auf -100 sinken.Savings.R: Artsavings; höchstens 2 Abhebungen pro Monat (withdrawal limit on 2), die nur gezählt werden, wenn sie erfolgreich sind;month_end()fügt 1 % Zinsen hinzu, abgerundet, und setzt den Zähler zurück.Bank.R:open_account(kind, id, owner)(account 2 exists),get_account(id)(no account 9),transfer(from, to, amount), das bei fehlgeschlagener Abhebung nichts verändert,month_end()für jedes Konto sowiestatement(), die nach id sortierten Zeilen aller Konten.
Der bereitgestellte Code liest die Befehle open checking 1 ada, dep 1 100, wd 2 30, tr 1 2 50 oder month, gibt für jeden Befehl ok oder die Fehlermeldung aus und anschließend die Kontoübersicht.
Dein Code gehört in Account.R, Checking.R, Savings.R und Bank.R. main.R enthält den bereitgestellten Ein-/Ausgabecode und darf nicht bearbeitet werden.
Probier es selbst
source("Account.R")
source("Checking.R")
source("Savings.R")
source("Bank.R")
# Bereitgestellter Ein-/Ausgabecode: belasse ihn wie er ist
input <- suppressWarnings(readLines(file("stdin")))
bank <- Bank$new()
for (line in input) {
p <- strsplit(line, " ")[[1]]
n <- suppressWarnings(as.numeric(p[-1]))
msg <- tryCatch({
switch(p[1],
open = bank$open_account(p[2], as.numeric(p[3]), p[4]),
dep = bank$get_account(n[1])$deposit(n[2]),
wd = bank$get_account(n[1])$withdraw(n[2]),
tr = bank$transfer(n[1], n[2], n[3]),
month = bank$month_end())
"ok"
}, error = function(e) conditionMessage(e))
cat(line, ": ", msg, "\n", sep = "")
}
for (l in bank$statement()) cat(l, "\n", sep = "")
Alle Lektionen in Objektorientierte Programmierung
1S3-Grundlagen
Arbeiten mit DateienListen mit einer KlasseKonstruktorfunktionenPrint- und Format-MethodenValidatoren und HilfsfunktionenRückblick – Temperaturen4Kapselung in R
Closures als ObjekteUmgebungen als ObjekteZugriffsfunktionenZustand schützenRückblick – Parkuhr2S3-Generics und Methoden
Generics und UseMethodStandardmethodenMethoden für Basis-GenericsGrundlagen von NextMethodWiederholung – Flächeninhalte von Formen5S4-Klassen
S4-Klassen definierenSlots und ZugriffGültigkeitsprüfungenShow-MethodenRückblick – Produktkatalog8Referenzklassen
Referenzklassen definierenMethoden und FeldänderungenKopiersemantikVererbung und callSuperZusammenfassung – Aufgabenwarteschlange11Projekt: Bibliotheksverwaltung
Bücher und MitgliederBücher ausleihenÜbe selbstständig: Online-R-Compiler