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

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

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

challenge icon

التحدي

متوسط

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

قم بتنفيذ الوظائف المطلوبة في الملفات التالية:

  • book.py - يحتوي على تعريف فئة Book
  • user.py - يحتوي على تعريف فئة User
  • library.py - يحتوي على فئة Library حيث ستقوم بتنفيذ طريقة borrow_book

اتبع تعليقات TODO في كل ملف للحصول على إرشادات التنفيذ خطوة بخطوة. يجب أن تتعامل طريقة borrow_book مع سيناريوهات مختلفة بما في ذلك عدم العثور على الكتاب/المستخدم وفحوصات التوفر.

ورقة مرجعية

يركز هذا التحدي على تنفيذ نظام إدارة مكتبة باستخدام مبادئ البرمجة كائنية التوجه. يتضمن النظام ثلاث فئات رئيسية:

  • فئة Book - تمثل الكتب الفردية في المكتبة
  • فئة User - تمثل مستخدمي المكتبة الذين يمكنهم استعارة الكتب
  • فئة Library - تدير مجموعة الكتب وتتعامل مع عمليات الاستعارة

تتضمن الوظيفة الأساسية تنفيذ طريقة borrow_book التي تتعامل مع:

  • التحقق مما إذا كانت الكتب والمستخدمون موجودين في النظام
  • التحقق من توفر الكتاب قبل الإعارة
  • إدارة عملية الاستعارة بين المستخدمين والكتب

جرّب بنفسك

from book import Book
from user import User
from library import Library
import random

# معالج حالات الاختبار الشاملة
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)
    
    # محاولة استعارة كتاب غير متاح
    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 == "stress_test":
    library = Library("Large Library")
    
    # إنشاء وإضافة 100 كتاب
    for i in range(1, 101):
        book = Book(f"Book {i}", f"Author {i}", f"ISBN-{i}")
        library.add_book(book)
    
    # إنشاء وإضافة 50 مستخدم
    for i in range(1, 51):
        user = User(f"U{i:03d}", f"User {i}")
        library.add_user(user)
    
    # إجراء 200 عملية استعارة
    successful = 0
    book_not_found = 0
    user_not_found = 0
    not_available = 0
    
    for _ in range(200):
        # توليد أرقام ISBN ومعرفات مستخدمين عشوائية (بعضها صالح وبعضها غير صالح)
        isbn = f"ISBN-{random.randint(1, 120)}"  # بعضها سيكون غير صالح
        user_id = f"U{random.randint(1, 60):03d}"  # بعضها سيكون غير صالح
        
        result = library.borrow_book(isbn, user_id)
        
        if result == "Book borrowed successfully":
            successful += 1
        elif result == "Book not found":
            book_not_found += 1
        elif result == "User not found":
            user_not_found += 1
        elif result == "Book is not available":
            not_available += 1
    
    print(f"Successful borrows: {successful}")
    print(f"Book not found: {book_not_found}")
    print(f"User not found: {user_not_found}")
    print(f"Book not available: {not_available}")

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