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

¡Construyamos una plataforma de aprendizaje electrónico 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 que trabajan 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 propiedades de solo lectura Title (string) y DurationMinutes (int), establecidas mediante el 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 calcule la suma de las duraciones de todas 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 realizan un seguimiento de su progreso mediante un diccionario privado que asigna los identificadores de los cursos al número de lecciones completadas. Incluye los métodos CompleteLesson(string courseId) para incrementar el progreso y GetProgress(string courseId) para devolver el número 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 los cursos y las inscripciones mediante 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, y false si el curso no existe o el estudiante ya está inscrito
    • GetEnrolledCourses(Student student): devuelve una lista de los identificadores de los 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, realizando un seguimiento del progreso y mostrando los resultados según la entrada.

Recibirás las siguientes entradas:

  • Número de cursos que se crearán
  • Para cada curso: ID, título, instructor, número de lecciones y, después, para cada lección: título y duración (minutos)
  • ID y nombre del estudiante
  • Número de operaciones que se realizarán
  • 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 cada clase se encarga de sus propias responsabilidades. El estudiante realiza un seguimiento de su propio progreso, los cursos calculan su duración total y el servicio de inscripciones coordina todo: ¡una separación clara 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

Practica por tu cuenta: Compilador de C# online