Système d’emprunt
Fait partie de la section Programmation orientée objet du Journey GDScript de Coddy. Leçon 58 sur 65.
Défi
MoyenDé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 :
find_book(isbn: String) -> Bookrenvoie le livre portant cet ISBN, ounulls'il n'y en a pas.find_user(user_id: String) -> Userrenvoie l'utilisateur ayant cet identifiant, ounull.borrow_book(isbn: String, user_id: String) -> Stringprê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
availabledu livre surfalseet sonborrower_idsur l'identifiant de l'utilisateur, ajoute l'ISBN àborrowed_isbnsde l'utilisateur et renvoieBook borrowed successfully
- aucun livre portant cet ISBN : renvoie
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 U001la sortie est :
Book not found
User not found
Book borrowed successfully
Book is not available
Dune is borrowed by Alice
Alice has borrowed:
- DuneTon 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
1Fondamentaux de la POO
Fichiers externesIntroduction à la POOClasses et objetsLe mot-clé selfMéthodesPropriétésConstructeur (_init)Récapitulatif - Calculatrice simple4Polymorphisme
Retour sur la redéfinition des méthodesTypage canardClasses et méthodes abstraitesConception d’interfacesRécapitulatif – Calculateur de formes7Signaux
Qu’est-ce qu’un signal ?Déclarer et émettreSe connecter aux signauxSignaux avec argumentsRécapitulatif - système de santé10Patrons de conception, partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Méthode modèlePatron ÉtatPatron Composite2Propriétés de classe
Variables d’instance et variables statiquesFonctions statiquesSetters de propriétésGetters de propriétésPrivé par conventionRécapitulatif - Gestionnaire de comptes bancaires5Encapsulation
Membres publics et privésValidation avec les méthodes setterMasquage de l’informationPropriétés en lecture seuleRécapitulatif - Système de dossiers étudiants8Concepts avancés de la POO
Composition ou héritageClasses internesLes nœuds comme composantsRefCounted ou NodeEnums dans les classes11Projet : Gestion de bibliothèque
Présentation du projetClasses Livre et Utilisateur3Héritage
Héritage de baseLe mot-clé superRedéfinition de méthodesChaînes d’héritageVérifier les types avec isRécapitulatif – Hiérarchie des employés6Méthodes spéciales
Introduction aux méthodes virtuellesLa méthode _to_stringItérateurs personnalisésRécapitulatif – Liste personnalisée9Patrons de conception, partie 1
Introduction aux patrons de conceptionPatron SingletonPatron FactoryPatron ObserverPatron StrategyEntraînez-vous par vous-même : Compilateur GDScript en ligne