Libro mayor bancario
Parte de la sección Programación orientada a objetos del Journey de R de Coddy. Lección 57 de 57.
Desafío
DifícilConstruye un banco pequeño a partir de Reference Classes en cuatro archivos. Todas las definiciones están envueltas en suppressMessages(); usa call. = FALSE en cada stop().
Account.R: camposid,owner,balance(0 al inicio).deposit(x)ywithdraw(x)se detienen coninvalid amountcuandoxfalta o es menor que 1;withdraw()se detiene coninsufficient funds in 2cuando el saldo bajaría delowest(), que es 0.month_end()no hace nada;line()devuelve1 ada checking: -20usandokind().Checking.R: tipochecking; el saldo puede bajar hasta -100.Savings.R: tiposavings; como máximo 2 retiros por mes (withdrawal limit on 2), contados solo cuando tienen éxito;month_end()añade un 1% de interés, redondeado hacia abajo, y reinicia el contador.Bank.R:open_account(kind, id, owner)(account 2 exists),get_account(id)(no account 9),transfer(from, to, amount), que no cambia nada cuando el retiro falla,month_end()para cada cuenta ystatement(), las líneas de todas las cuentas ordenadas por id.
El código proporcionado lee los comandos open checking 1 ada, dep 1 100, wd 2 30, tr 1 2 50 o month, imprime ok o el mensaje de error correspondiente para cada uno y, después, el extracto.
Tu código va en Account.R, Checking.R, Savings.R y Bank.R. main.R contiene el código proporcionado de entrada/salida y no se puede editar.
Pruébalo tú mismo
source("Account.R")
source("Checking.R")
source("Savings.R")
source("Bank.R")
# Código de entrada/salida suministrado: déjalo 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 = "")
Todas las lecciones de Programación orientada a objetos
1Fundamentos de S3
Trabajar con archivosListas con una claseFunciones constructorasMétodos de impresión y formatoValidadores y auxiliaresRepaso: temperaturas4Encapsulación en R
Cierres como objetosEntornos como objetosFunciones de accesoProtección del estadoRepaso: parquímetro2S3 Genéricos y métodos
Genéricos y UseMethodMétodos predeterminadosMétodos para genéricos baseFundamentos de NextMethodRepaso: áreas de figuras5Clases S4
Definición de clases S4Slots y accesoComprobaciones de validezMétodos showRepaso - Catálogo de productos8Clases de referencia
Definición de clases de referenciaMétodos y actualizaciones de camposSemántica de copiaHerencia y callSuperRepaso: cola de tareas11Proyecto: Gestión de biblioteca
Libros y miembrosPréstamo de librosPractica por tu cuenta: Compilador de R online