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

Erstellen wir die grundlegenden Datenmodelle für unser Bibliotheksverwaltungssystem! Du wirst die grundlegenden Structs erstellen, die Bücher und Bibliotheksmitglieder darstellen, einschließlich Konstruktorfunktionen, die sie mit sinnvollen Standardwerten initialisieren.

Du wirst deinen Code auf drei Dateien verteilen:

  • book.go: Definiere dein Book-Struct mit Feldern für ID, Title, Author, ISBN und Available (Boolean). Erstelle eine NewBook-Konstruktorfunktion, die die ID, den Titel, den Autor und die ISBN als Parameter übernimmt und einen Zeiger auf ein neues Book zurückgibt. Neue Bücher sollen immer als verfügbar beginnen. Füge eine Info()-Methode hinzu, die die Buchdetails im folgenden Format zurückgibt: [ID] "Title" by Author (ISBN: [isbn]) - Available: [true/false]
  • user.go: Definiere dein User-Struct mit Feldern für ID, Name, Email und BorrowedBooks (ein Slice von Strings zum Speichern von Buch-IDs). Erstelle einen NewUser-Konstruktor, der ID, Name und E-Mail übernimmt und einen Zeiger auf einen neuen User mit einer leeren Liste ausgeliehener Bücher zurückgibt. Füge eine Info()-Methode hinzu, die Folgendes zurückgibt: Member: [Name] ([Email]) - Books borrowed: [count]
  • main.go: Führe deine Modelle zusammen, indem du Bücher und Benutzer aus der Eingabe erstellst und anschließend ihre Informationen ausgibst.

    Lies die Anzahl der Bücher ein und anschließend für jedes Buch seine ID, seinen Titel, seinen Autor und seine ISBN in separaten Zeilen. Lies danach die Anzahl der Benutzer ein und anschließend für jeden Benutzer seine ID, seinen Namen und seine E-Mail in separaten Zeilen.

    Gib die Informationen jedes Buchs 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 bei folgender Eingabe:

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

Deine Ausgabe sollte wie folgt aussehen:

[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 bei folgender Eingabe:

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

Deine Ausgabe sollte wie folgt aussehen:

[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

Beachte, wie die Konstruktoren Standardwerte festlegen: Bücher beginnen als verfügbar und Benutzer beginnen mit null ausgeliehenen Büchern. Dieses Muster, Konstruktorfunktionen zu verwenden, um eine korrekte Initialisierung sicherzustellen, 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 zum Speichern von Büchern

	// 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 zum Speichern von Benutzern

	// 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 Info jedes Buches mit der Info()-Methode aus

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

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

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-Go-Compiler