Ce projet a été réalisé dans le cadre d’un projet académique en développement logiciel. Objectif : créer une application de gestion hospitalière complète en utilisant des technologies modernes et en respectant les principes de programmation orientée objet.
Gérer les médecins
Gérer les patients
Gérer les rendez-vous
Enregistrer des prescriptions
Gérer différents types de comptes : Admin, Médecin, Patient (à venir)
JavaFX → pour la construction de l’interface graphique
MySQL → base de données relationnelle
JDBC → connexion entre l’application Java et MySQL
CSS léger → pour la personnalisation de l’apparence
Structure orientée POO (Programmation orientée objet)
Apprendre à créer une interface graphique multi-fenêtres et multi-rôle.
Mettre en place une connexion sécurisée avec base de données.
Comprendre la logique de navigation dans une application de gestion.
Gérer des interactions entre plusieurs entités : Médecin, Patient, Rendez-vous.
Ajouter des éléments de personnalisation visuelle : images de fond, design de boutons.
Il représente un cas réel et concret de gestion multi-utilisateur.
Il mêle base de données + interface graphique + POO.
Il m’a permis d’apprendre à Gérer les formulaires JavaFX
Il m’a permis d’apprendre à Manipuler les données avec JDBC et SQL.
Gérer différents types de comptes : Admin, Médecin, Patient (à venir)
launch(args)
et qui ouvre la fenêtre
d’accueil principale avec les boutons de connexion pour Admin, Médecin et Patient.
VBox
pour organiser les boutons verticalement et un StackPane
pour pouvoir
mettre une image en arrière-plan avec une couche sombre, et par-dessus le contenu.
showLoginForm()
ou show()
d’un contrôleur spécifique (AdminLoginController,
MedecinLoginController, RendezVousController). Chaque contrôleur ouvre une nouvelle
Stage
(fenêtre indépendante).
VBox
permet de disposer simplement les boutons verticalement,
avec un espacement régulier (spacing
) entre eux, et un alignement
propre, ce qui convient parfaitement pour un menu de navigation simple.
StackPane
, qui permet d’empiler plusieurs éléments :
j’ai mis un ImageView
contenant l'image logo.png en
fond, et par-dessus, j’ai ajouté une couche sombre (Rectangle
semi-transparent), puis le contenu (VBox
ou autres). Chaque fenêtre
utilise ce même principe.
StackPane
est un conteneur JavaFX qui permet de superposer plusieurs
éléments. Je l’ai utilisé pour pouvoir mettre : Main.java
), la taille de la scène est de
600 x 500 pixels.VBox
avec setAlignment(Pos.CENTER)
ou
Pos.CENTER_LEFT
selon le besoin, et je joue aussi avec le
padding
(marges internes) pour les décaler un peu vers la droite quand
souhaité.
padding
permet de laisser de l’espace entre le contenu et les bords
de la fenêtre, pour que les éléments (boutons, labels) ne soient pas collés aux
bords et que l'interface soit plus aérée et agréable à utiliser.
Database.java
.connect()
qui retourne un objet
Connection
en utilisant le driver JDBC pour MySQL.Database.connect()
pour
obtenir cette connexion.
mysql-connector-java.jar
.Database.java
est une classe utilitaire que j’ai créée.Database.connect()
.
listerMedecins()
(AdminController) ou
listerPatients()
(MedecinController) :Connection conn = Database.connect();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM
table");
while(rs.next())
.enregistrerMedecin()
, j’utilise un
PreparedStatement
:
String sql = "INSERT INTO medecin (nom, specialite) VALUES (?, ?)";
PreparedStatement stmt = conn.prepareStatement(sql);
stmt.setString(1, nom);
stmt.setString(2, specialite);
stmt.executeUpdate();
Cela permet d’ajouter un nouveau médecin.
supprimerRendezVous()
, je fais :PreparedStatement stmt = conn.prepareStatement("DELETE FROM rendezvous WHERE id = ?");
stmt.setInt(1, id);
stmt.executeUpdate();
Cela supprime l’enregistrement correspondant.
admin
(id, username, password)medecin
(id, nom, specialite)patient
(id, nom)prescription
(id, id_medecin, id_patient, contenu)rendezvous
(id, date_rdv, id_medecin, id_patient)CREATE TABLE prescription (
id INT AUTO_INCREMENT PRIMARY KEY,
id_medecin INT,
id_patient INT,
contenu TEXT,
FOREIGN KEY (id_medecin) REFERENCES medecin(id),
FOREIGN KEY (id_patient) REFERENCES patient(id)
);
Chaque prescription est liée à un médecin et à un patient.
admin
dans la base.Main.java
).VBox
contenant :
TextField
(nom + mot de passe)Button
admin
en
base de données.
SELECT * FROM medecin WHERE nom = ?
Si je récupère un résultat, je l’autorise à entrer dans l’espace médecin.id
et son nom
, et
j'ouvre l'interface "Menu Médecin"
(MedecinController.show()
) :StackPane
avec :
BackgroundImage
VBox
au-dessus avec une couleur de fond partiellement
transparente (rgba(0,0,0,0.4)
), ce qui assombrit un peu
l’image.TextArea
car :
append("ID: … Nom:
…\n")
) pour la lisibilité.background-color
)font-size
)border-radius
)hover
(changement de couleur au passage de la
souris)