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

نظام الاستعارة

جزء من قسم البرمجة كائنية التوجّه في رحلة GDScript على Coddy. الدرس 58 من 65.

challenge icon

التحدي

متوسط

انقل الإعارة إلى المكتبة. احتفظ بكل ما كتبته في الخطوات السابقة؛ التغيير الوحيد يكون في library.gd.

أضف ثلاث دوال إلى Library:

  1. find_book(isbn: String) -> Book تُعيد الكتاب الذي يحمل رقم ISBN هذا، أو null إذا لم يوجد.
  2. find_user(user_id: String) -> User تُعيد المستخدم الذي يحمل هذا المعرّف، أو null.
  3. borrow_book(isbn: String, user_id: String) -> String تُعير كتابًا وتُعيد رسالة. تحقّق بالترتيب التالي:
    • لا يوجد كتاب يحمل رقم ISBN هذا: أعد Book not found
    • لا يوجد مستخدم يحمل هذا المعرّف: أعد User not found
    • الكتاب غير متاح: أعد Book is not available
    • وإلا، عيّن available للكتاب إلى false وعيّن borrower_id فيه إلى معرّف المستخدم، وأضف رقم ISBN إلى borrowed_isbns لدى المستخدم، ثم أعد Book borrowed successfully

يستبدل الكود المقدّم lend بـ borrow ISBN|ID، الذي يطبع الرسالة، ويضيف loans ID (عناوين الكتب التي استعارها المستخدم) وholder ISBN (من لديه كتاب). يستخدم كلاهما find_book() وfind_user(). بالنسبة إلى هذا الإدخال:

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 U001

يكون الناتج:

Book not found
User not found
Book borrowed successfully
Book is not available
Dune is borrowed by Alice
Alice has borrowed:
- Dune

ضع الكود في 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]))
			"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()

جميع دروس البرمجة كائنية التوجّه

تدرّب بنفسك: مترجم GDScript عبر الإنترنت