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

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

جزء من قسم البرمجة كائنية التوجه في رحلة PHP على Coddy. الدرس 43 من 91.

challenge icon

التحدي

سهل

لنُنشئ نظامًا لسجلات الطلاب يجمع بين جميع مفاهيم التغليف التي تعلمتها في هذا الفصل. ستنشئ نظامًا منظمًا جيدًا يدير بيانات الطلاب بأمان، باستخدام ترقية constructor، والخصائص الخاصة، و getters و setters مع التحقق من الصحة، وإخفاء المعلومات.

ستنظم التعليمات البرمجية عبر ثلاثة ملفات:

  • Student.php: أنشئ فئة Student باستخدام ترقية constructor للخاصية الخاصة $name من النوع (string) والخاصية الخاصة $studentId من النوع (string). أدرج أيضًا خاصية خاصة من نوع $grades وهي array (initialized as empty). يجب أن يتضمن الطالب ما يلي:
    • getName(): تُرجع اسم الطالب
    • getStudentId(): تُرجع معرّف الطالب
    • addGrade(int $grade): تضيف درجة only إذا كانت between 0 و100 (inclusive)
    • getAverage(): تُرجع متوسط جميع الدرجات باعتباره float (وتُرجع 0.0 إذا لم توجد درجات)
    • getGradeCount(): تُرجع number الدرجات المسجلة
  • Classroom.php: أنشئ فئة Classroom تدير مجموعة من الطلاب. استخدم array خاصة لتخزين الطلاب. أدرج ملف Student. يجب أن تتضمن قاعة الدراسة ما يلي:
    • constructor يقبل الخاصية الخاصة $roomName من النوع (string) باستخدام ترقية constructor
    • addStudent(Student $student): تضيف طالبًا إلى قاعة الدراسة
    • getStudentCount(): تُرجع number الطلاب enrolled
    • getClassAverage(): calculates متوسط متوسطات جميع الطلاب (وتُرجع 0.0 إذا لم يوجد طلاب أو درجات)
    • getRoomName(): تُرجع اسم قاعة الدراسة
  • main.php: أدرج ملف Classroom. ستتلقى five inputs: اسم القاعة، واسم الطالب، ومعرّف الطالب، وقيمتي درجتين. أنشئ Classroom باستخدام اسم القاعة. أنشئ Student باستخدام الاسم والمعرّف، وأضف الدرجتين (بعد تحويلهما إلى أعداد صحيحة)، ثم أضف الطالب إلى قاعة الدراسة. اطبع أربعة أسطر:
    • اسم القاعة
    • اسم الطالب متبوعًا بمتوسطه formatted إلى منزلة عشرية واحدة: "[name]: [average]"
    • عدد الدرجات لذلك الطالب
    • متوسط الصف formatted إلى منزلة عشرية واحدة

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

جرّب بنفسك

<?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 بالاسم و ID

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

// TODO: أضف الطالب إلى الفصل

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

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

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

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

?>

جميع دروس البرمجة كائنية التوجه

تدرّب بنفسك: مترجم PHP عبر الإنترنت