E-Learning-Plattform
Teil des Abschnitts Objektorientierte Programmierung der C#-Journey von Coddy — Lektion 68 von 70.
Aufgabe
EinfachLass uns eine E-Learning-Plattform bauen, die Kurse, Studenten und Einschreibungen verwaltet! Diese Herausforderung führt alles zusammen, was du über OOP gelernt hast – Klassen, Vererbung, Schnittstellen, Kapselung und Services, die in einer sauberen Architektur zusammenarbeiten.
Du wirst deinen Code über fünf Dateien organisieren:
Lesson.cs: Erstelle eineLesson-Klasse im NamespaceELearning.Models. Jede Lektion hat einenTitle(string) und eineDurationMinutes(int) als schreibgeschützte Eigenschaften, die über den Konstruktor gesetzt werden.Course.cs: Erstelle eineCourse-Klasse im NamespaceELearning.Models. Ein Kurs hat schreibgeschützteId(string),Title(string) undInstructor(string) Eigenschaften sowie eineLessons-Liste. Füge eineAddLesson(Lesson lesson)-Methode und eine schreibgeschützteTotalDuration-Eigenschaft hinzu, welche die Summe aller Lektionsdauern berechnet.Student.cs: Erstelle eineStudent-Klasse im NamespaceELearning.Modelsmit schreibgeschütztenId(int) undName(string) Eigenschaften. Studenten verfolgen ihren Fortschritt über ein privates Dictionary, das Kurs-IDs auf die Anzahl der abgeschlossenen Lektionen abbildet. Füge die MethodenCompleteLesson(string courseId)hinzu, um den Fortschritt zu erhöhen, undGetProgress(string courseId), um die Anzahl der abgeschlossenen Lektionen zurückzugeben (oder 0, falls nicht eingeschrieben).EnrollmentService.cs: Erstelle eineEnrollmentService-Klasse im NamespaceELearning.Services. Dieser Service verwaltet Kurse und Einschreibungen mithilfe privater Sammlungen. Implementiere:AddCourse(Course course)– fügt einen Kurs zur Plattform hinzuEnroll(Student student, string courseId)– gibttruezurück, wenn die Einschreibung erfolgreich ist,false, wenn der Kurs nicht existiert oder der Student bereits eingeschrieben istGetEnrolledCourses(Student student)– gibt eine Liste der Kurs-IDs zurück, in denen der Student eingeschrieben istGetCourse(string courseId)– gibt den Kurs zurück odernull, falls nicht gefunden
Program.cs: Führe alles zusammen, indem du Kurse mit Lektionen erstellst, Studenten einschreibst, den Fortschritt verfolgst und Ergebnisse basierend auf der Eingabe anzeigst.
Du wirst die folgenden Eingaben erhalten:
- Anzahl der zu erstellenden Kurse
- Für jeden Kurs: ID, Titel, Dozent, Anzahl der Lektionen, dann 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 (erhöhe den Fortschritt um 1)progress: Gib{CourseTitle}: {completed}/{total} lessonsausinfo: Gib{CourseTitle} by {Instructor} - {TotalDuration} minutesaus
Zum Beispiel, wenn die Eingaben wie folgt sind:
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
CS999Sollte die Ausgabe wie folgt 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 Studenten und Kursen verwaltet, während jede Klasse ihre eigenen Verantwortlichkeiten übernimmt. Der Student verfolgt seinen eigenen Fortschritt, Kurse berechnen ihre Gesamtdauer und der Einschreibungsservice koordiniert alles – eine saubere Trennung der Belange (Separation of Concerns)!
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. EigenschaftenKonstruktorenObjekt-InitialisiererZusammenfassung - Einfacher Taschenrechner4Vererbung
Grundlagen der Vererbung (:) SyntaxDas 'base'-SchlüsselwortVirtual & Override SchlüsselwörterVersiegelte KlassenDie 'object'-BasisklasseZusammenfassung – Mitarbeiter-Hierarchie7Fortgeschrittene Funktionen
OperatorüberladungIndexer (this[])ToString() überschreibenErweiterungsmethodenZusammenfassung - Benutzerdefinierte Liste2Eigenschaften & Statische Member
Automatisch implementierte EigenschaftenRead-Only- & Write-Only-EigenschaftenStatische Felder & MethodenStatische KlassenExpression-Bodied Member5Polymorphismus & Interfaces
Compile- vs. Runtime-PolymorphismusInterface vs. abstrakte KlasseMehrfache InterfacesExplizite InterfacesUpcasting & DowncastingRecap – Shape Calculator3Klassenarchitektur
Instanz- vs. statische Daten'readonly' & 'const' SchlüsselwörterBacking FieldsZusammenfassung - Bankkonto-Manager6Kapselung
ZugriffsmodifikatorenProperties zur KapselungImplementierung von Data HidingImmutability-MusterRückblick – Studierendendaten