نظام الاستعارة
جزء من قسم 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مشروع: إدارة المكتبة
نظرة عامة على المشروعفئات الكتاب والمستخدمنظام الاستعارةخاصية البحثواجهة المسؤولالاختبار والتكاملتدرّب بنفسك: مترجم Python عبر الإنترنت