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 construir 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 onde os dados dos estudantes são devidamente protegidos, as notas são validadas e certas informações permanecem 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 é acessível publicamente, mas só pode ser definido durante a construção
    • Um campo readonly privado para o ID do estudante (string) - este nunca deve ser acessível diretamente de fora
    • Uma lista privada para armazenar notas (inteiros)
    • Uma propriedade pública somente leitura Average que calcula e retorna a média de todas as notas, ou 0 se não existirem notas
    • Um método público AddGrade(int grade) que aceita apenas notas entre 0 e 100 (inclusive) - notas inválidas devem ser ignoradas silenciosamente
    • Um método público GetGradeCount() que retorna quantas notas válidas foram registradas
    • Um método público GetStudentInfo() que retorna 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 notas válidas são aceitas, 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 adicionar (inteiro)
  • Segunda nota a adicionar (inteiro, pode ser inválida como -5 ou 150)
  • Terceira nota a adicionar (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 deve ser:

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

Observe como a nota inválida de 150 foi silenciosamente rejeitada, então apenas duas notas foram registradas. O ID do estudante está protegido - o código externo nunca pode ver o ID completo, apenas a versão mascarada através de GetStudentInfo(). O nome é legível, 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