EXERCICE + CORRIGE EN JAVA :  Système de Gestion de Bibliothèque - Java

Développer un système simplifié de gestion de bibliothèque en Java respectant les principes de la POO.

Spécifications :

Classe Abstraite Document :

Attributs : titre (String), id (int)

Constructeur complet

Méthode abstraite int dureeEmprunt() qui retourne le nombre de jours max d'emprunt

Méthode concrète afficherInfos() qui affiche le titre et l'id

Interface Empruntable :

Méthodes : void emprunter(), void retourner()

Classes Concrètes :

Livre : Hérite de Document et implémente Empruntable

Durée d'emprunt : 21 jours

Attribut supplémentaire : auteur

Dictionnaire : Hérite de Document

Durée d'emprunt : 0 jour (ne peut pas sortir de la bibliothèque)

Attribut supplémentaire : langue

Classe Bibliotheque :

Contient une liste de Document

Méthode afficherTout() qui parcourt la liste et affiche les infos

Utilise instanceof pour vérifier si un document est Empruntable avant d'appeler emprunter()

Solution

// =================== INTERFACE EMPRUNTABLE ===================
interface Empruntable {
    void emprunter();
    void retourner();
}

// =================== CLASSE ABSTRAITE DOCUMENT ===================
abstract class Document {
    private String titre;
    private int id;
    
    public Document(String titre, int id) {
        this.titre = titre;
        this.id = id;
    }
    
    public String getTitre() {
        return titre;
    }
    
    public int getId() {
        return id;
    }
    
    public abstract int dureeEmprunt();
    
    public void afficherInfos() {
        System.out.println("Titre : " + titre + ", ID : " + id);
    }
}

// =================== CLASSE LIVRE ===================
class Livre extends Document implements Empruntable {
    private String auteur;
    private boolean estEmprunte;
    
    public Livre(String titre, int id, String auteur) {
        super(titre, id);
        this.auteur = auteur;
        this.estEmprunte = false;
    }
    
    public String getAuteur() {
        return auteur;
    }
    
    @Override
    public int dureeEmprunt() {
        return 21; // 21 jours pour un livre
    }
    
    @Override
    public void emprunter() {
        if (!estEmprunte) {
            estEmprunte = true;
            System.out.println("✓ Livre \"" + getTitre() + "\" emprunté pour " + dureeEmprunt() + " jours");
        } else {
            System.out.println("✗ Livre \"" + getTitre() + "\" déjà emprunté");
        }
    }
    
    @Override
    public void retourner() {
        estEmprunte = false;
        System.out.println("✓ Livre \"" + getTitre() + "\" retourné");
    }
    
    @Override
    public void afficherInfos() {
        super.afficherInfos();
        System.out.println("  Auteur : " + auteur);
        System.out.println("  Durée d'emprunt : " + dureeEmprunt() + " jours");
        System.out.println("  Statut : " + (estEmprunte ? "EMPRUNTÉ" : "DISPONIBLE"));
    }
}

// =================== CLASSE DICTIONNAIRE ===================
class Dictionnaire extends Document {
    private String langue;
    
    public Dictionnaire(String titre, int id, String langue) {
        super(titre, id);
        this.langue = langue;
    }
    
    public String getLangue() {
        return langue;
    }
    
    @Override
    public int dureeEmprunt() {
        return 0; // Ne peut pas sortir de la bibliothèque
    }
    
    @Override
    public void afficherInfos() {
        super.afficherInfos();
        System.out.println("  Langue : " + langue);
        System.out.println("  Type : Consultation sur place uniquement");
    }
}

// =================== CLASSE BIBLIOTHEQUE ===================
class Bibliotheque {
    private java.util.ArrayList<Document> documents;
    
    public Bibliotheque() {
        documents = new java.util.ArrayList<>();
    }
    
    public void ajouterDocument(Document doc) {
        documents.add(doc);
        System.out.println("✓ Document ajouté : " + doc.getTitre());
    }
    
    public void afficherTout() {
        System.out.println("\n" + "=".repeat(50));
        System.out.println("        CATALOGUE DE LA BIBLIOTHÈQUE");
        System.out.println("=".repeat(50));
        
        if (documents.isEmpty()) {
            System.out.println("Aucun document dans la bibliothèque.");
            return;
        }
        
        for (int i = 0; i < documents.size(); i++) {
            Document doc = documents.get(i);
            System.out.println("\n[" + (i + 1) + "] ");
            doc.afficherInfos();
            System.out.println("-".repeat(30));
        }
    }
    
    public void simulerEmprunt(int idDocument) {
        for (Document doc : documents) {
            if (doc.getId() == idDocument) {
                if (doc instanceof Empruntable) {
                    Empruntable emp = (Empruntable) doc;
                    emp.emprunter();
                } else {
                    System.out.println("✗ Impossible : \"" + doc.getTitre() + "\" n'est pas empruntable");
                }
                return;
            }
        }
        System.out.println("✗ Document avec ID " + idDocument + " non trouvé");
    }
    
    public void simulerRetour(int idDocument) {
        for (Document doc : documents) {
            if (doc.getId() == idDocument) {
                if (doc instanceof Empruntable) {
                    Empruntable emp = (Empruntable) doc;
                    emp.retourner();
                } else {
                    System.out.println("✗ \"" + doc.getTitre() + "\" n'est pas empruntable");
                }
                return;
            }
        }
        System.out.println("✗ Document avec ID " + idDocument + " non trouvé");
    }
    
