On souhaite écrire un programme permettant d'effectuer
des mouvements financiers entre des comptes.
Le fichier
accounts.txt contient une liste de compte
sous la forme d'un quadruplet
(numéro du compte, prénom, nom et solde du compte),
le premier et le dernier sont des entiers long et les autres
de chaine de caractère au format US-ASCII 8bits.
Le fichier
records.txt est une liste de mouvement financier
sous la forme d'un triplet
(somme d'argent à transférer, compte1, compte2),
tous des entiers long, qui indique qu'il faut transférer la somme d'argent
du compte1 au compte2.
On cherche à appliquer les mouvements financiers du fichier records.txt
sur les comptes décrit dans accounts.txt et de ressortir un état de chaque
compte indiquant le solde de celui-ci ainsi que les 3 dernières opérations
(3 doit être une constante du programme pour pouvoir être changé si nécessaire)
de transfert d'argent (vers le compte ou à partir de ce compte).
Le fichier
process-out.txt correspond à la sortie attendu du programme,
celui-ci liste les comptes dans le même ordre que le fichier
accounts.txt et pour chaque compte affiche
le prénom et le nom du possesseur du compte, son solde après les mouvements,
ainsi que les 3 dernières opérations effectuées sur ce compte.
Voici un exemple pour le compte de
john black
john black -202839
john black --> 1245 --> micky mc'diamond
jill torturo --> 2798 --> john black
john black --> 2079 --> june baggins
Il vous est donc demander de créer un programme Java qui permet de produire
en sortie exactement la même sortie que celle enregistrer
dans le fichier
process-out.txt.
De plus, comme le fichier
records.txt contient trop d'information
pour être monter en mémoire sous forme d'une liste,
il vous est demandé de créer une méthode
loadAsIterator
(à mettre dans la bonne classe)
qui renverra chaque ligne du fichier à chaque appel
hasNext/next
sur l'itérateur.
Voici son prototype:
Iterator<Record> loadAsIterator(BufferedReader reader, XXX)
avec XXX le ou les paramètres supplémentaires que vous désirez.
Il est très important que votre programme soit correctement designé,
avec ni trop de classes ni pas assez, que la responsabilité de chaque
classe soit clairement établie,
que la visibilité des méthodes,
constructeurs, champs soit adaptés, qu'il n'y est pas de code non-utilisé,
que les commentaire de documentation soient écrit en Anglais,
que les resources fichiers ouvertes soient
correctement fermés même en cas d'exception, que les exceptions
soient correctement gérés, et bien-sûr que la méthode loadAsIterator
soit utilisée et que la sortie du programme soit la bonne.