Application Java de gestion de la Cité universitaire

Application Java orientée objet pour gérer maisons, étudiants et services, avec tests et interface.

Année
BUT1, 2025
Type
SAÉ
Domaine
Développement
Période
janvier – juin 2025
Stack
Java, UML, Git
Fenêtre « CIUP - Gestion » de l’application Java : trois onglets en haut (Liste Maisons, Liste Etudiants, Liste Services), puis la vue Maisons : bandeau « Maison Internationale, 0/100 places », bouton « Liste des Maisons » flanqué des boutons « Créer une maison » et « Retirer une maison », et la liste de quatre maisons avec leur nationalité et leur occupation en couleur : Maison de France 70/80 places en orange, Maison du Japon 60/60 en rouge, Maison du Brésil 0/75 et Maison de l’Italie 0/90 en vert.
Vue Maisons — la liste dépliée, données générées par l’application9 écransOuvrir la visite

En bref

Problème
Gérer les maisons, les étudiants et les services de la Cité internationale dans une application Java.
Ce que j’ai réalisé
Un modèle objet, une interface graphique et des tests unitaires écrits avant le code.
Résultat
L’interface affiche les maisons et les services, et le modèle, qui répartit les étudiants par nationalité, est vérifié par des tests unitaires.
Rôle
Développement orienté objet et tests, en équipe.
Équipe
3 personnes
Statut
Terminé

L’application, écran par écran

Captures de l’application lancée hors ligne : maisons, services et menus sont créés par le code de l’application au lancement, avec des noms de directeurs fictifs ; aucune personne réelle n’y figure. La maison du Portugal a été saisie pour la démonstration.

01 sur 04

Vue Maisons — la liste dépliée

Après un clic sur « Liste des Maisons », les quatre maisons s’affichent avec leur nationalité et leur occupation, colorée selon le remplissage : 70/80 en orange, 60/60 en rouge, 0/75 et 0/90 en vert.

Maisons

  • Fenêtre « CIUP - Gestion » : trois onglets en haut (Liste Maisons, Liste Etudiants, Liste Services), bandeau « Maison Internationale, 0/100 places », bouton « Liste des Maisons » avec les boutons « Créer une maison » et « Retirer une maison », puis quatre bandeaux : Maison de France, nationalité française, 70/80 places en orange ; Maison du Japon, japonaise, 60/60 en rouge ; Maison du Brésil, brésilienne, 0/75 en vert ; Maison de l’Italie, italienne, 0/90 en vert., ouvrir la capture complète
    Vue Maisons — la liste dépliée Après un clic sur « Liste des Maisons », les quatre maisons s’affichent avec leur nationalité et leur occupation, colorée selon le remplissage : 70/80 en orange, 60/60 en rouge, 0/75 et 0/90 en vert.
  • Liste des maisons ; sur le bandeau « Maison du Japon », un petit menu contextuel « Afficher les détails » est ouvert sous le nom de la maison, par-dessus la ligne « Nationalité : Japonaise »., ouvrir la capture complète
    Menu contextuel d’une maison Un clic droit sur le bandeau d’une maison ouvre un menu contextuel à une seule entrée, « Afficher les détails ».
  • Boîte de dialogue « Détails de Maison du Japon » posée sur la liste : icône d’information, puis Nom : Maison du Japon, Directeur : M. Tanaka, Nationalité : Japonaise, Localisation : Paris, Occupation : 60/60 places, et un bouton OK., ouvrir la capture complète
    Détails d’une maison La boîte de dialogue reprend le nom, le directeur, la nationalité, la localisation et l’occupation de la maison choisie.
  • Formulaire modal « Créer une nouvelle maison » posé sur la liste : icône de question, cinq champs remplis (Nom de la maison : Maison du Portugal ; Nombre de chambres : 50 ; Nationalité : Portugaise ; Directeur : Mme Pereira ; Localisation : Paris), boutons OK et Annuler., ouvrir la capture complète
    Création d’une maison Le bouton « Créer une maison » ouvre un formulaire modal à cinq champs : nom, nombre de chambres, nationalité, directeur, localisation. Les valeurs saisies ici sont inventées pour la démonstration.
  • Vue Maisons défilée jusqu’en bas : Maison du Japon, Maison du Brésil, Maison de l’Italie puis « Maison du Portugal, Nationalité : Portugaise » ; une barre de défilement verticale à droite masque la fin des libellés d’occupation (« 60/60 plac »)., ouvrir la capture complète
    La liste après la création La nouvelle maison apparaît en bas de la liste, 0/50 places ; une barre de défilement est apparue et les libellés d’occupation sont tronqués à droite, le bandeau ne tenant pas compte de sa largeur.

