פלטפורמת למידה מקוונת
חלק מהיחידה תכנות מונחה עצמים במסלול ה-C# של Coddy. שיעור 68 מתוך 70.
אתגר
קלבואו נבנה פלטפורמת למידה מקוונת שמנהלת קורסים, תלמידים והרשמות! האתגר הזה משלב את כל מה שלמדת על 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} lessonsinfo: הדפס{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
// הדפס את ההודעה המתאימה בהתאם לפעולה
}
}
כל השיעורים ביחידה תכנות מונחה עצמים
1יסודות התכנות מונחה העצמים
קבצים חיצונייםמרחבי שמות והנחיותמבוא למחלקות ולאובייקטיםמילת המפתח 'this'מתודות ופרמטריםשדות לעומת מאפייניםבנאיםאתחול אובייקטיםסיכום – מחשבון פשוט4ירושה
תחביר ירושה בסיסית (:)מילת המפתח 'base'מילות המפתח Virtual ו-Overrideמחלקות Sealedמחלקת הבסיס 'object'סיכום – היררכיית עובדים7תכונות מתקדמות
העמסת אופרטוריםאינדקסרים (this[])דריסת ToString()מתודות הרחבהסיכום – רשימה מותאמת אישית2מאפיינים וחברים סטטיים
מאפיינים במימוש אוטומטימאפיינים לקריאה בלבד ולכתיבה בלבדשדות ומתודות סטטייםמחלקות סטטיותחברים עם גוף ביטוי5פולימורפיזם וממשקים
פולימורפיזם בזמן קומפילציה לעומת בזמן ריצהממשק לעומת מחלקה מופשטתממשקים מרוביםממשקים מפורשיםהמרה כלפי מעלה והמרה כלפי מטהחזרה: מחשבון צורות8מושגים מתקדמים בתכנות מונחה עצמים
קומפוזיציה במקום ירושהGenerics (מחלקות ומתודות)נציגים ואירועיםמאפיינים ורפלקציהIDisposable והצהרת usingיסודות הזרקת תלויותתרגלו בעצמכם: קומפיילר C# אונליין