نظام الاستعارة
جزء من قسم البرمجة كائنية التوجّه في رحلة GDScript على Coddy. الدرس 58 من 65.
التحدي
متوسطانقل الإعارة إلى المكتبة. احتفظ بكل ما كتبته في الخطوات السابقة؛ التغيير الوحيد يكون في library.gd.
أضف ثلاث دوال إلى Library:
find_book(isbn: String) -> Bookتُعيد الكتاب الذي يحمل رقم ISBN هذا، أوnullإذا لم يوجد.find_user(user_id: String) -> Userتُعيد المستخدم الذي يحمل هذا المعرّف، أوnull.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
- لا يوجد كتاب يحمل رقم ISBN هذا: أعد
يستبدل الكود المقدّم 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()
جميع دروس البرمجة كائنية التوجّه
1أساسيات البرمجة كائنية التوجه
الملفات الخارجيةمقدمة إلى البرمجة كائنية التوجهالفئات مقابل الكائناتالكلمة المفتاحية selfالأساليبالخصائصالمُنشئ (_init)مراجعة - آلة حاسبة بسيطة4تعدد الأشكال
إعادة النظر في تجاوز الأساليبكتابة الأنواع بأسلوب البطةالفئات والأساليب المجرّدةتصميم الواجهاتمراجعة - حاسبة الأشكال10أنماط التصميم، الجزء الثاني
نمط الأوامرنمط المحوّلنمط المُزيّننمط الطريقة القالبيةنمط الحالةالنمط المركّب2خصائص الأصناف
متغيرات الكائن مقابل المتغيرات الساكنةالدوال الساكنةمُعيِّنات الخصائصمُسترجِعات الخصائصخاص وفقًا للاتفاقيةمراجعة - مدير الحسابات البنكية5التغليف
الأعضاء العامة والخاصةالتحقق من الصحة باستخدام دوال الضبطإخفاء المعلوماتالخصائص للقراءة فقطمراجعة - نظام سجلات الطلاب8مفاهيم متقدمة في البرمجة كائنية التوجه
التركيب مقابل الوراثةالأصناف الداخليةالعُقد كمكوّناتRefCounted مقابل Nodeالتعدادات في الأصناف11المشروع: إدارة المكتبة
نظرة عامة على المشروعفئتا الكتب والمستخدمينتدرّب بنفسك: مترجم GDScript عبر الإنترنت