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

فئات الكتاب والمستخدم

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

challenge icon

التحدي

سهل

دعنا نواصل بناء نظام إدارة المكتبة من خلال توسيع فئتي Book و User من الدرس السابق. الآن ستضيف القدرة للمستخدمين على استعارة الكتب، مما يخلق اتصالاً حقيقياً بين هذين الكيانين.

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

  • Book.java: قم بتحسين فئة Book الخاصة بك من التحدي السابق. احتفظ بجميع الوظائف الحالية (isbn، title، author، isAvailable مع getters/setters، و getDetails()). أضف الآن حقلاً خاصاً (private field) باسم borrowedBy من نوع String يقوم بتخزين معرف (ID) المستخدم الذي استعار الكتاب (أو null إذا لم يكن مستعاراً). أضف getter لـ borrowedBy و setter يقوم أيضاً بتحديث isAvailable وفقاً لذلك—عندما يتم استعارة كتاب (يتم تعيين borrowedBy إلى قيمة غير null)، يصبح غير متاح؛ وعند إعادته (تعيينه إلى null)، يصبح متاحاً مرة أخرى.
  • User.java: قم بتوسيع فئة User لتتبع الكتب المستعارة. احتفظ بـ id، name، المنشئ (constructor)، الـ getters، و toString() الحالية. أضف حقلاً خاصاً ArrayList<Book> يسمى borrowedBooks (قم بتهيئته في المنشئ). أنشئ طريقة borrowBook(Book book) تضيف الكتاب إلى قائمة المستخدم وتعين borrowedBy الخاص بالكتاب إلى معرف هذا المستخدم. أنشئ طريقة returnBook(Book book) تزيل الكتاب من القائمة وتعين borrowedBy إلى null. أضف طريقة getBorrowedCount() التي تعيد عدد الكتب التي يمتلكها المستخدم حالياً.
  • Main.java: قم باستعراض نظام الاستعارة أثناء العمل. ستتلقى خمسة مدخلات: ISBN، العنوان (title)، المؤلف (author) لكتاب، ثم معرف المستخدم (user ID) واسمه.

    أنشئ Book و User باستخدام هذه المدخلات. اطبع تفاصيل الكتاب وحالة توفره. ثم اجعل المستخدم يستعير الكتاب. اطبع توفر الكتاب مرة أخرى، متبوعاً بمن استعاره بالتنسيق Borrowed by: [userId]. اطبع عدد الكتب التي يمتلكها المستخدم بالتنسيق [name] has [count] book(s). أخيراً، اجعل المستخدم يعيد الكتاب واطبع التوفر مرة أخيرة.

ستتلقى خمسة مدخلات بالترتيب: ISBN (String)، العنوان (String)، المؤلف (String)، معرف المستخدم (String)، واسم المستخدم (String).

على سبيل المثال، مع المدخلات 978-0-13-468599-1، Effective Java، Joshua Bloch، U001، و Alice، سيكون مخرجك:

[978-0-13-468599-1] Effective Java by Joshua Bloch
Available: true
Available: false
Borrowed by: U001
Alice has 1 book(s)
Available: true

يعتمد هذا التحدي مباشرة على عملك السابق، حيث يضيف العلاقة الحاسمة بين الكتب والمستخدمين التي تجعل نظام المكتبة وظيفياً. ستستخدم التركيب (User "لديه" Books) وترى كيف يمكن للتغييرات في كائن واحد أن تؤثر على كائن آخر من خلال طرق مصممة جيداً!

جرّب بنفسك

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // قراءة معلومات الكتاب
        String isbn = scanner.nextLine();
        String title = scanner.nextLine();
        String author = scanner.nextLine();
        
        // قراءة معلومات المستخدم
        String userId = scanner.nextLine();
        String userName = scanner.nextLine();
        
        // إنشاء كائن Book باستخدام isbn والعنوان والمؤلف
        Book book = new Book(isbn, title, author);
        
        // إنشاء كائن User باستخدام userId و userName
        User user = new User(userId, userName);
        
        // طباعة تفاصيل الكتاب باستخدام getDetails()
        System.out.println(book.getDetails());
        
        // طباعة ما إذا كان الكتاب متاحاً (التنسيق: "Available: true" أو "Available: false")
        System.out.println("Available: " + book.isAvailable());
        
        // جعل المستخدم يستعير الكتاب
        user.borrowBook(book);
        
        // طباعة توفر الكتاب مرة أخرى
        System.out.println("Available: " + book.isAvailable());
        
        // طباعة من استعار الكتاب
        System.out.println("Borrowed by: " + book.getBorrowedBy());
        
        // طباعة عدد الكتب التي يملكها المستخدم
        System.out.println(user.getName() + " has " + user.getBorrowedCount() + " book(s)");
        
        // جعل المستخدم يعيد الكتاب
        user.returnBook(book);
        
        // طباعة التوفر مرة أخيرة
        System.out.println("Available: " + book.isAvailable());
    }
}

جميع دروس Object Oriented Programming