Solution Voir TD N°5
Solution Voir TD N°5
Solution Voir TD N°5
Exercice 1 :
Ecrire une classe qui a deux méthodes:
- Une méthode qui prend en paramètre une chaine « s » de type String et un caractère « ch » et qui
retourne le nombre de caractères « ch » présents dans la chaine « s » en utilisant la méthode indexOf().
- La méthode main() dans laquelle on récupère les paramètres « s » et « ch » sur la ligne de commande.
Réécrire la méthode main() dans le cas où les paramètres sont lus au clavier.
Solution
Voir TD N°5
Exercice 2 :
Écrire un programme qui récupère une chaine de caractères « s » sur la ligne de commande et ensuite
affiche le nombre de lettres « a », le nombre de lettres « m » et le nombre de lettres « p » qui sont
présentes dans la chaine « s »:
N.B. On ne fait pas de différence entre les majuscules et les minuscules.
Solution
Voir TD N°5
Problème: Gestion du prêt dans une bibliothèque
On suppose que le fond documentaire d’une bibliothèque est composé d’ouvrages qui sont des livres ou
des disques (livres enregistrés sur des CD ou des DVD). Le but de ce problème est de modéliser la
gestion de cette bibliothèque pour l’emprunt des ouvrages.
Partie I
Dans cette partie on ne fait pas de différence entre un livre et un disque.
1. Définir une classe nommée « Ouvrage » pour modéliser les ouvrages. Elle possède :
- Au moins trois attributs privés de type String à savoir :
titre : pour mémoriser le litre de l’ouvrage
auteur : pour mémoriser le nom du premier auteur
code : pour identifier de manière unique chaque ouvrage. Le code est composé d’un numéro
qui correspond à l’ordre de création de l’ouvrage suivi des trois premières lettres du nom de
l’auteur; ou de toutes les lettres du nom de l’auteur (si son nom a moins de trois lettres); ou de
la chaine "?" si le nom de l’auteur est la chaîne vide.
- Un constructeur pour créer et initialiser tous les attributs d’un objet de type « Ouvrage ».
- Au moins les méthodes suivantes (en cas de besoin, vous rajoutez d’autres méthodes) :
public String getCode() ; // Retourne le code de l’ouvrage
public String toString() ; // Retourne la chaine : titre+"-- "+code
Solution :
class Ouvrage {
private String auteur;
private String titre;
private String code;
private static int cptOuvrages; //numéro=ordre de création d’un objet
public Ouvrage(String titre, String auteur){
this.titre = titre;
SMI-S5 Solution TP5 : POO-Java, 2012-2013 1
this.auteur = auteur;
cptOuvrages++;
if (auteur.length()==0)
code = "?";
else if (auteur.length() < 3)
code =auteur;
else
code = auteur.substring(0,3);
code= cptOuvrages+code;
}
public String getAuteur() {
return auteur;
}
public String getCode(){
return code;
}
public String toString(){
return titre+"-- "+code;
}
}
2. Définir une classe nommée « Bibliotheque » pour modéliser la bibliothèque. Elle possède :
- Au moins deux attributs privés de type tableau de String à savoir :
lesOuvrages : pour mémoriser tous ouvrages de la biblothèque.
ouvragesEmpruntes : pour mémoriser les ouvrages empruntés.
- un constructeur pour créer et initialiser tous les attributs d’un objet de type « Bibliotheque ». On
suppose que la taille initiale des tableaux est saisie au clavier. Pour simplifier, on suppose que les
deux tableaux ont la même taille et que la taille initialement saisie est suffisante pour enregistrer
tous les ouvrages.
- Au moins les méthodes suivantes (en cas de besoin, vous rajoutez d’autres méthodes) :
public void ajouteOuvrage(String titre, String auteur) ; // Ajoute un ouvrage à la bibliothèque.
public void afficheTous() ; // Affiche tous les ouvrage de la bibliothèque.
public void afficheEmpruntes() ; // Affiche tous les ouvrages empruntés.
public Ouvrage get(String code) ; // Retourne l’ouvrage dont le code est passé en paramètre.
public boolean estEmprunte(Ouvrage o) ; // Retourne « true » si l’ouvrage o est emprunté
// sinon elle retourne « false ».
public void emprunte(String code) ; // Ajoute à la fin de liste des ouvrages empruntés,
// l’ouvrage dont le code est passé en paramètre.
Solution :
class Bibliotheque {
private Ouvrage [] lesOuvrags;
private Ouvrage [] OuvragesEmpruntes;
private int dernier=-1;
private int dernierEmp=-1;
public Bibliotheque(int n) {
lesOuvrages=new Ouvrage[n];
OuvragesEmpruntes = new Ouvrage[n];
}
public void ajouteOuvrag(String titre, String auteur){
Ouvrage unOuvrage = new Ouvrage(titre,auteur);
2. Définir une classe nommée « Disque » pour modéliser les disques. Elle hérite de la classe « Ouvrage »
Elle est caractérisée par
- type : un attribut de type String, propre à la classe « Disque ». Il désigne de type de disque : CD
ou DVD.
SMI-S5 Solution TP5 : POO-Java, 2012-2013 5
- Un constructeur pour créer et initialiser tous les attributs d’un objet de type « Disque ».
- La redéfinition de la méthode toString() ; pour retourner la chaine : titre+"-- "+code +"--"+type
N.B. dans cette méthode, doit appeler la méthode toString() déjà définie dans la classe Ouvrage.
Solution :
class Disque extends Ouvrage{
private String type; // CD ou DVD
public Disque (String titre, String auteur, String type){
super(titre,auteur);
this.type = type;
}
public String toString(){
return super.toString()+"--"+type;
}
public void afficheDisque() {
System.out.println(this);
}
}
3. Mettre à jour la classe nommée « Bibliotheque » qui modélise la bibliothèque. On suppose que
Les livres et les disques sont mémorisés dans le même tableau.
Les livres et les disques empruntés sont mémorisés dans le même tableau.
Pour l’ajout, on distingue entre les livres et les disques, pour cela, on définit les deux méthodes :
public void ajouteLivre(String titre, String auteur, long isbn)
public void ajouteDisque(String titre, String auteur, String type)
Solution :
class Bibliotheque{
private Ouvrage [] lesOuvrages;
private Ouvrage [] ouvragesEmpruntes;
private int dernier=-1;
private int dernierEmp=-1;
public Bibliotheque(int n) {
lesOuvrages=new Ouvrage[n];
ouvragesEmpruntes = new Ouvrage[n];
}
public void ajouteLivre(String titre, String auteur, long isbn){
Livre unLivre = new Livre(titre, auteur, isbn);
dernier ++;
lesOuvrages[dernier]=unLivre;
}
public void ajouteDisque(String titre, String auteur, String type){
Disque unDisque = new Disque(titre,auteur, type);
dernier ++;
lesOuvrages[dernier]=unDisque;
}
public void afficheTousLesOuvrages(){
for(int i=0; i<=dernier; i++)
System.out.println(lesOuvrages[i]);
}
SMI-S5 Solution TP5 : POO-Java, 2012-2013 6
public void afficheTousLesEmprunts(){
for(int i=0; i<=dernierEmp; i++)
System.out.println(ouvragesEmpruntes[i]);
}
public void afficheDisqueEmpruntes(){
for(int i=0; i<=dernierEmp; i++)
ouvragesEmpruntes[i].afficheDisque();
}
public void afficheLivreEmpruntes(){
for(int i=0; i<=dernierEmp; i++)
ouvragesEmpruntes[i].afficheLivre();
}
public Ouvrage [] getTousLesOuvrages(){
return lesOuvrages;
}
public Ouvrag1 [] getTousLesEmprunts(){
return ouvragesEmpruntes;
}
public Ouvrage get(String code){
for(int i=0; i<=dernier; i++)
if (lesOuvrages[i].getCode().equals(code))
return lesOuvrages[i];
return null;
}
public int getDernierEmp() {
return dernierEmp;
}
public boolean estEmprunte(Ouvrage o){
for(int i=0; i<=dernierEmp; i++)
if (ouvragesEmpruntes[i].getCode().equals(o.getCode()))
return true;
return false;
}
public void emprunte(String code){
Ouvrag unOuvrage=this.get(code);
if(!estEmprunte(unOuvrage)) {
dernierEmp ++;
OuvragesEmpruntes[dernierEmp]=unOuvrage;
}
}
}
4. Mettre à jour la classe « TestBibliothèque » qui contient la méthode main(). Pour les tests :
- On crée un objet de type « Bibliothèque » composé de 4 ouvrages (2 livres, un disque et un livre)
- On emprunte le deuxième et le troisième ouvrage
- On affiche tous les ouvrages empruntés.
- On affiche tous les disques empruntés.
- On affiche tous les livres empruntés.
SMI-S5 Solution TP5 : POO-Java, 2012-2013 7
Solution :
public class TestBibliotheque {
public static void main(String[] args) {
InputStreamReader in = null;
BufferedReader tampon = null;
try {
String titre, auteur;
in = new InputStreamReader(System.in);
tampon = new BufferedReader(in);
int n=10;
Bibliotheque m = new Bibliotheque(n);
System.out.print("Entrez un Titre : ");
titre = tampon.readLine();
System.out.print("Entrez l'Auteur : ");
auteur = tampon.readLine();
long isbn=234;
m.ajouteLivre(titre,auteur,isbn);
System.out.print("Entrez un Titre : ");
titre = tampon.readLine();
System.out.print("Entrez l'Auteur : ");
auteur = tampon.readLine();
isbn=244;
m.ajouteLivre(titre,auteur,isbn);
System.out.print("Entrez un Titre : ");
titre = tampon.readLine();
System.out.print("Entrez l'Auteur : ");
auteur = tampon.readLine();
System.out.print("Type : ");
String type = tampon.readLine();
m.ajouteDisque(titre,auteur, type);
System.out.print("Entrez un Titre : ");
titre = tampon.readLine();
System.out.print("Entrez l'Auteur : ");
auteur = tampon.readLine();
isbn=255;
m.ajouteLivre(titre,auteur,isbn);
System.out.println("Affichage de tous les ouvrages ");
m.afficheTousLesOuvrages();
Ouvrag1 [] ouvr;
ouvr = m.getTousLesOuvrages();
m.emprunte(ouvr[1].getCode());
m.emprunte(ouvr[2].getCode());
System.out.println();
System.out.println();
System.out.println("Affichage de tous les ouvrages Empruntés ");
m.afficheTousLesEmprunts();
Partie III
- Utiliser les entrées/sortie : Modifier le programme afin que les données soient sauvegardées dans des
fichiers.
- Utiliser les collections : Améliorer le programme en utilisant les collections à la place des tableaux.
- Utiliser les interfaces graphiques : Améliorer le programme en utilisant les interfaces graphiques.
- Faire la gestion des exceptions quand c’est nécessaire.