Menu
CoddyTech

Platform E-Learning

Termasuk bagian Pemrograman Berorientasi Object dalam perjalanan C++ di Coddy. Pelajaran 103 dari 104.

challenge icon

Tantangan

Mudah

Mari bangun Platform E-Learning yang menyatukan semua konsep OOP yang telah kamu kuasai sepanjang kursus ini. Kamu akan membuat sistem yang mengelola kursus, berbagai jenis pelajaran, dan melacak kemajuan siswa, sekaligus menunjukkan hierarki pewarisan, polimorfisme, smart pointer, dan pola desain yang bekerja secara harmonis.

Kamu akan mengatur kodemu dalam enam file:

  • User.h: Buat hierarki user dengan class dasar User dan dua class turunan: Student dan Instructor.

    Class dasar User harus memiliki nama dan ID, dengan method virtual getRole() yang mengembalikan tipe user sebagai string, dan method getInfo() yang mengembalikan "[name] ([id]) - [role]".

    Class Student melacak ID kursus yang diikuti (gunakan vector berisi string) dan jumlah pelajaran yang diselesaikan. Tambahkan method enrollInCourse(const std::string& courseId), completedLesson() untuk menambah jumlahnya, dan getCompletedCount().

    Class Instructor menyimpan string spesialisasi dan melacak ID kursus yang diajarkannya. Tambahkan addCourse(const std::string& courseId) dan getSpecialty().

  • Lesson.h: Bangun hierarki pelajaran menggunakan class dasar abstrak.

    Class dasar Lesson harus memiliki judul dan durasi (dalam menit), dengan method virtual murni complete() yang mengembalikan pesan penyelesaian, dan method getType() yang mengembalikan tipe pelajaran.

    Buat tiga class turunan:

    • VideoLesson: Memiliki URL video. complete()-nya mengembalikan "Watched video: [title]"
    • QuizLesson: Memiliki jumlah pertanyaan. complete()-nya mengembalikan "Completed quiz: [title] ([questions] questions)"
    • TextLesson: Memiliki jumlah kata. complete()-nya mengembalikan "Read article: [title]"

    Masing-masing harus meng-override getType() untuk mengembalikan "Video", "Quiz", atau "Text" secara berurutan.

  • Course.h: Buat class Course yang memiliki pelajarannya menggunakan smart pointer.

    Sebuah kursus memiliki judul, ID, dan ID pengajar. Simpan pelajaran sebagai std::vector<std::unique_ptr<Lesson>> karena kursus memiliki pelajarannya secara eksklusif.

    Tambahkan method:

    • addLesson(std::unique_ptr<Lesson> lesson): memindahkan kepemilikan pelajaran ke kursus
    • getLessonCount(): mengembalikan jumlah pelajaran
    • getLesson(size_t index): mengembalikan pointer ke pelajaran pada indeks tersebut (atau nullptr jika tidak valid)
    • displayCurriculum(): menampilkan tipe dan judul setiap pelajaran dalam format "[index]. [Type]: [title]"
  • LessonFactory.h: Terapkan pola Factory untuk membuat berbagai tipe pelajaran.

    Buat class LessonFactory dengan method statis createLesson(const std::string& type, const std::string& title, int duration, const std::string& extra) yang mengembalikan std::unique_ptr<Lesson>.

    Parameter type menentukan pelajaran yang akan dibuat ("video", "quiz", atau "text"). Parameter extra berisi data khusus untuk tiap tipe: URL untuk video, jumlah pertanyaan untuk kuis (urai sebagai int), atau jumlah kata untuk teks (urai sebagai int).

  • Platform.h: Bangun class pusat Platform yang mengoordinasikan semuanya.

    Simpan kursus sebagai std::vector<std::shared_ptr<Course>> dan user sebagai std::vector<std::shared_ptr<User>>.

    Terapkan:

    • addCourse(std::shared_ptr<Course> course)
    • addUser(std::shared_ptr<User> user)
    • findCourse(const std::string& id): mengembalikan shared_ptr atau nullptr
    • findUser(const std::string& id): mengembalikan shared_ptr atau nullptr
    • enrollStudent(const std::string& studentId, const std::string& courseId): mencari keduanya, mendaftarkan siswa, lalu menampilkan "Enrolled [name] in [course title]" atau "Enrollment failed"
    • completeLesson(const std::string& studentId, const std::string& courseId, size_t lessonIndex): mencari siswa dan kursus, memanggil method complete() pada pelajaran, menambah jumlah pelajaran yang diselesaikan siswa, lalu menampilkan pesan penyelesaian atau "Could not complete lesson"
  • main.cpp: Satukan semuanya untuk menunjukkan platformmu.

    Baca empat input:

    1. Nama platform
    2. Detail kursus (format: title,courseId,instructorId)
    3. Detail siswa (format: name,studentId)
    4. Pelajaran yang akan ditambahkan (format: type,title,duration,extra)

    Buat platform dan tampilkan "Welcome to [platform name]!". Buat kursus dan siswa, lalu tambahkan keduanya ke platform. Gunakan LessonFactory untuk membuat pelajaran dan menambahkannya ke kursus. Tampilkan kurikulum kursus. Daftarkan siswa ke kursus. Selesaikan pelajaran pertama (indeks 0) untuk siswa tersebut. Terakhir, tampilkan info siswa dan jumlah pelajaran yang diselesaikannya sebagai "Completed lessons: [count]".

