TD : Gestion Scolaire en Python (Programmation Orientée
Objet)
Objectif :
Concevoir un système de gestion scolaire en utilisant la Programmation Orientée Objet (POO) en Python pour
faciliter l'inscription des étudiants, la gestion des notes, l'enregistrement des professeurs et l'analyse des
performances académiques.
Consignes :
1. Implémenter les classes principales pour modéliser le système.
2. Assurer la gestion des inscriptions, des notes et des enseignants.
3. Afficher les informations et fournir des statistiques sur les performances.
Structure du projet :
1. Classe abstraite Personne (Abstraction et héritage)
Attributs :
_nom (str) : Nom de la personne (privé).
_prenom (str) : Prénom de la personne (privé).
Méthodes :
__init__ : Constructeur pour initialiser une personne.
afficher_info() : Méthode abstraite à implémenter dans les sous-classes.
2. Classe Etudiant (Hérite de Personne)
Attributs :
matricule (str) : Identifiant unique de l'étudiant.
date_naissance (str) : Date de naissance de l'étudiant.
notes (dict) : Dictionnaire des notes par matière (ex : {"Maths": 15, "Physique": 14}).
Propriétés (Encapsulation) :
nom : Getter et setter pour accéder/modifier _nom.
prenom : Getter et setter pour accéder/modifier _prenom.
Méthodes :
__init__ : Constructeur pour initialiser un étudiant.
ajouter_note(matiere, note) : Ajouter une note pour une matière (avec validation entre 0 et 20).
moyenne() : Calculer la moyenne des notes.
afficher_info() : Afficher les informations de l'étudiant (polymorphisme).
performance() : Analyser les performances (meilleure note, pire note, moyenne générale).
3. Classe Professeur (Hérite de Personne)
Attributs :
id_professeur (str) : Identifiant unique du professeur.
matieres (list) : Liste des matières enseignées.
Propriétés (Encapsulation) :
nom : Getter et setter pour accéder/modifier _nom.
prenom : Getter et setter pour accéder/modifier _prenom.
Méthodes :
__init__ : Constructeur pour initialiser un professeur.
ajouter_matiere(matiere) : Ajouter une matière enseignée.
afficher_info() : Afficher les informations du professeur (polymorphisme).
performance(etudiants) : Calculer la moyenne des notes des étudiants pour les matières enseignées.
4. Classe GestionScolaire
Attributs :
etudiants (list) : Liste des étudiants inscrits.
professeurs (list) : Liste des professeurs enregistrés.
Méthodes :
__init__ : Constructeur pour initialiser la gestion scolaire.
ajouter_etudiant(etudiant) : Ajouter un étudiant (vérification d'unicité du matricule).
ajouter_professeur(professeur) : Ajouter un professeur (vérification d'unicité de l'ID).
afficher_etudiants() : Afficher les informations de tous les étudiants.
afficher_professeurs() : Afficher les informations de tous les professeurs.
meilleur_etudiant() : Afficher l'étudiant ayant la meilleure moyenne.
analyse_performance() : Fournir des statistiques globales (moyenne générale de l'école, meilleure
performance, pire performance).
Travail à réaliser :
1. Implémentez les classes Personne, Etudiant, Professeur et GestionScolaire en respectant les
attributs et les méthodes définies.
2. Créez un programme principal qui :
o Inscrit au moins 3 étudiants avec leurs notes.
o Enregistre au moins 2 professeurs et leurs matières.
o Affiche la liste des étudiants et des professeurs.
o Affiche l'étudiant ayant la meilleure moyenne.
o Analyse et affiche les performances des étudiants et des enseignants.
3. Ajoutez des validations pour :
o Vérifier que les notes sont comprises entre 0 et 20.
o Assurer l'unicité des matricules et des identifiants des professeurs.
Critères d'évaluation :
Respect de la structure et des consignes.
Bonne utilisation de la POO (encapsulation, abstraction, héritage, polymorphisme).
Lisibilité et organisation du code.
Gestion correcte des erreurs et validations.
Fonctionnalités complètes et correctes.