Menu
Coddy logo textTech

פלטפורמת למידה מקוונת

חלק מהיחידה תכנות מונחה עצמים במסלול ה-C# של Coddy. שיעור 68 מתוך 70.

challenge icon

אתגר

קל

בואו נבנה פלטפורמת למידה מקוונת שמנהלת קורסים, תלמידים והרשמות! האתגר הזה משלב את כל מה שלמדת על OOP — מחלקות, ירושה, ממשקים, כימוס ושירותים שפועלים יחד בארכיטקטורה נקייה.

תארגן את הקוד שלך בחמישה קבצים:

  • Lesson.cs: צור מחלקה בשם Lesson במרחב השמות ELearning.Models. לכל שיעור יש מאפיינים לקריאה בלבד Title (מחרוזת) ו-DurationMinutes (int), שנקבעים באמצעות הבנאי.
  • Course.cs: צור מחלקה בשם Course במרחב השמות ELearning.Models. לקורס יש מאפיינים לקריאה בלבד Id (מחרוזת), Title (מחרוזת) ו-Instructor (מחרוזת), וכן רשימה בשם Lessons. כלול מתודה בשם AddLesson(Lesson lesson) ומאפיין לקריאה בלבד בשם TotalDuration, שמחשב את הסכום של משכי כל השיעורים.
  • Student.cs: צור מחלקה בשם Student במרחב השמות ELearning.Models, עם המאפיינים לקריאה בלבד Id (int) ו-Name (מחרוזת). התלמידים עוקבים אחר ההתקדמות שלהם באמצעות מילון פרטי שממפה מזהי קורסים למספר השיעורים שהושלמו. כלול את המתודות CompleteLesson(string courseId) להגדלת ההתקדמות ואת GetProgress(string courseId) להחזרת מספר השיעורים שהושלמו (או 0 אם התלמיד לא רשום לקורס).
  • EnrollmentService.cs: צור מחלקה בשם EnrollmentService במרחב השמות ELearning.Services. השירות הזה מנהל קורסים והרשמות באמצעות אוספים פרטיים. ממש את הפעולות הבאות:
    • AddCourse(Course course) - מוסיפה קורס לפלטפורמה
    • Enroll(Student student, string courseId) - מחזירה true אם ההרשמה מצליחה, ו-false אם הקורס לא קיים או שהתלמיד כבר רשום אליו
    • GetEnrolledCourses(Student student) - מחזירה רשימה של מזהי הקורסים שהתלמיד רשום אליהם
    • GetCourse(string courseId) - מחזירה את הקורס או null אם הוא לא נמצא
  • Program.cs: חבר את כל החלקים יחד באמצעות יצירת קורסים עם שיעורים, רישום תלמידים, מעקב אחר ההתקדמות והצגת התוצאות בהתאם לקלט.

תקבל את הקלטים הבאים:

  • מספר הקורסים שיש ליצור
  • עבור כל קורס: מזהה, כותרת, מדריך, מספר השיעורים, ולאחר מכן עבור כל שיעור: כותרת ומשך (בדקות)
  • מזהה התלמיד ושמו
  • מספר הפעולות שיש לבצע
  • עבור כל פעולה: הפעולה (enroll, complete, progress או info) ואחריה מזהה הקורס

פורמטים של הפלט:

  • 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

שים לב איך השירות מנהל את הקשר בין התלמידים לקורסים, בעוד שכל מחלקה מטפלת באחריות שלה. התלמיד עוקב אחר ההתקדמות שלו, הקורסים מחשבים את משך הזמן הכולל שלהם, ושירות ההרשמה מתאם בין כל החלקים — הפרדה נקייה בין תחומי האחריות!

נסו בעצמכם

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: עבד כל פעולה
        // עבור כל פעולה: קרא את הפעולה ואת courseId
        // טפל ב: enroll, complete, progress, info
        // הדפס את ההודעה המתאימה בהתאם לפעולה
    }
}

כל השיעורים ביחידה תכנות מונחה עצמים

תרגלו בעצמכם: קומפיילר C# אונליין