Services

  • Vue Services : sous un bouton « Liste des Cafet’ U », douze cafétérias nommées d’après des établissements (Orsay, ENS, Jussieu, Curie, Sorbonne, Polytechnique, CentraleSupélec, Sciences Po, HEC, Mines Paris, ENSAE, Télécom Paris), chacune suivie de « Tarif : 2.5€, Self-service » ; sous un bouton « Liste des Restau’ U », douze restaurants suivis de « Capacité : 120 »., ouvrir la capture complète
    Vue Services — cafétérias et restaurants Les deux listes dépliées en grille de cinq colonnes : douze cafétérias « Tarif : 2.5€, Self-service » et douze restaurants « Capacité : 120 », valeurs par défaut du modèle.
  • Fenêtre « Détail - Restau Orsay » : Nom : Restau Orsay ; Informations spécifiques : Réservation obligatoire : Oui, Capacité : 120, Type de service : RESTAURANT ; Horaires d’ouverture, jours en anglais, de MONDAY 11h30 - 13h30 à SUNDAY 12h00 - 14h00., ouvrir la capture complète
    Détail d’un restaurant Une fenêtre par établissement : réservation obligatoire, capacité, type de service et horaires d’ouverture jour par jour ; les jours sont affichés en anglais, tels que Java les fournit.
  • Fenêtre « Détail des menus de Restau Orsay » : liste déroulante « Filtrer par type » vide, liste de cinq entrées « Menu 1 de Restau Orsay » à « Menu 5 de Restau Orsay », la première sélectionnée ; à droite, Menu proposé par : Restau Orsay, Nom du menu : Menu 1 de Restau Orsay, Type de repas : VEGETARIEN, Informations : Entrée + Plat + Dessert n°1, Date : 31/10/2026., ouvrir la capture complète
    Menus d’un restaurant Un double clic sur un restaurant ouvre ses menus : liste à gauche, détail à droite (type de repas, composition, date) et filtre par type en haut. Les cinq menus et leurs dates sont générés par le code.
  • Même fenêtre, liste déroulante réglée sur VEGAN : seuls « Menu 2 de Restau Orsay » et « Menu 5 de Restau Orsay » restent, le menu 2 est sélectionné ; détail : Type de repas : VEGAN, Informations : Entrée + Plat + Dessert n°2, Date : 01/11/2026., ouvrir la capture complète
    Menus filtrés par type Le filtre « VEGAN » ne garde que les menus 2 et 5 ; le détail passe au menu 2.

01 sur 01

Vue Maisons — la liste dépliée

Sommaire7 sections

Contexte

Ce travail d’équipe de première année portait sur une application Java de gestion de la Cité internationale universitaire. L’application couvre les maisons, les étudiants et certains services de la Cité, derrière une interface graphique.

Le problème

Le domaine réel (maisons, étudiants, nationalités, services) devait devenir un modèle objet cohérent, administrable depuis une interface. Le code devait être testé et partagé au sein de l’équipe.

Démarche et décisions

J’ai modélisé le domaine en classes Java (Maison, Étudiant, MaisonInternationale) d’après un diagramme de classes réalisé sous Visual Paradigm. Au stade du prototype UML, une classe FactoryCIUP instanciait et reliait les objets du modèle ; dans l’application finale, en MVC, ce câblage est fait par les vues et le modèle (VueCiup, ModeleService). Les tests unitaires ont été écrits avant l’implémentation. L’interface graphique, cadrée au préalable par des maquettes Figma, affiche les maisons et les services. Le travail s’est fait sur un dépôt Git partagé.

