📚 Système de Gestion de Bibliothèque – AP2
Application Java Desktop MVC avec interface Swing et base de données MySQL via JDBC
À propos du projet
Ce projet est mon AP2 en BTS SIO — une application Java Desktop de gestion de bibliothèque développée avec une interface graphique Swing et une base de données MySQL connectée via JDBC. L'application suit une architecture MVC stricte avec 3 packages distincts : controller, model et view.
L'application permet à des adhérents de se connecter, de consulter le catalogue des livres disponibles, d'emprunter et retourner des ouvrages, et de gérer leur compte personnel — le tout synchronisé en temps réel avec la base de données.
Architecture du projet
📁 PROJET_ETHAN_AP2/
├── 📁 controller/
│ └── mainMVC.java — Point d'entrée, initialise le modèle
├── 📁 model/
│ ├── model.java — Connexion BDD, logique métier, CRUD
│ ├── LIVRE.java — Entité livre (ISBN, titre, prix, auteur, emprunteur)
│ ├── AUTEUR.java — Entité auteur (num, nom, prénom, date, description)
│ └── ADHERENT.java — Entité adhérent (num, nom, prénom, email, livres)
└── 📁 view/
├── View_Connexion.java — Écran de connexion par numéro adhérent
├── View_Accueil.java — Menu principal (4 actions)
├── View_Catalogue.java — Tableau de tous les livres avec statut
├── View_Emprunt.java — Formulaire d'emprunt par ISBN
├── View_Compte.java — Profil modifiable de l'adhérent
├── View_LivresEmpruntes.java — Liste des livres empruntés + retour
└── View_Livre.java — Vue livre (structure)
Fonctionnalités
Connexion adhérent
Authentification par numéro d'adhérent (A001, A002…). L'adhérent connecté est conservé en mémoire dans le modèle pour toute la session.
Catalogue complet
Tableau JTable affichant tous les livres : ISBN, titre, auteur, prix et statut (Disponible / Emprunté). Copie de cellule via Ctrl+C.
Emprunt de livres
Saisie de l'ISBN pour emprunter un livre disponible. Vérification en temps réel : livre existant, non déjà emprunté, adhérent valide.
Retour de livres
Liste des livres empruntés par l'adhérent avec bouton de retour. Mise à jour instantanée de la liste après retour.
Gestion du compte
Modification du nom, prénom et email directement depuis l'interface. Mise à jour en BDD et en mémoire.
Synchronisation BDD
Toutes les données sont chargées au démarrage depuis MySQL. Chaque action (emprunt, retour, modif) met à jour la BDD ET les objets en mémoire.
Modèle de données
Entité LIVRE
Attributs : ISBN (clé), titre, prix (float), emprunteur (ADHERENT), auteur (AUTEUR). Un livre peut avoir un emprunteur nul s'il est disponible.
Entité AUTEUR
Attributs : num (clé), nom, prénom, date_naissance, description. Lié à zéro ou plusieurs livres.
Entité ADHERENT
Attributs : num (clé), nom, prénom, email, ListLivre (ArrayList). L'adhérent porte sa propre liste de livres empruntés.
Étapes du développement
Conception de la base de données
Création du schéma MySQL ap2_ethan_2025 avec les tables livre, auteur, adherent. Définition des clés étrangères et insertion de données de test.
Modèle & entités Java
Création des classes LIVRE, AUTEUR, ADHERENT avec encapsulation stricte (attributs privés, getters/setters). Implémentation du model.java central avec connexion JDBC et méthodes getAll(), findLivre(), findAdherent(), findAuteur().
Logique métier
Implémentation de emprunterLivre() et retournerLivre() dans le modèle : vérifications côté objet, requête SQL UPDATE, mise à jour synchronisée des objets en mémoire. Même logique pour updateAdherent().
Vues Swing
Développement des 6 vues avec positionnement absolu (setLayout(null)). Chaque vue accède au modèle via mainMVC.getM(). La vue Catalogue utilise un JTable avec DefaultTableModel et colonnes non éditables.
Tests et corrections
Tests des cas limites : emprunt d'un livre déjà pris, retour d'un livre non emprunté, connexion avec un numéro inexistant. Gestion des erreurs SQL avec messages JOptionPane clairs.
Compétences acquises
- Architecture MVC en Java avec packages séparés (controller / model / view)
- Connexion BDD depuis Java avec JDBC et
DriverManager - Conception d'interfaces Swing (JFrame, JTable, JList, JTextField, JOptionPane)
- POO avancée : encapsulation, associations entre objets, ArrayList
- Gestion de l'état de session (adhérent connecté persisté dans le modèle)
- Synchronisation double : BDD + objets en mémoire pour éviter les requêtes inutiles
- Gestion des erreurs et cas limites dans les interactions utilisateur