Menu
CoddyTech

מחלקות ספר ומשתמש

חלק מהיחידה תכנות מונחה עצמים במסלול ה-GDScript של Coddy. שיעור 57 מתוך 65.

challenge icon

אתגר

קל

הוסף את המחלקות Book ו-User, כל אחת בקובץ משלה, ודאג שהספרייה תאחסן אותן. השאר את כל מה שכתבת בשלב הקודם.

Book בקובץ book.gd:

  • הבנאי מקבל את title, את author ואת isbn (כולם מסוג String) ושומר אותם במאפיינים בעלי אותם שמות.
  • available מתחיל ב-true, ו-borrower_id מתחיל ב-"".
  • _to_string() מחזירה TITLE by AUTHOR (ISBN: ISBN) - Available, עם Not Available בסוף כאשר available הוא false.

User בקובץ user.gd:

  • הבנאי מקבל את user_id ואת user_name ושומר אותם.
  • borrowed_isbns הוא Array[String] שמתחיל כריק.
  • _to_string() מחזירה User: NAME (ID: ID) - Books borrowed: N, כאשר N הוא הגודל של borrowed_isbns.

בקובץ library.gd, שנה את books ל-Array[Book] ואת users ל-Array[User], והוסף את המתודות add_book(book: Book) ו-add_user(user: User), שמוסיפות אליהם איברים.

ספר זוכר את הלווה שלו באמצעות מזהה המשתמש, ומשתמש זוכר ספרים באמצעות מספרי ה-ISBN שלהם. אם הספר היה שומר את אובייקט User והמשתמש היה שומר את אובייקט Book, כל אחד מהם היה משאיר את השני בחיים, ו-Godot היה מדווח עליהם כאובייקטים שדלפו כשהתוכנית מסתיימת.

הקוד שסופק בקובץ main.gd השתנה: השדות מופרדים כעת באמצעות |. הפקודות הן book TITLE|AUTHOR|ISBN, user ID|NAME, lend ISBN|ID (הפקודה מגדירה ישירות את המאפיינים של הספר והמשתמש), books ו-users (מדפיסות כל ספר או משתמש), וגם show. עבור הקלט הזה:

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

הפלט הוא:

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)

הקוד שלך צריך להיכתב בקבצים book.gd, user.gd ו-library.gd. הקובץ main.gd מכיל את קוד הקלט/פלט שסופק, ואי אפשר לערוך אותו.

נסו בעצמכם

extends Node

func _ready():
	# קוד הקלט/פלט שסופק: יש להשאיר אותו כפי שהוא
	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()

כל השיעורים ביחידה תכנות מונחה עצמים

תרגלו בעצמכם: קומפיילר GDScript אונליין