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

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

جزء من قسم Object Oriented Programming في رحلة Python على Coddy. الدرس 32 من 64.

challenge icon

التحدي

متوسط

في هذا التحدي، ستقوم بتنفيذ نظام كامل لإدارة سجلات الطلاب.

تحتاج إلى تعديل ملفين لإكمال هذا التحدي:

  • student.py - قم بتنفيذ فئة Student مع التغليف (encapsulation) المناسب
  • studentregistry.py - قم بتنفيذ فئة StudentRegistry لإدارة الطلاب

اتبع تعليقات TODO المفصلة في كل ملف للحصول على إرشادات خطوة بخطوة. سيتم اختبار تنفيذك مقابل حالات اختبار شاملة تتحقق من:

  • التحقق الصحيح من السمات ومعالجة الأخطاء
  • الحساب الصحيح لمتوسطات الدرجات
  • وظائف السجل مع سيناريوهات الطلاب المختلفة
  • الشروط الحدودية والحالات الاستثنائية

جرّب بنفسك

from student import Student
from studentregistry import StudentRegistry
import time
import random

# معالج حالات الاختبار للاختبار الشامل
test_case = input()

if test_case == "default_test":
    # إنشاء الطلاب
    student1 = Student(1001, "Alice Smith")
    student2 = Student(1002, "Bob Johnson")
    student3 = Student(1003, "Charlie Brown")

    # إضافة الدرجات
    student1.add_grade("Math", 90)
    student1.add_grade("Science", 85)
    student1.add_grade("English", 92)

    student2.add_grade("Math", 78)
    student2.add_grade("Science", 80)
    student2.add_grade("English", 85)

    student3.add_grade("Math", 95)
    student3.add_grade("Science", 91)
    student3.add_grade("English", 89)

    # عرض سجلات الطلاب
    print("Student Records:")
    student1.display_record()
    print()
    student2.display_record()
    print()
    student3.display_record()
    print()

    # اختبار التحقق من صحة الاسم
    try:
        student1.name = "J"  # قصير جداً
    except ValueError as e:
        print(f"Name validation error: {e}")
    print()

    # إنشاء السجل وإضافة الطلاب
    registry = StudentRegistry()
    registry.add_student(student1)
    registry.add_student(student2)
    registry.add_student(student3)

    # عرض جميع الطلاب
    print("All Students in Registry:")
    registry.display_all()
    print()

    # الحصول على الطالب المتفوق
    top_student = registry.get_top_student()
    print(f"Top Student: {top_student.name} (Average: {top_student.grade_average})")

    # حذف طالب
    registry.remove_student(1002)  # حذف Bob
    print("\
After removing student 1002:")
    registry.display_all()

elif test_case == "empty_registry":
    # اختبار سجل فارغ
    registry = StudentRegistry()
    top_student = registry.get_top_student()
    if top_student is None:
        print("Top student in empty registry: None")
    print("Displaying all students in empty registry:")
    registry.display_all()  # لا ينبغي عرض أي شيء

elif test_case == "validation_tests":
    # اختبار جميع قواعد التحقق من الصحة
    student = Student(1001, "Valid Name")
    print(f"Created student with name: {student.name}")
    
    # اختبار اسم فارغ
    try:
        student.name = ""
    except ValueError as e:
        print(f"Empty name test: {e}")
    
    # اختبار اسم من حرف واحد
    try:
        student.name = "A"
    except ValueError as e:
        print(f"Single character name test: {e}")
    
    # اختبار قيمة تسجيل غير منطقية (ليست Boolean)
    try:
        student.enrolled = "yes"
    except ValueError as e:
        print(f"Non-boolean enrolled test: {e}")
    
    # اختبار تغييرات صالحة
    student.name = "New Valid Name"
    student.enrolled = False
    print(f"After valid changes - Name: {student.name}, Enrolled: {student.enrolled}")

elif test_case == "grade_calculation":
    # اختبار حساب متوسط الدرجات
    student = Student(1001, "Test Student")
    print(f"Student with no grades - Average: {student.grade_average}")
    
    # إضافة درجة واحدة
    student.add_grade("Math", 85)
    print(f"Student with one grade - Average: {student.grade_average}")
    
    # إضافة المزيد من الدرجات
    student.add_grade("Science", 90)
    student.add_grade("English", 95)
    print(f"Student with multiple grades - Average: {student.grade_average}")

elif test_case == "registry_operations":
    # اختبار جميع عمليات السجل
    registry = StudentRegistry()
    
    # إنشاء الطلاب
    student1 = Student(101, "Student One")
    student2 = Student(102, "Student Two")
    
    # إضافة الطلاب
    registry.add_student(student1)
    registry.add_student(student2)
    print("After adding students:")
    registry.display_all()
    
    # جلب طالب
    retrieved_student = registry.get_student(101)
    print(f"\
Retrieved student 101: {retrieved_student.name if retrieved_student else None}")
    
    # جلب طالب غير موجود
    non_existent = registry.get_student(999)
    print(f"Retrieved student 999: {non_existent}")
    
    # حذف طالب
    registry.remove_student(101)
    print("\
After removing student 101:")
    registry.display_all()
    
    # حذف طالب غير موجود (لا ينبغي أن يثير خطأ)
    registry.remove_student(999)
    print("\
After attempting to remove non-existent student 999:")
    registry.display_all()

elif test_case == "large_registry":
    # اختبار الأداء مع عدد كبير من الطلاب
    start_time = time.time()
    registry = StudentRegistry()
    
    # إنشاء 100 طالب مع درجات عشوائية
    for i in range(1, 101):
        student = Student(1000 + i, f"Student {i}")
        # إضافة 5 درجات عشوائية
        for j in range(5):
            student.add_grade(f"Course {j+1}", random.randint(60, 100))
        registry.add_student(student)
    
    creation_time = time.time() - start_time
    print(f"Time to create 100 students: {creation_time:.4f} seconds")
    
    # العثور على الطالب المتفوق
    start_time = time.time()
    top_student = registry.get_top_student()
    top_time = time.time() - start_time
    print(f"Time to find top student: {top_time:.4f} seconds")
    print(f"Top student: {top_student.name} with average {top_student.grade_average:.2f}")
    
    # العثور على أفضل 5 طلاب يدوياً
    print("\
Top 5 students:")
    students_list = []
    for i in range(1, 101):
        student = registry.get_student(1000 + i)
        students_list.append(student)
    
    # الترتيب حسب متوسط الدرجات تنازلياً
    students_list.sort(key=lambda s: s.grade_average, reverse=True)
    
    # عرض أفضل 5
    for i in range(5):
        student = students_list[i]
        print(f"{i+1}. {student.name}: {student.grade_average:.2f}")

جميع دروس Object Oriented Programming

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