Menu
CoddyTech

Testen und Integration

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

challenge icon

Aufgabe

Mittel

Vervollständige das System um Rückgaben und lass dann die Tests alle Teile gemeinsam ausführen. Behalte alles bei, was du in den vorherigen Schritten geschrieben hast; library.gd und user.gd ändern sich.

Schreibe in Library return_book(isbn: String, user_id: String) -> String. Prüfe in dieser Reihenfolge:

  • kein Buch mit dieser ISBN: gib Book not found zurück
  • kein Benutzer mit dieser ID: gib User not found zurück
  • das Buch ist verfügbar oder seine borrower_id gehört zu einem anderen Benutzer: gib This book was not borrowed by this user zurück
  • andernfalls mache das Buch wieder verfügbar, setze seine borrower_id auf "", entferne die ISBN aus den borrowed_isbns des Benutzers und gib Book returned successfully zurück

Schreibe in User return_all_books(library: Library) -> int. Die Methode gibt jedes Buch zurück, das der Benutzer über library.return_book() ausgeliehen hat, und gibt die Anzahl der zurückgegebenen Bücher zurück. Der Benutzer erhält die Bibliothek als Argument und speichert sie nicht, sodass keine zwei Objekte aufeinander verweisen.

Der bereitgestellte Code fügt die Befehle return ISBN|ID und return_all ID hinzu. Für diese Eingabe:

Community
book The Great Gatsby|F. Scott Fitzgerald|123456
book 1984|George Orwell|345678
user U001|Alice
user U002|Bob
borrow 123456|U001
borrow 345678|U001
return 123456|U002
return_all U001
users
stats

lautet die Ausgabe:

Book borrowed successfully
Book borrowed successfully
This book was not borrowed by this user
Books returned by Alice: 2
User: Alice (ID: U001) - Books borrowed: 0
User: Bob (ID: U002) - Books borrowed: 0
Total Books: 2
Available Books: 2
Borrowed Books: 0
Total Users: 2
Users with Books: 0

Dein Code kommt in book.gd, user.gd und library.gd. main.gd enthält den bereitgestellten Ein-/Ausgabecode und kann nicht bearbeitet werden.

Probier es selbst

extends Node

func _ready():
	# Vorgegebener Eingabe-/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]))
			"borrow":
				print(library.borrow_book(fields[0], fields[1]))
			"return":
				print(library.return_book(fields[0], fields[1]))
			"return_all":
				var reader: User = library.find_user(fields[0])
				var count: int = reader.return_all_books(library)
				print("Books returned by ", reader.user_name, ": ", count)
			"search":
				var term: String = parts[1] if parts.size() > 1 else ""
				var found: Array = library.search_by_title(term)
				print("Results for '%s': %d" % [term, found.size()])
				for book in found:
					print("- ", book.title, " by ", book.author)
			"stats":
				var stats: Dictionary = library.get_statistics()
				print("Total Books: ", stats["total_books"])
				print("Available Books: ", stats["available_books"])
				print("Borrowed Books: ", stats["borrowed_books"])
				print("Total Users: ", stats["total_users"])
				print("Users with Books: ", stats["users_with_books"])
			"loans":
				var reader: User = library.find_user(fields[0])
				print(reader.user_name, " has borrowed:")
				for isbn in reader.borrowed_isbns:
					print("- ", library.find_book(isbn).title)
			"holder":
				var book: Book = library.find_book(fields[0])
				if book.available:
					print(book.title, " is on the shelf")
				else:
					print(book.title, " is borrowed by ", library.find_user(book.borrower_id).user_name)
			"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