Menu
Coddy logo textTech

מערכת השאלת ספרים

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

challenge icon

אתגר

קל

נמשיך לבנות את מערכת ניהול הספרייה על ידי יצירת מערכת השאלה מסודרת עם מחלקת Library שמנהלת את אוסף הספרים והמשתמשים. כאן המערכת שלך מתחילה להרגיש כמו ספרייה אמיתית: מעקב אחר מי מחזיק במה ואכיפת כללי ההשאלה!

תארגן את הקוד שלך בארבעה קבצים:

  • Book.java: שמור את המחלקה Book מהאתגר הקודם, עם כל הפונקציונליות שלה: isbn, title, author, isAvailable, borrowedBy, getDetails(), והפעולות המתאימות לקבלת ערכים ולעדכונם.
  • User.java: שמור את המחלקה User עם id, name, מערך ה־ArrayList בשם borrowedBooks, והפעולות borrowBook(), returnBook(), getBorrowedCount() ו־toString().
  • Library.java: צור את המחלקה המרכזית Library שמנהלת את הכול. הספרייה שלך צריכה לנהל שני מערכי ArrayList: אחד לאובייקטים מסוג Book ואחד לאובייקטים מסוג User. כלול את הפעולות האלה:

    addBook(Book book) - מוסיפה ספר לאוסף הספרייה.

    registerUser(User user) - מוסיפה משתמש לרשימת המשתמשים הרשומים בספרייה.

    findBookByIsbn(String isbn) - מחפשת בין הספרים ומחזירה את הספר עם מספר ה־ISBN התואם, או null אם לא נמצא.

    findUserById(String 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, כותרת ומחבר של כל אחד), משתמש אחד (מזהה ושם), ולאחר מכן סדרה של פעולות.

    צור Library, הוסף את שני הספרים ורשום את המשתמש. לאחר מכן עבד את הפעולות: תקבל מחרוזת מופרדת בפסיקים, שבה כל פעולה מופיעה בפורמט borrow:userId:isbn או return:userId:isbn.

    לאחר עיבוד כל הפעולות, הדפס סיכום המציג את הסטטוס של כל ספר בפורמט [isbn]: [Available/Borrowed].

הקלט יתקבל בסדר הבא: ISBN של book1, הכותרת של book1, המחבר של book1, ISBN של book2, הכותרת של book2, המחבר של book2, מזהה המשתמש, שם המשתמש ולבסוף מחרוזת הפעולות.

לדוגמה, עם הקלט 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

האתגר הזה משלב הרכבה, כימוס ועיצוב פעולות כדי ליצור מערכת מגובשת. המחלקה Library פועלת כמתאמת, מאצילה את לוגיקת ההשאלה בפועל למחלקות User ו־Book, ובמקביל מנהלת את האוסף כולו!

נסו בעצמכם

import java.util.Scanner;

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();
        
        // קרא את פרטי המשתמש
        String userId = scanner.nextLine();
        String userName = scanner.nextLine();
        
        // קרא את מחרוזת הפעולות (מופרדת בפסיקים, בפורמט: borrow:userId:isbn או return:userId:isbn)
        String operationsStr = scanner.nextLine();
        
        // TODO: צור אובייקטים מסוג Book עבור book1 ו־book2
        
        // TODO: צור אובייקט מסוג User
        
        // TODO: צור אובייקט מסוג Library, הוסף את שני הספרים ורשום את המשתמש
        
        // TODO: פצל את operationsStr לפי "," ועבד כל פעולה
        //       לכל פעולה, פצל לפי ":" כדי לקבל את action, userId, isbn
        //       קרא ל־library.borrowBook() או ל־library.returnBook() בהתאם
        
        // TODO: הדפס סיכום לכל ספר בפורמט "[isbn]: [Available/Borrowed]"
    }
}

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

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