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

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

جزء من قسم Object Oriented Programming في رحلة PHP على Coddy — الدرس 43 من 91.

challenge icon

التحدي

سهل

لنقم ببناء نظام سجلات الطلاب الذي يجمع بين جميع مفاهيم التغليف (encapsulation) التي تعلمتها في هذا الفصل. ستقوم بإنشاء نظام منظم جيدًا يدير بيانات الطلاب بشكل آمن، باستخدام ترقية المنشئ (constructor promotion)، والخصائص الخاصة (private properties)، والمستردات (getters) والمعدلات (setters) مع التحقق من الصحة، وإخفاء المعلومات.

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

  • Student.php — أنشئ فئة Student باستخدام ترقية المنشئ لخاصية $name خاصة (string) وخاصية $studentId خاصة (string). قم أيضًا بتضمين خاصية مصفوفة $grades خاصة (يتم تهيئتها كفارغة). يجب أن يحتوي الطالب على:

    • getName() — يعيد اسم الطالب
    • getStudentId() — يعيد معرف الطالب
    • addGrade(int $grade) — يضيف درجة فقط إذا كانت بين 0 و 100 (شاملة)
    • getAverage() — يعيد متوسط جميع الدرجات كـ float (أعد 0.0 إذا لم تكن هناك درجات)
    • getGradeCount() — يعيد عدد الدرجات المسجلة
  • Classroom.php — أنشئ فئة Classroom تدير مجموعة من الطلاب. استخدم مصفوفة خاصة لتخزين الطلاب. قم بتضمين ملف Student. يجب أن تحتوي غرفة الفصل على:
    • منشئ يقبل $roomName خاصة (string) باستخدام ترقية المنشئ
    • addStudent(Student $student) — يضيف طالبًا إلى غرفة الفصل
    • getStudentCount() — يعيد عدد الطلاب المسجلين
    • getClassAverage() — يحسب متوسط جميع متوسطات الطلاب (أعد 0.0 إذا لم يكن هناك طلاب أو لا توجد درجات)
    • getRoomName() — يعيد اسم غرفة الفصل
  • main.php — قم بتضمين ملف Classroom. ستتلقى خمسة مدخلات: اسم الغرفة، اسم الطالب، معرف الطالب، وقيمتين للدرجات. أنشئ Classroom باسم الغرفة. أنشئ Student بالاسم والمعرف، وأضف كلتا الدرجتين (بعد تحويلهما إلى أعداد صحيحة)، ثم أضف الطالب إلى غرفة الفصل. اطبع أربعة أسطر:
    • اسم الغرفة
    • اسم الطالب متبوعًا بمتوسطه منسقًا إلى منزلة عشرية واحدة: "[name]: [average]"
    • عدد الدرجات لهذا الطالب
    • متوسط الفصل منسقًا إلى منزلة عشرية واحدة

يوضح هذا النظام التغليف السليم: الدرجات محمية من التلاعب المباشر، ويتم حساب المتوسطات داخليًا دون الكشف عن البيانات الخام، وتتدفق جميع البيانات من خلال طرق محكومة. لا تحتاج غرفة الفصل إلى معرفة كيفية حساب الطلاب لمتوسطاتهم — فهي تطلب النتيجة فقط.

جرّب بنفسك

<?php

require_once 'Classroom.php';

// قراءة المدخلات
$roomName = trim(fgets(STDIN));
$studentName = trim(fgets(STDIN));
$studentId = trim(fgets(STDIN));
$grade1 = intval(trim(fgets(STDIN)));
$grade2 = intval(trim(fgets(STDIN)));

// TODO: إنشاء فصل دراسي (Classroom) باسم الغرفة

// TODO: إنشاء طالب (Student) بالاسم والمعرف

// TODO: إضافة كلتا الدرجتين للطالب

// TODO: إضافة الطالب إلى الفصل الدراسي

// TODO: طباعة اسم الغرفة

// TODO: طباعة اسم الطالب متبوعاً بمتوسط درجاته منسقاً لمنزلة عشرية واحدة: "[name]: [average]"

// TODO: طباعة عدد درجات ذلك الطالب

// TODO: طباعة متوسط الفصل منسقاً لمنزلة عشرية واحدة

?>

جميع دروس Object Oriented Programming