Menu
Coddy logo textTech

Repaso: sistema de registros de estudiantes

Parte de la sección Programación Orientada a Objetos del Journey de PHP de Coddy. Lección 43 de 91.

challenge icon

Desafío

Fácil

Construyamos un sistema de registros de estudiantes que reúna todos los conceptos de encapsulación que has aprendido en este capítulo. Crearás un sistema bien organizado que gestione los datos de los estudiantes de forma segura, utilizando la promoción de constructores, propiedades privadas, getters y setters con validación, y ocultación de información.

Organizarás tu código en tres archivos:

  • Student.php: Crea una clase Student utilizando la promoción de constructores para un $name (string) privado y un $studentId (string) privado. Incluye también una propiedad privada de tipo array llamada $grades (inicializada como vacía). Tu estudiante debe tener:
    • getName(): devuelve el nombre del estudiante
    • getStudentId(): devuelve el ID del estudiante
    • addGrade(int $grade): añade una calificación solo si está entre 0 y 100 (inclusive)
    • getAverage(): devuelve el promedio de todas las calificaciones como un float (devuelve 0.0 si no existen calificaciones)
    • getGradeCount(): devuelve el número de calificaciones registradas
  • Classroom.php: Crea una clase Classroom que gestione una colección de estudiantes. Utiliza un array privado para almacenar a los estudiantes. Incluye el archivo Student. Tu aula debe tener:
    • Un constructor que acepte un $roomName (string) privado mediante la promoción de constructores
    • addStudent(Student $student): añade un estudiante al aula
    • getStudentCount(): devuelve el número de estudiantes matriculados
    • getClassAverage(): calcula el promedio de los promedios de todos los estudiantes (devuelve 0.0 si no hay estudiantes o no hay calificaciones)
    • getRoomName(): devuelve el nombre del aula
  • main.php: Incluye el archivo Classroom. Recibirás cinco entradas: un nombre de aula, un nombre de estudiante, un ID de estudiante y dos valores de calificación. Crea un Classroom con el nombre del aula. Crea un Student con el nombre y el ID, añade ambas calificaciones (convertidas a enteros) y, después, añade el estudiante al aula. Imprime cuatro líneas:
    • El nombre del aula
    • El nombre del estudiante seguido de su promedio con formato de 1 decimal: "[name]: [average]"
    • El número de calificaciones de ese estudiante
    • El promedio de la clase con formato de 1 decimal

Este sistema demuestra una encapsulación adecuada: las calificaciones están protegidas contra la manipulación directa, los promedios se calculan internamente sin exponer los datos sin procesar y todos los datos fluyen a través de métodos controlados. El aula no necesita saber cómo calculan sus promedios los estudiantes. Simplemente solicita el resultado.

Pruébalo tú mismo

<?php

require_once 'Classroom.php';

// Lee las entradas
$roomName = trim(fgets(STDIN));
$studentName = trim(fgets(STDIN));
$studentId = trim(fgets(STDIN));
$grade1 = intval(trim(fgets(STDIN)));
$grade2 = intval(trim(fgets(STDIN)));

// TODO: Crea un Classroom con el nombre de la sala

// TODO: Crea un Student con el nombre y el ID

// TODO: Añade ambas calificaciones al estudiante

// TODO: Añade el estudiante al classroom

// TODO: Imprime el nombre de la sala

// TODO: Imprime el nombre del estudiante seguido de su promedio formateado a 1 decimal: "[name]: [average]"

// TODO: Imprime el número de calificaciones de ese estudiante

// TODO: Imprime el promedio de la clase formateado a 1 decimal

?>

Todas las lecciones de Programación Orientada a Objetos

Practica por tu cuenta: Compilador de PHP online