Menu
Coddy logo textTech

Повторение — система учёта студентов

Часть раздела Объектно-ориентированное программирование путешествия по PHP на Coddy. Урок 43 из 91.

challenge icon

Задание

Легко

Давайте создадим систему учёта студентов, которая объединит все изученные вами в этой главе концепции инкапсуляции. Вы создадите хорошо организованную систему, безопасно управляющую данными студентов, используя продвижение конструктора, private-свойства, геттеры и сеттеры с проверкой и сокрытие информации.

Вы организуете код в трёх файлах:

  • Student.php: создайте класс Student, используя продвижение конструктора для private $name (строка) и private $studentId (строка). Также добавьте private-свойство $grades типа array (initialized как empty). У вашего студента должны быть:
    • getName(): возвращает имя студента
    • getStudentId(): возвращает идентификатор студента
    • addGrade(int $grade): добавляет оценку, только если она находится between 0 и 100 (inclusive)
    • getAverage(): возвращает среднее значение всех оценок как float (возвращает 0.0, если оценок нет)
    • getGradeCount(): возвращает количество записанных оценок
  • Classroom.php: создайте класс Classroom, управляющий коллекцией студентов. Используйте private array для хранения студентов. Подключите файл Student. В вашем классе должны быть:
    • Конструктор, принимающий private $roomName (строка) с использованием продвижения конструктора
    • addStudent(Student $student): добавляет студента в класс
    • getStudentCount(): возвращает количество зачисленных студентов
    • getClassAverage(): calculates среднее значение средних оценок всех студентов (возвращает 0.0, если студентов или оценок нет)
    • getRoomName(): возвращает название класса
  • main.php: подключите файл Classroom. Вы получите пять входных значений: название класса, имя студента, идентификатор студента и две оценки. Создайте Classroom с названием класса. Создайте Student с именем и идентификатором, добавьте обе оценки (преобразованные в целые числа), а затем добавьте студента в класс. Выведите четыре строки:
    • Название класса
    • Имя студента, за которым следует его средняя оценка, formatted с точностью до 1 десятичного знака: "[name]: [average]"
    • Количество оценок этого студента
    • Средняя оценка класса, formatted с точностью до 1 десятичного знака

Эта система демонстрирует правильную инкапсуляцию: оценки защищены от прямого изменения, средние значения рассчитываются внутри системы без раскрытия исходных данных, а все данные проходят через контролируемые методы. Классу не нужно знать, как студенты рассчитывают свои средние значения. Он просто запрашивает результат.

Попробуйте сами

<?php

require_once 'Classroom.php';

// Читать входные данные
$roomName = trim(fgets(STDIN));
$studentName = trim(fgets(STDIN));
$studentId = trim(fgets(STDIN));
$grade1 = intval(trim(fgets(STDIN)));
$grade2 = intval(trim(fgets(STDIN)));

// TODO: Создать Classroom с именем комнаты

// TODO: Создать Student с именем и ID

// TODO: Добавить обе оценки студенту

// TODO: Добавить студента в classroom

// TODO: Вывести имя комнаты

// TODO: Вывести имя студента, за которым следует его средний балл, отформатированный до 1 десятичного знака: "[name]: [average]"

// TODO: Вывести количество оценок для этого студента

// TODO: Вывести средний балл класса, отформатированный до 1 десятичного знака

?>

Все уроки раздела Объектно-ориентированное программирование

Потренируйтесь самостоятельно: Онлайн-компилятор PHP