Menu
CoddyTech

Système d’emprunt

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

challenge icon

Défi

Moyen

Déplace le prêt dans la bibliothèque. Garde tout ce que tu as écrit aux étapes précédentes ; seul library.gd change.

Ajoute trois méthodes à Library :

  1. find_book(isbn: String) -> Book renvoie le livre portant cet ISBN, ou null s'il n'y en a pas.
  2. find_user(user_id: String) -> User renvoie l'utilisateur ayant cet identifiant, ou null.
  3. borrow_book(isbn: String, user_id: String) -> String prête un livre et renvoie un message. Effectue les vérifications dans cet ordre :
    • aucun livre portant cet ISBN : renvoie Book not found
    • aucun utilisateur avec cet identifiant : renvoie User not found
    • le livre n'est pas disponible : renvoie Book is not available
    • sinon, définis available du livre sur false et son borrower_id sur l'identifiant de l'utilisateur, ajoute l'ISBN à borrowed_isbns de l'utilisateur et renvoie Book borrowed successfully

Le code fourni remplace lend par borrow ISBN|ID, qui affiche le message, et ajoute loans ID (les titres empruntés par un utilisateur) et holder ISBN (qui détient un livre). Les deux utilisent tes méthodes find_book() et find_user(). Pour cette entrée :

Community
book Dune|Frank Herbert|111
user U001|Alice
user U002|Bob
borrow 999|U001
borrow 111|U999
borrow 111|U001
borrow 111|U002
holder 111
loans U001

la sortie est :

Book not found
User not found
Book borrowed successfully
Book is not available
Dune is borrowed by Alice
Alice has borrowed:
- Dune

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]))
			"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