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 travaillant ensemble dans une architecture propre.

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 un Title (string) et une DurationMinutes (int) en tant que propriétés en lecture seule définies via le constructeur.
  • Course.cs : Créez une classe Course dans l'espace de noms ELearning.Models. Un cours possède des propriétés en lecture seule Id (string), Title (string) et Instructor (string), plus une liste Lessons. Incluez 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 des propriétés en lecture seule Id (int) et Name (string). Les étudiants suivent leur progression via un dictionnaire privé qui associe les identifiants de cours au nombre de leçons terminées. Incluez les méthodes CompleteLesson(string courseId) pour incrémenter la progression et GetProgress(string courseId) pour retourner le nombre de leçons terminées (ou 0 s'ils ne sont pas inscrits).
  • 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) - retourne true si l'inscription réussit, false si le cours n'existe pas ou si l'étudiant est déjà inscrit
    • GetEnrolledCourses(Student student) - retourne une liste d'identifiants de cours auxquels l'étudiant est inscrit
    • GetCourse(string courseId) - retourne le cours ou null s'il n'est pas trouvé
  • Program.cs : Rassemblez le tout en créant des cours avec des leçons, en inscrivant des étudiants, en suivant la progression et en affichant les résultats basés sur l'entrée.

Vous recevrez les entrées suivantes :

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

Formats de sortie :

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

Par exemple, si les entrées sont :

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 gère 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 nette des préoccupations !

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