System wypożyczania
Część sekcji Programowanie obiektowe ścieżki GDScript w Coddy. Lekcja 58 z 65.
Wyzwanie
ŚredniPrzenieś obsługę wypożyczeń do biblioteki. Zachowaj wszystko, co zostało napisane w poprzednich krokach; zmienia się tylko library.gd.
Dodaj trzy metody do Library:
find_book(isbn: String) -> Bookzwraca książkę o podanym ISBN albonull, jeśli jej nie ma.find_user(user_id: String) -> Userzwraca użytkownika o podanym identyfikatorze albonull.borrow_book(isbn: String, user_id: String) -> Stringwypożycza książkę i zwraca komunikat. Sprawdzaj w tej kolejności:- brak książki o podanym ISBN: zwróć
Book not found - brak użytkownika o podanym identyfikatorze: zwróć
User not found - książka jest niedostępna: zwróć
Book is not available - w przeciwnym razie ustaw
availableksiążki nafalse, a jejborrower_idna identyfikator użytkownika, dodaj ISBN doborrowed_isbnsużytkownika i zwróćBook borrowed successfully
- brak książki o podanym ISBN: zwróć
Dostarczony kod zastępuje lend poleceniem borrow ISBN|ID, które wyświetla komunikat, i dodaje loans ID (tytuły wypożyczone przez użytkownika) oraz holder ISBN (kto ma daną książkę). Oba korzystają z Twoich metod find_book() i find_user(). Dla tego wejścia:
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 U001wynik to:
Book not found
User not found
Book borrowed successfully
Book is not available
Dune is borrowed by Alice
Alice has borrowed:
- DuneTwój kod umieść w plikach book.gd, user.gd i library.gd. main.gd zawiera dostarczony kod wejścia/wyjścia i nie można go edytować.
Spróbuj swoich sił
extends Node
func _ready():
# Dostarczony kod wejścia/wyjścia: pozostaw go bez zmian
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()
Wszystkie lekcje w sekcji Programowanie obiektowe
1Podstawy programowania obiektowego
Pliki zewnętrzneWprowadzenie do programowania obiektowegoKlasy a obiektySłowo kluczowe selfMetodyWłaściwościKonstruktor (_init)Powtórka – prosty kalkulator4Polimorfizm
Ponowne omówienie przesłaniania metodDuck typingKlasy i metody abstrakcyjneProjektowanie interfejsówPowtórzenie – kalkulator kształtów7Sygnały
Czym jest sygnał?Deklarowanie i emitowanieŁączenie z sygnałamiSygnały z argumentamiPodsumowanie — system zdrowia10Wzorce projektowe, część 2
Wzorzec poleceniaWzorzec adapteraWzorzec dekoratoraWzorzec metody szablonowejWzorzec stanuWzorzec kompozytu2Właściwości klas
Zmienne instancji a zmienne statyczneFunkcje statyczneSettery właściwościGettery właściwościPrywatne z konwencjiPodsumowanie — menedżer kont bankowych5Enkapsulacja
Elementy publiczne i prywatneWalidacja za pomocą setterówUkrywanie informacjiWłaściwości tylko do odczytuPodsumowanie – system ewidencji uczniów8Zaawansowane koncepcje OOP
Kompozycja a dziedziczenieKlasy wewnętrzneWęzły jako komponentyRefCounted a NodeTypy wyliczeniowe w klasach11Projekt: Zarządzanie biblioteką
Przegląd projektuKlasy książki i użytkownika3Dziedziczenie
Podstawy dziedziczeniaSłowo kluczowe superNadpisywanie metodŁańcuchy dziedziczeniaSprawdzanie typów za pomocą isPodsumowanie – hierarchia pracowników6Metody specjalne
Wprowadzenie do metod wirtualnychMetoda _to_stringWłasne iteratoryPodsumowanie — własna lista9Wzorce projektowe — część 1
Wprowadzenie do wzorców projektowychWzorzec SingletonWzorzec FactoryWzorzec ObserverWzorzec StrategyPoćwicz samodzielnie: Kompilator GDScript online