Grand livre bancaire
Fait partie de la section Programmation orientée objet du Journey R de Coddy. Leçon 57 sur 57.
Défi
DifficileConstruisez une petite banque à partir de classes de référence dans quatre fichiers. Toutes les définitions sont encapsulées dans suppressMessages() ; utilisez call. = FALSE dans chaque stop().
Account.R: champsid,owner,balance(0 au départ).deposit(x)etwithdraw(x)s'arrêtent avecinvalid amountlorsquexest manquant ou inférieur à 1 ;withdraw()s'arrête avecinsufficient funds in 2lorsque le solde passerait souslowest(), qui vaut 0.month_end()ne fait rien ;line()renvoie1 ada checking: -20en utilisantkind().Checking.R: typechecking; le solde peut descendre jusqu'à -100.Savings.R: typesavings; au plus 2 retraits par mois (withdrawal limit on 2), comptabilisés uniquement lorsqu'ils réussissent ;month_end()ajoute 1 % d'intérêts, arrondi à l'entier inférieur, et réinitialise le compteur.Bank.R:open_account(kind, id, owner)(account 2 exists),get_account(id)(no account 9),transfer(from, to, amount), qui ne modifie rien lorsque le retrait échoue,month_end()pour chaque compte, etstatement(), les lignes de tous les comptes triées par identifiant.
Le code fourni lit les commandes open checking 1 ada, dep 1 100, wd 2 30, tr 1 2 50 ou month, affiche ok ou le message d'erreur pour chacune, puis l'état des comptes.
Votre code doit se trouver dans Account.R, Checking.R, Savings.R et Bank.R. main.R contient le code fourni pour les entrées et sorties et ne peut pas être modifié.
Essayez vous-même
source("Account.R")
source("Checking.R")
source("Savings.R")
source("Bank.R")
# Code d'entrée/sortie fourni : le garder tel quel
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 = "")
Toutes les leçons de Programmation orientée objet
1Bases de S3
Travailler avec les fichiersListes avec une classeFonctions constructricesMéthodes print et formatValidateurs et fonctions utilitairesRécapitulatif - Températures4Encapsulation dans R
Les fermetures comme objetsLes environnements comme objetsFonctions d’accèsProtéger l’étatRécapitulatif - Parcmètre2S3 : génériques et méthodes
Génériques et UseMethodMéthodes par défautMéthodes pour les génériques de baseNotions de base sur NextMethodRécapitulatif - Aires des formes5Classes S4
Définir des classes S4Slots et accèsVérifications de validitéMéthodes showRécapitulatif - Catalogue de produits8Classes de référence
Définition des classes de référenceMéthodes et mises à jour des champsSémantique de copieHéritage et callSuperRécapitulatif - File d’attente des tâches11Projet : gestion de bibliothèque
Livres et membresEmprunter des livres3Héritage S3
Vecteurs de classesOrdre de recherche des méthodesÉtendre avec NextMethodVérifier avec inherits()Récapitulatif - Paie du personnelEntraînez-vous par vous-même : Compilateur R en ligne