Menu
CoddyTech
flag Ar iconالعربيةdown icon

فئتا الكتب والمستخدمين

جزء من قسم البرمجة كائنية التوجّه في رحلة 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 عبر الإنترنت