Menu
Coddy logo textTech

E-öğrenme Platformu

Coddy'nin C# Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 68 / 70.

challenge icon

Görev

Kolay

Kursları, öğrencileri ve kayıtları yöneten bir e-öğrenme platformu inşa edelim! Bu meydan okuma, OOP hakkında öğrendiğiniz her şeyi - sınıflar, kalıtım, arayüzler, kapsülleme ve temiz bir mimaride birlikte çalışan servisler - bir araya getiriyor.

Kodunuzu beş dosya halinde düzenleyeceksiniz:

  • Lesson.cs: ELearning.Models ad alanında (namespace) bir Lesson sınıfı oluşturun. Her dersin, yapıcı (constructor) aracılığıyla atanan salt okunur Title (string) ve DurationMinutes (int) özellikleri vardır.
  • Course.cs: ELearning.Models ad alanında bir Course sınıfı oluşturun. Bir kursun salt okunur Id (string), Title (string) ve Instructor (string) özelliklerinin yanı sıra bir Lessons listesi vardır. Bir AddLesson(Lesson lesson) metodu ve tüm ders sürelerinin toplamını hesaplayan salt okunur bir TotalDuration özelliği ekleyin.
  • Student.cs: ELearning.Models ad alanında salt okunur Id (int) ve Name (string) özelliklerine sahip bir Student sınıfı oluşturun. Öğrenciler, kurs ID'lerini tamamlanan ders sayısıyla eşleştiren özel (private) bir sözlük (dictionary) aracılığıyla ilerlemelerini takip ederler. İlerlemeyi artırmak için CompleteLesson(string courseId) ve tamamlanan ders sayısını döndürmek için (veya kayıtlı değilse 0) GetProgress(string courseId) metodlarını ekleyin.
  • EnrollmentService.cs: ELearning.Services ad alanında bir EnrollmentService sınıfı oluşturun. Bu servis, kursları ve kayıtları özel koleksiyonlar kullanarak yönetir. Şunları uygulayın:
    • AddCourse(Course course) - platforma bir kurs ekler
    • Enroll(Student student, string courseId) - kayıt başarılı olursa true, kurs mevcut değilse veya öğrenci zaten kayıtlıysa false döndürür
    • GetEnrolledCourses(Student student) - öğrencinin kayıtlı olduğu kurs ID'lerinin bir listesini döndürür
    • GetCourse(string courseId) - kursu döndürür veya bulunamazsa null döndürür
  • Program.cs: Dersleri olan kurslar oluşturarak, öğrencileri kaydederek, ilerlemeyi takip ederek ve girdilere göre sonuçları görüntüleyerek her şeyi bir araya getirin.

Aşağıdaki girdileri alacaksınız:

  • Oluşturulacak kurs sayısı
  • Her kurs için: ID, başlık, eğitmen, ders sayısı ve ardından her ders için: başlık ve süre (dakika)
  • Öğrenci ID'si ve adı
  • Gerçekleştirilecek işlem sayısı
  • Her işlem için: işlem türü (enroll, complete, progress veya info) ve ardından kurs ID'si

Çıktı formatları:

  • enroll: Enrolled in: {CourseTitle} veya Enrollment failed: {courseId} yazdırın
  • complete: Completed lesson in {CourseTitle} yazdırın (ilerlemeyi 1 artırın)
  • progress: {CourseTitle}: {completed}/{total} lessons yazdırın
  • info: {CourseTitle} by {Instructor} - {TotalDuration} minutes yazdırın

Örneğin, girdiler şunlarsa:

2
CS101
Intro to Programming
Dr. Smith
3
Variables
30
Loops
45
Functions
60
CS102
Data Structures
Dr. Jones
2
Arrays
40
Lists
50
1
Alice
6
enroll
CS101
info
CS101
complete
CS101
complete
CS101
progress
CS101
enroll
CS999

Çıktı şu şekilde olmalıdır:

Enrolled in: Intro to Programming
Intro to Programming by Dr. Smith - 135 minutes
Completed lesson in Intro to Programming
Completed lesson in Intro to Programming
Intro to Programming: 2/3 lessons
Enrollment failed: CS999

Servisin öğrenciler ve kurslar arasındaki ilişkiyi nasıl yönettiğine, her sınıfın ise kendi sorumluluklarını nasıl yerine getirdiğine dikkat edin. Öğrenci kendi ilerlemesini takip eder, kurslar toplam sürelerini hesaplar ve kayıt servisi her şeyi koordine eder - sorumlulukların temiz bir şekilde ayrılması (separation of concerns)!

Kendin dene

using System;
using System.Collections.Generic;
using ELearning.Models;
using ELearning.Services;

class Program
{
    public static void Main(string[] args)
    {
        // Kurs sayısını oku
        int numCourses = Convert.ToInt32(Console.ReadLine());
        
        // TODO: Bir EnrollmentService örneği oluşturun
        
        // TODO: Her bir kursu dersleriyle birlikte okuyun ve oluşturun
        // Her kurs için: ID, başlık, eğitmen ve ders sayısını oku
        // Her ders için: başlık ve süre oku
        // Dersleri kursa ekle, ardından kursu servise ekle
        
        // Öğrenci bilgilerini oku
        int studentId = Convert.ToInt32(Console.ReadLine());
        string studentName = Console.ReadLine();
        
        // TODO: Bir Student örneği oluşturun
        
        // İşlem sayısını oku
        int numOperations = Convert.ToInt32(Console.ReadLine());
        
        // TODO: Her bir işlemi işle
        // Her işlem için: eylem ve courseId oku
        // Şunları yönet: enroll, complete, progress, info
        // Eyleme göre uygun mesajı yazdır
    }
}

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