Menu
Coddy logo textTech

E-öğrenme Platformu

Coddy'nin Python Journey'sinin Object Oriented Programming bölümünün bir parçası — ders 61 / 64.

challenge icon

Görev

Zor

Bu meydan okumada, nesne yönelimli bir e-öğrenme platformu sistemi uygulayacaksınız.

  • course.py - Course sınıfını uygulayın
  • student.py - Student sınıfını uygulayın
  • instructor.py - Instructor sınıfını uygulayın

Kopya kağıdı

Bu ders, üç ana sınıfa sahip nesne yönelimli bir e-öğrenme platformu sisteminin uygulanmasına odaklanmaktadır:

  • Course sınıfı - Platformdaki eğitim kurslarını temsil eder
  • Student sınıfı - Kurslara kayıt olabilen öğrenenleri temsil eder
  • Instructor sınıfı - Kurslar oluşturabilen ve yönetebilen öğretmenleri temsil eder

Sistem, gerçek dünya varlıklarını kendi özelliklerine ve yöntemlerine sahip sınıflar olarak modelleyerek nesne yönelimli programlama ilkelerini gösterir.

Kendin dene

from course import Course
from student import Student
from instructor import Instructor

# Test durumu işleyicisi
test_case = input()

if test_case == "course_creation":
    # Farklı kapasitelerde kurslar oluşturmayı test et
    course1 = Course("Python 101", "Introduction to Python", 20)
    course2 = Course("Data Science", "Advanced data analysis techniques")
    
    print(f"Course 1: {course1.title}, Max Capacity: {course1.max_capacity}")
    print(f"Course 2: {course2.title}, Max Capacity: {course2.max_capacity}")
    print(f"Initial student count: {len(course1.students)}")

elif test_case == "student_enrollment":
    # Öğrenci kayıt sürecini test et
    course = Course("Python 101", "Introduction to Python", 2)
    student1 = Student("Alice", "alice@example.com")
    student2 = Student("Bob", "bob@example.com")
    student3 = Student("Charlie", "charlie@example.com")
    
    # Öğrencileri kaydet
    result1 = student1.enroll(course)
    result2 = student2.enroll(course)
    result3 = student3.enroll(course)  # Başarısız olmalı (kapasite)
    
    print(f"Enrollment 1 result: {result1}")
    print(f"Enrollment 2 result: {result2}")
    print(f"Enrollment 3 result: {result3}")
    
    # Aynı öğrenciyi iki kez kaydetmeyi dene
    result4 = student1.enroll(course)
    print(f"Re-enrollment result: {result4}")
    
    # Kurs ve öğrenci durumlarını kontrol et
    print(f"Course has {len(course.students)} students")
    print(f"Student 1 has {len(student1.enrolled_courses)} enrolled courses")

elif test_case == "student_unenrollment":
    # Öğrenci kaydını silme sürecini test et
    course = Course("Python 101", "Introduction to Python")
    student = Student("Alice", "alice@example.com")
    
    # Kaydet ve sonra kaydı sil
    student.enroll(course)
    print(f"Before unenroll: Course has {len(course.students)} students")
    print(f"Before unenroll: Student has {len(student.enrolled_courses)} courses")
    
    result = student.unenroll(course)
    print(f"Unenrollment result: {result}")
    
    print(f"After unenroll: Course has {len(course.students)} students")
    print(f"After unenroll: Student has {len(student.enrolled_courses)} courses")
    
    # Tekrar kaydı silmeyi dene
    result = student.unenroll(course)
    print(f"Second unenrollment result: {result}")

elif test_case == "course_completion":
    # Kurs tamamlama sürecini test et
    course = Course("Python 101", "Introduction to Python")
    student = Student("Alice", "alice@example.com")
    
    # Kaydol ve tamamla
    student.enroll(course)
    print(f"Before completion: Enrolled in {len(student.enrolled_courses)} courses")
    print(f"Before completion: Completed {len(student.completed_courses)} courses")
    
    result = student.complete_course(course)
    print(f"Completion result: {result}")
    
    print(f"After completion: Enrolled in {len(student.enrolled_courses)} courses")
    print(f"After completion: Completed {len(student.completed_courses)} courses")
    
    # Kurs durumunu kontrol et
    print(f"Course has {len(course.students)} active students")
    print(f"Course has {len(course.completed_students)} completed students")

elif test_case == "instructor_assignment":
    # Eğitmen atamasını test et
    course = Course("Python 101", "Introduction to Python")
    instructor = Instructor("Dr. Smith", "smith@example.edu", "Computer Science")
    
    print(f"Before assignment: Instructor has {len(instructor.courses)} courses")
    print(f"Before assignment: Course instructor is {course.instructor}")
    
    result = instructor.assign_to_course(course)
    print(f"Assignment result: {result}")
    
    print(f"After assignment: Instructor has {len(instructor.courses)} courses")
    print(f"After assignment: Course instructor is {course.instructor.name}")

elif test_case == "course_management":
    # Kurs kapasite yönetimini test et
    course = Course("Limited Course", "Test capacity", 2)
    student1 = Student("Alice", "alice@example.com")
    student2 = Student("Bob", "bob@example.com")
    student3 = Student("Charlie", "charlie@example.com")
    
    # Kursu doldur
    student1.enroll(course)
    student2.enroll(course)
    result = student3.enroll(course)  # Başarısız olmalı
    print(f"Enrolling to full course: {result}")
    
    # Kaydı silerek yer aç
    student1.unenroll(course)
    result = student3.enroll(course)  # Şimdi başarılı olmalı
    print(f"Enrolling after unenrollment: {result}")
    
    # Son durumu kontrol et
    print(f"Final students in course: {len(course.students)}")
    print(f"Students are: {[s.name for s in course.students]}")

