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

الاختبار والتكامل

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

challenge icon

التحدي

متوسط

أكمِل النظام بإضافة عمليات الإرجاع، ثم دع الاختبارات تشغّل جميع أجزائه معًا. احتفظ بكل ما كتبته في الخطوات السابقة؛ سيتغير library.gd وuser.gd.

في Library، اكتب return_book(isbn: String, user_id: String) -> String. تحقّق بالترتيب التالي:

  • لا يوجد كتاب يحمل ISBN هذا: أعد Book not found
  • لا يوجد مستخدم يحمل هذا المعرّف: أعد User not found
  • الكتاب متاح، أو أن borrower_id الخاص به يعود إلى مستخدم آخر: أعد This book was not borrowed by this user
  • وإلا، اجعل الكتاب متاحًا مجددًا، واضبط borrower_id على ""، واحذف ISBN من borrowed_isbns الخاص بالمستخدم، وأعد Book returned successfully

في User، اكتب return_all_books(library: Library) -> int. تعيد هذه الدالة كل كتاب استعاره المستخدم عبر library.return_book()، وتعيد عدد الكتب التي أُعيدت. يتلقى المستخدم المكتبة كوسيط ولا يخزّنها، وبذلك لا يشير أي كائنين إلى بعضهما.

يضيف الكود المرفق الأمرين return ISBN|ID وreturn_all ID. بالنسبة إلى هذا الإدخال:

Community
book The Great Gatsby|F. Scott Fitzgerald|123456
book 1984|George Orwell|345678
user U001|Alice
user U002|Bob
borrow 123456|U001
borrow 345678|U001
return 123456|U002
return_all U001
users
stats

يكون الناتج:

Book borrowed successfully
Book borrowed successfully
This book was not borrowed by this user
Books returned by Alice: 2
User: Alice (ID: U001) - Books borrowed: 0
User: Bob (ID: U002) - Books borrowed: 0
Total Books: 2
Available Books: 2
Borrowed Books: 0
Total Users: 2
Users with Books: 0

ضع الكود في 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]))
			"return":
				print(library.return_book(fields[0], fields[1]))
			"return_all":
				var reader: User = library.find_user(fields[0])
				var count: int = reader.return_all_books(library)
				print("Books returned by ", reader.user_name, ": ", count)
			"search":
				var term: String = parts[1] if parts.size() > 1 else ""
				var found: Array = library.search_by_title(term)
				print("Results for '%s': %d" % [term, found.size()])
				for book in found:
					print("- ", book.title, " by ", book.author)
			"stats":
				var stats: Dictionary = library.get_statistics()
				print("Total Books: ", stats["total_books"])
				print("Available Books: ", stats["available_books"])
				print("Borrowed Books: ", stats["borrowed_books"])
				print("Total Users: ", stats["total_users"])
				print("Users with Books: ", stats["users_with_books"])
			"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 عبر الإنترنت