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 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 eine Lesson-Klasse im Namespace ELearning.Models. Jede Lektion besitzt die schreibgeschützten Eigenschaften Title (string) und DurationMinutes (int), die über den Konstruktor festgelegt werden.
  • Course.cs: Erstelle eine Course-Klasse im Namespace ELearning.Models. Ein Kurs besitzt die schreibgeschützten Eigenschaften Id (string), Title (string) und Instructor (string) sowie eine Lessons-Liste. Füge eine AddLesson(Lesson lesson)-Methode und eine schreibgeschützte Eigenschaft TotalDuration hinzu, die die Summe der Dauer aller Lektionen berechnet.
  • Student.cs: Erstelle eine Student-Klasse im Namespace ELearning.Models mit den schreibgeschützten Eigenschaften Id (int) und Name (string). Studierende verfolgen ihren Fortschritt über ein privates Dictionary, das Kurs-IDs der Anzahl der abgeschlossenen Lektionen zuordnet. Füge die Methoden CompleteLesson(string courseId) zum Erhöhen des Fortschritts und GetProgress(string courseId) hinzu, um die Anzahl der abgeschlossenen Lektionen zurückzugeben (oder 0, wenn keine Einschreibung besteht).
  • 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 der Plattform einen Kurs hinzu
    • Enroll(Student student, string courseId) – gibt true zurück, wenn die Einschreibung erfolgreich ist, und false, wenn der Kurs nicht existiert oder der Studierende bereits eingeschrieben ist
    • GetEnrolledCourses(Student student) – gibt eine Liste der Kurs-IDs zurück, für die der Studierende eingeschrieben ist
    • GetCourse(string courseId) – gibt den Kurs oder null zurü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, 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 (Fortschritt um 1 erhöhen)
  • progress: Gib {CourseTitle}: {completed}/{total} lessons aus
  • info: Gib {CourseTitle} by {Instructor} - {TotalDuration} minutes aus

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
CS999

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

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

Übe selbstständig: Online-C#-Compiler