Menu
Coddy logo textTech

Buch- und Benutzer-Structs

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

challenge icon

Aufgabe

Einfach

Lassen Sie uns die Kern-Datenmodelle für unser Bibliotheksverwaltungssystem erstellen! Sie werden die grundlegenden Structs erstellen, die Bücher und Bibliotheksmitglieder repräsentieren, ergänzt durch Konstruktorfunktionen, die diese mit sinnvollen Standardwerten initialisieren.

Sie werden Ihren Code über drei Dateien organisieren:

  • book.go: Definieren Sie Ihr Book-Struct mit Feldern für ID, Title, Author, ISBN und Available (Boolean). Erstellen Sie eine NewBook-Konstruktorfunktion, die ID, Titel, Autor und ISBN als Parameter entgegennimmt und einen Pointer auf ein neues Book zurückgibt. Neue Bücher sollten immer als verfügbar starten. Fügen Sie eine Info()-Methode hinzu, die die Details des Buches in folgendem Format zurückgibt: [ID] "Title" by Author (ISBN: [isbn]) - Available: [true/false]
  • user.go: Definieren Sie Ihr User-Struct mit Feldern für ID, Name, Email und BorrowedBooks (ein Slice von Strings, um Buch-IDs zu speichern). Erstellen Sie einen NewUser-Konstruktor, der ID, Name und E-Mail entgegennimmt und einen Pointer auf einen neuen User mit einer leeren Liste ausgeliehener Bücher zurückgibt. Fügen Sie eine Info()-Methode hinzu, die Folgendes zurückgibt: Member: [Name] ([Email]) - Books borrowed: [count]
  • main.go: Führen Sie Ihre Modelle zusammen, indem Sie Bücher und Benutzer aus der Eingabe erstellen und anschließend deren Informationen anzeigen.

    Lesen Sie die Anzahl der Bücher ein, und lesen Sie dann für jedes Buch dessen ID, Titel, Autor und ISBN in separaten Zeilen ein. Lesen Sie als Nächstes die Anzahl der Benutzer ein, und lesen Sie für jeden Benutzer dessen ID, Name und E-Mail in separaten Zeilen ein.

    Geben Sie die Informationen jedes Buches in einer eigenen Zeile aus, gefolgt von den Informationen jedes Benutzers in einer eigenen Zeile.

Die folgenden Eingaben werden bereitgestellt:

  • Anzahl der Bücher
  • Für jedes Buch: ID, Titel, Autor, ISBN (jeweils in separaten Zeilen)
  • Anzahl der Benutzer
  • Für jeden Benutzer: ID, Name, E-Mail (jeweils in separaten Zeilen)

Zum Beispiel, gegeben:

2
B001
The Go Programming Language
Alan Donovan
978-0134190440
B002
Clean Code
Robert Martin
978-0132350884
1
U001
Alice Smith
alice@library.com

Ihre Ausgabe sollte sein:

[B001] "The Go Programming Language" by Alan Donovan (ISBN: 978-0134190440) - Available: true
[B002] "Clean Code" by Robert Martin (ISBN: 978-0132350884) - Available: true
Member: Alice Smith (alice@library.com) - Books borrowed: 0

Und gegeben:

1
B100
Design Patterns
Gang of Four
978-0201633610
2
U001
Bob Jones
bob@email.com
U002
Carol White
carol@email.com

Ihre Ausgabe sollte sein:

[B100] "Design Patterns" by Gang of Four (ISBN: 978-0201633610) - Available: true
Member: Bob Jones (bob@email.com) - Books borrowed: 0
Member: Carol White (carol@email.com) - Books borrowed: 0

Beachten Sie, wie die Konstruktoren Standardwerte behandeln – Bücher starten als verfügbar und Benutzer starten mit null ausgeliehenen Büchern. Dieses Muster der Verwendung von Konstruktorfunktionen zur Gewährleistung einer ordnungsgemäßen Initialisierung ist grundlegend für den Aufbau zuverlässiger Systeme!

Probier es selbst

package main

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

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

	// Anzahl der Bücher lesen
	numBooksStr, _ := reader.ReadString('\n')
	numBooks, _ := strconv.Atoi(strings.TrimSpace(numBooksStr))

	// TODO: Erstelle ein slice, um Bücher zu speichern

	// Details jedes Buches lesen
	for i := 0; i < numBooks; i++ {
		id, _ := reader.ReadString('\n')
		id = strings.TrimSpace(id)
		title, _ := reader.ReadString('\n')
		title = strings.TrimSpace(title)
		author, _ := reader.ReadString('\n')
		author = strings.TrimSpace(author)
		isbn, _ := reader.ReadString('\n')
		isbn = strings.TrimSpace(isbn)

		// TODO: Erstelle ein neues Buch mit dem NewBook-Konstruktor und füge es dem slice hinzu
	}

	// Anzahl der Benutzer lesen
	numUsersStr, _ := reader.ReadString('\n')
	numUsers, _ := strconv.Atoi(strings.TrimSpace(numUsersStr))

	// TODO: Erstelle ein slice, um Benutzer zu speichern

	// Details jedes Benutzers lesen
	for i := 0; i < numUsers; i++ {
		id, _ := reader.ReadString('\n')
		id = strings.TrimSpace(id)
		name, _ := reader.ReadString('\n')
		name = strings.TrimSpace(name)
		email, _ := reader.ReadString('\n')
		email = strings.TrimSpace(email)

		// TODO: Erstelle einen neuen Benutzer mit dem NewUser-Konstruktor und füge ihn dem slice hinzu
	}

	// TODO: Gib die Informationen jedes Buches mit der Info()-Methode aus

	// TODO: Gib die Informationen jedes Benutzers mit der Info()-Methode aus

	fmt.Println() // Platzhalter - beim Implementieren entfernen
}

Alle Lektionen in Objektorientierte Programmierung