Registro bancario
Fa parte della sezione Programmazione orientata agli oggetti del percorso R di Coddy. Lezione 57 di 57.
Sfida
DifficileRealizza una piccola banca usando le classi di riferimento in quattro file. Tutte le definizioni sono racchiuse in suppressMessages(); usa call. = FALSE in ogni stop().
Account.R: campiid,owner,balance(0 all'inizio).deposit(x)ewithdraw(x)si interrompono coninvalid amountquandoxè mancante o inferiore a 1;withdraw()si interrompe coninsufficient funds in 2quando il saldo scenderebbe sottolowest(), che è 0.month_end()non fa nulla;line()restituisce1 ada checking: -20usandokind().Checking.R: tipochecking; il saldo può scendere fino a -100.Savings.R: tiposavings; al massimo 2 prelievi al mese (withdrawal limit on 2), conteggiati solo quando vanno a buon fine;month_end()aggiunge l'1% di interesse, arrotondato per difetto, e azzera il conteggio.Bank.R:open_account(kind, id, owner)(account 2 exists),get_account(id)(no account 9),transfer(from, to, amount), che non modifica nulla se il prelievo non va a buon fine,month_end()per ogni conto estatement(), che restituisce le righe di tutti i conti ordinate per id.
Il codice fornito legge comandi come open checking 1 ada, dep 1 100, wd 2 30, tr 1 2 50 o month, stampa ok oppure il messaggio di errore per ciascuno, quindi l'estratto conto.
Il tuo codice va inserito in Account.R, Checking.R, Savings.R e Bank.R. main.R contiene il codice di input/output fornito e non può essere modificato.
Provalo tu
source("Account.R")
source("Checking.R")
source("Savings.R")
source("Bank.R")
# Código de entrada/salida proporcionado: mantenlo tal como está
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 = "")
Tutte le lezioni di Programmazione orientata agli oggetti
1Nozioni di base su S3
Lavorare con i fileListe con una classeFunzioni costruttriciMetodi di stampa e formattazioneValidatori e funzioni di supportoRipasso - Temperature4Incapsulamento in R
Chiusure come oggettiAmbienti come oggettiFunzioni di accessoProteggere lo statoRiepilogo - Parcometro2Generics e metodi S3
Generics e UseMethodMetodi predefinitiMetodi per i generics di baseNozioni di base su NextMethodRiepilogo - Aree delle forme5Classi S4
Definire le classi S4Slot e accessoControlli di validitàMetodi showRiepilogo - Catalogo prodotti8Classi di riferimento
Definizione delle classi di riferimentoMetodi e aggiornamenti dei campiSemantica della copiaEreditarietà e callSuperRiepilogo - coda di attività11Progetto: Gestione della biblioteca
Libri e iscrittiPrestito dei libriEsercitati da solo: Compilatore R online