Exercice : Gestion d’une bibliothèque JAVA
Pour la gestion d’une bibliothèque on nous demande d’écrire une application traitant des documents de nature diverse : des livres, qui peuvent être des romans ou des manuels, des revues, des dictionnaires, etc. Tous les documents ont un numéro d’enregistrement (un entier) et un titre (une chaîne de caractères). Les livres ont, en plus, un auteur (une chaîne) et un nombre de pages (un entier). Les romans ont éventuellement un prix littéraire (un entier conventionnel, parmi : GONCOURT, MEDICIS, INTERALLIE, etc.), tandis que les manuels ont un niveau scolaire (un entier). Les revues ont un mois et une année (des entiers) et les dictionnaires ont une langue (une chaîne de caractères appartenant à un ensemble prédéfini, comme "anglais", "allemand", "espagnol", etc.). Tous les divers objets en question ici (livres, revues, dictionnaires, romans, etc.) doivent pouvoir être manipulées en tant que documents. Voici le diagramme de classes :
A) Définissez les classes Document, Livre, Roman, Manuel, Revue et Dictionnaire, entre lesquelles existeront les liens d’héritage que la description précédente suggère. Dans chacune de ces classes définissez
- le constructeur qui prend autant arguments qu’il y a de variables d’instance et qui se limite à initialiser ces dernières avec les valeurs des arguments,
- une méthode public String toString() produisant une description sous forme de chaîne de caractères des objets,
- si vous avez déclaré private les variables d’instance (c’est conseillé, sauf indication contraire ) définissez également des « accesseurs » publics get... permettant de consulter les valeurs de ces variables. Écrivez une classe exécutable TestDocuments qui crée et affiche plusieurs documents de types différents.
B) Une bibliothèque sera représentée par un tableau de. Définissez une classe Bibliotheque, avec un tel tableau pour variable d’instance et les méthodes :
- Bibliotheque(int capacité) - constructeur qui crée une bibliothèque ayant la capacité (nombre maximum de documents) indiquée,
- void afficherDocuments() - affiche tous les ouvrages de la bibliothèque,
- Document document(int i) - renvoie le ième document,
- boolean ajouter(Document doc) - ajoute le document indiqué et renvoie true (false en cas d’échec),
- boolean supprimer(Document doc) - supprime le document indiqué et renvoie true (false en cas d’échec)
- void afficherAuteurs() - affiche la liste des auteurs de tous les ouvrages qui ont un auteur (au besoin, utilisez l’opérateur instanceof).
C) Définissez, avec un effort minimal, une classe Livrotheque dont les instances ont les mêmes fonctionnalités que les Bibliotheques mais sont entièrement constituées de livres. Comment optimiser dans la classe Livrotheque la méthode afficherAuteurs ?
Correction :
ð
Classe
Bibliotheque.java :
package
document;
public
class Bibliotheque {
public int Capacité;
public static int Nb=0;
public Document[] doc;
public Bibliotheque(int Capacité) {
this.Capacité = Capacité;
doc=new Document[5];
Nb=0;
}
public void afficherDoc(){
for(Document
D:doc)
System.out.println(D);
}
public Document document(int i){
return (doc[i]) ;
}
public boolean ajouter(Document Doc){
if(Nb<doc.length)
this.doc[Nb++]=Doc;
return true;
}
public boolean supprimer(Document Doc){
for(int
i=0;i<doc.length;i++){
if(doc[i].NumEnreg==(Doc.NumEnreg))
doc[i]=doc[i+1];
}
Nb--;
return true; }
public
void afficherAuteur(){
for(int i=0;i<doc.length;i++){
if(doc[i] instanceof Livre)
System.out.println((Livre)
doc[i]) ;
}
}
}
ð
Classe
Dictionnaire.java :
package
document;
public
class Dictionnaire extends Document{
private String Langue;
public Dictionnaire(String Langue, int
NumEnreg, String titre) {
super(NumEnreg, titre);
this.Langue = Langue;
}
public String
getLangue() {
return Langue;
}
public void setLangue(String Langue) {
this.Langue = Langue;
}
public String toString() {
return super.toString()+"Dictionnaire{"
+ "Langue=" + Langue + '}';
}
}
ð
Classe
Document.java :
package
document;
public
class Document {
protected int
NumEnreg;
protected String titre;
public Document(int NumEnreg, String
titre) {
this.NumEnreg = NumEnreg;
this.titre = titre;
}
public String
toString() {
return "Document{" + "NumEnreg=" + NumEnreg +
", titre=" + titre + '}';
}
}
ð
Classe
Livre.java :
package
document;
public
class Livre extends Document {
protected
String Auteur;
protected int NbrPages;
public String getAuteur() {
return Auteur;
}
public void setAuteur(String Auteur) {
this.Auteur = Auteur;
}
public int
getNbrPages() {
return NbrPages;
}
public void setNbrPages(int NbrPages) {
this.NbrPages = NbrPages;
}
public Livre(int Num,String T,String
Auteur, int NbrPages) {
super(Num,T);
this.Auteur = Auteur;
this.NbrPages = NbrPages;
}
public String toString() {
return
super.toString()+"Livre{" + "Auteur=" + Auteur + ",
NbrPages=" + NbrPages + '}';
}
}
ð
Classe
Manuel.java :
package
document;
public
class Manuel extends Livre{
private
String neveau;
public
String getNeveau() {
return neveau;
}
public void
setNeveau(String neveau) {
this.neveau = neveau;
}
public String
toString() {
return super.toString()+"Manuel{" + "neveau=" +
neveau + '}';
}
public Manuel(String neveau, int Num,
String T, String Auteur, int NbrPages) {
super(Num, T, Auteur, NbrPages);
this.neveau = neveau;
}
}
ð
Classe
Revue.java :
package
document;
public
class Revue extends Document{
private int mois;
private int annee;
public Revue(int mois, int annee, int NumEnreg,
String titre) {
super(NumEnreg, titre);
this.mois = mois;
this.annee = annee;
}
public String
toString() {
return super.toString()+"Revue{" + "mois=" + mois +
", annee=" + annee + '}';
}
}
ð
Classe Roman.java :
package
document;
public
class Roman extends Livre{
private double prixLitt;
public Roman(double prixLitt, int Num, String
T, String Auteur, int NbrPages) {
super(Num, T, Auteur, NbrPages);
this.prixLitt = prixLitt;
}
public double
getPrixLitt() {
return prixLitt;
}
public void setPrixLitt(double prixLitt) {
this.prixLitt = prixLitt;
}
public String
toString() {
return super.toString()+"Roman{" + "prixLitt=" +
prixLitt + '}'; }
}
ð
Classe
TestBibliotheque.java :
package
document;
public
class TestBibliotheque {
public static
void main(String[] args){
Bibliotheque bib=new Bibliotheque(10);
Document d1=new
Document(12,"Base_de_donnee");
bib.ajouter(d1);
Document d2=new
Document(1,"JAVA");
bib.ajouter(d2);
bib.ajouter(new
Document(1,"MATHS"));
bib.ajouter(new
Document(2,"FRANCAIS"));
bib.ajouter(new
Document(62,"ENGLISH"));
bib.ajouter(new
Document(22,"ARABE"));
bib.afficherDoc();
System.out.println();
System.out.println(bib.document(2));
System.out.println(bib.supprimer(d2));
System.out.println();
bib.afficherDoc();
}
}
vous n'avez pas respecter le concept souhaité de cet exercice , PrixLitt (il doit être un string comme Nobele ,GONCOURT, MEDICIS, INTERALLIE ce n'est pas un monnaie) , aussi PrixLitt et Langue ce sont des lists sous forma d'un enum ou dictionnaire déja prédéfini, autre chose j'ai pas trouvé la classe TestDocuments . bonne chance
RépondreSupprimer