Plateforme d'e-learning
Fait partie de la section Programmation Orientée Objet du Journey C# de Coddy — leçon 68 sur 70.
Défi
FacileConstruisons 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 classeLessondans l'espace de nomsELearning.Models. Chaque leçon possède unTitle(string) et uneDurationMinutes(int) en tant que propriétés en lecture seule définies via le constructeur.Course.cs: Créez une classeCoursedans l'espace de nomsELearning.Models. Un cours possède des propriétés en lecture seuleId(string),Title(string) etInstructor(string), plus une listeLessons. Incluez une méthodeAddLesson(Lesson lesson)et une propriété en lecture seuleTotalDurationqui calcule la somme des durées de toutes les leçons.Student.cs: Créez une classeStudentdans l'espace de nomsELearning.Modelsavec des propriétés en lecture seuleId(int) etName(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éthodesCompleteLesson(string courseId)pour incrémenter la progression etGetProgress(string courseId)pour retourner le nombre de leçons terminées (ou 0 s'ils ne sont pas inscrits).EnrollmentService.cs: Créez une classeEnrollmentServicedans l'espace de nomsELearning.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 plateformeEnroll(Student student, string courseId)- retournetruesi l'inscription réussit,falsesi le cours n'existe pas ou si l'étudiant est déjà inscritGetEnrolledCourses(Student student)- retourne une liste d'identifiants de cours auxquels l'étudiant est inscritGetCourse(string courseId)- retourne le cours ounulls'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, ouinfo) suivie de l'ID du cours
Formats de sortie :
enroll: AffichezEnrolled in: {CourseTitle}ouEnrollment failed: {courseId}complete: AffichezCompleted lesson in {CourseTitle}(incrémentez la progression de 1)progress: Affichez{CourseTitle}: {completed}/{total} lessonsinfo: 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
CS999La 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: CS999Remarquez 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
1Fondamentaux de la POO
Fichiers externesEspaces de noms et directivesIntro aux classes et objetsLe mot-clé 'this'Méthodes et paramètresChamps vs PropriétésConstructeursInitialiseurs d'objetsRécapitulatif - Calculatrice simple4Héritage
Syntaxe de base de l'héritage (:)Le mot-clé 'base'Mots-clés Virtual & OverrideClasses scelléesLa classe de base 'object'Récapitulatif - Hiérarchie des employés7Fonctionnalités avancées
Surcharge d'opérateursIndexeurs (this[])Redéfinition de ToString()Méthodes d'extensionRécapitulatif - Liste personnalisée10Patrons de conception - Partie 1
Introduction aux patrons de conceptionSingleton Thread-SafePatron FabriquePatron Observateur (Événements)Patron Stratégie2Propriétés et membres statiques
Propriétés auto-implémentéesPropriétés en lecture/écriture seuleChamps et méthodes statiquesClasses statiquesMembres à corps d'expression5Polymorphisme & Interfaces
Polymorphisme : Compilation vs ExécutionInterface vs Classe AbstraiteInterfaces MultiplesInterfaces ExplicitesUpcasting & DowncastingRécapitulatif - Calculateur de Formes8Concepts avancés de la POO
Composition plutôt qu'héritageGénériques (Classes et Méthodes)Délégués et ÉvénementsAttributs et RéflexionIDisposable et l'instruction usingBases de l'Injection de Dépendances11Patrons de conception, Partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Méthode TemplatePatron ÉtatPatron Composite3Architecture des classes
Données d'instance vs statiquesMots-clés 'readonly' & 'const'Champs de supportRécapitulatif - Gestionnaire de compte bancaire6Encapsulation
Modificateurs d'accèsPropriétés pour l'encapsulationImplémentation du masquage de donnéesPatterns d'immuabilitéRécapitulatif - Dossiers d'étudiants12Projet : Système de gestion de bibliothèque
Structure du projetModèles Livre et Utilisateur