Menu
Coddy logo textTech

Recapitulação - Registros de Estudantes

Parte da seção Programação Orientada a Objetos do Journey de C# da Coddy. Lição 35 de 70.

challenge icon

Desafio

Fácil

Vamos criar um sistema de registros de estudantes que reúna todas as técnicas de encapsulamento que você aprendeu neste capítulo. Você criará um sistema seguro no qual os dados dos estudantes sejam devidamente protegidos, as notas sejam validadas e determinadas informações permaneçam imutáveis após a criação.

Você organizará seu código em dois arquivos:

  • Student.cs: crie uma classe Student no namespace Records que demonstre o encapsulamento adequado. Seu estudante deve ter:
    • Um campo readonly Name (string) que seja publicamente acessível, mas só possa ser definido durante a construção
    • Um campo privado readonly para o ID do estudante (string) — ele nunca deve ser diretamente acessível externamente
    • Uma lista privada para armazenar as notas (inteiros)
    • Uma propriedade pública somente leitura Average que calcule e retorne a média de todas as notas, ou 0 se não houver notas
    • Um método público AddGrade(int grade) que aceite apenas notas entre 0 e 100 (inclusive) — notas inválidas devem ser ignoradas silenciosamente
    • Um método público GetGradeCount() que retorne quantas notas válidas foram registradas
    • Um método público GetStudentInfo() que retorne uma string no formato "{Name} (ID: {last 4 characters of student ID})" — observe como você está expondo apenas uma versão mascarada do ID!
    O construtor deve aceitar o nome e o ID do estudante nessa ordem.
  • Program.cs: no seu arquivo principal, crie um estudante e adicione várias notas para demonstrar como o encapsulamento funciona. Você mostrará que as notas válidas são aceitas, as notas inválidas são rejeitadas e a média é calculada corretamente.

Você receberá cinco entradas:

  • Nome do estudante
  • ID do estudante (pelo menos 4 caracteres)
  • Primeira nota a ser adicionada (inteiro)
  • Segunda nota a ser adicionada (inteiro, pode ser inválida, como -5 ou 150)
  • Terceira nota a ser adicionada (inteiro)

Imprima a saída neste formato:

{GetStudentInfo() result}
Grades recorded: {GetGradeCount()}
Average: {Average}

Por exemplo, se as entradas forem Emma Wilson, STU12345, 85, 150 e 90, a saída deverá ser:

Emma Wilson (ID: 2345)
Grades recorded: 2
Average: 87.5

Observe como a nota inválida 150 foi silenciosamente rejeitada, portanto apenas duas notas foram registradas. O ID do estudante é protegido — o código externo nunca pode ver o ID completo, apenas a versão mascarada por meio de GetStudentInfo(). O nome pode ser lido, mas é imutável. Isso é o encapsulamento trabalhando em conjunto para criar uma classe robusta e bem protegida!

Experimente você mesmo

using System;
using Records;

class Program
{
    public static void Main(string[] args)
    {
        // Ler as entradas
        string name = Console.ReadLine();
        string studentId = Console.ReadLine();
        int grade1 = Convert.ToInt32(Console.ReadLine());
        int grade2 = Convert.ToInt32(Console.ReadLine());
        int grade3 = Convert.ToInt32(Console.ReadLine());

        // TODO: Criar um objeto Student com o name e studentId

        // TODO: Adicionar todas as três notas usando o método AddGrade

        // TODO: Imprimir a saída no formato exigido:
        // {resultado de GetStudentInfo()}
        // Grades recorded: {GetGradeCount()}
        // Average: {Average}
    }
}

Todas as lições de Programação Orientada a Objetos

Pratique por conta própria: Compilador de C# online