Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

مراجعة - سجلات الطلاب

جزء من قسم Object Oriented Programming في رحلة C# على Coddy — الدرس 35 من 70.

challenge icon

التحدي

سهل

لنقم ببناء نظام سجلات طلاب يجمع بين جميع تقنيات الكبسلة (encapsulation) التي تعلمتها في هذا الفصل. ستقوم بإنشاء نظام آمن حيث يتم حماية بيانات الطلاب بشكل صحيح، ويتم التحقق من صحة الدرجات، وتظل معلومات معينة غير قابلة للتغيير بعد إنشائها.

ستقوم بتنظيم الكود الخاص بك عبر ملفين:

  • Student.cs: قم بإنشاء فئة Student داخل مساحة الأسماء Records والتي توضح الكبسلة الصحيحة. يجب أن يحتوي الطالب الخاص بك على:
    • حقل readonly باسم Name (سلسلة نصية) يمكن الوصول إليه علنًا ولكن لا يمكن تعيينه إلا أثناء الإنشاء.
    • حقل readonly خاص لمعرف الطالب (سلسلة نصية) - يجب ألا يكون هذا الحقل متاحًا مباشرة من الخارج أبدًا.
    • قائمة خاصة لتخزين الدرجات (أعداد صحيحة).
    • خاصية عامة للقراءة فقط Average تقوم بحساب وإرجاع متوسط جميع الدرجات، أو 0 إذا لم تكن هناك درجات.
    • طريقة عامة AddGrade(int grade) تقبل فقط الدرجات التي تتراوح بين 0 و 100 (شاملة) - يجب تجاهل الدرجات غير الصالحة بصمت.
    • طريقة عامة GetGradeCount() ترجع عدد الدرجات الصالحة التي تم تسجيلها.
    • طريقة عامة GetStudentInfo() ترجع سلسلة نصية بالتنسيق "{Name} (ID: {last 4 characters of student ID})" - لاحظ كيف تقوم بكشف نسخة مقنعة فقط من المعرف!
    يجب أن يقبل المنشئ (constructor) الاسم ومعرف الطالب بهذا الترتيب.
  • Program.cs: في ملفك الرئيسي، قم بإنشاء طالب وأضف عدة درجات لتوضيح كيفية عمل الكبسلة. ستظهر أنه يتم قبول الدرجات الصالحة، ورفض الدرجات غير الصالحة، وحساب المتوسط بشكل صحيح.

ستتلقى خمسة مدخلات:

  • اسم الطالب
  • معرف الطالب (4 أحرف على الأقل)
  • الدرجة الأولى المراد إضافتها (عدد صحيح)
  • الدرجة الثانية المراد إضافتها (عدد صحيح، قد تكون غير صالحة مثل -5 أو 150)
  • الدرجة الثالثة المراد إضافتها (عدد صحيح)

اطبع المخرجات بهذا التنسيق:

{GetStudentInfo() result}
Grades recorded: {GetGradeCount()}
Average: {Average}

على سبيل المثال، إذا كانت المدخلات هي Emma Wilson، و STU12345، و 85، و 150، و 90، فيجب أن تكون المخرجات:

Emma Wilson (ID: 2345)
Grades recorded: 2
Average: 87.5

لاحظ كيف تم رفض الدرجة غير الصالحة 150 بصمت، لذلك تم تسجيل درجتين فقط. معرف الطالب محمي - لا يمكن للكود الخارجي رؤية المعرف الكامل أبدًا، فقط النسخة المقنعة من خلال GetStudentInfo(). الاسم قابل للقراءة ولكنه غير قابل للتغيير. هذا هو عمل الكبسلة معًا لإنشاء فئة قوية ومحمية جيدًا!

جرّب بنفسك

using System;
using Records;

class Program
{
    public static void Main(string[] args)
    {
        // قراءة المدخلات
        string name = Console.ReadLine();
        string studentId = Console.ReadLine();
        int grade1 = Convert.ToInt32(Console.ReadLine());
        int grade2 = Convert.ToInt32(Console.ReadLine());
        int grade3 = Convert.ToInt32(Console.ReadLine());

        // TODO: إنشاء كائن Student باستخدام name و studentId

        // TODO: إضافة جميع الدرجات الثلاث باستخدام طريقة AddGrade

        // TODO: طباعة المخرجات بالتنسيق المطلوب:
        // {نتيجة GetStudentInfo()}
        // الدرجات المسجلة: {GetGradeCount()}
        // المتوسط: {Average}
    }
}

جميع دروس Object Oriented Programming