Menu
CoddyTech

Klasy książki i użytkownika

Część sekcji Programowanie obiektowe ścieżki GDScript w Coddy. Lekcja 57 z 65.

challenge icon

Wyzwanie

Łatwy

Dodaj klasy Book i User, każdą w osobnym pliku, i spraw, aby biblioteka je przechowywała. Zachowaj wszystko, co napisałeś w poprzednim kroku.

Book w pliku book.gd:

  • Konstruktor przyjmuje title, author i isbn (wszystkie typu String) i zapisuje je we właściwościach o tych samych nazwach.
  • available ma początkowo wartość true, a borrower_id — "".
  • _to_string() zwraca TITLE by AUTHOR (ISBN: ISBN) - Available, a na końcu Not Available, gdy available ma wartość false.

User w pliku user.gd:

  • Konstruktor przyjmuje user_id i user_name i zapisuje je.
  • borrowed_isbns to tablica Array[String], która początkowo jest pusta.
  • _to_string() zwraca User: NAME (ID: ID) - Books borrowed: N, gdzie N to rozmiar borrowed_isbns.

W pliku library.gd zmień books na Array[Book], a users na Array[User], i dodaj metody add_book(book: Book) oraz add_user(user: User), które dodają elementy do tych tablic.

Książka zapamiętuje wypożyczającego ją użytkownika za pomocą jego identyfikatora, a użytkownik zapamiętuje książki za pomocą ich ISBN-ów. Gdyby książka przechowywała obiekt User, a użytkownik obiekt Book, nawzajem utrzymywaliby się przy życiu, a Godot zgłosiłby wyciek pamięci po zakończeniu programu.

Dostarczony kod w pliku main.gd uległ zmianie: pola są teraz rozdzielone znakiem |. Dostępne polecenia to book TITLE|AUTHOR|ISBN, user ID|NAME, lend ISBN|ID (ustawia bezpośrednio właściwości książki i użytkownika), books i users (wypisują każdą książkę lub każdego użytkownika) oraz show. Dla tego wejścia:

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

wynikiem jest:

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)

Twój kod umieść w plikach book.gd, user.gd i library.gd. Plik 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]))
			"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()

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator GDScript online