Plataforma de E-learning
Parte da seção Programação Orientada a Objetos do Journey de C# da Coddy — lição 68 de 70.
Desafio
FácilVamos construir uma plataforma de e-learning que gerencia cursos, alunos e matrículas! Este desafio reúne tudo o que você aprendeu sobre POO - classes, herança, interfaces, encapsulamento e serviços trabalhando juntos em uma arquitetura limpa.
Você organizará seu código em cinco arquivos:
Lesson.cs: Crie uma classeLessonno namespaceELearning.Models. Cada lição tem umTitle(string) eDurationMinutes(int) como propriedades somente leitura definidas através do construtor.Course.cs: Crie uma classeCourseno namespaceELearning.Models. Um curso tem propriedades somente leituraId(string),Title(string) eInstructor(string), além de uma listaLessons. Inclua um métodoAddLesson(Lesson lesson)e uma propriedade somente leituraTotalDurationque calcula a soma de todas as durações das lições.Student.cs: Crie uma classeStudentno namespaceELearning.Modelscom propriedades somente leituraId(int) eName(string). Os alunos acompanham seu progresso através de um dicionário privado que mapeia IDs de cursos para o número de lições concluídas. Inclua os métodosCompleteLesson(string courseId)para incrementar o progresso eGetProgress(string courseId)para retornar a contagem de lições concluídas (ou 0 se não estiver matriculado).EnrollmentService.cs: Crie uma classeEnrollmentServiceno namespaceELearning.Services. Este serviço gerencia cursos e matrículas usando coleções privadas. Implemente:AddCourse(Course course)- adiciona um curso à plataformaEnroll(Student student, string courseId)- retornatruese a matrícula for bem-sucedida,falsese o curso não existir ou se o aluno já estiver matriculadoGetEnrolledCourses(Student student)- retorna uma lista de IDs de cursos nos quais o aluno está matriculadoGetCourse(string courseId)- retorna o curso ounullse não for encontrado
Program.cs: Reúna tudo criando cursos com lições, matriculando alunos, acompanhando o progresso e exibindo resultados com base na entrada.
Você receberá as seguintes entradas:
- Número de cursos a serem criados
- Para cada curso: ID, título, instrutor, número de lições e, em seguida, para cada lição: título e duração (minutos)
- ID e nome do aluno
- Número de operações a serem realizadas
- Para cada operação: a ação (
enroll,complete,progressouinfo) seguida pelo ID do curso
Formatos de saída:
enroll: ImprimaEnrolled in: {CourseTitle}ouEnrollment failed: {courseId}complete: ImprimaCompleted lesson in {CourseTitle}(incremente o progresso em 1)progress: Imprima{CourseTitle}: {completed}/{total} lessonsinfo: Imprima{CourseTitle} by {Instructor} - {TotalDuration} minutes
Por exemplo, se as entradas forem:
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
CS999A saída deve 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: CS999Observe como o serviço gerencia o relacionamento entre alunos e cursos, enquanto cada classe lida com suas próprias responsabilidades. O aluno acompanha seu próprio progresso, os cursos calculam sua duração total e o serviço de matrícula coordena tudo - uma separação limpa de preocupações!
Experimente você mesmo
using System;
using System.Collections.Generic;
using ELearning.Models;
using ELearning.Services;
class Program
{
public static void Main(string[] args)
{
// Lê o número de cursos
int numCourses = Convert.ToInt32(Console.ReadLine());
// TODO: Criar uma instância de EnrollmentService
// TODO: Ler e criar cada curso com suas lições
// Para cada curso: ler ID, título, instrutor, número de lições
// Para cada lição: ler título e duração
// Adicionar lições ao curso, depois adicionar o curso ao serviço
// Ler informações do aluno
int studentId = Convert.ToInt32(Console.ReadLine());
string studentName = Console.ReadLine();
// TODO: Criar uma instância de Student
// Ler o número de operações
int numOperations = Convert.ToInt32(Console.ReadLine());
// TODO: Processar cada operação
// Para cada operação: ler a ação e o courseId
// Tratar: enroll, complete, progress, info
// Exibir a mensagem apropriada com base na ação
}
}
Todas as lições de Programação Orientada a Objetos
1Fundamentos de POO
Arquivos ExternosNamespaces e DiretivasIntrodução a Classes e ObjetosA Palavra-chave 'this'Métodos e ParâmetrosCampos vs PropriedadesConstrutoresInicializadores de ObjetosRecapitulação - Calculadora Simples4Herança
Sintaxe Básica de Herança (:)A Palavra-chave 'base'Palavras-chave Virtual e OverrideClasses SeladasA Classe Base 'object'Recapitulação - Hierarquia de Funcionários7Recursos Avançados
Sobrecarga de OperadoresIndexadores (this[])Sobrescrita de ToString()Métodos de ExtensãoRecapitulação - Lista Personalizada10Padrões de Projeto Parte 1
Introdução aos Padrões de ProjetoSingleton Thread-SafePadrão FactoryPadrão Observer (Eventos)Padrão Strategy13Desafios Finais
Plataforma de E-learningComponente de Personagem de JogoServiço de Aluguel de Veículos2Propriedades e Membros Estáticos
Propriedades AutoimplementadasPropriedades de Apenas Leitura/EscritaCampos e Métodos EstáticosClasses EstáticasMembros com Corpo de Expressão5Polimorfismo e Interfaces
Polimorfismo: Compilação vs ExecuçãoInterface vs Classe AbstrataMúltiplas InterfacesInterfaces ExplícitasUpcasting e DowncastingRecapitulação - Calculadora de Formas8Conceitos Avançados de POO
Composição sobre HerançaGenerics (Classes e Métodos)Delegates e EventosAtributos e ReflectionIDisposable e a Instrução usingFundamentos de Injeção de Dependência11Padrões de Projeto Parte 2
Padrão CommandPadrão AdapterPadrão DecoratorPadrão Template MethodPadrão StatePadrão Composite3Arquitetura de Classes
Dados de Instância vs EstáticosPalavras-chave 'readonly' e 'const'Campos de SuporteRecapitulação - Gerenciador de Conta Bancária6Encapsulamento
Modificadores de AcessoPropriedades para EncapsulamentoImplementação de Ocultação de DadosPadrões de ImutabilidadeRecapitulação - Registros de Estudantes9Argumentos Variáveis
A Palavra-chave 'params'Parâmetros OpcionaisArgumentos NomeadosSobrecarga de Métodos