Menu
Coddy logo textTech

Platforma e-learningowa

Część sekcji Programowanie obiektowe ścieżki C# w Coddy. Lekcja 68 z 70.

challenge icon

Wyzwanie

Łatwy

Zbudujmy platformę e-learningową, która zarządza kursami, studentami i zapisami! To wyzwanie łączy wszystko, czego nauczysz się o OOP — klasach, dziedziczeniu, interfejsach, enkapsulacji i usługach współpracujących ze sobą w czystej architekturze.

Rozmieścisz swój kod w pięciu plikach:

  • Lesson.cs: Utwórz klasę Lesson w przestrzeni nazw ELearning.Models. Każda lekcja ma właściwości tylko do odczytu Title (string) i DurationMinutes (int), ustawiane za pomocą konstruktora.
  • Course.cs: Utwórz klasę Course w przestrzeni nazw ELearning.Models. Kurs ma właściwości tylko do odczytu Id (string), Title (string) i Instructor (string), a także listę Lessons. Dodaj metodę AddLesson(Lesson lesson) oraz właściwość tylko do odczytu TotalDuration, która oblicza sumę czasów trwania wszystkich lekcji.
  • Student.cs: Utwórz klasę Student w przestrzeni nazw ELearning.Models z właściwościami tylko do odczytu Id (int) i Name (string). Studenci śledzą swoje postępy za pomocą prywatnego słownika, który mapuje identyfikatory kursów na liczbę ukończonych lekcji. Dodaj metody CompleteLesson(string courseId), aby zwiększać postępy, oraz GetProgress(string courseId), aby zwracać liczbę ukończonych lekcji (lub 0, jeśli student nie jest zapisany na kurs).
  • EnrollmentService.cs: Utwórz klasę EnrollmentService w przestrzeni nazw ELearning.Services. Ta usługa zarządza kursami i zapisami, używając prywatnych kolekcji. Zaimplementuj:
    • AddCourse(Course course) — dodaje kurs na platformę
    • Enroll(Student student, string courseId) — zwraca true, jeśli zapis się powiedzie, albo false, jeśli kurs nie istnieje lub student jest już na niego zapisany
    • GetEnrolledCourses(Student student) — zwraca listę identyfikatorów kursów, na które student jest zapisany
    • GetCourse(string courseId) — zwraca kurs lub null, jeśli nie został znaleziony
  • Program.cs: Połącz wszystkie elementy, tworząc kursy z lekcjami, zapisując studentów, śledząc postępy i wyświetlając wyniki na podstawie danych wejściowych.

Otrzymasz następujące dane wejściowe:

  • Liczba kursów do utworzenia
  • Dla każdego kursu: identyfikator, tytuł, instruktor, liczba lekcji, a następnie dla każdej lekcji: tytuł i czas trwania (w minutach)
  • Identyfikator i imię studenta
  • Liczba operacji do wykonania
  • Dla każdej operacji: akcja (enroll, complete, progress lub info), po której następuje identyfikator kursu

Formaty wyjściowe:

  • enroll: wypisz Enrolled in: {CourseTitle} lub Enrollment failed: {courseId}
  • complete: wypisz Completed lesson in {CourseTitle} (zwiększ postęp o 1)
  • progress: wypisz {CourseTitle}: {completed}/{total} lessons
  • info: wypisz {CourseTitle} by {Instructor} - {TotalDuration} minutes

Na przykład, jeśli dane wejściowe to:

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

Dane wyjściowe powinny wyglądać następująco:

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

Zwróć uwagę, że usługa zarządza relacją między studentami a kursami, a każda klasa odpowiada za własne zadania. Student śledzi swoje postępy, kursy obliczają swój całkowity czas trwania, a usługa zapisów koordynuje całość — to czysty podział odpowiedzialności!

Spróbuj swoich sił

using System;
using System.Collections.Generic;
using ELearning.Models;
using ELearning.Services;

class Program
{
    public static void Main(string[] args)
    {
        // Odczytaj liczbę kursów
        int numCourses = Convert.ToInt32(Console.ReadLine());
        
        // TODO: Utwórz instancję EnrollmentService
        
        // TODO: Odczytaj i utwórz każdy kurs wraz z jego lekcjami
        // Dla każdego kursu: odczytaj ID, tytuł, prowadzącego i liczbę lekcji
        // Dla każdej lekcji: odczytaj tytuł i czas trwania
        // Dodaj lekcje do kursu, a następnie dodaj kurs do serwisu
        
        // Odczytaj dane studenta
        int studentId = Convert.ToInt32(Console.ReadLine());
        string studentName = Console.ReadLine();
        
        // TODO: Utwórz instancję Student
        
        // Odczytaj liczbę operacji
        int numOperations = Convert.ToInt32(Console.ReadLine());
        
        // TODO: Przetwórz każdą operację
        // Dla każdej operacji: odczytaj akcję i courseId
        // Obsłuż: enroll, complete, progress, info
        // Wyświetl odpowiedni komunikat w zależności od akcji
    }
}

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator C# online