Application desktop multiplateforme de gestion des emplois du temps pour un établissement d'enseignement supérieur, développée avec Avalonia UI et .NET 9.
- Présentation
- Fonctionnalités
- Architecture
- Technologies utilisées
- Prérequis
- Installation et lancement
- Structure du projet
- Modèle de données
- Rôles utilisateurs
- API Backend
- Contribution
- Licence
TP203 est un client desktop qui permet la gestion complète des emplois du temps universitaires. L'application propose des tableaux de bord adaptés à chaque rôle (administrateur, enseignant, étudiant, délégué) et communique avec une API REST backend pour la persistance des données.
- Connexion sécurisée via login et mot de passe
- Inscription de nouveaux utilisateurs avec choix du rôle
- Redirection automatique vers le tableau de bord correspondant au rôle
- Vue d'ensemble : emploi du temps hebdomadaire filtrable par filière/niveau, ajout de séances et de niveaux
- Gestion des salles : consultation, ajout de nouvelles salles (Amphi, Salle, Labo) avec capacité
- Suivi pédagogique : suivi de la progression des unités d'enseignement (volume horaire effectué vs total)
- Structure académique : gestion des départements, filières et niveaux (CRUD complet)
- Emploi du temps hebdomadaire personnel (séances assignées)
- Consultation des étudiants de ses UE
- Consultation des salles disponibles
- Ajout de nouvelles séances de cours
- Emploi du temps hebdomadaire de sa classe/niveau
- Affichage du nom et de la classe de l'étudiant
- Liste des étudiants de son niveau
- Gestion de la présence (marquage présent/absent)
- Certification de la feuille de présence
- Thème sombre moderne avec palette « Glass Card »
- Design responsive avec adaptation selon la largeur de la fenêtre
- Animations et transitions fluides
- Police Inter pour une typographie soignée
L'application suit le patron MVVM (Model-View-ViewModel) :
┌─────────────┐ ┌──────────────────┐ ┌─────────────┐
│ Views │◄────│ ViewModels │────►│ Models │
│ (AXAML) │ │ (CommunityToolkit│ │ │
│ │ │ MVVM) │ │ │
└─────────────┘ └────────┬─────────┘ └─────────────┘
│
┌────────▼─────────┐
│ Services │
│ (ApiService, │
│ DataProvider) │
└──────────────────┘
- Views : interfaces utilisateur déclarées en AXAML (Avalonia XAML)
- ViewModels : logique de présentation et gestion de l'état, avec
CommunityToolkit.Mvvm - Models : classes de données mappées sur les entités du backend (JSON)
- Services : couche d'accès aux données (API REST et données de démonstration)
- ViewLocator : résolution automatique des vues à partir des ViewModels par convention de nommage
| Technologie | Version | Rôle |
|---|---|---|
| .NET | 9.0 | Framework d'exécution |
| Avalonia UI | 11.3.11 | Framework UI multiplateforme |
| Avalonia Fluent Theme | 11.3.11 | Thème visuel |
| Avalonia DataGrid | 11.3.11 | Composant de grilles de données |
| Avalonia Fonts Inter | 11.3.11 | Police typographique |
| CommunityToolkit.Mvvm | 8.2.1 | Implémentation MVVM (ObservableObject, RelayCommand) |
| Newtonsoft.Json | 13.0.4 | Sérialisation/désérialisation JSON |
- .NET 9 SDK ou supérieur
- Un éditeur de code tel que Visual Studio 2022, JetBrains Rider ou VS Code avec l'extension C#
- (Optionnel) Une instance du serveur API backend en fonctionnement pour les données en temps réel
-
Cloner le dépôt
git clone https://github.com/SKJUV/tp1ct203.git cd tp1ct203 -
Restaurer les dépendances
dotnet restore
-
Compiler le projet
dotnet build
-
Lancer l'application
dotnet run
Note : Sans serveur API backend accessible, l'application utilise des données de démonstration (mock) pour l'affichage.
tp1ct203/
├── App.axaml # Configuration globale (thème, styles, ressources)
├── App.axaml.cs # Point d'entrée Avalonia et initialisation
├── Program.cs # Point d'entrée principal (.NET)
├── ViewLocator.cs # Résolution automatique View ↔ ViewModel
├── TP203.csproj # Fichier projet .NET
├── app.manifest # Manifeste Windows
├── Converters/
│ └── WidthToVisibilityConverter.cs # Convertisseur pour le responsive design
├── Models/
│ └── AppModels.cs # Modèles de données (Departement, Filiere, Niveau,
│ # Utilisateur, Etudiant, Salle, UniteEnseignement,
│ # SeanceCours)
├── Services/
│ ├── ApiService.cs # Client HTTP pour l'API REST backend
│ └── DataProvider.cs # Fournisseur de données de démonstration (mock)
├── ViewModels/
│ ├── ViewModelBase.cs # Classe de base (ObservableObject)
│ ├── MainWindowViewModel.cs # Navigation principale et routage par rôle
│ ├── LoginViewModel.cs # Authentification
│ ├── RegisterViewModel.cs # Inscription
│ ├── AdminDashboardViewModel.cs # Tableau de bord administrateur
│ ├── AdminOverviewViewModel.cs # Vue d'ensemble admin (emploi du temps)
│ ├── AdminSubViewModels.cs # Gestion des salles (admin)
│ ├── AdminStructureViewModel.cs # Structure académique (départements, filières, niveaux)
│ ├── AdminSuiviViewModel.cs # Suivi pédagogique des UE
│ ├── TeacherDashboardViewModel.cs # Tableau de bord enseignant
│ ├── TeacherSubViewModels.cs # Sous-vues enseignant (étudiants, salles, emploi du temps)
│ ├── StudentDashboardViewModel.cs # Tableau de bord étudiant
│ ├── MobileDashboardViewModel.cs # Tableau de bord délégué (présences)
│ ├── WeeklyScheduleViewModel.cs # Emploi du temps hebdomadaire
│ ├── AddSeanceViewModel.cs # Formulaire d'ajout de séance
│ ├── AddSalleViewModel.cs # Formulaire d'ajout de salle
│ ├── AddUEViewModel.cs # Formulaire d'ajout d'UE
│ ├── AddNiveauViewModel.cs # Formulaire d'ajout de niveau
│ ├── AddDepartmentViewModel.cs # Formulaire d'ajout de département
│ └── AddFiliereViewModel.cs # Formulaire d'ajout de filière
└── Views/
├── MainWindow.axaml # Fenêtre principale
├── LoginView.axaml # Page de connexion
├── RegisterView.axaml # Page d'inscription
├── AdminDashboardView.axaml # Tableau de bord administrateur
├── AdminOverviewView.axaml # Vue d'ensemble admin
├── AdminSallesView.axaml # Gestion des salles
├── AdminStructureView.axaml # Structure académique
├── AdminSuiviView.axaml # Suivi pédagogique
├── TeacherDashboardView.axaml # Tableau de bord enseignant
├── TeacherStudentsView.axaml # Liste des étudiants (enseignant)
├── TeacherSallesView.axaml # Liste des salles (enseignant)
├── StudentDashboardView.axaml # Tableau de bord étudiant
├── MobileDashboardView.axaml # Tableau de bord délégué
├── WeeklyScheduleView.axaml # Composant emploi du temps hebdomadaire
├── ScheduleTileView.axaml # Tuile de séance individuelle
├── AddSeanceWindow.axaml # Fenêtre d'ajout de séance
├── AddSalleWindow.axaml # Fenêtre d'ajout de salle
├── AddUEWindow.axaml # Fenêtre d'ajout d'UE
├── AddNiveauWindow.axaml # Fenêtre d'ajout de niveau
├── AddDepartmentWindow.axaml # Fenêtre d'ajout de département
└── AddFiliereWindow.axaml # Fenêtre d'ajout de filière
Les principales entités du domaine sont :
| Entité | Description |
|---|---|
Departement |
Département académique (nom, code) |
Filiere |
Filière rattachée à un département |
Niveau |
Niveau d'études (ex : ICT-L2), avec année académique, semestre et effectif |
Utilisateur |
Compte utilisateur avec rôle (Enseignant, Étudiant, Délégué, Admin) |
Etudiant |
Étudiant avec matricule, nom, prénom et niveau |
Salle |
Salle de cours (nom, type : Amphi/Salle/Labo, capacité) |
UniteEnseignement |
UE avec code, intitulé, volume horaire et enseignant responsable |
SeanceCours |
Séance planifiée (date, heures, UE, enseignant, salle, niveau, statut) |
- CM : Cours Magistral
- TP : Travaux Pratiques
- TD : Travaux Dirigés
- CC : Contrôle Continu
- EXAM : Examen
PLANIFIEE: séance programméeVALIDEE: séance confirméeANNULEE: séance annulée
| Rôle | Code | Accès |
|---|---|---|
| Enseignant | 1 | Emploi du temps personnel, liste étudiants, salles, ajout de séances |
| Étudiant | 2 | Emploi du temps de sa classe |
| Délégué | 3 | Gestion des présences, certification |
| Admin | 4 | Gestion complète (séances, salles, UE, structure académique) |
L'application communique avec une API REST. Les endpoints principaux sont :
| Méthode | Endpoint | Description |
|---|---|---|
POST |
/api/Utilisateur/login |
Authentification |
POST |
/api/Utilisateur/register |
Inscription |
GET |
/api/Utilisateur |
Liste des utilisateurs |
GET |
/api/séances |
Liste des séances |
POST |
/api/séances |
Créer une séance |
PUT |
/api/séances/{id} |
Modifier une séance |
DELETE |
/api/séances/{id} |
Supprimer une séance |
GET |
/api/Salle |
Liste des salles |
POST |
/api/Salle |
Créer une salle |
PUT |
/api/Salle/{id} |
Modifier une salle |
DELETE |
/api/Salle/{id} |
Supprimer une salle |
GET |
/api/UniteEnseignement |
Liste des UE |
POST |
/api/UniteEnseignement |
Créer une UE |
DELETE |
/api/UniteEnseignement/{id} |
Supprimer une UE |
GET |
/api/Niveau |
Liste des niveaux |
POST |
/api/Niveau |
Créer un niveau |
DELETE |
/api/Niveau/{id} |
Supprimer un niveau |
GET |
/api/Departement |
Liste des départements |
POST |
/api/Departement |
Créer un département |
DELETE |
/api/Departement/{id} |
Supprimer un département |
GET |
/api/Filiere |
Liste des filières |
POST |
/api/Filiere |
Créer une filière |
DELETE |
/api/Filiere/{id} |
Supprimer une filière |
GET |
/api/Étudiant |
Liste des étudiants |
L'URL de base de l'API est configurable dans
Services/ApiService.cs.
- Forker le dépôt
- Créer une branche pour votre fonctionnalité (
git checkout -b feature/ma-fonctionnalite) - Commiter vos modifications (
git commit -m "feat: description de la fonctionnalité") - Pousser la branche (
git push origin feature/ma-fonctionnalite) - Ouvrir une Pull Request
Ce projet est réalisé dans le cadre d'un travail pratique universitaire (TP CT203).