Menu
Coddy logo textTech

Plataforma de E-learning

Parte da seção Programação Orientada a Objetos do Journey de C# da Coddy — lição 68 de 70.

challenge icon

Desafio

Fácil

Vamos 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 classe Lesson no namespace ELearning.Models. Cada lição tem um Title (string) e DurationMinutes (int) como propriedades somente leitura definidas através do construtor.
  • Course.cs: Crie uma classe Course no namespace ELearning.Models. Um curso tem propriedades somente leitura Id (string), Title (string) e Instructor (string), além de uma lista Lessons. Inclua um método AddLesson(Lesson lesson) e uma propriedade somente leitura TotalDuration que calcula a soma de todas as durações das lições.
  • Student.cs: Crie uma classe Student no namespace ELearning.Models com propriedades somente leitura Id (int) e Name (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étodos CompleteLesson(string courseId) para incrementar o progresso e GetProgress(string courseId) para retornar a contagem de lições concluídas (ou 0 se não estiver matriculado).
  • EnrollmentService.cs: Crie uma classe EnrollmentService no namespace ELearning.Services. Este serviço gerencia cursos e matrículas usando coleções privadas. Implemente:
    • AddCourse(Course course) - adiciona um curso à plataforma
    • Enroll(Student student, string courseId) - retorna true se a matrícula for bem-sucedida, false se o curso não existir ou se o aluno já estiver matriculado
    • GetEnrolledCourses(Student student) - retorna uma lista de IDs de cursos nos quais o aluno está matriculado
    • GetCourse(string courseId) - retorna o curso ou null se 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, progress ou info) seguida pelo ID do curso

Formatos de saída:

  • enroll: Imprima Enrolled in: {CourseTitle} ou Enrollment failed: {courseId}
  • complete: Imprima Completed lesson in {CourseTitle} (incremente o progresso em 1)
  • progress: Imprima {CourseTitle}: {completed}/{total} lessons
  • info: 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
CS999

A 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: CS999

Observe 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