Rückblick – Schülerdaten
Teil des Abschnitts Objektorientierte Programmierung der C#-Journey von Coddy. Lektion 35 von 70.
Aufgabe
EinfachErstellen wir ein System zur Verwaltung von Schülerdaten, das alle in diesem Kapitel erlernten Techniken der Kapselung zusammenführt. Du erstellst ein sicheres System, in dem Schülerdaten ordnungsgemäß geschützt, Noten validiert und bestimmte Informationen nach der Erstellung unveränderlich bleiben.
Du organisierst deinen Code über zwei Dateien:
Student.cs: Erstelle eineStudent-Klasse im NamespaceRecords, die eine korrekte Kapselung demonstriert. Deine Schülerklasse sollte Folgendes enthalten:- Ein öffentlich zugängliches
readonly-FeldName(string), das jedoch nur während der Konstruktion festgelegt werden kann - Ein privates
readonly-Feld für die Schüler-ID (string) – dieses sollte von außerhalb niemals direkt zugänglich sein - Eine private Liste zum Speichern von Noten (Ganzzahlen)
- Eine öffentliche schreibgeschützte Eigenschaft
Average, die den Durchschnitt aller Noten berechnet und zurückgibt oder0, wenn keine Noten vorhanden sind - Eine öffentliche Methode
AddGrade(int grade), die nur Noten zwischen 0 und 100 (einschließlich) akzeptiert – ungültige Noten sollen stillschweigend ignoriert werden - Eine öffentliche Methode
GetGradeCount(), die zurückgibt, wie viele gültige Noten erfasst wurden - Eine öffentliche Methode
GetStudentInfo(), die eine Zeichenfolge im Format"{Name} (ID: {last 4 characters of student ID})"zurückgibt – beachte, dass du nur eine maskierte Version der ID preisgibst!
- Ein öffentlich zugängliches
Program.cs: Erstelle in deiner Hauptdatei einen Schüler und füge mehrere Noten hinzu, um zu demonstrieren, wie die Kapselung funktioniert. Du zeigst, dass gültige Noten akzeptiert, ungültige Noten abgelehnt und der Durchschnitt korrekt berechnet wird.
Du erhältst fünf Eingaben:
- Name des Schülers
- Schüler-ID (mindestens 4 Zeichen)
- Erste hinzuzufügende Note (Ganzzahl)
- Zweite hinzuzufügende Note (Ganzzahl, möglicherweise ungültig wie -5 oder 150)
- Dritte hinzuzufügende Note (Ganzzahl)
Gib die Ausgabe in diesem Format aus:
{GetStudentInfo() result}
Grades recorded: {GetGradeCount()}
Average: {Average}Wenn die Eingaben beispielsweise Emma Wilson, STU12345, 85, 150 und 90 lauten, sollte die Ausgabe wie folgt aussehen:
Emma Wilson (ID: 2345)
Grades recorded: 2
Average: 87.5Beachte, wie die ungültige Note 150 stillschweigend abgelehnt wurde, sodass nur zwei Noten erfasst wurden. Die Schüler-ID ist geschützt – externer Code kann niemals die vollständige ID sehen, sondern nur die maskierte Version über GetStudentInfo(). Der Name ist lesbar, aber unveränderlich. So arbeitet die Kapselung zusammen, um eine robuste, gut geschützte Klasse zu erstellen!
Probier es selbst
using System;
using Records;
class Program
{
public static void Main(string[] args)
{
// Eingaben lesen
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: Erstelle ein Student-Objekt mit name und studentId
// TODO: Füge alle drei Noten mit der Methode AddGrade hinzu
// TODO: Gib die Ausgabe im erforderlichen Format aus:
// {GetStudentInfo() result}
// Grades recorded: {GetGradeCount()}
// Average: {Average}
}
}
Alle Lektionen in Objektorientierte Programmierung
1Grundlagen der OOP
Externe DateienNamespaces & DirektivenEinführung in Klassen & ObjekteDas 'this'-SchlüsselwortMethoden und ParameterFelder vs. EigenschaftenKonstruktorenObjektinitialisiererWiederholung – Einfacher Taschenrechner4Vererbung
Grundlegende Vererbungs-(:)-SyntaxDas „base“-Schlüsselwort„virtual“- und „override“-SchlüsselwörterVersiegelte KlassenDie „object“-BasisklasseWiederholung – Mitarbeiterhierarchie7Erweiterte Funktionen
Überladen von OperatorenIndexer (this[])ToString()-ÜberschreibungErweiterungsmethodenRückblick – Benutzerdefinierte Liste10Entwurfsmuster Teil 1
Einführung in EntwurfsmusterThread-sicheres SingletonFactory-MusterObserver-Muster (Events)Strategy-Muster13Abschließende Herausforderungen
E-Learning-PlattformKomponente für SpielfigurenFahrzeugvermietungsdienst2Eigenschaften & statische Member
Automatisch implementierte EigenschaftenNur lesbare/schreibbare EigenschaftenStatische Felder & MethodenStatische KlassenMember mit Ausdruckskörpern5Polymorphie & Interfaces
Compile- vs. Laufzeit-PolymorphieInterface vs. abstrakte KlasseMehrere InterfacesExplizite InterfacesUpcasting & DowncastingWiederholung – Formenrechner3Klassenarchitektur
Instanz- vs. statische DatenSchlüsselwörter 'readonly' & 'const'Backing FieldsRückblick – Bankkontenverwaltung6Kapselung
ZugriffsmodifikatorenEigenschaften zur KapselungImplementierung der DatenkapselungMuster für UnveränderlichkeitRückblick – SchülerdatenÜbe selbstständig: Online-C#-Compiler