inscrit par nationalité contient construit et relie Interfacegraphique MaisonInternationaleagrège les maisons Maison Étudiant FactoryCIUPprototype UML
1 / 5

  1. Interface. Depuis l’interface graphique, on saisit un étudiant (nom, nationalité). Dans l’application livrée, ce bouton d’inscription n’est pas relié à son contrôleur.
  2. MaisonInternationale. La classe racine agrège les maisons ; elle reçoit le nouvel étudiant et le répartit par nationalité.
  3. Maison. L’étudiant rejoint la maison correspondant à sa nationalité.
  4. Étudiant. Il est enregistré dans le modèle.
  5. FactoryCIUP. Au stade du prototype UML, cette fabrique instanciait et reliait le graphe d’objets ; dans l’application finale, les vues et le modèle s’en chargent.
Fig. 1 — Le parcours prévu d’une inscription, de l’interface jusqu’à la maison qui correspond à la nationalité de l’étudiant. Parcours pas à pas au clavier (← →).

Résultat

Le modèle est vérifié par les tests unitaires. Ces tests portent moins sur l’interface graphique.

Ce que j’ai appris

Je retiens le passage d’un diagramme de classes UML à du code Java. Avec la fabrique FactoryCIUP du prototype UML, j’ai vu l’intérêt de centraliser la création des objets. J’y ai appris à écrire les tests avant le code et à travailler à plusieurs sur un dépôt Git partagé.

Limites et suite

Le bouton « Inscrire » des étudiants est inerte : son contrôleur n’est jamais instancié. Je séparerais plus nettement la logique de l’affichage, pour tester la logique d’affectation indépendamment de l’interface.

La figure 2 montre le découpage MVC de l’application finale, illustré ici sur le flux d’inscription (maquette, données fictives).

Maquette de gestion de la Cité internationale universitaire

modèle-vue-contrôleur · données fictives

Vue Liste des maisons

Vue Détail de la maison

Maison A

nationalité A · 3 étudiants

  • étudiant 1
  • étudiant 2
  • étudiant 3

Contrôleur Inscrire un étudiant

Une maison par nationalité : l’étudiant est affecté à la maison correspondante.

Coulisses : ce que fait le code à chaque action

notifie les vues Vue Contrôleur Modèle
  1. 1FactoryCIUPFabrique (prototype UML) → Modèle : instancie et relie 3 maisons et 5 étudiants → 3 vues notifiées (liste, détail, formulaire)
  2. 2inscrire("étudiant 6", "B")Vue (formulaire) → Contrôleur → Modèle : la MaisonInternationale confie étudiant 6 à la Maison B (3 étudiants) → 3 vues notifiées (liste, détail, formulaire)
  3. 3selectionner("A")Vue (liste) → Contrôleur → Modèle : maison courante = Maison A → 3 vues notifiées (liste, détail, formulaire)
Fig. 2 — Maquette modèle-vue-contrôleur du flux d’inscription. Chaque action passe par le contrôleur et modifie le modèle, qui notifie ses vues ; le journal trace chaque appel.

Compétences BUT mobilisées

Compétences du référentiel BUT Informatique démontrées dans ce projet : niveau, ce que le projet montre et preuve.
CompétenceNiveauCe que le projet montre, et preuve
RéaliserRéaliser un développement d’applicationNiveau 1Développer une application orientée objet avec des tests.Preuve : Classes Java (Maison, Etudiant, MaisonInternationale), tests unitaires écrits avant l’implémentation et, au stade du prototype UML, une fabrique FactoryCIUP.
CollaborerTravailler dans une équipe informatiqueNiveau 1Travailler en équipe sur un dépôt partagé.Preuve : Travail collaboratif sur un dépôt Git et conception UML commune.