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.
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 claseLessonen el espacio de nombresELearning.Models. Cada lección tiene propiedades de solo lecturaTitle(string) yDurationMinutes(int), establecidas mediante el constructor.Course.cs: Crea una claseCourseen el espacio de nombresELearning.Models. Un curso tiene propiedades de solo lecturaId(string),Title(string) eInstructor(string), además de una listaLessons. Incluye un métodoAddLesson(Lesson lesson)y una propiedad de solo lecturaTotalDurationque calcule la suma de las duraciones de todas las lecciones.Student.cs: Crea una claseStudenten el espacio de nombresELearning.Modelscon propiedades de solo lecturaId(int) yName(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étodosCompleteLesson(string courseId)para incrementar el progreso yGetProgress(string courseId)para devolver el número de lecciones completadas (o 0 si no está inscrito).EnrollmentService.cs: Crea una claseEnrollmentServiceen el espacio de nombresELearning.Services. Este servicio gestiona los cursos y las inscripciones mediante colecciones privadas. Implementa:AddCourse(Course course): añade un curso a la plataformaEnroll(Student student, string courseId): devuelvetruesi la inscripción tiene éxito, yfalsesi el curso no existe o el estudiante ya está inscritoGetEnrolledCourses(Student student): devuelve una lista de los identificadores de los cursos en los que el estudiante está inscritoGetCourse(string courseId): devuelve el curso onullsi 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,progressoinfo) seguida del ID del curso
Formatos de salida:
enroll: ImprimeEnrolled in: {CourseTitle}oEnrollment failed: {courseId}complete: ImprimeCompleted lesson in {CourseTitle}(incrementa el progreso en 1)progress: Imprime{CourseTitle}: {completed}/{total} lessonsinfo: 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
CS999La 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: CS999Observa 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
1Fundamentos de OOP
Archivos externosNamespaces y directivasIntro a clases y objetosLa palabra clave 'this'Métodos y parámetrosCampos vs PropiedadesConstructoresInicializadores de objetosResumen - Calculadora simple4Herencia
Sintaxis básica de herencia (:)La palabra clave 'base'Palabras clave Virtual y OverrideClases selladas (Sealed)La clase base 'object'Resumen: Jerarquía de empleados7Características avanzadas
Sobrecarga de operadoresIndexadores (this[])Sobrescritura de ToString()Métodos de extensiónResumen - Lista personalizada10Patrones de diseño - Parte 1
Introducción a los patrones de diseñoSingleton Thread-SafePatrón FactoryPatrón Observer (Eventos)Patrón Strategy13Desafíos finales
Plataforma de e-learningComponente de personaje de juegoServicio de alquiler de vehículos2Propiedades y miembros estáticos
Propiedades autoimplementadasPropiedades de solo lectura y escrituraCampos y métodos estáticosClases estáticasMiembros con cuerpo de expresión5Polimorfismo e Interfaces
Polimorfismo: Compilación vs. EjecuciónInterfaz vs. Clase AbstractaInterfaces MúltiplesInterfaces ExplícitasUpcasting y DowncastingRepaso: Calculadora de Figuras8Conceptos avanzados de POO
Composición sobre herenciaGenéricos (clases y métodos)Delegados y eventosAtributos y ReflexiónIDisposable y la sentencia usingFundamentos de Inyección de dependencias11Patrones de diseño, parte 2
Patrón CommandPatrón AdapterPatrón DecoratorPatrón Template MethodPatrón StatePatrón Composite3Arquitectura de clases
Datos de instancia vs. estáticosPalabras clave 'readonly' y 'const'Campos de respaldoResumen - Gestor de cuentas bancarias6Encapsulamiento
Modificadores de accesoPropiedades para el encapsulamientoImplementación de ocultamiento de datosPatrones de inmutabilidadRepaso - Registros de estudiantesPractica por tu cuenta: Compilador de C# online