Menu
Coddy logo textTech

E-Öğrenme Platformu

Coddy'nin PHP Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 88 / 91.

challenge icon

Görev

Kolay

Kursları, öğrencileri ve eğitmenleri yöneten bir E-Learning Platform oluşturalım. Bu kapsamlı görev; kalıtım, arayüzler, kapsülleme ve tasarım kalıplarını uyumlu bir sistemde bir araya getirir.

Kodunuzu altı dosyaya ayıracaksınız:

  • User.php: Hem öğrenciler hem de eğitmenler için temel görevi gören soyut bir User sınıfı oluşturun. id (int) ve name (string) için, her ikisi de public readonly olacak şekilde kurucu tanıtımını kullanın. Alt sınıfların uygulaması gereken soyut bir getRole(): string metodu ekleyin.
  • Student.php: User dosyasını dahil edin. Student sınıfını genişleten bir User sınıfı oluşturun. Öğrenciler, kayıt oldukları kursları özel bir dizide ve her kurs için ilerlemelerini (tamamlanma yüzdesini) takip eder. Şunları uygulayın:
    • getRole(): string: "Student" döndürür
    • enrollInCourse(Course $course): string: Kursun kapasitesi varsa öğrenciyi kaydeder; başarı veya başarısızlık mesajı döndürür
    • getEnrolledCourses(): array: Kayıt olunan kurslar dizisini döndürür
    • updateProgress(string $courseTitle, int $percent): void: Bir kursun ilerlemesini (0-100) ayarlar
    • getProgress(string $courseTitle): int: İlerleme yüzdesini döndürür; kayıtlı değilse 0 döndürür
  • Instructor.php: User dosyasını dahil edin. Instructor sınıfını genişleten bir User sınıfı oluşturun. Eğitmenler kurs oluşturabilir ve yönetebilir. Şunları uygulayın:
    • getRole(): string: "Instructor" döndürür
    • createCourse(string $title, int $capacity): Course: Bu eğitmenin atandığı yeni bir Course oluşturur ve döndürür
  • Course.php: Instructor dosyasını dahil edin. Course (string, public readonly), title (Instructor, public readonly) ve instructor (int, private) için kurucu tanıtımını kullanan bir capacity sınıfı oluşturun. Kayıtlı öğrencileri özel bir dizide takip edin. Şunları uygulayın:
    • getCapacity(): int: Maksimum kapasiteyi döndürür
    • getEnrolledCount(): int: Mevcut kayıt sayısını döndürür
    • hasCapacity(): bool: Daha fazla öğrencinin kayıt olabileceği durumda true döndürür
    • addStudent(Student $student): bool: Kapasite izin veriyorsa öğrenciyi ekler ve başarı durumunu döndürür
    • getStudents(): array: Kayıtlı öğrenciler dizisini döndürür
  • Platform.php: Course ve Student dosyalarını dahil edin. Tüm sistemi yöneten bir Platform sınıfı oluşturun. Kursları ve kullanıcıları özel dizilerde saklayın. Şunları uygulayın:
    • addCourse(Course $course): void: Bir kursu platforma ekler
    • findCourse(string $title): ?Course: Bir kursu başlığına göre bulur
    • enrollStudent(Student $student, string $courseTitle): string: Bir öğrenciyi bir kursa kaydeder. "Course not found", "Course is full" veya "[name] enrolled in [title]" döndürün
    • getCourseStats(string $title): string: "[title]: [enrolled]/[capacity] students" veya "Course not found" döndürür
  • main.php: Platform dosyasını dahil edin. Üç girdi alacaksınız: eğitmen verileri (JSON), oluşturulacak kurslar (JSON) ve gerçekleştirilecek işlemler (JSON).

    Eğitmen JSON biçimi:

    {"id": 1, "name": "Dr. Smith"}

    Kurslar JSON biçimi:

    [{"title": "PHP Basics", "capacity": 2}, {"title": "OOP Mastery", "capacity": 3}]

    İşlemler JSON biçimi:

    [{"type": "enroll", "student_id": 1, "student_name": "Alice", "course": "PHP Basics"}, {"type": "progress", "student_id": 1, "course": "PHP Basics", "percent": 50}, {"type": "stats", "course": "PHP Basics"}]

    Platformu, eğitmeni ve tüm kursları (eğitmenin createCourse metodunu kullanarak) oluşturun. Kursları platforma ekleyin. Ardından her işlemi işleyin:

    • "enroll": Yeni bir Student oluşturun ve onu kaydedin; enrollStudent() metodundan gelen sonucu yazdırın
    • "progress": Öğrencinin ilerlemesini güncelleyin; "[name] progress in [course]: [percent]%" yazdırın
    • "stats": getCourseStats() metodundan gelen sonucu yazdırın

    Oluşturulan öğrencileri kimliklerine göre takip edin; böylece ilerlemelerini daha sonra güncelleyebilirsiniz. Her işlemin sonucunu yeni bir satıra yazdırın.

Bu görev, kalıtımın nasıl temiz bir kullanıcı hiyerarşisi oluşturduğunu, kapsüllemenin kayıt verilerini nasıl koruduğunu ve platformun kurslar, öğrenciler ve eğitmenler arasındaki ilişkileri yöneten bir koordinatör olarak nasıl davrandığını gösterir.

Kendin dene

<?php

require_once 'Platform.php';

// Girdileri oku
$instructorData = (array)json_decode(trim(fgets(STDIN)), true);
$coursesData = (array)json_decode(trim(fgets(STDIN)), true);
$operations = (array)json_decode(trim(fgets(STDIN)), true);

// TODO: Platformu oluştur

// TODO: instructorData'dan eğitmeni oluştur

// TODO: Eğitmenin createCourse metodunu kullanarak tüm kursları oluştur
// ve bunları platforma ekle

// TODO: Oluşturulan öğrencileri ID'lerine göre takip et
$students = [];

// TODO: Her işlemi işle
foreach ($operations as $op) {
    $operation = (array)$op;
    
    // TODO: "enroll" işlemini ele al
    // Yeni bir Student oluştur ve kaydet
    // enrollStudent() sonucunu yazdır
    
    // TODO: "progress" işlemini ele al
    // Öğrenci ilerlemesini güncelle
    // Yazdır "[name] progress in [course]: [percent]%"
    
    // TODO: "stats" operasyonunu işle
    // getCourseStats() sonucunu yazdır
}

?>

Nesne Yönelimli Programlama bölümündeki tüm dersler

Kendi başına pratik yap: Online PHP derleyicisi