Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

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

جزء من قسم Object Oriented Programming في رحلة Python على Coddy. الدرس 57 من 64.

challenge icon

التحدي

متوسط

في هذا التحدي، ستقوم بإضافة وظيفة الاستعارة (borrowing functionality) إلى نظام إدارة المكتبة.

قم بتحرير library.py وقم بتنفيذ method المسمى borrow_book، باتباع تعليقات TODO.

الملفات الأخرى متوفرة لك وهي مقفلة:

  • book.pyclass الـ Book الذي قمت ببنائه في التحدي السابق
  • user.pyclass الـ User، الذي يحتوي على user_id و name و books_borrowed
  • driver.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

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