E-Learning-Plattform
Teil des Abschnitts Objektorientierte Programmierung der C#-Journey von Coddy. Lektion 68 von 70.
Aufgabe
EinfachLass uns eine E-Learning-Plattform entwickeln, die Kurse, Studierende und Einschreibungen verwaltet! Diese Herausforderung bringt alles zusammen, was du über OOP gelernt hast – Klassen, Vererbung, Schnittstellen, Kapselung und Services, die in einer sauberen Architektur zusammenarbeiten.
Du wirst deinen Code auf fünf Dateien verteilen:
Lesson.cs: Erstelle eineLesson-Klasse im NamespaceELearning.Models. Jede Lektion besitzt die schreibgeschützten EigenschaftenTitle(string) undDurationMinutes(int), die über den Konstruktor festgelegt werden.Course.cs: Erstelle eineCourse-Klasse im NamespaceELearning.Models. Ein Kurs besitzt die schreibgeschützten EigenschaftenId(string),Title(string) undInstructor(string) sowie eineLessons-Liste. Füge eineAddLesson(Lesson lesson)-Methode und eine schreibgeschützte EigenschaftTotalDurationhinzu, die die Summe der Dauer aller Lektionen berechnet.Student.cs: Erstelle eineStudent-Klasse im NamespaceELearning.Modelsmit den schreibgeschützten EigenschaftenId(int) undName(string). Studierende verfolgen ihren Fortschritt über ein privates Dictionary, das Kurs-IDs der Anzahl der abgeschlossenen Lektionen zuordnet. Füge die MethodenCompleteLesson(string courseId)zum Erhöhen des Fortschritts undGetProgress(string courseId)hinzu, um die Anzahl der abgeschlossenen Lektionen zurückzugeben (oder 0, wenn keine Einschreibung besteht).EnrollmentService.cs: Erstelle eineEnrollmentService-Klasse im NamespaceELearning.Services. Dieser Service verwaltet Kurse und Einschreibungen mithilfe privater Sammlungen. Implementiere:AddCourse(Course course)– fügt der Plattform einen Kurs hinzuEnroll(Student student, string courseId)– gibttruezurück, wenn die Einschreibung erfolgreich ist, undfalse, wenn der Kurs nicht existiert oder der Studierende bereits eingeschrieben istGetEnrolledCourses(Student student)– gibt eine Liste der Kurs-IDs zurück, für die der Studierende eingeschrieben istGetCourse(string courseId)– gibt den Kurs odernullzurück, wenn er nicht gefunden wurde
Program.cs: Führe alles zusammen, indem du Kurse mit Lektionen erstellst, Studierende einschreibst, den Fortschritt verfolgst und abhängig von der Eingabe Ergebnisse ausgibst.
Du erhältst die folgenden Eingaben:
- Anzahl der zu erstellenden Kurse
- Für jeden Kurs: ID, Titel, Dozent, Anzahl der Lektionen und anschließend für jede Lektion: Titel und Dauer (Minuten)
- Studenten-ID und Name
- Anzahl der auszuführenden Operationen
- Für jede Operation: die Aktion (
enroll,complete,progressoderinfo), gefolgt von der Kurs-ID
Ausgabeformate:
enroll: GibEnrolled in: {CourseTitle}oderEnrollment failed: {courseId}auscomplete: GibCompleted lesson in {CourseTitle}aus (Fortschritt um 1 erhöhen)progress: Gib{CourseTitle}: {completed}/{total} lessonsausinfo: Gib{CourseTitle} by {Instructor} - {TotalDuration} minutesaus
Wenn die Eingaben beispielsweise folgendermaßen lauten:
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
CS999Die Ausgabe sollte folgendermaßen aussehen:
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: CS999Beachte, wie der Service die Beziehung zwischen Studierenden und Kursen verwaltet, während jede Klasse ihre eigenen Verantwortlichkeiten übernimmt. Die Studierenden verfolgen ihren eigenen Fortschritt, die Kurse berechnen ihre Gesamtdauer und der Einschreibungsservice koordiniert alles – eine saubere Trennung der Zuständigkeiten!
Probier es selbst
using System;
using System.Collections.Generic;
using ELearning.Models;
using ELearning.Services;
class Program
{
public static void Main(string[] args)
{
// Anzahl der Kurse lesen
int numCourses = Convert.ToInt32(Console.ReadLine());
// TODO: Eine EnrollmentService-Instanz erstellen
// TODO: Jeden Kurs mit seinen Lektionen lesen und erstellen
// Für jeden Kurs: ID, Titel, Dozent, Anzahl der Lektionen lesen
// Für jede Lektion: Titel und Dauer lesen
// Lektionen zum Kurs hinzufügen, dann Kurs zum Service hinzufügen
// Studenteninformationen lesen
int studentId = Convert.ToInt32(Console.ReadLine());
string studentName = Console.ReadLine();
// TODO: Eine Student-Instanz erstellen
// Anzahl der Operationen lesen
int numOperations = Convert.ToInt32(Console.ReadLine());
// TODO: Jede Operation verarbeiten
// Für jede Operation: Aktion und courseId lesen
// Behandeln: enroll, complete, progress, info
// Die entsprechende Nachricht basierend auf der Aktion ausgeben
}
}
Alle Lektionen in Objektorientierte Programmierung
1Grundlagen der OOP
Externe DateienNamespaces & DirektivenEinführung in Klassen & ObjekteDas 'this'-SchlüsselwortMethoden und ParameterFelder vs. EigenschaftenKonstruktorenObjektinitialisiererWiederholung – Einfacher Taschenrechner4Vererbung
Grundlegende Vererbungs-(:)-SyntaxDas „base“-Schlüsselwort„virtual“- und „override“-SchlüsselwörterVersiegelte KlassenDie „object“-BasisklasseWiederholung – Mitarbeiterhierarchie7Erweiterte Funktionen
Überladen von OperatorenIndexer (this[])ToString()-ÜberschreibungErweiterungsmethodenRückblick – Benutzerdefinierte Liste10Entwurfsmuster Teil 1
Einführung in EntwurfsmusterThread-sicheres SingletonFactory-MusterObserver-Muster (Events)Strategy-Muster13Abschließende Herausforderungen
E-Learning-PlattformKomponente für SpielfigurenFahrzeugvermietungsdienst2Eigenschaften & statische Member
Automatisch implementierte EigenschaftenNur lesbare/schreibbare EigenschaftenStatische Felder & MethodenStatische KlassenMember mit Ausdruckskörpern5Polymorphie & Interfaces
Compile- vs. Laufzeit-PolymorphieInterface vs. abstrakte KlasseMehrere InterfacesExplizite InterfacesUpcasting & DowncastingWiederholung – Formenrechner3Klassenarchitektur
Instanz- vs. statische DatenSchlüsselwörter 'readonly' & 'const'Backing FieldsRückblick – Bankkontenverwaltung6Kapselung
ZugriffsmodifikatorenEigenschaften zur KapselungImplementierung der DatenkapselungMuster für UnveränderlichkeitRückblick – SchülerdatenÜbe selbstständig: Online-C#-Compiler