À 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

LIVRE

Entité LIVRE

Attributs : ISBN (clé), titre, prix (float), emprunteur (ADHERENT), auteur (AUTEUR). Un livre peut avoir un emprunteur nul s'il est disponible.

AUTEUR

Entité AUTEUR

Attributs : num (clé), nom, prénom, date_naissance, description. Lié à zéro ou plusieurs livres.

ADHERENT

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

01

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.

02

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().

03

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().

04

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.

05

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