Menu
Coddy logo textTech

מחלקות ספר ולקוח

חלק מהיחידה תכנות מונחה עצמים במסלול ה-Java של Coddy. שיעור 78 מתוך 87.

challenge icon

אתגר

קל

נמשיך לבנות את מערכת ניהול הספרייה על ידי הרחבת המחלקות Book ו־User מהשיעור הקודם. עכשיו נוסיף למשתמשים אפשרות לשאול ספרים, וכך ניצור קשר ממשי בין שתי הישויות האלה.

תארגנו את הקוד בשלושה קבצים:

  • Book.java: שפרו את המחלקה Book מהאתגר הקודם. שמרו על כל הפונקציונליות הקיימת (isbn, title, author, isAvailable עם getters/setters, ו־getDetails()). כעת הוסיפו שדה פרטי borrowedBy מסוג String, ששומר את המזהה של המשתמש ששאל את הספר (או null אם הספר לא נשאל). הוסיפו getter עבור borrowedBy ו־setter שמעדכן גם את isAvailable בהתאם: כאשר ספר נשאל (הערך של borrowedBy מוגדר לערך שאינו null), הוא הופך ללא זמין; כאשר הספר מוחזר (מוגדר ל־null), הוא הופך שוב לזמין.
  • User.java: הרחיבו את המחלקה User כדי לעקוב אחר ספרים שנשאלו. שמרו על השדות id ו־name, הבנאי, ה־getters ו־toString() הקיימים. הוסיפו שדה פרטי ArrayList<Book> בשם borrowedBooks (אתחלו אותו בבנאי). צרו מתודה borrowBook(Book book) שמוסיפה את הספר לרשימה של המשתמש ומגדירה את borrowedBy של הספר למזהה של המשתמש הזה. צרו מתודה returnBook(Book book) שמסירה את הספר מהרשימה ומגדירה את borrowedBy ל־null. הוסיפו מתודה getBorrowedCount() שמחזירה כמה ספרים יש למשתמש כרגע.
  • Main.java: הדגימו את מערכת השאלת הספרים בפעולה. תקבלו חמישה קלטים: ISBN, כותרת ומחבר של ספר, ולאחר מכן מזהה משתמש ושם.

    צרו אובייקט 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 "has" 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, title ו-author
        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());
    }
}

כל השיעורים ביחידה תכנות מונחה עצמים

תרגלו בעצמכם: קומפיילר Java אונליין