نظام الاستعارة
جزء من قسم Object Oriented Programming في رحلة Python على Coddy — الدرس 57 من 64.
التحدي
متوسطفي هذا التحدي، ستقوم بإضافة وظيفة الاستعارة (borrowing functionality) إلى نظام إدارة المكتبة.
قم بتحرير library.py وقم بتنفيذ method المسمى borrow_book، باتباع تعليقات TODO.
الملفات الأخرى متوفرة لك وهي مقفلة:
book.py—classالـBookالذي قمت ببنائه في التحدي السابقuser.py—classالـUser، الذي يحتوي علىuser_idوnameوbooks_borroweddriver.py— يقوم بتشغيل سيناريوهات الـtestمقابل تنفيذك
يجب أن يقوم borrow_book(book_isbn, user_id) بعمل return لواحد بالضبط من: "Book not found"، أو "User not found"، أو "Book is not available"، أو "Book borrowed successfully".
جرّب بنفسك
from book import Book
from user import User
from library import Library
# معالج حالات الاختبار الشامل
test_case = input()
# اختبارات الوظائف الأساسية
if test_case == "borrow_success":
library = Library("Community Library")
# إضافة الكتب والمستخدمين
book = Book("The Great Gatsby", "F. Scott Fitzgerald", "123456")
library.add_book(book)
user = User("U001", "Alice")
library.add_user(user)
# استعارة كتاب
result = library.borrow_book("123456", "U001")
print(result)
print(f"Book available: {book.available}")
print(f"Books borrowed by user: {len(user.books_borrowed)}")
elif test_case == "book_not_found":
library = Library("Community Library")
user = User("U001", "Alice")
library.add_user(user)
result = library.borrow_book("nonexistent", "U001")
print(result)
elif test_case == "user_not_found":
library = Library("Community Library")
book = Book("The Great Gatsby", "F. Scott Fitzgerald", "123456")
library.add_book(book)
result = library.borrow_book("123456", "nonexistent")
print(result)
elif test_case == "book_not_available":
library = Library("Community Library")
# إضافة الكتب والمستخدمين
book = Book("The Great Gatsby", "F. Scott Fitzgerald", "123456")
book.available = False # الكتاب مستعار بالفعل
library.add_book(book)
user = User("U001", "Alice")
library.add_user(user)
# Try to borrow unavailable book
result = library.borrow_book("123456", "U001")
print(result)
# حالات الحافة واختبارات إضافية
elif test_case == "multiple_books":
library = Library("Community Library")
user = User("U001", "Alice")
library.add_user(user)
# إنشاء كتب متعددة
books = [
Book("Book 1", "Author 1", "111"),
Book("Book 2", "Author 2", "222"),
Book("Book 3", "Author 3", "333")
]
for book in books:
library.add_book(book)
# استعارة كتب متعددة
results = []
for book in books:
results.append(library.borrow_book(book.isbn, "U001"))
for result in results:
print(result)
print(f"Total books borrowed: {len(user.books_borrowed)}")
elif test_case == "multiple_users":
library = Library("Community Library")
book = Book("Popular Book", "Famous Author", "999")
library.add_book(book)
# إنشاء مستخدمين متعددين
users = [
User("U001", "Alice"),
User("U002", "Bob"),
User("U003", "Charlie")
]
for user in users:
library.add_user(user)
# محاولة استعارة نفس الكتاب مع مستخدمين مختلفين
result1 = library.borrow_book("999", "U001")
result2 = library.borrow_book("999", "U002") # يجب أن تفشل
print(result1)
print(result2)
print(f"Book's borrower: {book.borrower.name}")
elif test_case == "return_book":
library = Library("Community Library")
book = Book("The Great Gatsby", "F. Scott Fitzgerald", "123456")
library.add_book(book)
user = User("U001", "Alice")
library.add_user(user)
# استعارة الكتاب
borrow_result = library.borrow_book("123456", "U001")
print(borrow_result)
# التحقق من حالة الكتاب
print(f"Book available: {book.available}")
print(f"Book borrower: {book.borrower.name}")
print(f"User's borrowed books: {len(user.books_borrowed)}")
print(f"First borrowed book title: {user.books_borrowed[0].title}")
elif test_case == "empty_library":
library = Library("Empty Library")
result = library.borrow_book("any_isbn", "any_user_id")
print(result)
elif test_case == "borrower_reference":
library = Library("Community Library")
book = Book("The Great Gatsby", "F. Scott Fitzgerald", "123456")
library.add_book(book)
user = User("U001", "Alice")
library.add_user(user)
# استعارة الكتاب
library.borrow_book("123456", "U001")
# التحقق من المراجع
print(f"Book's borrower name: {book.borrower.name}")
print(f"First book in user's borrowed list: {user.books_borrowed[0].title}")جميع دروس Object Oriented Programming
1أساسيات OOP
الملفات الخارجيةمقدمة في OOPClasses مقابل Objectsمعامل selfMethodsAttributesدالة البناء (__init__)مراجعة - آلة حاسبة بسيطة4الوراثة
الوراثة الأساسيةدالة ()superإعادة تعريف الدوال (Method Overriding)الوراثة المتعددةترتيب استدعاء الدوال (Method Resolution Order)مراجعة - هيكلية الموظفين5تعدد الأشكال
مراجعة إعادة تعريف الدوالمفهوم Duck Typingالأصناف والدوال المجردةتصميم الواجهاتملخص - حاسبة الأشكال3خصائص الـ Class
متغيرات الـ Instance مقابل متغيرات الـ ClassProperty Decoratorsالسمات الخاصةمراجعة - مدير الحساب البنكي6التغليف (Encapsulation)
الأعضاء العامة والمحمية والخاصةمحددات الوصولإخفاء المعلوماتProperty Decorators متقدمةمراجعة - نظام سجلات الطلاب12مشروع: إدارة المكتبة
نظرة عامة على المشروعفئات الكتاب والمستخدمنظام الاستعارةخاصية البحثواجهة المسؤولالاختبار والتكامل