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

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

جزء من قسم البرمجة كائنية التوجه في رحلة Python على Coddy. الدرس 57 من 64.

challenge icon

التحدي

متوسط

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

عدّل library.py ونفّذ الطريقة borrow_book، باتباع تعليقات TODO.

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

  • book.py: الفئة Book التي أنشأتها في التحدي السابق
  • user.py: الفئة User التي تحتوي على user_id وname وbooks_borrowed
  • driver.py: يشغّل سيناريوهات الاختبار مقابل تنفيذك

يجب أن تُرجع borrow_book(book_isbn, user_id) قيمة واحدة فقط من القيم التالية تمامًا: "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}")

جميع دروس البرمجة كائنية التوجه

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