Menu
Coddy logo textTech

Registro bancario

Fa parte della sezione Programmazione orientata agli oggetti del percorso R di Coddy. Lezione 57 di 57.

challenge icon

Sfida

Difficile

Realizza 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: campi id, owner, balance (0 all'inizio). deposit(x) e withdraw(x) si interrompono con invalid amount quando x è mancante o inferiore a 1; withdraw() si interrompe con insufficient funds in 2 quando il saldo scenderebbe sotto lowest(), che è 0. month_end() non fa nulla; line() restituisce 1 ada checking: -20 usando kind().
  • Checking.R: tipo checking; il saldo può scendere fino a -100.
  • Savings.R: tipo savings; 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 e statement(), 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

Esercitati da solo: Compilatore R online