Menu
Coddy logo textTech

Récapitulatif - Dossiers d'étudiants

Fait partie de la section Programmation Orientée Objet du Journey C# de Coddy. Leçon 35 sur 70.

challenge icon

Défi

Facile

Construisons un système de gestion des dossiers étudiants qui réunit toutes les techniques d'encapsulation que tu as apprises dans ce chapitre. Tu vas créer un système sécurisé dans lequel les données des étudiants sont correctement protégées, les notes sont validées et certaines informations restent immuables après leur création.

Tu organiseras ton code sur deux fichiers :

  • Student.cs : crée une classe Student dans l'espace de noms Records qui démontre une encapsulation correcte. Ton étudiant doit avoir :
    • un champ readonly Name (chaîne de caractères) accessible publiquement, mais qui ne peut être défini que lors de la construction
    • un champ privé readonly pour l'identifiant de l'étudiant (chaîne de caractères) — celui-ci ne doit jamais être directement accessible depuis l'extérieur
    • une liste privée pour stocker les notes (entiers)
    • une propriété publique en lecture seule Average qui calcule et renvoie la moyenne de toutes les notes, ou 0 si aucune note n'existe
    • une méthode publique AddGrade(int grade) qui n'accepte que les notes comprises entre 0 et 100 (inclus) — les notes invalides doivent être ignorées silencieusement
    • une méthode publique GetGradeCount() qui renvoie le nombre de notes valides enregistrées
    • une méthode publique GetStudentInfo() qui renvoie une chaîne au format "{Name} (ID: {last 4 characters of student ID})" — remarque que tu n'exposes qu'une version masquée de l'identifiant !
    Le constructeur doit accepter le nom et l'identifiant de l'étudiant dans cet ordre.
  • Program.cs : dans ton fichier principal, crée un étudiant et ajoute plusieurs notes pour montrer comment fonctionne l'encapsulation. Tu montreras que les notes valides sont acceptées, que les notes invalides sont rejetées et que la moyenne est calculée correctement.

Tu recevras cinq entrées :

  • Nom de l'étudiant
  • Identifiant de l'étudiant (au moins 4 caractères)
  • Première note à ajouter (entier)
  • Deuxième note à ajouter (entier, qui peut être invalide comme -5 ou 150)
  • Troisième note à ajouter (entier)

Affiche la sortie dans ce format :

{GetStudentInfo() result}
Grades recorded: {GetGradeCount()}
Average: {Average}

Par exemple, si les entrées sont Emma Wilson, STU12345, 85, 150 et 90, la sortie doit être :

Emma Wilson (ID: 2345)
Grades recorded: 2
Average: 87.5

Remarque que la note invalide de 150 a été rejetée silencieusement, donc seules deux notes ont été enregistrées. L'identifiant de l'étudiant est protégé : le code externe ne peut jamais voir l'identifiant complet, mais uniquement sa version masquée via GetStudentInfo(). Le nom est lisible, mais immuable. Voilà l'encapsulation qui fonctionne conjointement pour créer une classe robuste et bien protégée !

Essayez vous-même

using System;
using Records;

class Program
{
    public static void Main(string[] args)
    {
        // Lire les entrées
        string name = Console.ReadLine();
        string studentId = Console.ReadLine();
        int grade1 = Convert.ToInt32(Console.ReadLine());
        int grade2 = Convert.ToInt32(Console.ReadLine());
        int grade3 = Convert.ToInt32(Console.ReadLine());

        // TODO: Créer un objet Student avec le name et studentId

        // TODO: Ajouter les trois notes en utilisant la méthode AddGrade

        // TODO: Afficher la sortie dans le format requis :
        // {résultat de GetStudentInfo()}
        // Grades recorded: {GetGradeCount()}
        // Moyenne : {Average}
    }
}

Toutes les leçons de Programmation Orientée Objet

Entraînez-vous par vous-même : Compilateur C# en ligne