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.

"Langage & Standard":
C++
"Framework GUI":
Qt 6 (Core, Gui, Widgets, Xml)
"Build system":
qmake (Klass.pro)
"Internationalisation":
Qt Linguist (FR / EN)
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.
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.

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 :
{
"students": [
{
"id": 42,
"name": "Julyan Klein",
"section": "Info BUT",
"absences": [
{
"date": "2026-03-04",
"reason": "Certificat médical",
"justified": true
}
]
}
]
}<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.


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.
$ compilation (qmake)
qmake Klass.pro
makeModules 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.