Menu
Coddy logo textTech

E-Learning-Plattform

Teil des Abschnitts Objektorientierte Programmierung der C#-Journey von Coddy — Lektion 68 von 70.

challenge icon

Aufgabe

Einfach

Lass 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 eine Lesson-Klasse im Namespace ELearning.Models. Jede Lektion hat einen Title (string) und eine DurationMinutes (int) als schreibgeschützte Eigenschaften, die über den Konstruktor gesetzt werden.
  • Course.cs: Erstelle eine Course-Klasse im Namespace ELearning.Models. Ein Kurs hat schreibgeschützte Id (string), Title (string) und Instructor (string) Eigenschaften sowie eine Lessons-Liste. Füge eine AddLesson(Lesson lesson)-Methode und eine schreibgeschützte TotalDuration-Eigenschaft hinzu, welche die Summe aller Lektionsdauern berechnet.
  • Student.cs: Erstelle eine Student-Klasse im Namespace ELearning.Models mit schreibgeschützten Id (int) und Name (string) Eigenschaften. Studenten verfolgen ihren Fortschritt über ein privates Dictionary, das Kurs-IDs auf die Anzahl der abgeschlossenen Lektionen abbildet. Füge die Methoden CompleteLesson(string courseId) hinzu, um den Fortschritt zu erhöhen, und GetProgress(string courseId), um die Anzahl der abgeschlossenen Lektionen zurückzugeben (oder 0, falls nicht eingeschrieben).
  • EnrollmentService.cs: Erstelle eine EnrollmentService-Klasse im Namespace ELearning.Services. Dieser Service verwaltet Kurse und Einschreibungen mithilfe privater Sammlungen. Implementiere:
    • AddCourse(Course course) – fügt einen Kurs zur Plattform hinzu
    • Enroll(Student student, string courseId) – gibt true zurück, wenn die Einschreibung erfolgreich ist, false, wenn der Kurs nicht existiert oder der Student bereits eingeschrieben ist
    • GetEnrolledCourses(Student student) – gibt eine Liste der Kurs-IDs zurück, in denen der Student eingeschrieben ist
    • GetCourse(string courseId) – gibt den Kurs zurück oder null, 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, progress oder info) gefolgt von der Kurs-ID

Ausgabeformate:

  • enroll: Gib Enrolled in: {CourseTitle} oder Enrollment failed: {courseId} aus
  • complete: Gib Completed lesson in {CourseTitle} aus (erhöhe den Fortschritt um 1)
  • progress: Gib {CourseTitle}: {completed}/{total} lessons aus
  • info: Gib {CourseTitle} by {Instructor} - {TotalDuration} minutes aus

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
CS999

Sollte 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: CS999

Beachte, 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