Menu
Coddy logo textTech

בדיקות ושילוב

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

challenge icon

אתגר

קל

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

תעבוד עם כל שבעת הקבצים מהמערכת שהשלמת:

  • Book.java: מחלקת Book שלך עם isbn, title, author, isAvailable, borrowedBy, וכל השיטות הקשורות, כולל getDetails().
  • User.java: מחלקת User שלך עם id, name, רשימת borrowedBooks, ושיטות להשאלה ולהחזרה של ספרים.
  • LibraryException.java: מחלקת החריגה המותאמת האישית הבסיסית שלך.
  • BookNotAvailableException.java: החריגה שלך עבור ספרים שאינם זמינים.
  • LibraryAdmin.java: ממשק הניהול שלך והמימוש של AdminService.
  • Library.java: מחלקת Library המלאה שלך עם כל השיטות: הוספה והסרה של ספרים, רישום משתמשים, השאלה והחזרה, חיפוש וטיפול בחריגות.
  • Main.java: בדיקת האינטגרציה שלך שתדגים כיצד המערכת כולה פועלת יחד.

במחלקת Main שלך, תעבד סדרת פקודות שבודקות כל תכונה מרכזית של מערכת הספרייה שלך. הפקודות מגיעות כמחרוזת אחת, המופרדת בפסיקים, בפורמטים הבאים:

  • ADD_BOOK:isbn:title:author - הוסף ספר באמצעות AdminService
  • REGISTER_USER:id:name - רשום משתמש באמצעות AdminService
  • BORROW:userId:isbn - השאל ספר (עם טיפול בחריגות)
  • RETURN:userId:isbn - החזר ספר
  • SEARCH_TITLE:keyword - חפש ספרים לפי כותרת
  • SEARCH_AUTHOR:keyword - חפש ספרים לפי מחבר
  • REMOVE_BOOK:isbn - הסר ספר באמצעות AdminService

עבד כל פקודה והדפס את הפלט המתאים:

  • ADD_BOOK: Added: [title]
  • REGISTER_USER: Registered: [name]
  • BORROW: הדפס את הודעת ההצלחה או Error: [exception message]
  • RETURN: [userName] returned [bookTitle]
  • SEARCH_TITLE: הדפס Search '[keyword]': ולאחריו את הפרטים של כל ספר תואם, או No results
  • SEARCH_AUTHOR: אותו פורמט כמו בחיפוש לפי כותרת
  • REMOVE_BOOK: Removed: [isbn] או Cannot remove: [isbn]

לאחר כל הפקודות, הדפס סיכום סופי:

  • --- Final Status ---
  • Books: [count]
  • Users: [count]
  • עבור כל משתמש, הדפס [name]: [borrowedCount] book(s)

תקבל קלט אחד: מחרוזת הפקודות המופרדת בפסיקים.

לדוגמה, עבור הקלט ADD_BOOK:ISBN-001:Clean Code:Robert Martin,ADD_BOOK:ISBN-002:Effective Java:Joshua Bloch,REGISTER_USER:U001:Alice,REGISTER_USER:U002:Bob,BORROW:U001:ISBN-001,BORROW:U002:ISBN-001,SEARCH_TITLE:java,RETURN:U001:ISBN-001,REMOVE_BOOK:ISBN-001, הפלט שלך יהיה:

Added: Clean Code
Added: Effective Java
Registered: Alice
Registered: Bob
Alice borrowed Clean Code
Error: Book not available: ISBN-001
Search 'java':
[ISBN-002] Effective Java by Joshua Bloch
Alice returned Clean Code
Removed: ISBN-001
--- Final Status ---
Books: 1
Users: 2
Alice: 0 book(s)
Bob: 0 book(s)

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

נסו בעצמכם

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

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // קרא את הפקודות המופרדות בפסיקים
        String input = scanner.nextLine();
        String[] commands = input.split(",");
        
        // צור את Library ואת AdminService
        Library library = new Library();
        AdminService adminService = new AdminService(library);
        
        // עבד כל פקודה
        for (String command : commands) {
            String[] parts = command.split(":");
            String operation = parts[0];
            
            if (operation.equals("ADD_BOOK")) {
                String isbn = parts[1];
                String title = parts[2];
                String author = parts[3];
                if (adminService.addBook(isbn, title, author)) {
                    System.out.println("Added: " + title);
                }
            } else if (operation.equals("REMOVE_BOOK")) {
                String isbn = parts[1];
                if (adminService.removeBook(isbn)) {
                    System.out.println("Removed: " + isbn);
                } else {
                    System.out.println("Cannot remove: " + isbn);
                }
            } else if (operation.equals("REGISTER_USER")) {
                String id = parts[1];
                String name = parts[2];
                if (adminService.registerUser(id, name)) {
                    System.out.println("Registered: " + name);
                }
            } else if (operation.equals("BORROW")) {
                String userId = parts[1];
                String isbn = parts[2];
                try {
                    String result = library.borrowBook(userId, isbn);
                    System.out.println(result);
                } catch (LibraryException e) {
                    System.out.println("Error: " + e.getMessage());
                }
            }
            // TODO: הוסף טיפול בפקודה RETURN
            // TODO: הוסף טיפול בפקודה SEARCH_TITLE
            // TODO: הוסף טיפול בפקודה SEARCH_AUTHOR
        }
        
        // TODO: הדפס את המצב הסופי
        // --- Final Status ---
        // ספרים: [count]
        // משתמשים: [count]
        // לכל משתמש: [name]: [borrowedCount] ספרים
        System.out.println("Operations completed");
    }
}

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

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