이러닝 플랫폼
Coddy C# 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨 — 70개 중 68번째.
챌린지
쉬움강좌, 학생, 수강 등록을 관리하는 이러닝 플랫폼을 구축해 봅시다! 이 챌린지는 클래스, 상속, 인터페이스, 캡슐화, 그리고 클린 아키텍처 내에서 함께 작동하는 서비스 등 여러분이 OOP에 대해 배운 모든 것을 하나로 모으는 과정입니다.
코드는 다음 다섯 개의 파일로 구성됩니다:
Lesson.cs:ELearning.Models네임스페이스에Lesson클래스를 생성합니다. 각 레슨은 생성자를 통해 설정되는 읽기 전용 속성인Title(string)과DurationMinutes(int)를 가집니다.Course.cs:ELearning.Models네임스페이스에Course클래스를 생성합니다. 강좌는 읽기 전용인Id(string),Title(string),Instructor(string) 속성과Lessons리스트를 가집니다.AddLesson(Lesson lesson)메서드와 모든 레슨 시간의 합계를 계산하는 읽기 전용TotalDuration속성을 포함하세요.Student.cs:ELearning.Models네임스페이스에 읽기 전용Id(int)와Name(string) 속성을 가진Student클래스를 생성합니다. 학생은 강좌 ID를 완료된 레슨 수에 매핑하는 프라이빗 딕셔너리를 통해 학습 진도를 추적합니다. 진도를 증가시키는CompleteLesson(string courseId)메서드와 완료된 레슨 수를 반환하는GetProgress(string courseId)메서드(등록되지 않은 경우 0 반환)를 포함하세요.EnrollmentService.cs:ELearning.Services네임스페이스에EnrollmentService클래스를 생성합니다. 이 서비스는 프라이빗 컬렉션을 사용하여 강좌와 수강 등록을 관리합니다. 다음을 구현하세요:AddCourse(Course course)- 플랫폼에 강좌를 추가합니다.Enroll(Student student, string courseId)- 등록에 성공하면true를, 강좌가 존재하지 않거나 학생이 이미 등록된 경우false를 반환합니다.GetEnrolledCourses(Student student)- 학생이 등록한 강좌 ID 리스트를 반환합니다.GetCourse(string courseId)- 강좌를 반환하거나 찾지 못한 경우null을 반환합니다.
Program.cs: 레슨이 포함된 강좌를 생성하고, 학생을 등록시키고, 진도를 추적하며, 입력에 따라 결과를 표시하여 모든 기능을 하나로 통합합니다.
다음 입력을 받게 됩니다:
- 생성할 강좌 수
- 각 강좌별: ID, 제목, 강사, 레슨 수, 그리고 각 레슨별: 제목 및 시간(분)
- 학생 ID 및 이름
- 수행할 작업 수
- 각 작업별: 작업 종류(
enroll,complete,progress, 또는info)와 이어서 강좌 ID
출력 형식:
enroll:Enrolled in: {CourseTitle}또는Enrollment failed: {courseId}를 출력합니다.complete:Completed lesson in {CourseTitle}를 출력합니다(진도를 1 증가시킴).progress:{CourseTitle}: {completed}/{total} lessons를 출력합니다.info:{CourseTitle} by {Instructor} - {TotalDuration} minutes를 출력합니다.
예를 들어, 입력이 다음과 같다면:
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출력은 다음과 같아야 합니다:
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각 클래스가 자신의 책임을 처리하는 동안 서비스가 학생과 강좌 간의 관계를 어떻게 관리하는지 주목하세요. 학생은 자신의 진도를 추적하고, 강좌는 총 시간을 계산하며, 등록 서비스는 모든 것을 조율합니다. 이것이 바로 깔끔한 관심사 분리(separation of concerns)입니다!
직접 해보기
using System;
using System.Collections.Generic;
using ELearning.Models;
using ELearning.Services;
class Program
{
public static void Main(string[] args)
{
// 강좌 수를 읽습니다
int numCourses = Convert.ToInt32(Console.ReadLine());
// TODO: EnrollmentService 인스턴스를 생성합니다
// TODO: 각 강좌와 해당 레슨들을 읽고 생성합니다
// 각 강좌에 대해: ID, 제목, 강사, 레슨 수를 읽습니다
// 각 레슨에 대해: 제목과 기간을 읽습니다
// 레슨을 강좌에 추가한 다음, 강좌를 서비스에 추가합니다
// 학생 정보를 읽습니다
int studentId = Convert.ToInt32(Console.ReadLine());
string studentName = Console.ReadLine();
// TODO: Student 인스턴스를 생성합니다
// 작업 수를 읽습니다
int numOperations = Convert.ToInt32(Console.ReadLine());
// TODO: 각 작업을 처리합니다
// 각 작업에 대해: action과 courseId를 읽습니다
// 처리: enroll, complete, progress, info
// 작업에 따라 적절한 메시지를 출력합니다
}
}