Menu
Coddy logo textTech

Zusammenfassung - Studierendendatensätze

Teil des Abschnitts Objektorientierte Programmierung der GO-Journey von Coddy — Lektion 51 von 107.

challenge icon

Aufgabe

Einfach

Lassen Sie uns ein Studentenverwaltungssystem erstellen, das eine korrekte Kapselung demonstriert. Sie werden eine Struktur zur Studentenverwaltung erstellen, bei der sensible akademische Daten geschützt sind, während der Zugriff über gut gestaltete Methoden kontrolliert erfolgt.

Sie werden Ihren Code auf zwei Dateien aufteilen:

  • student.go: Erstellen Sie ein Student-Struct, das sensible Informationen schützt, während sichere öffentliche Daten offengelegt werden. Der Name des Studenten sollte exportiert (öffentlich zugänglich) sein, aber seine grade (float64) und studentID (string) sollten nicht exportiert werden, um diese sensiblen Informationen zu schützen.

    Implementieren Sie Folgendes:

    • Einen Konstruktor NewStudent(name, id string, initialGrade float64) *Student, der einen Studenten erstellt. Die ursprüngliche Note sollte nur gesetzt werden, wenn sie zwischen 0 und 100 (einschließlich) liegt; andernfalls wird standardmäßig 0 verwendet.
    • Einen Getter Grade() float64, der die aktuelle Note zurückgibt.
    • Einen Getter StudentID() string, der die Studenten-ID zurückgibt.
    • Einen Setter SetGrade(newGrade float64) bool, der die Note nur aktualisiert, wenn der neue Wert zwischen 0 und 100 (einschließlich) liegt. Geben Sie true zurück, wenn die Note aktualisiert wurde, andernfalls false.
    • Eine Methode Summary() string, die das Format: [Name] (ID: [studentID]) - Grade: [grade] zurückgibt.
  • main.go: Lesen Sie die Studenteninformationen aus der Eingabe ein, erstellen Sie einen Studenten mit dem Konstruktor und führen Sie dann Notenoperationen durch. Zeigen Sie die Zusammenfassung des Studenten nach der Erstellung und nach jedem Versuch einer Notenaktualisierung an.

Die folgenden Eingaben werden bereitgestellt:

  • Zeile 1: Name des Studenten
  • Zeile 2: Studenten-ID
  • Zeile 3: Ursprüngliche Note
  • Zeile 4: Erste neue Note, die gesetzt werden soll
  • Zeile 5: Zweite neue Note, die gesetzt werden soll

Geben Sie nach der Erstellung des Studenten dessen Zusammenfassung aus. Versuchen Sie dann jede Notenaktualisierung – wenn sie erfolgreich ist, geben Sie die aktualisierte Zusammenfassung aus; wenn sie abgelehnt wird, geben Sie Invalid grade rejected aus. Formatieren Sie alle Notenwerte mit zwei Dezimalstellen.

Zum Beispiel, gegeben Emma Wilson, STU001, 85.5, 92.0 und 150, sollte Ihre Ausgabe wie folgt aussehen:

Emma Wilson (ID: STU001) - Grade: 85.50
Emma Wilson (ID: STU001) - Grade: 92.00
Invalid grade rejected

Die letzte Aktualisierung schlägt fehl, da 150 außerhalb des gültigen Bereichs liegt. Ihre Setter-Methode erzwingt diese Regel und hält die Daten des Studenten gültig. Beachten Sie, dass die studentID und grade niemals direkt zugänglich sind – externer Code muss Ihre Getter- und Setter-Methoden verwenden, um mit diesen geschützten Daten zu interagieren.

Probier es selbst

package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"strings"
)

func main() {
	reader := bufio.NewReader(os.Stdin)

	// Studentennamen lesen
	name, _ := reader.ReadString('\n')
	name = strings.TrimSpace(name)

	// Studenten-ID lesen
	id, _ := reader.ReadString('\n')
	id = strings.TrimSpace(id)

	// Anfangsnote lesen
	initialGradeStr, _ := reader.ReadString('\n')
	initialGrade, _ := strconv.ParseFloat(strings.TrimSpace(initialGradeStr), 64)

	// Erste neue Note lesen
	newGrade1Str, _ := reader.ReadString('\n')
	newGrade1, _ := strconv.ParseFloat(strings.TrimSpace(newGrade1Str), 64)

	// Zweite neue Note lesen
	newGrade2Str, _ := reader.ReadString('\n')
	newGrade2, _ := strconv.ParseFloat(strings.TrimSpace(newGrade2Str), 64)

	// TODO: Erstelle einen neuen Studenten mit dem NewStudent-Konstruktor

	// TODO: Gib die Zusammenfassung des Studenten nach der Erstellung aus

	// TODO: Versuche die erste Notenaktualisierung
	// Falls erfolgreich, gib die aktualisierte Zusammenfassung aus
	// Falls abgelehnt, gib "Invalid grade rejected" aus

	// TODO: Versuche die zweite Notenaktualisierung
	// Falls erfolgreich, gib die aktualisierte Zusammenfassung aus
	// Falls abgelehnt, gib "Invalid grade rejected" aus

	// Hinweis: Verwende fmt.Sprintf mit %.2f für die Formatierung der Noten in Summary()
	_ = newGrade1 // Entferne diese Zeile, wenn du die Variable verwendest
	_ = newGrade2 // Entferne diese Zeile, wenn du die Variable verwendest
}

Alle Lektionen in Objektorientierte Programmierung