Menu
CoddyTech

Buch- und Benutzerklassen

Teil des Abschnitts Objektorientierte Programmierung der GDScript-Journey von Coddy. Lektion 57 von 65.

challenge icon

Aufgabe

Einfach

Füge die Klassen Book und User hinzu, jeweils in einer eigenen Datei, und sorge dafür, dass die Bibliothek sie speichert. Behalte alles bei, was du im vorherigen Schritt geschrieben hast.

Book in book.gd:

  • Der Konstruktor nimmt title, author und isbn (alle vom Typ String) entgegen und speichert sie in Eigenschaften mit denselben Namen.
  • available hat anfangs den Wert true und borrower_id anfangs den Wert "".
  • _to_string() gibt TITLE by AUTHOR (ISBN: ISBN) - Available zurück; wenn available den Wert false hat, steht am Ende Not Available.

User in user.gd:

  • Der Konstruktor nimmt user_id und user_name entgegen und speichert sie.
  • borrowed_isbns ist ein Array[String], das anfangs leer ist.
  • _to_string() gibt User: NAME (ID: ID) - Books borrowed: N zurück, wobei N die Größe von borrowed_isbns ist.

Ändere in library.gd books zu einem Array[Book] und users zu einem Array[User], und füge die Methoden add_book(book: Book) und add_user(user: User) hinzu, die die Elemente an die jeweiligen Arrays anhängen.

Ein Buch speichert den Ausleiher anhand der ID des Benutzers, und ein Benutzer speichert Bücher anhand ihrer ISBN. Wenn das Buch das User-Objekt und der Benutzer das Book-Objekt speichern würde, würden sie sich gegenseitig am Leben halten und Godot würde sie beim Beenden des Programms als Speicherlecks melden.

Der bereitgestellte Code in main.gd wurde geändert: Die Felder sind jetzt durch | getrennt. Die Befehle sind book TITLE|AUTHOR|ISBN, user ID|NAME, lend ISBN|ID (damit werden die Eigenschaften des Buchs und des Benutzers direkt gesetzt), books und users (gibt jedes Buch bzw. jeden Benutzer aus) sowie show. Für diese Eingabe:

Riverside
book Dune|Frank Herbert|111
user U001|Alice
user U002|Bob
lend 111|U002
books
users
show

lautet die Ausgabe:

Dune by Frank Herbert (ISBN: 111) - Not Available
User: Alice (ID: U001) - Books borrowed: 0
User: Bob (ID: U002) - Books borrowed: 1
Riverside Library (books: 1, users: 2)

Dein Code gehört in book.gd, user.gd und library.gd. main.gd enthält den bereitgestellten Ein-/Ausgabecode und darf nicht bearbeitet werden.

Probier es selbst

extends Node

func _ready():
	# Vorgegebener Ein-/Ausgabecode: unverändert lassen
	var library := Library.new(OS.read_string_from_stdin())
	var line := OS.read_string_from_stdin()
	while line != "":
		var parts := line.split(" ", true, 1)
		var fields: PackedStringArray = parts[1].split("|") if parts.size() > 1 else PackedStringArray()
		match parts[0]:
			"book":
				library.add_book(Book.new(fields[0], fields[1], fields[2]))
			"user":
				library.add_user(User.new(fields[0], fields[1]))
			"lend":
				for book in library.books:
					if book.isbn == fields[0]:
						book.available = false
						book.borrower_id = fields[1]
				for user in library.users:
					if user.user_id == fields[1]:
						user.borrowed_isbns.append(fields[0])
			"books":
				for book in library.books:
					print(book)
			"users":
				for user in library.users:
					print(user)
			"show":
				print(library)
		line = OS.read_string_from_stdin()

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-GDScript-Compiler