Livro-caixa Bancário
Parte da seção Programação Orientada a Objetos do Journey de R da Coddy. Lição 57 de 57.
Desafio
DifícilConstrua um pequeno banco usando Reference Classes em quatro arquivos. Todas as definições são envolvidas por suppressMessages(); use call. = FALSE em cada stop().
Account.R: camposid,owner,balance(0 no início).deposit(x)ewithdraw(x)interrompem cominvalid amountquandoxestá ausente ou é menor que 1;withdraw()interrompe cominsufficient funds in 2quando o saldo ficaria abaixo delowest(), que é 0.month_end()não faz nada;line()retorna1 ada checking: -20usandokind().Checking.R: tipochecking; o saldo pode chegar a -100.Savings.R: tiposavings; no máximo 2 saques por mês (withdrawal limit on 2), contados somente quando são bem-sucedidos;month_end()adiciona juros de 1%, arredondados para baixo, e reinicia a contagem.Bank.R:open_account(kind, id, owner)(account 2 exists),get_account(id)(no account 9),transfer(from, to, amount), que não altera nada quando o saque falha,month_end()para cada conta estatement(), as linhas de todas as contas ordenadas por id.
O código fornecido lê os comandos open checking 1 ada, dep 1 100, wd 2 30, tr 1 2 50 ou month, imprime ok ou a mensagem de erro correspondente para cada um e, em seguida, o extrato.
Seu código deve ficar em Account.R, Checking.R, Savings.R e Bank.R. main.R contém o código fornecido de entrada/saída e não pode ser editado.
Experimente você mesmo
source("Account.R")
source("Checking.R")
source("Savings.R")
source("Bank.R")
# Código de entrada/saída fornecido: mantenha-o 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 as lições de Programação Orientada a Objetos
1Fundamentos do S3
Trabalhando com ArquivosListas com uma ClasseFunções ConstrutorasMétodos de Impressão e FormataçãoValidadores e AuxiliaresRevisão - Temperaturas4Encapsulamento em R
Closures como ObjetosAmbientes como ObjetosFunções de AcessoProtegendo o EstadoRecapitulação - Parquímetro2Genéricos e Métodos S3
Genéricos e UseMethodMétodos padrãoMétodos para genéricos baseFundamentos de NextMethodRevisão - Áreas de formas5Classes S4
Definindo classes S4Slots e acessoVerificações de validadeMétodos showRevisão - Catálogo de produtos8Classes de Referência
Definindo Classes de ReferênciaMétodos e Atualizações de CamposSemântica de CópiaHerança e callSuperRecapitulação — Fila de Tarefas11Projeto: Gerenciamento de Biblioteca
Livros e MembrosEmpréstimo de LivrosPratique por conta própria: Compilador de R online