Retour aux projetsKLEIN.
Projet C++ / Scolaire$ Terminé
Dépôt GitHub

Klass

Application desktop C++/Qt 6 de gestion d'étudiants et de suivi des absences : fiches complètes, persistance double format (JSON & XML) et traduction dynamique FR/EN.

Fiche étudiant Klass avec trombinoscope à gauche et détails à droite
~/stack.json

"Langage & Standard":

C++

"Framework GUI":

Qt 6 (Core, Gui, Widgets, Xml)

"Build system":

qmake (Klass.pro)

"Internationalisation":

Qt Linguist (FR / EN)

Projet réalisé en équipe (BUT Informatique)

Présentation & Architecture Technique

Projet à deux, avec un découpage net dès le premier jour : DataStore d'un côté (persistance JSON/XML, zéro dépendance à l'UI), MainWindow de l'autre. Le genre de frontière qui évite de se marcher dessus sur le même fichier pendant deux mois.

Fiche étudiantclass Student

Identité & Contacts

nom, prénom, email, téléphone

Section

Info BUT / MMI BUT

Absences

QList<absence>

Couche de persistance (DataStore)

Classe utilitaire sans état chargée de la sérialisation/désérialisation JSON et XML, et du mapping des photos de profil associées.

IHM & Contrôleur (MainWindow)

Interface Qt guidée par signaux et slots, avec un moteur de recherche instantané prenant en charge le texte brut ainsi que les expressions régulières.

Internationalisation & Thème

Traduction multilingue dynamique (FR/EN) via Qt Linguist, et politique de style explicite avec thème clair forcé au niveau de l'application.

thème clair forcé
Trombinoscope avec liste des étudiants à gauche et fiche complète d'un étudiant à droite
Capture 1 - Trombinoscope & fiche étudiant

Fonctionnalités Clés

Trombinoscope & Fiches

Consultation, création et édition complète des données d'un étudiant, avec mise à jour de la photo de profil synchronisée sur le disque.

Moteur de Recherche Avancé

Filtrage en temps réel dans les listes par nom, numéro ou expressions régulières (Regex).

Suivi Fin des Absences

Ajout et suppression d'absences (date, motif, statut) directement depuis la fiche étudiant.

Synchronisation JSON / XML

Écriture et relecture miroir dans students_dataset.json et students_dataset.xml pour la pérennité et la portabilité des données. Exemple illustratif du mapping entre les deux formats :

~/klass/students_dataset.json
{
  "students": [
    {
      "id": 42,
      "name": "Julyan Klein",
      "section": "Info BUT",
      "absences": [
        {
          "date": "2026-03-04",
          "reason": "Certificat médical",
          "justified": true
        }
      ]
    }
  ]
}
DataStore
~/klass/students_dataset.xml
<students>
  <student id="42">
    <name>Julyan Klein</name>
    <section>Info BUT</section>
    <absences>
      <absence
        date="2026-03-04"
        justified="true">
        Certificat médical
      </absence>
    </absences>
  </student>
</students>

Traduction à la volée

Bascule instantanée de la langue de l'interface (FR/EN) via le menu Fichier > Traduction, sans redémarrage de l'application.

Fiche étudiant avec une absence enregistrée, interface basculée en anglais
Capture 2 - Suivi des absences (interface en anglais)
Recherche en temps réel filtrant la liste des étudiants
Capture 3 - Moteur de recherche en temps réel

Compilation & Environnement

Projet configuré via qmake, nécessitant les modules Core, Gui, Widgets et Xml de Qt 6. Déploiement multiplateforme (Windows / Linux) via Qt Creator ou en ligne de commande.

~/klass/build

$ compilation (qmake)

qmake Klass.pro
make

Modules Qt 6 requis : core, gui, widgets, xml. Fonctionne aussi bien depuis Qt Creator qu'en ligne de commande.

Ce que j'ai appris

Modélisation Métier & Composition

Classe Student regroupant coordonnées, section (Info BUT, MMI BUT) et une collection d'absences (QList<absence>). La classe absence modélise séparément date, motif et statut de justification, plutôt que de tout entasser dans une seule classe.

Persistance Découplée (DataStore)

Classe utilitaire sans état responsable de la sérialisation/désérialisation bidirectionnelle en JSON et XML, gérant la cohérence des deux jeux de données et le mapping des médias associés (photos de profil image_N.jpg).

IHM Pilotée par Signaux/Slots & Recherche Regex

MainWindow orchestre l'interface via signaux et slots Qt. Le moteur de recherche instantané accepte aussi bien du texte brut que des expressions régulières, pour filtrer les listes sans étape de validation intermédiaire.

Internationalisation & Politique de Thème

Traduction dynamique FR/EN à la volée via Qt Linguist, bascule accessible depuis le menu Fichier, et thème clair forcé explicitement au niveau de l'application pour garantir un rendu identique sur toutes les machines.