Zusammenfassung – Studentenverwaltungssystem
Teil des Abschnitts Objektorientierte Programmierung der PHP-Journey von Coddy — Lektion 43 von 91.
Aufgabe
EinfachLassen Sie uns ein Student-Records-System erstellen, das alle Kapselungskonzepte zusammenführt, die Sie in diesem Kapitel gelernt haben. Sie werden ein gut organisiertes System erstellen, das Studentendaten sicher verwaltet, indem es Constructor Promotion, private Eigenschaften, Getter und Setter mit Validierung sowie Information Hiding verwendet.
Sie werden Ihren Code über drei Dateien organisieren:
Student.php— Erstellen Sie eineStudent-Klasse unter Verwendung von Constructor Promotion für ein privates$name(string) und ein privates$studentId(string). Fügen Sie außerdem eine private$gradesArray-Eigenschaft hinzu (als leer initialisiert). Ihr Student sollte Folgendes haben:getName()— gibt den Namen des Studenten zurückgetStudentId()— gibt die Studenten-ID zurückaddGrade(int $grade)— fügt eine Note nur hinzu, wenn sie zwischen 0 und 100 (einschließlich) liegtgetAverage()— gibt den Durchschnitt aller Noten als Float zurück (geben Sie 0.0 zurück, wenn keine Noten vorhanden sind)getGradeCount()— gibt die Anzahl der erfassten Noten zurück
Classroom.php— Erstellen Sie eineClassroom-Klasse, die eine Sammlung von Studenten verwaltet. Verwenden Sie ein privates Array, um Studenten zu speichern. Binden Sie die Student-Datei ein. Ihr Klassenzimmer sollte Folgendes haben:- Ein Konstruktor, der ein privates
$roomName(string) mittels Constructor Promotion akzeptiert addStudent(Student $student)— fügt einen Studenten zum Klassenzimmer hinzugetStudentCount()— gibt die Anzahl der eingeschriebenen Studenten zurückgetClassAverage()— berechnet den Durchschnitt der Durchschnitte aller Studenten (geben Sie 0.0 zurück, wenn keine Studenten oder keine Noten vorhanden sind)getRoomName()— gibt den Namen des Klassenzimmers zurück
- Ein Konstruktor, der ein privates
main.php— Binden Sie die Classroom-Datei ein. Sie erhalten fünf Eingaben: einen Raumnamen, einen Studentennamen, eine Studenten-ID und zwei Notenwerte. Erstellen Sie einClassroommit dem Raumnamen. Erstellen Sie einStudentmit dem Namen und der ID, fügen Sie beide Noten hinzu (in Integer umgewandelt) und fügen Sie dann den Studenten zum Klassenzimmer hinzu. Geben Sie vier Zeilen aus:- Der Raumname
- Der Name des Studenten, gefolgt von seinem Durchschnitt, formatiert auf 1 Dezimalstelle:
"[name]: [average]" - Die Anzahl der Noten für diesen Studenten
- Der Klassendurchschnitt, formatiert auf 1 Dezimalstelle
Dieses System demonstriert eine ordnungsgemäße Kapselung: Noten sind vor direkter Manipulation geschützt, Durchschnitte werden intern berechnet, ohne die Rohdaten offenzulegen, und alle Daten fließen durch kontrollierte Methoden. Das Klassenzimmer muss nicht wissen, wie Studenten ihre Durchschnitte berechnen – es fragt einfach nach dem Ergebnis.
Probier es selbst
<?php
require_once 'Classroom.php';
// Eingaben lesen
$roomName = trim(fgets(STDIN));
$studentName = trim(fgets(STDIN));
$studentId = trim(fgets(STDIN));
$grade1 = intval(trim(fgets(STDIN)));
$grade2 = intval(trim(fgets(STDIN)));
// TODO: Erstelle ein Classroom-Objekt mit dem Raumnamen
// TODO: Erstelle einen Student mit dem Namen und der ID
// TODO: Füge dem Studenten beide Noten hinzu
// TODO: Füge den Studenten dem Klassenzimmer hinzu
// TODO: Gib den Raumnamen aus
// TODO: Gib den Namen des Studenten gefolgt von seinem Durchschnitt aus, formatiert auf 1 Dezimalstelle: "[name]: [average]"
// TODO: Gib die Anzahl der Noten für diesen Studenten aus
// TODO: Gib den Klassendurchschnitt formatiert auf 1 Dezimalstelle aus
?>Alle Lektionen in Objektorientierte Programmierung
1Grundlagen der OOP
Externe DateienEinführung in die OOPKlassen vs. ObjekteDas $this-SchlüsselwortMethodenEigenschaftenKonstruktor (__construct)Destruktor (__destruct)Rückblick - Einfacher Taschenrechner4Vererbung
Grundlagen der VererbungDas parent:: SchlüsselwortMethoden überschreibenDas final SchlüsselwortAbstrakte KlassenZusammenfassung – Mitarbeiter-Hierarchie7Kapselung
Public, Protected, PrivateZugriffsmodifikatoren im DetailGetter und SetterInformation HidingConstructor Promotion (8.0)Zusammenfassung – Studentenverwaltungssystem2Namensräume & Autoloading
Einführung in NamensräumeDas use-SchlüsselwortPSR-4 Autoloading-StandardComposer AutoloaderZusammenfassung – Organisiertes Projekt5Interfaces & Verträge
Einführung in InterfacesInterfaces implementierenMehrfache Interface-ImplementierungInterface vs. Abstrakte KlasseType Hinting mit InterfacesZusammenfassung – Formen-Rechner8Magische Methoden
Einführung in magische Methoden__toString & __debugInfo__get, __set, __isset, __unset__call & __callStatic__clone & Objekt-Klonen__serialize & __unserializeZusammenfassung - Eigene Collection11Typsystem & Fehlerbehandlung
TypdeklarationenNullable-TypenUnion- & Intersection-TypenException-KlassenEigene Exception-HierarchieTry, Catch, FinallyZusammenfassung - Formular-Validator14Projekt: Bibliotheksverwaltung
ProjektübersichtBuch- und Benutzerklassen3Klasseneigenschaften
Instanz- vs. statische EigenschaftenKonstanten in KlassenStatische Methoden & EigenschaftenPrivate & geschützte EigenschaftenReadonly-Eigenschaften (PHP 8.1)Zusammenfassung – Bankkonto-Manager6Polymorphismus
Method Overriding erneut betrachtetPolymorphismus über InterfacesType Hinting & Union TypesLate Static BindingZusammenfassung – Payment Processor9Traits
Einführung in TraitsVerwendung mehrerer TraitsKonfliktlösung bei TraitsAbstrakte Methoden in TraitsTraits vs. Vererbung12Entwurfsmuster Teil 1
Einführung in EntwurfsmusterSingleton-MusterFactory-MusterObserver-MusterStrategy-Muster15Abschlussherausforderungen
E-Learning-PlattformBanksystemSpielcharakter-EntwicklungFahrzeugvermietung