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

Construyamos un sistema de registros de estudiantes que reúna todas las técnicas de encapsulación que has aprendido en este capítulo. Crearás un sistema seguro en el que los datos de los estudiantes estén debidamente protegidos, las calificaciones se validen 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 privado readonly para el ID del estudiante (string); este nunca debe ser accesible directamente desde fuera
    • Una lista privada para almacenar las calificaciones (enteros)
    • Una propiedad pública de solo lectura 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 no vá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 con el formato "{Name} (ID: {last 4 characters of student ID})"; ¡observa cómo solo expones 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 las calificaciones válidas se aceptan, las no válidas se rechazan y el promedio se calcula correctamente.

Recibirás cinco entradas:

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

Imprime la salida con 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 no válida de 150 se rechazó 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 mediante GetStudentInfo(). El nombre se puede leer, pero es inmutable. ¡Así funciona la encapsulación en conjunto para crear una clase sólida 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()}
        // Grades recorded: {GetGradeCount()}
        // Promedio: {Average}
    }
}

Todas las lecciones de Programación Orientada a Objetos

Practica por tu cuenta: Compilador de C# online