Menu
Coddy logo textTech

Plateforme d'e-learning

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

challenge icon

Défi

Facile

Construisons une plateforme d’apprentissage en ligne qui gère les cours, les étudiants et les inscriptions ! Ce défi rassemble tout ce que vous avez appris sur la POO : classes, héritage, interfaces, encapsulation et services fonctionnant ensemble dans une architecture claire.

Vous organiserez votre code sur cinq fichiers :

  • Lesson.cs : créez une classe Lesson dans l’espace de noms ELearning.Models. Chaque leçon possède des propriétés en lecture seule Title (string) et DurationMinutes (int), définies par l’intermédiaire du constructeur.
  • Course.cs : créez une classe Course dans l’espace de noms ELearning.Models. Un cours possède les propriétés en lecture seule Id (string), Title (string) et Instructor (string), ainsi qu’une liste Lessons. Ajoutez une méthode AddLesson(Lesson lesson) et une propriété en lecture seule TotalDuration qui calcule la somme des durées de toutes les leçons.
  • Student.cs : créez une classe Student dans l’espace de noms ELearning.Models, avec les propriétés en lecture seule Id (int) et Name (string). Les étudiants suivent leur progression au moyen d’un dictionnaire privé qui associe les identifiants des cours au nombre de leçons terminées. Ajoutez les méthodes CompleteLesson(string courseId) pour augmenter la progression et GetProgress(string courseId) pour renvoyer le nombre de leçons terminées (ou 0 si l’étudiant n’est pas inscrit).
  • EnrollmentService.cs : créez une classe EnrollmentService dans l’espace de noms ELearning.Services. Ce service gère les cours et les inscriptions à l’aide de collections privées. Implémentez :
    • AddCourse(Course course) - ajoute un cours à la plateforme
    • Enroll(Student student, string courseId) - renvoie true si l’inscription réussit, et false si le cours n’existe pas ou si l’étudiant est déjà inscrit
    • GetEnrolledCourses(Student student) - renvoie une liste des identifiants des cours auxquels l’étudiant est inscrit
    • GetCourse(string courseId) - renvoie le cours ou null s’il est introuvable
  • Program.cs : assemblez tous les éléments en créant des cours avec des leçons, en inscrivant des étudiants, en suivant la progression et en affichant les résultats en fonction de l’entrée.

Vous recevrez les entrées suivantes :

  • Nombre de cours à créer
  • Pour chaque cours : identifiant, titre, formateur, nombre de leçons, puis, pour chaque leçon : titre et durée (en minutes)
  • Identifiant et nom de l’étudiant
  • Nombre d’opérations à effectuer
  • Pour chaque opération : l’action (enroll, complete, progress ou info) suivie de l’identifiant du cours

Formats de sortie :

  • enroll : affichez Enrolled in: {CourseTitle} ou Enrollment failed: {courseId}
  • complete : affichez Completed lesson in {CourseTitle} (augmentez la progression de 1)
  • progress : affichez {CourseTitle}: {completed}/{total} lessons
  • info : affichez {CourseTitle} by {Instructor} - {TotalDuration} minutes

Par exemple, si les entrées sont les suivantes :

2
CS101
Intro to Programming
Dr. Smith
3
Variables
30
Loops
45
Functions
60
CS102
Data Structures
Dr. Jones
2
Arrays
40
Lists
50
1
Alice
6
enroll
CS101
info
CS101
complete
CS101
complete
CS101
progress
CS101
enroll
CS999

La sortie devrait être :

Enrolled in: Intro to Programming
Intro to Programming by Dr. Smith - 135 minutes
Completed lesson in Intro to Programming
Completed lesson in Intro to Programming
Intro to Programming: 2/3 lessons
Enrollment failed: CS999

Remarquez comment le service gère la relation entre les étudiants et les cours, tandis que chaque classe assume ses propres responsabilités. L’étudiant suit sa propre progression, les cours calculent leur durée totale et le service d’inscription coordonne le tout : une séparation claire des responsabilités !

Essayez vous-même

using System;
using System.Collections.Generic;
using ELearning.Models;
using ELearning.Services;

class Program
{
    public static void Main(string[] args)
    {
        // Lire le nombre de cours
        int numCourses = Convert.ToInt32(Console.ReadLine());
        
        // TODO: Créer une instance de EnrollmentService
        
        // TODO: Lire et créer chaque cours avec ses leçons
        // Pour chaque cours : lire l'ID, le titre, l'instructeur et le nombre de leçons
        // Pour chaque leçon : lire le titre et la durée
        // Ajouter les leçons au cours, puis ajouter le cours au service
        
        // Lire les informations de l'étudiant
        int studentId = Convert.ToInt32(Console.ReadLine());
        string studentName = Console.ReadLine();
        
        // TODO: Créer une instance de Student
        
        // Lire le nombre d'opérations
        int numOperations = Convert.ToInt32(Console.ReadLine());
        
        // TODO: Traiter chaque opération
        // Pour chaque opération : lire l'action et le courseId
        // Gérer : enroll, complete, progress, info
        // Afficher le message approprié en fonction de l'action
    }
}

Toutes les leçons de Programmation Orientée Objet

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