Conversation with Merlin [email protected] · Tue Jan 09 2024

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.

  1. Définir la classe « Ouvrage » qui, à part ses attributs, contient : Un constructeur pour initialiser le code et le titre uniquement. Une méthode << toString » qui retourne une chaine contenant la valeur de ses attributs.
  • Une méthode << affiche >> qui affiche le résultat retourné de «< toString >>. Une méthode << emprunter » qui admet comme paramètre le numéro de la carte du lecteur qui va emprunter l'ouvrage et modifie certains attributs de cet ouvrage. Un ouvrage ne peut être emprunté que son état le permet.
  1. Définir les classes << Livre >>, << Magazine >> et << Cdrom»> à partir de la classe << Ouvrage >>. Chacune de ces classes:
  • Contiendra un constructeur pour initialiser ses attributs local et hérités Redéfinira la méthode << toString >> en incluant ses propres attributs.
  1. Définir une classe exécutable << Bibliotheque » qui permet, à travers sa fonction main, de (choisir vous même les valeurs des instances):
  • Créer une instance de la classe << Livre »,
  • Créer une instance de la classe << Magazine »>,
  • Créer une instance de la classe << Cdrom >>
  • Effectue les opérations suivantes : 。 emprunter le livre au lecteur dont le numéro de sa carte est 13, o emprunter le Cdrom au lecteur dont le numéro de sa carte est 8, о Le lecteur dont le numéro de carte est 13 rend le livre qu'il a emprunté, emprunter le livre au lecteur dont le numéro de sa carte est 20. Affiche les valeurs des attributs de ces 3 instances. 4. Donner le résultat de l'affichage réalisé suite à l'exécution du main de la classe «Bibliotheque ».
  1. Maintenant on souhaite comptabiliser le nombre total de tout les emprunts effectués. Indiquer le code à ajouter dans la classe Ouvrage pour permettre de réaliser ce souhait. Exercice n° 2 (= 8 points):
  1. Développer une classe CodeaBarre qui possède un attribut code correspondant aux 13 chiffres d'un code à barre d'un produit. Pour une raison de simplification de traitement, cet attribut sera représenté par un tableau d'entier (voir annexe). Cette classe possède aussi : Une méthode public void remplirCode() qui permet de remplir les cases de l'attribut à partir des entiers saisis au clavier. Chaque case de code doit contenir un chiffre entre 0 et 9. Une méthode public void paysCode () qui affiche le message « Ce produit est Tunisien >> ou bien << Ce produit est étranger >> selon la valeur de code à barre qui se trouve dans l'attribut. Un code à barre correspond au celui d'un produit Tunisien s'il commence par 619.
  • Une méthode public void verifCode () qui affiche true, si le code est valide, affiche false sinon. Un code à barre est valide si la parité de la somme de ses entiers sauf le dernier chiffre est égale à la parité du dernier chiffre du code. La parité est une propriété qui indique si un entier est pair ou impair.
  1. Développer une classe exécutable TestCode qui utilise la classe précédente pour créer, remplir, tester la validation et déterminer si ce code à barre est Tunisien ou non. Annexe : Rappel déclaration : int code[] = new int[13];

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.

Exercice n° 1

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