Menu
CoddyTech

Tests et intégration

Fait partie de la section Programmation orientée objet du Journey GDScript de Coddy. Leçon 61 sur 65.

challenge icon

Défi

Moyen

Termine le système avec les retours, puis laisse les tests exécuter toutes ses parties ensemble. Conserve tout ce que tu as écrit aux étapes précédentes ; library.gd et user.gd changent.

Dans Library, écris return_book(isbn: String, user_id: String) -> String. Vérifie dans cet ordre :

  • aucun livre ne correspond à cet ISBN : renvoie Book not found
  • aucun utilisateur ne correspond à cet identifiant : renvoie User not found
  • le livre est disponible, ou son borrower_id correspond à un autre utilisateur : renvoie This book was not borrowed by this user
  • sinon, rends le livre à nouveau disponible, définis son borrower_id sur "", supprime l'ISBN de borrowed_isbns de l'utilisateur et renvoie Book returned successfully

Dans User, écris return_all_books(library: Library) -> int. Cette méthode retourne chaque livre emprunté par l'utilisateur en passant par library.return_book() et renvoie le nombre de livres retournés. L'utilisateur reçoit la bibliothèque en argument et ne la stocke pas, ainsi aucun des deux objets ne pointe vers l'autre.

Le code fourni ajoute les commandes return ISBN|ID et return_all ID. Pour cette entrée :

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

la sortie est :

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

Ton code va dans book.gd, user.gd et library.gd. main.gd contient le code d'entrée/sortie fourni et ne peut pas être modifié.

Essayez vous-même

extends Node

func _ready():
	# Code d'entrée/sortie fourni : ne le modifiez pas
	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()

Toutes les leçons de Programmation orientée objet

Entraînez-vous par vous-même : Compilateur GDScript en ligne