Menu
Coddy logo textTech

Piattaforma di e-learning

Fa parte della sezione Programmazione orientata agli oggetti del percorso C# di Coddy. Lezione 68 di 70.

challenge icon

Sfida

Facile

Costruiamo una piattaforma di e-learning che gestisce corsi, studenti e iscrizioni! Questa sfida riunisce tutto ciò che hai imparato sulla programmazione orientata agli oggetti (OOP): classi, ereditarietà, interfacce, incapsulamento e servizi che collaborano in un’architettura pulita.

Organizzerai il codice in cinque file:

  • Lesson.cs: crea una classe Lesson nello spazio dei nomi ELearning.Models. Ogni lezione ha le proprietà di sola lettura Title (string) e DurationMinutes (int), impostate tramite il costruttore.
  • Course.cs: crea una classe Course nello spazio dei nomi ELearning.Models. Un corso ha le proprietà di sola lettura Id (string), Title (string) e Instructor (string), oltre a una lista Lessons. Includi un metodo AddLesson(Lesson lesson) e una proprietà di sola lettura TotalDuration che calcola la somma della durata di tutte le lezioni.
  • Student.cs: crea una classe Student nello spazio dei nomi ELearning.Models, con le proprietà di sola lettura Id (int) e Name (string). Gli studenti tengono traccia dei propri progressi tramite un dizionario privato che associa gli ID dei corsi al numero di lezioni completate. Includi i metodi CompleteLesson(string courseId) per incrementare i progressi e GetProgress(string courseId) per restituire il conteggio delle lezioni completate (o 0 se non è iscritto).
  • EnrollmentService.cs: crea una classe EnrollmentService nello spazio dei nomi ELearning.Services. Questo servizio gestisce i corsi e le iscrizioni utilizzando raccolte private. Implementa:
    • AddCourse(Course course) - aggiunge un corso alla piattaforma
    • Enroll(Student student, string courseId) - restituisce true se l'iscrizione riesce, false se il corso non esiste o lo studente è già iscritto
    • GetEnrolledCourses(Student student) - restituisce una lista degli ID dei corsi a cui lo studente è iscritto
    • GetCourse(string courseId) - restituisce il corso oppure null se non viene trovato
  • Program.cs: metti tutto insieme creando corsi con lezioni, iscrivendo studenti, tenendo traccia dei progressi e visualizzando i risultati in base all'input.

Riceverai i seguenti input:

  • Numero di corsi da creare
  • Per ogni corso: ID, titolo, docente, numero di lezioni, poi per ogni lezione: titolo e durata (in minuti)
  • ID e nome dello studente
  • Numero di operazioni da eseguire
  • Per ogni operazione: l'azione (enroll, complete, progress o info) seguita dall'ID del corso

Formati di output:

  • enroll: stampa Enrolled in: {CourseTitle} oppure Enrollment failed: {courseId}
  • complete: stampa Completed lesson in {CourseTitle} (incrementa i progressi di 1)
  • progress: stampa {CourseTitle}: {completed}/{total} lessons
  • info: stampa {CourseTitle} by {Instructor} - {TotalDuration} minutes

Per esempio, se gli input sono:

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

L'output dovrebbe essere:

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

Nota come il servizio gestisce la relazione tra studenti e corsi, mentre ogni classe si occupa delle proprie responsabilità. Lo studente tiene traccia dei propri progressi, i corsi calcolano la propria durata totale e il servizio di iscrizione coordina ogni cosa: una chiara separazione delle responsabilità!

Provalo tu

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

class Program
{
    public static void Main(string[] args)
    {
        // Leggi il numero di corsi
        int numCourses = Convert.ToInt32(Console.ReadLine());
        
        // TODO: Crea un'istanza di EnrollmentService
        
        // TODO: Leggi e crea ogni corso con le relative lezioni
        // Per ogni corso: leggi ID, titolo, docente e numero di lezioni
        // Per ogni lezione: leggi titolo e durata
        // Aggiungi le lezioni al corso, poi aggiungi il corso al servizio
        
        // Leggi le informazioni dello studente
        int studentId = Convert.ToInt32(Console.ReadLine());
        string studentName = Console.ReadLine();
        
        // TODO: Crea un'istanza di Student
        
        // Leggi il numero di operazioni
        int numOperations = Convert.ToInt32(Console.ReadLine());
        
        // TODO: Elabora ogni operazione
        // Per ogni operazione: leggi l'azione e courseId
        // Gestisci: enroll, complete, progress, info
        // Visualizza il messaggio appropriato in base all'azione
    }
}

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore C# online