Platforma e-learningowa
Część sekcji Programowanie obiektowe ścieżki C# w Coddy. Lekcja 68 z 70.
Wyzwanie
ŁatwyZbudujmy 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ęLessonw przestrzeni nazwELearning.Models. Każda lekcja ma właściwości tylko do odczytuTitle(string) iDurationMinutes(int), ustawiane za pomocą konstruktora.Course.cs: Utwórz klasęCoursew przestrzeni nazwELearning.Models. Kurs ma właściwości tylko do odczytuId(string),Title(string) iInstructor(string), a także listęLessons. Dodaj metodęAddLesson(Lesson lesson)oraz właściwość tylko do odczytuTotalDuration, która oblicza sumę czasów trwania wszystkich lekcji.Student.cs: Utwórz klasęStudentw przestrzeni nazwELearning.Modelsz właściwościami tylko do odczytuId(int) iName(string). Studenci śledzą swoje postępy za pomocą prywatnego słownika, który mapuje identyfikatory kursów na liczbę ukończonych lekcji. Dodaj metodyCompleteLesson(string courseId), aby zwiększać postępy, orazGetProgress(string courseId), aby zwracać liczbę ukończonych lekcji (lub 0, jeśli student nie jest zapisany na kurs).EnrollmentService.cs: Utwórz klasęEnrollmentServicew przestrzeni nazwELearning.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)— zwracatrue, jeśli zapis się powiedzie, albofalse, jeśli kurs nie istnieje lub student jest już na niego zapisanyGetEnrolledCourses(Student student)— zwraca listę identyfikatorów kursów, na które student jest zapisanyGetCourse(string courseId)— zwraca kurs lubnull, 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,progresslubinfo), po której następuje identyfikator kursu
Formaty wyjściowe:
enroll: wypiszEnrolled in: {CourseTitle}lubEnrollment failed: {courseId}complete: wypiszCompleted lesson in {CourseTitle}(zwiększ postęp o 1)progress: wypisz{CourseTitle}: {completed}/{total} lessonsinfo: 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
CS999Dane 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: CS999Zwróć 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
1Podstawy programowania obiektowego
Pliki zewnętrznePrzestrzenie nazw i dyrektywyWprowadzenie do klas i obiektówSłowo kluczowe „this”Metody i parametryPola a właściwościKonstruktoryInicjalizatory obiektówPodsumowanie — prosty kalkulator4Dziedziczenie
Podstawowa składnia dziedziczenia (:)Słowo kluczowe 'base'Słowa kluczowe virtual i overrideKlasy sealedBazowa klasa 'object'Powtórzenie – hierarchia pracowników7Zaawansowane funkcje
Przeciążanie operatorówIndeksery (this[])Nadpisywanie ToString()Metody rozszerzającePodsumowanie – własna lista2Właściwości i składowe statyczne
Właściwości automatyczneWłaściwości tylko do odczytu i zapisuPola i metody statyczneKlasy statyczneSkładowe z ciałem wyrażeniowym5Polimorfizm i interfejsy
Polimorfizm czasu kompilacji a czasu wykonaniaInterfejs a klasa abstrakcyjnaWiele interfejsówJawne implementowanie interfejsówRzutowanie w górę i w dółPowtórka — kalkulator kształtów8Zaawansowane koncepcje OOP
Kompozycja zamiast dziedziczeniaTypy generyczne (klasy i metody)Delegaty i zdarzeniaAtrybuty i refleksjaIDisposable i instrukcja usingPodstawy wstrzykiwania zależności11Wzorce projektowe, część 2
Wzorzec poleceniaWzorzec adapteraWzorzec dekoratoraWzorzec metody szablonowejWzorzec stanuWzorzec kompozytu3Architektura klas
Dane instancji a dane statyczneSłowa kluczowe 'readonly' i 'const'Pola zapasowePowtórzenie — menedżer kont bankowych6Hermetyzacja
Modyfikatory dostępuWłaściwości w hermetyzacjiImplementacja ukrywania danychWzorce niezmiennościPowtórka — dane studentów9Argumenty zmiennej liczby
Słowo kluczowe „params”Parametry opcjonalneArgumenty nazwanePrzeciążanie metodPoćwicz samodzielnie: Kompilator C# online