Menu
Coddy logo textTech

Podsumowanie — system ewidencji studentów

Część sekcji Programowanie obiektowe ścieżki PHP w Coddy. Lekcja 43 z 91.

challenge icon

Wyzwanie

Łatwy

Stwórzmy system ewidencji uczniów, który łączy wszystkie poznane przez Ciebie w tym rozdziale koncepcje enkapsulacji. Stworzysz dobrze zorganizowany system, który bezpiecznie zarządza danymi uczniów, wykorzystując promocję konstruktora, prywatne właściwości, metody pobierające i ustawiające z walidacją oraz ukrywanie informacji.

Podzielisz swój kod na trzy pliki:

  • Student.php: Utwórz klasę Student, używając promocji konstruktora dla prywatnych pól $name (string) i $studentId (string). Dodaj także prywatną właściwość tablicową $grades (zainicjalizowaną jako pusta). Klasa ucznia powinna mieć:
    • getName(): zwraca imię i nazwisko ucznia
    • getStudentId(): zwraca identyfikator ucznia
    • addGrade(int $grade): dodaje ocenę tylko wtedy, gdy mieści się ona w przedziale od 0 do 100 (włącznie)
    • getAverage(): zwraca średnią wszystkich ocen jako liczbę typu float (zwraca 0.0, jeśli nie ma żadnych ocen)
    • getGradeCount(): zwraca liczbę zapisanych ocen
  • Classroom.php: Utwórz klasę Classroom, która zarządza kolekcją uczniów. Użyj prywatnej tablicy do przechowywania uczniów. Dołącz plik Student. Twoja klasa powinna mieć:
    • Konstruktor przyjmujący prywatne $roomName (string) z użyciem promocji konstruktora
    • addStudent(Student $student): dodaje ucznia do klasy
    • getStudentCount(): zwraca liczbę zapisanych uczniów
    • getClassAverage(): oblicza średnią ze średnich wszystkich uczniów (zwraca 0.0, jeśli nie ma uczniów lub ocen)
    • getRoomName(): zwraca nazwę klasy
  • main.php: Dołącz plik Classroom. Otrzymasz pięć danych wejściowych: nazwę klasy, imię i nazwisko ucznia, identyfikator ucznia oraz dwie oceny. Utwórz obiekt Classroom z nazwą klasy. Utwórz obiekt Student z imieniem i nazwiskiem oraz identyfikatorem, dodaj obie oceny (przekonwertowane na liczby całkowite), a następnie dodaj ucznia do klasy. Wypisz cztery wiersze:
    • Nazwę klasy
    • Imię i nazwisko ucznia, a następnie jego średnią sformatowaną do 1 miejsca po przecinku: "[name]: [average]"
    • Liczbę ocen tego ucznia
    • Średnią klasy sformatowaną do 1 miejsca po przecinku

Ten system pokazuje prawidłowe zastosowanie enkapsulacji: oceny są chronione przed bezpośrednią modyfikacją, średnie są obliczane wewnętrznie bez ujawniania surowych danych, a wszystkie dane przepływają przez kontrolowane metody. Klasa nie musi wiedzieć, jak uczniowie obliczają swoje średnie. Po prostu prosi o wynik.

Spróbuj swoich sił

<?php

require_once 'Classroom.php';

// Wczytaj dane wejściowe
$roomName = trim(fgets(STDIN));
$studentName = trim(fgets(STDIN));
$studentId = trim(fgets(STDIN));
$grade1 = intval(trim(fgets(STDIN)));
$grade2 = intval(trim(fgets(STDIN)));

// TODO: Utwórz obiekt Classroom z nazwą klasy

// TODO: Utwórz obiekt Student z imieniem i ID

// TODO: Dodaj obie oceny uczniowi

// TODO: Dodaj ucznia do klasy

// TODO: Wypisz nazwę klasy

// TODO: Wypisz imię ucznia, a po nim jego średnią sformatowaną do 1 miejsca po przecinku: "[name]: [average]"

// TODO: Wypisz liczbę ocen tego ucznia

// TODO: Wypisz średnią klasy sformatowaną do 1 miejsca po przecinku

?>

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator PHP online