Menu
CoddyTech

Classes Livre et Utilisateur

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

challenge icon

Défi

Facile

Ajoutez les classes Book et User, chacune dans son propre fichier, et faites en sorte que la bibliothèque les stocke. Conservez tout ce que vous avez écrit à l’étape précédente.

Book dans book.gd :

  • Le constructeur prend title, author et isbn (tous de type String) et les stocke dans des propriétés portant les mêmes noms.
  • available vaut true au départ et borrower_id vaut "" au départ.
  • _to_string() renvoie TITLE by AUTHOR (ISBN: ISBN) - Available, avec Not Available à la fin lorsque available vaut false.

User dans user.gd :

  • Le constructeur prend user_id et user_name et les stocke.
  • borrowed_isbns est un Array[String] qui est vide au départ.
  • _to_string() renvoie User: NAME (ID: ID) - Books borrowed: N, où N correspond à la taille de borrowed_isbns.

Dans library.gd, remplacez books par un Array[Book] et users par un Array[User], puis ajoutez les méthodes add_book(book: Book) et add_user(user: User), qui ajoutent les éléments à ces tableaux.

Un livre mémorise l'identifiant de son emprunteur, et un utilisateur mémorise les livres à l'aide de leur ISBN. Si le livre stockait l'objet User et que l'utilisateur stockait l'objet Book, ils se maintiendraient mutuellement en vie et Godot signalerait une fuite à la fin du programme.

Le code fourni dans main.gd a changé : les champs sont maintenant séparés par |. Les commandes sont book TITLE|AUTHOR|ISBN, user ID|NAME, lend ISBN|ID (cette commande définit directement les propriétés du livre et de l'utilisateur), books et users (affichent chaque livre ou utilisateur), ainsi que show. Pour cette entrée :

Riverside
book Dune|Frank Herbert|111
user U001|Alice
user U002|Bob
lend 111|U002
books
users
show

la sortie est :

Dune by Frank Herbert (ISBN: 111) - Not Available
User: Alice (ID: U001) - Books borrowed: 0
User: Bob (ID: U002) - Books borrowed: 1
Riverside Library (books: 1, users: 2)

Votre code doit être écrit dans book.gd, user.gd et library.gd. main.gd contient le code fourni pour les entrées et 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]))
			"lend":
				for book in library.books:
					if book.isbn == fields[0]:
						book.available = false
						book.borrower_id = fields[1]
				for user in library.users:
					if user.user_id == fields[1]:
						user.borrowed_isbns.append(fields[0])
			"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