Menu
Coddy logo textTech

Repaso - Registros de estudiantes

Parte de la sección Programación Orientada a Objetos del Journey de C# de Coddy — lección 35 de 70.

challenge icon

Desafío

Fácil

Vamos a construir un sistema de expedientes estudiantiles que reúna todas las técnicas de encapsulación que has aprendido en este capítulo. Crearás un sistema seguro donde los datos de los estudiantes estén debidamente protegidos, las calificaciones sean validadas y cierta información permanezca inmutable después de su creación.

Organizarás tu código en dos archivos:

  • Student.cs: Crea una clase Student en el espacio de nombres Records que demuestre una encapsulación adecuada. Tu estudiante debe tener:
    • Un campo readonly Name (string) que sea accesible públicamente pero que solo pueda establecerse durante la construcción
    • Un campo readonly privado para el ID del estudiante (string); este nunca debe ser accesible directamente desde el exterior
    • Una lista privada para almacenar calificaciones (enteros)
    • Una propiedad de solo lectura pública Average que calcule y devuelva el promedio de todas las calificaciones, o 0 si no existen calificaciones
    • Un método público AddGrade(int grade) que solo acepte calificaciones entre 0 y 100 (inclusive); las calificaciones inválidas deben ignorarse silenciosamente
    • Un método público GetGradeCount() que devuelva cuántas calificaciones válidas se han registrado
    • Un método público GetStudentInfo() que devuelva una cadena en el formato "{Name} (ID: {last 4 characters of student ID})" - ¡observa cómo estás exponiendo solo una versión enmascarada del ID!
    El constructor debe aceptar el nombre y el ID del estudiante en ese orden.
  • Program.cs: En tu archivo principal, crea un estudiante y añade varias calificaciones para demostrar cómo funciona la encapsulación. Mostrarás que se aceptan las calificaciones válidas, se rechazan las inválidas y el promedio se calcula correctamente.

Recibirás cinco entradas:

  • Nombre del estudiante
  • ID del estudiante (al menos 4 caracteres)
  • Primera calificación a añadir (entero)
  • Segunda calificación a añadir (entero, podría ser inválida como -5 o 150)
  • Tercera calificación a añadir (entero)

Imprime la salida en este formato:

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

Por ejemplo, si las entradas son Emma Wilson, STU12345, 85, 150, y 90, la salida debería ser:

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

Observa cómo la calificación inválida de 150 fue rechazada silenciosamente, por lo que solo se registraron dos calificaciones. El ID del estudiante está protegido: el código externo nunca puede ver el ID completo, solo la versión enmascarada a través de GetStudentInfo(). El nombre es legible pero inmutable. ¡Esto es la encapsulación trabajando en conjunto para crear una clase robusta y bien protegida!

Pruébalo tú mismo

using System;
using Records;

class Program
{
    public static void Main(string[] args)
    {
        // Leer 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: Crear un objeto Student con el name y studentId

        // TODO: Añadir las tres calificaciones usando el método AddGrade

        // TODO: Imprimir la salida en el formato requerido:
        // {resultado de GetStudentInfo()}
        // Calificaciones registradas: {GetGradeCount()}
        // Promedio: {Average}
    }
}

Todas las lecciones de Programación Orientada a Objetos