elif test_case == "integrated_test":
    # Tüm sistemin birlikte çalışmasını test et
    # Kursları oluştur
    python_course = Course("Python 101", "Introduction to Python", 3)
    data_course = Course("Data Science", "Advanced data analysis", 2)
    
    # Öğrencileri oluştur
    alice = Student("Alice", "alice@example.com")
    bob = Student("Bob", "bob@example.com")
    charlie = Student("Charlie", "charlie@example.com")
    
    # Eğitmeni oluştur
    dr_smith = Instructor("Dr. Smith", "smith@example.edu", "Computer Science")
    
    # Eğitmeni ata
    dr_smith.assign_to_course(python_course)
    dr_smith.assign_to_course(data_course)
    
    # Öğrencileri kaydet
    alice.enroll(python_course)
    bob.enroll(python_course)
    charlie.enroll(python_course)
    
    alice.enroll(data_course)
    bob.enroll(data_course)  # Bu data_course'u doldurur
    
    # Bir kursu tamamla
    alice.complete_course(python_course)
    
    # Sistem durumunu yazdır
    print("System State:")
    print(f"Python course has {len(python_course.students)} active students and {len(python_course.completed_students)} completed")
    print(f"Data course has {len(data_course.students)} active students")
    print(f"Dr. Smith teaches {len(dr_smith.courses)} courses")
    print(f"Alice is enrolled in {len(alice.enrolled_courses)} courses and completed {len(alice.completed_courses)}")
    print(f"Charlie is enrolled in {len(charlie.enrolled_courses)} courses")

elif test_case == "edge_cases":
    # Uç durumları test et
    course = Course("Small Course", "Test edge cases", 1)
    student1 = Student("Alice", "alice@example.com")
    student2 = Student("Bob", "bob@example.com")
    
    # Tam kapasitede kaydı test et
    result1 = student1.enroll(course)
    result2 = student2.enroll(course)  # Başarısız olmalı
    print(f"Enrollment at capacity: {result1}")
    print(f"Enrollment beyond capacity: {result2}")
    
    # Öğrencinin kayıtlı olmadığı bir kursu tamamlamasını test et
    other_course = Course("Other Course", "Not enrolled")
    result3 = student1.complete_course(other_course)
    print(f"Complete non-enrolled course: {result3}")
    
    # Öğrencinin kayıtlı olmadığı bir kurstan kaydını silmesini test et
    result4 = student2.unenroll(course)
    print(f"Unenroll from non-enrolled course: {result4}")
    
    # Bir eğitmeni yeniden atamayı test et
    instructor1 = Instructor("Dr. Smith", "smith@example.edu", "Python")
    instructor2 = Instructor("Dr. Jones", "jones@example.edu", "Java")
    
    instructor1.assign_to_course(course)
    print(f"First instructor: {course.instructor.name}")
    
    instructor2.assign_to_course(course)
    print(f"After reassignment: {course.instructor.name}")

elif test_case == "capacity_limits":
    # Kapasite sınırlarını test et
    zero_capacity = Course("Empty Course", "No students allowed", 0)
    student = Student("Alice", "alice@example.com")
    
    result1 = student.enroll(zero_capacity)
    print(f"Enroll in zero-capacity course: {result1}")
    
    large_capacity = Course("Huge Course", "Many students", 1000)
    result2 = student.enroll(large_capacity)
    print(f"Enroll in large-capacity course: {result2}")
    print(f"Large course has capacity for {large_capacity.max_capacity} students")

elif test_case == "multiple_courses":
    # Birden fazla kursu olan öğrenciyi test et
    student = Student("Alice", "alice@example.com")
    course1 = Course("Python 101", "Intro to Python")
    course2 = Course("Java 101", "Intro to Java")
    course3 = Course("C++ 101", "Intro to C++")
    
    # Tüm kurslara kaydol
    student.enroll(course1)
    student.enroll(course2)
    student.enroll(course3)
    print(f"Enrolled in {len(student.enrolled_courses)} courses")
    
    # Bazı kursları tamamla
    student.complete_course(course1)
    student.complete_course(course2)
    print(f"After completion: Enrolled in {len(student.enrolled_courses)} courses")
    print(f"After completion: Completed {len(student.completed_courses)} courses")
    
    # Belirli kursları doğrula
    enrolled_titles = [c.title for c in student.enrolled_courses]
    completed_titles = [c.title for c in student.completed_courses]
    print(f"Still enrolled in: {enrolled_titles}")
    print(f"Completed: {completed_titles}")

elif test_case == "instructor_workload":
    # Birden fazla kursu olan eğitmeni test et
    instructor = Instructor("Dr. Smith", "smith@example.edu", ["Python", "Java", "C++"])
    course1 = Course("Python 101", "Intro to Python")
    course2 = Course("Java 101", "Intro to Java")
    course3 = Course("C++ 101", "Intro to C++")
    
    # Tüm kurslara ata
    instructor.assign_to_course(course1)
    instructor.assign_to_course(course2)
    instructor.assign_to_course(course3)
    
    print(f"Instructor teaches {len(instructor.courses)} courses")
    course_titles = [c.title for c in instructor.courses]
    print(f"Courses taught: {course_titles}")
    
    # Eğitmenin her kursa düzgün şekilde atandığını doğrula
    for i, course in enumerate([course1, course2, course3]):
        print(f"Course {i+1} instructor: {course.instructor.name}")

Object Oriented Programming bölümündeki tüm dersler