Dans cet exercice tous les attributs des classes sont private, et supposez l'existence de la définition de leurs getters et setters. Dans une bibliothèque, on peut emprunter différents types d'ouvrage : livre, magazine, CD-ROM... Tous les ouvrages ont un code (type entier), un titre, un état booléen initialement à false (pour indiquer qu'un ouvrage est emprunté ou non), numéro de la carte du lecteur qui va emprunter l'ouvrage et le nombre de fois que l'ouvrage a été emprunté. Les livres sont décrits. en plus, par leur nom d'auteur et maison d'édition. Les magazines ont, de plus, les propriétés numéro et périodicité (hebdomadaire, mensuel, trimestriel). Enfin les CD-ROM ont de plus un thème.
Saisie d'un entier du clavier : Scanner sc = new Scanner(System.in); int n sc.nextInt(); L'opérateur modulo en java : Bonne chance!
Commençons par aborder chaque partie du problème une par une.
Partie 1: Définition de la classe Ouvrage
Pour la classe Ouvrage
, nous définirons les attributs nécessaires, le constructeur, les méthodes toString
, affiche
et emprunter
.
public class Ouvrage { // Tous les attributs sont privés. private int code; private String titre; private boolean estEmprunte; private int numeroCarteLecteur; private int nombreEmprunts; // Constructeur de la classe Ouvrage. public Ouvrage(int code, String titre){ this.code = code; this.titre = titre; this.estEmprunte = false; // L'état initial est false, l'ouvrage n'est pas emprunté. this.numeroCarteLecteur = 0; // Initialement à zéro, car aucun lecteur n'a emprunté l'ouvrage. this.nombreEmprunts = 0; } // Méthode toString. @Override public String toString() { return "Code: " + this.code + ", Titre: " + this.titre + ", Emprunté: " + this.estEmprunte + ", Numéro de carte du lecteur: " + this.numeroCarteLecteur + ", Nombre d'emprunts: " + this.nombreEmprunts; } // Méthode affiche. public void affiche() { System.out.println(this.toString()); } // Méthode emprunter. public void emprunter(int numeroCarteLecteur) { if(!this.estEmprunte) { this.estEmprunte = true; this.numeroCarteLecteur = numeroCarteLecteur; this.nombreEmprunts++; } else { System.out.println("L'ouvrage est déjà emprunté."); } } // Getters et setters sont supposés être définis ici. // ... }
Partie 2: Définition des classes Livre
, Magazine
et Cdrom
Nous héritons ces classes de la classe Ouvrage
et nous redéfinissons le constructeur ainsi que la méthode toString
.
public class Livre extends Ouvrage { private String auteur; private String maisonEdition; public Livre(int code, String titre, String auteur, String maisonEdition) { super(code, titre); // Appel du constructeur de la superclass Ouvrage. this.auteur = auteur; this.maisonEdition = maisonEdition; } @Override public String toString() { return super.toString() + ", Auteur: " + this.auteur + ", Maison d'édition: " + this.maisonEdition; } // Getters et setters sont supposés être définis ici. // ... }
Des définitions similaires sont faites pour les classes Magazine
et Cdrom
, en incluant leurs attributs spécifiques et la redéfinition de la méthode toString
.
Partie 3: Classe exécutable Bibliotheque
public class Bibliotheque { public static void main(String[] args) { // Création des instances de Livre, Magazine et Cdrom. Livre livre = new Livre(1, "Titre du Livre", "Nom Auteur", "Maison d'édition"); Magazine magazine = new Magazine(2, "Titre du Magazine", "Numéro Magazine", "Périodicité"); Cdrom cdrom = new Cdrom(3, "Titre du CD-ROM", "Thème CD-ROM"); // Opérations d'emprunt et retour. livre.emprunter(13); cdrom.emprunter(8); // Simulation du retour du livre. livre.retour(); // Supposer qu'une méthode retour() a été définie pour gérer cela. livre.emprunter(20); // Affichage des attributs des instances. livre.affiche(); magazine.affiche(); cdrom.affiche(); } }
Partie 4: Résultat de l'affichage
Le résultat affiché dans la console sera une suite de lignes contenant les informations des instances de Livre
, Magazine
et Cdrom
après les opérations d'emprunt et de retour.
**Partie