// =================== 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
- Classes Abstraites : Document est abstraite avec une méthode abstraite
- Interfaces : Empruntable définit un contrat
- Héritage : Livre et Dictionnaire héritent de Document
- Polymorphisme : Traitement uniforme des documents
- Encapsulation : Attributs privés avec getters
- Instanceof : Vérification du type à l'exécution
- Collections : Utilisation d'ArrayList pour gérer les documents