    public int getNombreDocuments() {
        return documents.size();
    }
}

// =================== PROGRAMME PRINCIPAL ===================
class Main {
    public static void main(String[] args) {
        System.out.println("=".repeat(50));
        System.out.println("   SYSTÈME DE GESTION DE BIBLIOTHÈQUE");
        System.out.println("=".repeat(50));
        
        // Création de la bibliothèque
        Bibliotheque biblio = new Bibliotheque();
        
        // Création de documents
        System.out.println("\n>>> Création des documents...");
        
        // Livres classiques
        Livre livre1 = new Livre("Le Petit Prince", 101, "Antoine de Saint-Exupéry");
        Livre livre2 = new Livre("1984", 102, "George Orwell");
        Livre livre3 = new Livre("Harry Potter à l'école des sorciers", 103, "J.K. Rowling");
        
        // Livres techniques ajoutés
        Livre livre4 = new Livre("Apprendre le Java", 104, "PandaCodeur");
        Livre livre5 = new Livre("Exercices Corrigés Java", 105, "Yankam Joel");
        
        // Dictionnaires
        Dictionnaire dict1 = new Dictionnaire("Larousse Français", 201, "Français");
        Dictionnaire dict2 = new Dictionnaire("Oxford English Dictionary", 202, "Anglais");
        
        // Ajout à la bibliothèque
        System.out.println("\n>>> Ajout des documents...");
        biblio.ajouterDocument(livre1);
        biblio.ajouterDocument(livre2);
        biblio.ajouterDocument(livre3);
        biblio.ajouterDocument(livre4);
        biblio.ajouterDocument(livre5);
        biblio.ajouterDocument(dict1);
        biblio.ajouterDocument(dict2);
        
        // Affichage du catalogue
        System.out.println("\n>>> Affichage du catalogue...");
        biblio.afficherTout();
        
        // Simulation d'emprunts
        System.out.println("\n" + "=".repeat(50));
        System.out.println("        SIMULATION D'EMPRUNTS");
        System.out.println("=".repeat(50));
        
        System.out.println("\n1. Emprunt du livre 'Apprendre le Java' (ID 104):");
        biblio.simulerEmprunt(104);
        
        System.out.println("\n2. Emprunt du livre 'Exercices Corrigés Java' (ID 105):");
        biblio.simulerEmprunt(105);
        
        System.out.println("\n3. Essai d'emprunt d'un dictionnaire (ID 201):");
        biblio.simulerEmprunt(201);
        
        System.out.println("\n4. Ré-emprunt du livre ID 104:");
        biblio.simulerEmprunt(104);
        
        System.out.println("\n5. Emprunt d'un autre livre ID 101:");
        biblio.simulerEmprunt(101);
        
        // Simulation de retours
        System.out.println("\n" + "=".repeat(50));
        System.out.println("        SIMULATION DE RETOURS");
        System.out.println("=".repeat(50));
        
        System.out.println("\n1. Retour du livre 'Apprendre le Java' (ID 104):");
        biblio.simulerRetour(104);
        
        System.out.println("\n2. Ré-emprunt du livre ID 104 (après retour):");
        biblio.simulerEmprunt(104);
        
        // Affichage final
        System.out.println("\n" + "=".repeat(50));
        System.out.println("        ÉTAT FINAL DU CATALOGUE");
        System.out.println("=".repeat(50));
        biblio.afficherTout();
        
        // Statistiques
        System.out.println("\n" + "=".repeat(50));
        System.out.println("            STATISTIQUES");
        System.out.println("=".repeat(50));
        System.out.println("Nombre total de documents : " + biblio.getNombreDocuments());
        System.out.println("Livres : 5 documents (durée: 21 jours)");
        System.out.println("Dictionnaires : 2 documents (non empruntables)");
        System.out.println("\nLivres techniques disponibles :");
        System.out.println("  - 'Apprendre le Java' par PandaCodeur");
        System.out.println("  - 'Exercices Corrigés Java' par Yankam Joel");
        System.out.println("=".repeat(50));
        System.out.println("FIN DU PROGRAMME");
    }
}

 

Tips

  1. Classes Abstraites : Document est abstraite avec une méthode abstraite
  2. Interfaces : Empruntable définit un contrat
  3. Héritage : Livre et Dictionnaire héritent de Document
  4. Polymorphisme : Traitement uniforme des documents
  5. Encapsulation : Attributs privés avec getters
  6. Instanceof : Vérification du type à l'exécution
  7. Collections : Utilisation d'ArrayList pour gérer les documents

Si vous avez trouvé les exercices corrigés en Java de Mr JoëlYk intéressants et utiles, pourquoi ne pas les partager avec d'autres personnes qui pourraient également en bénéficier ? Partagez ce lien sur les réseaux sociaux ou envoyez-le à vos amis et collègues. Vous pourriez aider quelqu'un à améliorer ses compétences en programmation ou à trouver des solutions à des problèmes complexes. N'oubliez pas que la connaissance doit être partagée pour grandir. Merci pour votre soutien et votre partage !

Contact WhatsApp : +237 652027193 | Réaliser Par Mr  Joël_Yk

Questions / Réponses

Aucune question. Soyez le premier à poser une question.
Aucune note. Soyez le premier à attribuer une note !

Ajouter un commentaire

Anti-spam