Devoir 5 - Examen

Ce devoir est à rendre (en utilisant comme d'habitude la classe RendreProjet ) avant le 14 septembre 23h59.

Contrairement aux devoirs précédents, nous ne vous fournissons pas de retour immédiat par des tests. Nous vous suggérons évidemment d'écrire vos propres tests JUnit pour vérifier que tout fonctionne bien.

Récupérez les sources du sujet.

Exercice 1

On considère la classe SommeDArgent , et le programme devoir5.exercice1.Exo1.

Actuellement, le main de la classe Exo1 affiche :

		[4 euros, 10 dollars, 15 dollars, 10 euros, 1 livres, 3 dollars, 3 dollars, 10 euros, 10 livres, 3 dollars]
		Exception in thread "main" java.lang.ClassCastException: devoir5.exercice1.SommeDArgent cannot be cast to java.lang.Comparable		
	
Modifiez la classe SommeDArgent (et uniquement elle) pour que : On devrait obtenir l'affichage :
		[4 euros, 10 livres, 10 dollars, 3 dollars, 1 livres, 10 euros, 15 dollars]
		[3 dollars, 10 dollars, 15 dollars, 4 euros, 10 euros, 1 livres, 10 livres]
	
(pour la première ligne, l'ordre peut éventuellement être différent)

Exercice 2

On veut modéliser (très sommairement) une bibliothèque de prêt. Une bibliothèque possède des exemplaires de livres (par exemple, elle peut posséder deux exemplaires de « Guerre et paix »). La classe Exemplaire vous est fournie, vous n'avez pas à l'écrire ni à la modifier.

On représente aussi un Usager de la bibliothèque. Un usager a un nom, un prénom, et \og connaît\fg{} l'ensemble des exemplaires qu'il a actuellement empruntés.

On vous demande d'écrire une classe pour représenter la bibliothèque. Cette classe est implémentée à l'aide de deux variables d'instance:

Question

Dans la classe Bibliotheque, écrire la méthode getExemplairesDisponibles, qui prend comme argument le titre d'un livre et renvoie tous les exemplaires disponibles de celui-ci :

Question

Dans la classe Bibliotheque, écrire la méthode trouverEmprunteur, qui prend comme argument un exemplaire, et trouve l'usager qui l'a emprunté. Si l'exemplaire n'est pas emprunté, la méthode lèvera une BibliothequeException.

Question

Dans la classe Bibliotheque, écrire la méthode emprunterExemplaire, qui prend comme argument un usager u et un exemplaire ex, et assure que :

Question

Pour accélérer les recherches, on crée la classe InventaireTitres, qui permet de connaître rapidement, à partir d'un titre, tous les exemplaires existants de ce titre.

Cette classe est implantée à l'aide d'une Map, dont la clef est le titre d'un livre, et la valeur est l'ensemble des exemplaires existants de ce livre.

On vous demande dans cette question d'écrire la méthode ajouteExemplaire() de la classe InventaireTitres qui permet d'ajouter à l'inventaire un nouvel exemplaire d'un livre.

Pour vous aider, voici quelques question auxquelles vous répondrez en commentaire dans la classe InventaireTitres.

Exercice 3

Remarque : pour cet exercice, je suggère fortement d'écrire des jeux de tests en utilisant les classes StringReader et StringWriter.

Question 1

Écrire la méthode comparerFlux, qui permet de savoir si deux flux textes ont le même contenu (contiennent le même texte).

Question 2

On désire pouvoir remplacer dans un texte lu sur un flux entrant les guillemets de type "machine à écrire" ("...") par des guillemets typographiques français : « et ».

La difficulté est que le premier type de guillemets ne distingue pas le guillemet ouvrant du guillemet fermant ; il n'y a que le caractère ".

On vous demande donc d'écrire la méthode reecrireGuillemets pour que si le Reader lit :

			Ceci est le "cours de 
			langage java". Vous le trouverez
			sur les pages du "cnam".
		
Vous écriviez sur le Writer :
			Ceci est le «cours de 
			langage java». Vous le trouverez
			sur les pages du «cnam».
		
Notez que le texte entre guillemets peut s'étaler sur plusieurs lignes, comme ici.