Menu
CoddyTech

Test e integrazione

Fa parte della sezione Programmazione orientata agli oggetti del percorso GDScript di Coddy. Lezione 61 di 65.

challenge icon

Sfida

Medio

Completa il sistema con le restituzioni, poi lascia che i test eseguano tutte le sue parti insieme. Mantieni tutto ciò che hai scritto nei passaggi precedenti; library.gd e user.gd cambiano.

In Library, scrivi return_book(isbn: String, user_id: String) -> String. Controlla in questo ordine:

  • nessun libro con quell'ISBN: restituisci Book not found
  • nessun utente con quell'id: restituisci User not found
  • il libro è disponibile, oppure il suo borrower_id è un altro utente: restituisci This book was not borrowed by this user
  • altrimenti rendi di nuovo disponibile il libro, imposta il suo borrower_id su "", rimuovi l'ISBN da borrowed_isbns dell'utente e restituisci Book returned successfully

In User, scrivi return_all_books(library: Library) -> int. Restituisce ogni libro preso in prestito dall'utente tramite library.return_book() e restituisce quanti ne sono stati restituiti. L'utente riceve la biblioteca come argomento e non la memorizza, quindi nessun oggetto punta all'altro.

Il codice fornito aggiunge i comandi return ISBN|ID e return_all ID. Per questo input:

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

l'output è:

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

Il tuo codice va in book.gd, user.gd e library.gd. main.gd contiene il codice fornito per input/output e non può essere modificato.

Provalo tu

extends Node

func _ready():
	# Codice di input/output fornito: lascialo così com'è
	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()

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore GDScript online