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

خاصية البحث

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

challenge icon

التحدي

سهل

لنقم بتحسين نظام إدارة المكتبة الخاص بك بقدرات بحث قوية! فالمكتبة لا تكون مفيدة للغاية إذا لم يتمكن المستخدمون من العثور على الكتب التي يبحثون عنها. ستضيف طرقاً (methods) للبحث حسب العنوان والمؤلف، مما يجعل مكتبتك وظيفية حقاً.

ستستمر في البناء على كودك الحالي عبر أربعة ملفات:

  • Book.java: احتفظ بفئة Book الخاصة بك مع جميع الوظائف الحالية—isbn، title، author، isAvailable، borrowedBy، getDetails()، وطرق الـ getters/setters المناسبة. تأكد من وجود طرق getter لـ title و author إذا لم تكن قد أضفتها بالفعل.
  • User.java: احتفظ بفئة User كما هي دون تغيير مع id، name، و ArrayList الخاص بـ borrowedBooks، و borrowBook()، و returnBook()، و getBorrowedCount()، و toString().
  • Library.java: قم بتوسيع فئة Library الخاصة بك بوظائف البحث. احتفظ بجميع الطرق الحالية (addBook، registerUser، findBookByIsbn، findUserById، borrowBook، returnBook) وأضف طرق البحث الجديدة هذه:

    searchByTitle(String keyword) - تعيد ArrayList<Book> يحتوي على جميع الكتب التي يتضمن عنوانها الكلمة المفتاحية (غير حساس لحالة الأحرف). استخدم toLowerCase() على كل من العنوان والكلمة المفتاحية للمقارنة.

    searchByAuthor(String keyword) - تعيد ArrayList<Book> يحتوي على جميع الكتب التي يتضمن اسم مؤلفها الكلمة المفتاحية (غير حساس لحالة الأحرف).

    getAvailableBooks() - تعيد ArrayList<Book> يحتوي فقط على الكتب المتاحة حالياً للاستعارة.

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

    قم بإنشاء Library، وأضف الكتب الثلاثة جميعاً، وسجل المستخدم. قم بمعالجة عملية الاستعارة (بتنسيق userId:isbn). ثم قم بإجراء عمليتي البحث—المدخل الأول هو كلمة مفتاحية للعنوان، والثاني هو كلمة مفتاحية للمؤلف.

    اطبع النتائج بهذا الترتيب:

    • بعد الاستعارة، اطبع تأكيد الاستعارة
    • اطبع Title search '[keyword]': متبوعاً بتفاصيل كل كتاب مطابق في أسطر منفصلة (باستخدام getDetails()). إذا لم تكن هناك مطابقات، اطبع No books found
    • اطبع Author search '[keyword]': متبوعاً بتفاصيل كل كتاب مطابق. إذا لم تكن هناك مطابقات، اطبع No books found
    • اطبع Available books: متبوعاً بتفاصيل كل كتاب متاح

ستتلقى المدخلات بهذا الترتيب: book1 ISBN، book1 title، book1 author، book2 ISBN، book2 title، book2 author، book3 ISBN، book3 title، book3 author، user ID، user name، عملية الاستعارة، الكلمة المفتاحية للبحث عن العنوان، الكلمة المفتاحية للبحث عن المؤلف.

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

Alice borrowed Clean Code
Title search 'clean':
[ISBN-001] Clean Code by Robert Martin
[ISBN-002] The Clean Coder by Robert Martin
Author search 'martin':
[ISBN-001] Clean Code by Robert Martin
[ISBN-002] The Clean Coder by Robert Martin
Available books:
[ISBN-002] The Clean Coder by Robert Martin
[ISBN-003] Design Patterns by Gang of Four

لاحظ كيف تستخدم طرق البحث مطابقة غير حساسة لحالة الأحرف—فالبحث عن "clean" يجد كلاً من "Clean Code" و "The Clean Coder". قائمة الكتب المتاحة تستبعد بشكل صحيح الكتاب المستعار. قدرات البحث هذه تحول مكتبتك من مجرد مجموعة بسيطة إلى نظام قابل للاستخدام حقاً!

جرّب بنفسك

import java.util.Scanner;
import java.util.ArrayList;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // قراءة معلومات الكتاب 1
        String isbn1 = scanner.nextLine();
        String title1 = scanner.nextLine();
        String author1 = scanner.nextLine();
        
        // قراءة معلومات الكتاب 2
        String isbn2 = scanner.nextLine();
        String title2 = scanner.nextLine();
        String author2 = scanner.nextLine();
        
        // قراءة معلومات الكتاب 3
        String isbn3 = scanner.nextLine();
        String title3 = scanner.nextLine();
        String author3 = scanner.nextLine();
        
        // قراءة معلومات المستخدم
        String userId = scanner.nextLine();
        String userName = scanner.nextLine();
        
        // قراءة عملية الاستعارة
        String borrowOp = scanner.nextLine();
        
        // قراءة الكلمات المفتاحية للبحث
        String titleKeyword = scanner.nextLine();
        String authorKeyword = scanner.nextLine();
        
        // إنشاء كائنات الكتاب (Book)
        Book book1 = new Book(isbn1, title1, author1);
        Book book2 = new Book(isbn2, title2, author2);
        Book book3 = new Book(isbn3, title3, author3);
        
        // إنشاء كائن المستخدم (User)
        User user = new User(userId, userName);
        
        // إنشاء المكتبة وإضافة الكتب والمستخدم
        Library library = new Library();
        library.addBook(book1);
        library.addBook(book2);
        library.addBook(book3);
        library.registerUser(user);
        
        // معالجة عملية الاستعارة
        String[] parts = borrowOp.split(":");
        String opUserId = parts[0];
        String opIsbn = parts[1];
        library.borrowBook(opUserId, opIsbn);
        
        // TODO: البحث بالعنوان
        // طباعة "Title search '[titleKeyword]':"
        // استخدام library.searchByTitle(titleKeyword)
        // طباعة getDetails() لكل كتاب، أو "No books found" إذا كانت القائمة فارغة
        
        // TODO: البحث بالمؤلف
        // طباعة "Author search '[authorKeyword]':"
        // استخدام library.searchByAuthor(authorKeyword)
        // طباعة getDetails() لكل كتاب، أو "No books found" إذا كانت القائمة فارغة
        
        // TODO: الكتب المتاحة
        // طباعة "Available books:"
        // استخدام library.getAvailableBooks()
        // طباعة getDetails() لكل كتاب
    }
}

جميع دروس Object Oriented Programming