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

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

جزء من قسم Object Oriented Programming في رحلة Java على Coddy — الدرس 79 من 87.

challenge icon

التحدي

سهل

دعنا نواصل بناء نظام إدارة المكتبة من خلال إنشاء نظام استعارة مناسب باستخدام فئة Library التي تدير مجموعة الكتب والمستخدمين. هذا هو المكان الذي يبدأ فيه نظامك في الشعور وكأنه مكتبة حقيقية - تتبع من يملك ماذا وفرض قواعد الاستعارة!

ستقوم بتنظيم الكود الخاص بك عبر أربعة ملفات:

  • Book.java: احتفظ بفئة Book الخاصة بك من التحدي السابق مع جميع وظائفها— isbn، title، author، isAvailable، borrowedBy، getDetails()، والمسترجعات/المعينات (getters/setters) المناسبة.
  • User.java: احتفظ بفئة User الخاصة بك مع id، name، و borrowedBooks ArrayList، و borrowBook()، و returnBook()، و getBorrowedCount()، و toString().
  • Library.java: أنشئ فئة Library المركزية التي تدير كل شيء. يجب أن تحتفظ مكتبتك بقائمتين من نوع ArrayList—واحدة لكائنات Book والأخرى لكائنات User. قم بتضمين هذه الأساليب (methods):

    addBook(Book book) - يضيف كتاباً إلى مجموعة المكتبة.

    registerUser(User user) - يضيف مستخدماً إلى المستخدمين المسجلين في المكتبة.

    findBookByIsbn(String isbn) - يبحث عبر الكتب ويعيد الكتاب الذي يطابق ISBN، أو null إذا لم يتم العثور عليه.

    findUserById(String id) - يبحث عبر المستخدمين ويعيد المستخدم الذي يطابق ID، أو null إذا لم يتم العثور عليه.

    borrowBook(String userId, String isbn) - يجد المستخدم والكتاب، ثم إذا كان كلاهما موجوداً والكتاب متاحاً، يجعل المستخدم يستعير الكتاب ويطبع [userName] borrowed [bookTitle]. إذا لم يكن الكتاب متاحاً، اطبع Book not available. إذا لم يتم العثور على المستخدم أو الكتاب، اطبع Invalid user or book.

    returnBook(String userId, String isbn) - يجد المستخدم والكتاب، ثم يجعل المستخدم يعيد الكتاب ويطبع [userName] returned [bookTitle]. إذا لم يتم العثور على المستخدم أو الكتاب، اطبع Invalid user or book.

  • Main.java: اجمع نظام مكتبتك معاً! ستتلقى مدخلات لكتابين (ISBN، العنوان، المؤلف لكل منهما)، ومستخدم واحد (ID، الاسم)، ثم سلسلة من العمليات.

    أنشئ Library، وأضف كلا الكتابين، وسجل المستخدم. ثم قم بمعالجة العمليات—ستتلقى سلسلة نصية مفصولة بفاصلة حيث يتم تنسيق كل عملية كـ borrow:userId:isbn أو return:userId:isbn.

    بعد معالجة جميع العمليات، اطبع ملخصاً يوضح حالة كل كتاب بالتنسيق [isbn]: [Available/Borrowed].

ستتلقى المدخلات بهذا الترتيب: book1 ISBN، book1 title، book1 author، book2 ISBN، book2 title، book2 author، user ID، user name، وأخيراً سلسلة العمليات.

على سبيل المثال، مع المدخلات ISBN-001، Clean Code، Robert Martin، ISBN-002، Design Patterns، Gang of Four، U001، Alice، و borrow:U001:ISBN-001,borrow:U001:ISBN-002,return:U001:ISBN-001، سيكون مخرجك هو:

Alice borrowed Clean Code
Alice borrowed Design Patterns
Alice returned Clean Code
ISBN-001: Available
ISBN-002: Borrowed

يجمع هذا التحدي بين التركيب (composition)، والكبسلة (encapsulation)، وتصميم الأساليب (methods) لإنشاء نظام متماسك. تعمل فئة Library كمنسق، حيث تفوض منطق الاستعارة الفعلي إلى فئتي User و Book مع إدارة المجموعة الإجمالية!

جرّب بنفسك

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // قراءة معلومات الكتاب الأول
        String isbn1 = scanner.nextLine();
        String title1 = scanner.nextLine();
        String author1 = scanner.nextLine();
        
        // قراءة معلومات الكتاب الثاني
        String isbn2 = scanner.nextLine();
        String title2 = scanner.nextLine();
        String author2 = scanner.nextLine();
        
        // قراءة معلومات المستخدم
        String userId = scanner.nextLine();
        String userName = scanner.nextLine();
        
        // قراءة سلسلة العمليات (مفصولة بفاصلة، التنسيق: borrow:userId:isbn أو return:userId:isbn)
        String operationsStr = scanner.nextLine();
        
        // TODO: إنشاء كائنات Book للكتاب الأول والكتاب الثاني
        
        // TODO: إنشاء كائن User
        
        // TODO: إنشاء Library، وإضافة كلا الكتابين، وتسجيل المستخدم
        
        // TODO: تقسيم operationsStr بواسطة "," ومعالجة كل عملية
        //       لكل عملية، قم بالتقسيم بواسطة ":" للحصول على الإجراء (action)، و userId، و isbn
        //       استدعاء library.borrowBook() أو library.returnBook() وفقاً لذلك
        
        // TODO: طباعة ملخص لكل كتاب بالتنسيق "[isbn]: [Available/Borrowed]"
    }
}

جميع دروس Object Oriented Programming