Menu
CoddyTech

Fonctionnalité de recherche

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

challenge icon

Défi

Moyen

Ajoute une recherche par titre. Conserve tout ce que tu as écrit dans les étapes précédentes ; seul library.gd change.

Écris search_by_title(text: String) -> Array[Book] dans Library. Elle renvoie tous les livres dont le titre contient text, dans l’ordre de books :

  • La recherche ne tient pas compte des majuscules et des minuscules : GREAT trouve The Great Gatsby.
  • Une partie du titre suffit : great trouve aussi Great Expectations.
  • Un text vide renvoie tous les livres. Vérifie ce cas en premier : en GDScript, "" in "Dune" vaut false.
  • Les livres empruntés sont trouvés comme n’importe quel autre livre.

Le code fourni ajoute la commande search TEXT, qui affiche le nombre de livres trouvés et une ligne par livre. Pour cette entrée :

Community
book The Great Gatsby|F. Scott Fitzgerald|123456
book To Kill a Mockingbird|Harper Lee|789012
book Great Expectations|Charles Dickens|345678
search great
search zzz

la sortie est :

Results for 'great': 2
- The Great Gatsby by F. Scott Fitzgerald
- Great Expectations by Charles Dickens
Results for 'zzz': 0

Ton code va dans book.gd, user.gd et library.gd. main.gd contient le code fourni pour les entrées/sorties et ne peut pas être modifié.

Essayez vous-même

extends Node

func _ready():
	# Code d'entrée/sortie fourni : conservez-le tel quel
	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]))
			"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)
			"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