Menu
Coddy logo textTech

Funkcja wyszukiwania

Część sekcji Programowanie obiektowe ścieżki Java w Coddy. Lekcja 80 z 87.

challenge icon

Wyzwanie

Łatwy

Rozbudujmy Twój system zarządzania biblioteką o zaawansowane możliwości wyszukiwania! Biblioteka nie jest zbyt przydatna, jeśli użytkownicy nie mogą znaleźć książek, których szukają. Dodasz metody wyszukiwania według tytułu i autora, dzięki czemu Twoja biblioteka stanie się w pełni funkcjonalna.

Będziesz dalej rozwijać istniejący kod w czterech plikach:

  • Book.java: Zachowaj swoją klasę Book ze wszystkimi dotychczasowymi funkcjami: isbn, title, author, isAvailable, borrowedBy, getDetails() oraz odpowiednimi metodami pobierającymi i ustawiającymi. Upewnij się, że masz metody pobierające dla title i author, jeśli jeszcze ich nie dodano.
  • User.java: Pozostaw klasę User bez zmian, z id, name, tablicą ArrayList borrowedBooks, metodami borrowBook(), returnBook(), getBorrowedCount() oraz toString().
  • Library.java: Rozbuduj klasę Library o funkcje wyszukiwania. Zachowaj wszystkie istniejące metody (addBook, registerUser, findBookByIsbn, findUserById, borrowBook, returnBook) i dodaj następujące nowe metody wyszukiwania:

    searchByTitle(String keyword) — zwraca ArrayList<Book> zawierającą wszystkie książki, których tytuł zawiera słowo kluczowe (bez rozróżniania wielkości liter). Do porównania użyj toLowerCase() zarówno dla tytułu, jak i słowa kluczowego.

    searchByAuthor(String keyword) — zwraca ArrayList<Book> zawierającą wszystkie książki, których nazwisko autora zawiera słowo kluczowe (bez rozróżniania wielkości liter).

    getAvailableBooks() — zwraca ArrayList<Book> zawierającą tylko książki, które są obecnie dostępne do wypożyczenia.

  • Main.java: Zademonstruj działanie systemu wyszukiwania! Otrzymasz dane wejściowe dotyczące trzech książek (dla każdej: ISBN, tytuł, autor), następnie użytkownika (ID, imię), a po nich operację wypożyczenia i dwa zapytania wyszukiwania.

    Utwórz obiekt Library, dodaj wszystkie trzy książki i zarejestruj użytkownika. Wykonaj operację wypożyczenia (w formacie userId:isbn). Następnie przeprowadź dwa wyszukiwania: pierwsze dane wejściowe to słowo kluczowe będące tytułem, a drugie to słowo kluczowe będące nazwiskiem autora.

    Wyświetl wyniki w następującej kolejności:

    • Po wypożyczeniu wyświetl potwierdzenie wypożyczenia
    • Wyświetl Title search '[keyword]':, a następnie szczegóły każdej pasującej książki, w osobnych wierszach (używając getDetails()). Jeśli nie ma pasujących książek, wyświetl No books found
    • Wyświetl Author search '[keyword]':, a następnie szczegóły każdej pasującej książki. Jeśli nie ma pasujących książek, wyświetl No books found
    • Wyświetl Available books:, a następnie szczegóły każdej dostępnej książki

Otrzymasz dane wejściowe w następującej kolejności: ISBN książki book1, tytuł książki book1, autor książki book1, ISBN książki book2, tytuł książki book2, autor książki book2, ISBN książki book3, tytuł książki book3, autor książki book3, ID użytkownika, imię użytkownika, operacja wypożyczenia, słowo kluczowe wyszukiwania tytułu, słowo kluczowe wyszukiwania autora.

Na przykład dla danych wejściowych 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 wynikiem będzie:

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

Zwróć uwagę, że metody wyszukiwania dopasowują tekst bez rozróżniania wielkości liter: wyszukanie "clean" znajduje zarówno "Clean Code", jak i "The Clean Coder". Lista dostępnych książek prawidłowo pomija wypożyczoną książkę. Te możliwości wyszukiwania przekształcają Twoją bibliotekę ze zwykłego zbioru książek w naprawdę użyteczny system!

Spróbuj swoich sił

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

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Wczytaj informacje o książce 1
        String isbn1 = scanner.nextLine();
        String title1 = scanner.nextLine();
        String author1 = scanner.nextLine();
        
        // Wczytaj informacje o książce 2
        String isbn2 = scanner.nextLine();
        String title2 = scanner.nextLine();
        String author2 = scanner.nextLine();
        
        // Wczytaj informacje o książce 3
        String isbn3 = scanner.nextLine();
        String title3 = scanner.nextLine();
        String author3 = scanner.nextLine();
        
        // Wczytaj informacje o użytkowniku
        String userId = scanner.nextLine();
        String userName = scanner.nextLine();
        
        // Wczytaj operację wypożyczenia
        String borrowOp = scanner.nextLine();
        
        // Wczytaj słowa kluczowe do wyszukiwania
        String titleKeyword = scanner.nextLine();
        String authorKeyword = scanner.nextLine();
        
        // Utwórz obiekty Book
        Book book1 = new Book(isbn1, title1, author1);
        Book book2 = new Book(isbn2, title2, author2);
        Book book3 = new Book(isbn3, title3, author3);
        
        // Utwórz obiekt User
        User user = new User(userId, userName);
        
        // Utwórz obiekt Library i dodaj książki oraz użytkownika
        Library library = new Library();
        library.addBook(book1);
        library.addBook(book2);
        library.addBook(book3);
        library.registerUser(user);
        
        // Przetwórz operację wypożyczenia
        String[] parts = borrowOp.split(":");
        String opUserId = parts[0];
        String opIsbn = parts[1];
        library.borrowBook(opUserId, opIsbn);
        
        // TODO: Wyszukiwanie według tytułu
        // Wypisz "Title search '[titleKeyword]':"
        // Użyj library.searchByTitle(titleKeyword)
        // Wypisz getDetails() każdej książki lub "No books found", jeśli wynik jest pusty
        
        // TODO: Wyszukiwanie według autora
        // Wypisz "Author search '[authorKeyword]':"
        // Użyj library.searchByAuthor(authorKeyword)
        // Wypisz getDetails() każdej książki lub "No books found", jeśli wynik jest pusty
        
        // TODO: Dostępne książki
        // Wypisz "Available books:"
        // Użyj library.getAvailableBooks()
        // Wypisz getDetails() każdej książki
    }
}

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator Java online