Contohnya, dengan input CodeAcademy, C++ Mastery,CPP101,I001, Alice,S001, dan video,Introduction to OOP,30,https://example.com/oop:

Welcome to CodeAcademy!
1. Video: Introduction to OOP
Enrolled Alice in C++ Mastery
Watched video: Introduction to OOP
Alice (S001) - Student
Completed lessons: 1

Dengan input LearnHub, Python Basics,PY100,I002, Bob,S002, dan quiz,Variables Quiz,15,10:

Welcome to LearnHub!
1. Quiz: Variables Quiz
Enrolled Bob in Python Basics
Completed quiz: Variables Quiz (10 questions)
Bob (S002) - Student
Completed lessons: 1

Tantangan ini menunjukkan bagaimana platform e-learning nyata disusun, dengan pemisahan yang jelas antara user, konten, dan platform yang mengoordinasikan keduanya. Pola Factory membuat pembuatan pelajaran fleksibel, smart pointer memastikan pengelolaan memori yang aman, dan polimorfisme memungkinkan kamu memperlakukan semua tipe pelajaran secara seragam, sementara tiap tipe berperilaku secara unik.

Coba sendiri

#include <iostream>
#include <string>
#include <sstream>
#include <memory>
#include "User.h"
#include "Lesson.h"
#include "Course.h"
#include "LessonFactory.h"
#include "Platform.h"

int main() {
    // Baca input
    std::string platformName;
    std::getline(std::cin, platformName);
    
    std::string courseDetails; // format: title,courseId,instructorId
    std::getline(std::cin, courseDetails);
    
    std::string studentDetails; // format: name,studentId
    std::getline(std::cin, studentDetails);
    
    std::string lessonDetails; // format: type,title,duration,extra
    std::getline(std::cin, lessonDetails);
    
    // TODO: Uraikan courseDetails untuk mengambil title, courseId, instructorId
    
    // TODO: Uraikan studentDetails untuk mengambil name, studentId
    
    // TODO: Uraikan lessonDetails untuk mengambil type, title, duration, extra
    
    // TODO: Buat platform dan tampilkan "Welcome to [platform name]!"
    
    // TODO: Buat kursus dan siswa, lalu tambahkan keduanya ke platform
    
    // TODO: Gunakan LessonFactory untuk membuat pelajaran dan menambahkannya ke kursus
    
    // TODO: Tampilkan kurikulum kursus
    
    // TODO: Daftarkan siswa ke kursus
    
    // TODO: Selesaikan pelajaran pertama (indeks 0) untuk siswa
    
    // TODO: Tampilkan informasi siswa dan jumlah pelajaran yang telah diselesaikan
    // Format: "Completed lessons: [count]"
    
    return 0;
}

Semua pelajaran di Pemrograman Berorientasi Object

Latihan sendiri: Compiler C++ online