Menu
CoddyTech

Platform E-learning

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan C# di Coddy. Pelajaran 68 dari 70.

challenge icon

Tantangan

Mudah

Mari bangun platform e-learning yang mengelola kursus, siswa, dan pendaftaran! Tantangan ini menyatukan semua yang sudah kamu pelajari tentang OOP: class, pewarisan, antarmuka, enkapsulasi, dan layanan yang bekerja bersama dalam arsitektur yang rapi.

Kamu akan mengatur kodemu dalam lima file:

  • Lesson.cs: Buat class Lesson dalam namespace ELearning.Models. Setiap pelajaran memiliki property hanya-baca Title (string) dan DurationMinutes (int) yang ditetapkan melalui konstruktor.
  • Course.cs: Buat class Course dalam namespace ELearning.Models. Kursus memiliki property hanya-baca Id (string), Title (string), dan Instructor (string), serta sebuah list Lessons. Sertakan method AddLesson(Lesson lesson) dan property hanya-baca TotalDuration yang menghitung jumlah durasi semua pelajaran.
  • Student.cs: Buat class Student dalam namespace ELearning.Models dengan property hanya-baca Id (int) dan Name (string). Siswa melacak progresnya melalui dictionary privat yang memetakan ID kursus ke jumlah pelajaran yang telah diselesaikan. Sertakan method CompleteLesson(string courseId) untuk menambah progres dan GetProgress(string courseId) untuk mengembalikan jumlah pelajaran yang telah diselesaikan (atau 0 jika belum terdaftar).
  • EnrollmentService.cs: Buat class EnrollmentService dalam namespace ELearning.Services. Layanan ini mengelola kursus dan pendaftaran menggunakan koleksi privat. Implementasikan:
    • AddCourse(Course course): menambahkan kursus ke platform
    • Enroll(Student student, string courseId): mengembalikan true jika pendaftaran berhasil, false jika kursus tidak ada atau siswa sudah terdaftar
    • GetEnrolledCourses(Student student): mengembalikan list ID kursus tempat siswa terdaftar
    • GetCourse(string courseId): mengembalikan kursus atau null jika tidak ditemukan
  • Program.cs: Satukan semuanya dengan membuat kursus beserta pelajarannya, mendaftarkan siswa, melacak progres, dan menampilkan hasil berdasarkan input.

Kamu akan menerima input berikut:

  • Jumlah kursus yang akan dibuat
  • Untuk setiap kursus: ID, judul, instruktur, jumlah pelajaran, lalu untuk setiap pelajaran: judul dan durasi (menit)
  • ID dan nama siswa
  • Jumlah operasi yang akan dilakukan
  • Untuk setiap operasi: tindakan (enroll, complete, progress, atau info) yang diikuti ID kursus

Format output:

  • enroll: Cetak Enrolled in: {CourseTitle} atau Enrollment failed: {courseId}
  • complete: Cetak Completed lesson in {CourseTitle} (tambahkan progres sebesar 1)
  • progress: Cetak {CourseTitle}: {completed}/{total} lessons
  • info: Cetak {CourseTitle} by {Instructor} - {TotalDuration} minutes

Misalnya, jika inputnya adalah:

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

Outputnya adalah:

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

Perhatikan bagaimana layanan mengelola hubungan antara siswa dan kursus, sementara setiap class menangani tanggung jawabnya masing-masing. Siswa melacak progresnya sendiri, kursus menghitung durasi totalnya, dan layanan pendaftaran mengoordinasikan semuanya. Inilah pemisahan tanggung jawab yang rapi!

Coba sendiri

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

class Program
{
    public static void Main(string[] args)
    {
        // Baca jumlah kursus
        int numCourses = Convert.ToInt32(Console.ReadLine());
        
        // TODO: Buat instance EnrollmentService
        
        // TODO: Baca dan buat setiap kursus beserta pelajarannya
        // Untuk setiap kursus: baca ID, judul, pengajar, dan jumlah pelajaran
        // Untuk setiap pelajaran: baca judul dan durasinya
        // Tambahkan pelajaran ke kursus, lalu tambahkan kursus ke layanan
        
        // Baca informasi siswa
        int studentId = Convert.ToInt32(Console.ReadLine());
        string studentName = Console.ReadLine();
        
        // TODO: Buat instance Student
        
        // Baca jumlah operasi
        int numOperations = Convert.ToInt32(Console.ReadLine());
        
        // TODO: Proses setiap operasi
        // Untuk setiap operasi: baca tindakan dan courseId
        // Tangani: enroll, complete, progress, info
        // Tampilkan pesan yang sesuai berdasarkan tindakan tersebut
    }
}

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler C# online