Menu
Coddy logo textTech

Plataforma de e-learning

Parte de la sección Programación Orientada a Objetos del Journey de C# de Coddy — lección 68 de 70.

challenge icon

Desafío

Fácil

¡Vamos a construir una plataforma de e-learning que gestione cursos, estudiantes e inscripciones! Este desafío reúne todo lo que has aprendido sobre OOP: clases, herencia, interfaces, encapsulación y servicios trabajando juntos en una arquitectura limpia.

Organizarás tu código en cinco archivos:

  • Lesson.cs: Crea una clase Lesson en el espacio de nombres ELearning.Models. Cada lección tiene un Title (string) y DurationMinutes (int) como propiedades de solo lectura establecidas a través del constructor.
  • Course.cs: Crea una clase Course en el espacio de nombres ELearning.Models. Un curso tiene propiedades de solo lectura Id (string), Title (string) e Instructor (string), además de una lista Lessons. Incluye un método AddLesson(Lesson lesson) y una propiedad de solo lectura TotalDuration que calcula la suma de todas las duraciones de las lecciones.
  • Student.cs: Crea una clase Student en el espacio de nombres ELearning.Models con propiedades de solo lectura Id (int) y Name (string). Los estudiantes rastrean su progreso a través de un diccionario privado que mapea los IDs de los cursos con el número de lecciones completadas. Incluye los métodos CompleteLesson(string courseId) para incrementar el progreso y GetProgress(string courseId) para devolver el recuento de lecciones completadas (o 0 si no está inscrito).
  • EnrollmentService.cs: Crea una clase EnrollmentService en el espacio de nombres ELearning.Services. Este servicio gestiona cursos e inscripciones utilizando colecciones privadas. Implementa:
    • AddCourse(Course course) - añade un curso a la plataforma
    • Enroll(Student student, string courseId) - devuelve true si la inscripción tiene éxito, false si el curso no existe o el estudiante ya está inscrito
    • GetEnrolledCourses(Student student) - devuelve una lista de IDs de cursos en los que el estudiante está inscrito
    • GetCourse(string courseId) - devuelve el curso o null si no se encuentra
  • Program.cs: Une todo creando cursos con lecciones, inscribiendo estudiantes, rastreando el progreso y mostrando resultados basados en la entrada.

Recibirás las siguientes entradas:

  • Número de cursos a crear
  • Para cada curso: ID, título, instructor, número de lecciones, luego para cada lección: título y duración (minutos)
  • ID y nombre del estudiante
  • Número de operaciones a realizar
  • Para cada operación: la acción (enroll, complete, progress o info) seguida del ID del curso

Formatos de salida:

  • enroll: Imprime Enrolled in: {CourseTitle} o Enrollment failed: {courseId}
  • complete: Imprime Completed lesson in {CourseTitle} (incrementa el progreso en 1)
  • progress: Imprime {CourseTitle}: {completed}/{total} lessons
  • info: Imprime {CourseTitle} by {Instructor} - {TotalDuration} minutes

Por ejemplo, si las entradas son:

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

La salida debería ser:

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

Observa cómo el servicio gestiona la relación entre estudiantes y cursos, mientras que cada clase maneja sus propias responsabilidades. El estudiante rastrea su propio progreso, los cursos calculan su duración total y el servicio de inscripción coordina todo: ¡una clara separación de responsabilidades!

Pruébalo tú mismo

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

class Program
{
    public static void Main(string[] args)
    {
        // Leer el número de cursos
        int numCourses = Convert.ToInt32(Console.ReadLine());
        
        // TODO: Crear una instancia de EnrollmentService
        
        // TODO: Leer y crear cada curso con sus lecciones
        // Para cada curso: leer ID, título, instructor, número de lecciones
        // Para cada lección: leer título y duración
        // Agregar lecciones al curso, luego agregar el curso al servicio
        
        // Leer la información del estudiante
        int studentId = Convert.ToInt32(Console.ReadLine());
        string studentName = Console.ReadLine();
        
        // TODO: Crear una instancia de Student
        
        // Leer el número de operaciones
        int numOperations = Convert.ToInt32(Console.ReadLine());
        
        // TODO: Procesar cada operación
        // Para cada operación: leer acción y courseId
        // Manejar: enroll, complete, progress, info
        // Mostrar el mensaje apropiado basado en la acción
    }
}

Todas las lecciones de Programación Orientada a Objetos