Rückblick – Studierendendaten
Teil des Abschnitts Objektorientierte Programmierung der C#-Journey von Coddy — Lektion 35 von 70.
Aufgabe
EinfachLassen Sie uns ein Studentenverwaltungssystem erstellen, das alle Kapselungstechniken vereint, die Sie in diesem Kapitel gelernt haben. Sie werden ein sicheres System erstellen, in dem Studentendaten ordnungsgemäß geschützt sind, Noten validiert werden und bestimmte Informationen nach der Erstellung unveränderlich bleiben.
Sie werden Ihren Code auf zwei Dateien aufteilen:
Student.cs: Erstellen Sie eineStudent-Klasse im NamespaceRecords, die eine ordnungsgemäße Kapselung demonstriert. Ihr Student sollte Folgendes haben:- Ein
readonly-FeldName(string), das öffentlich zugänglich ist, aber nur während der Konstruktion gesetzt werden kann - Ein privates
readonly-Feld für die Studenten-ID (string) - dieses sollte niemals direkt von außen 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 sollten stillschweigend ignoriert werden - Eine öffentliche Methode
GetGradeCount(), die zurückgibt, wie viele gültige Noten aufgezeichnet wurden - Eine öffentliche Methode
GetStudentInfo(), die einen String im Format"{Name} (ID: {last 4 characters of student ID})"zurückgibt - beachten Sie, dass Sie nur eine maskierte Version der ID preisgeben!
- Ein
Program.cs: Erstellen Sie in Ihrer Hauptdatei einen Studenten und fügen Sie mehrere Noten hinzu, um zu demonstrieren, wie die Kapselung funktioniert. Sie werden zeigen, dass gültige Noten akzeptiert werden, ungültige Noten abgelehnt werden und der Durchschnitt korrekt berechnet wird.
Sie erhalten fünf Eingaben:
- Name des Studenten
- Studenten-ID (mindestens 4 Zeichen)
- Erste hinzuzufügende Note (Ganzzahl)
- Zweite hinzuzufügende Note (Ganzzahl, könnte ungültig sein wie -5 oder 150)
- Dritte hinzuzufügende Note (Ganzzahl)
Geben Sie die Ausgabe in diesem Format aus:
{GetStudentInfo() result}
Grades recorded: {GetGradeCount()}
Average: {Average}Wenn die Eingaben beispielsweise Emma Wilson, STU12345, 85, 150 und 90 sind, sollte die Ausgabe wie folgt aussehen:
Emma Wilson (ID: 2345)
Grades recorded: 2
Average: 87.5Beachten Sie, dass die ungültige Note von 150 stillschweigend abgelehnt wurde, sodass nur zwei Noten aufgezeichnet wurden. Die Studenten-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. Dies ist das Zusammenspiel der Kapselung, 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. EigenschaftenKonstruktorenObjekt-InitialisiererZusammenfassung - Einfacher Taschenrechner4Vererbung
Grundlagen der Vererbung (:) SyntaxDas 'base'-SchlüsselwortVirtual & Override SchlüsselwörterVersiegelte KlassenDie 'object'-BasisklasseZusammenfassung – Mitarbeiter-Hierarchie7Fortgeschrittene Funktionen
OperatorüberladungIndexer (this[])ToString() überschreibenErweiterungsmethodenZusammenfassung - Benutzerdefinierte Liste2Eigenschaften & Statische Member
Automatisch implementierte EigenschaftenRead-Only- & Write-Only-EigenschaftenStatische Felder & MethodenStatische KlassenExpression-Bodied Member5Polymorphismus & Interfaces
Compile- vs. Runtime-PolymorphismusInterface vs. abstrakte KlasseMehrfache InterfacesExplizite InterfacesUpcasting & DowncastingRecap – Shape Calculator3Klassenarchitektur
Instanz- vs. statische Daten'readonly' & 'const' SchlüsselwörterBacking FieldsZusammenfassung - Bankkonto-Manager6Kapselung
ZugriffsmodifikatorenProperties zur KapselungImplementierung von Data HidingImmutability-MusterRückblick – Studierendendaten