Menu
Coddy logo textTech

Fonctionnalité de recherche

Fait partie de la section Programmation Orientée Objet du Journey Java de Coddy — leçon 80 sur 87.

challenge icon

Défi

Facile

Améliorons votre système de gestion de bibliothèque avec de puissantes capacités de recherche ! Une bibliothèque n'est pas très utile si les utilisateurs ne peuvent pas trouver les livres qu'ils recherchent. Vous allez ajouter des méthodes pour effectuer des recherches par titre et par auteur, rendant votre bibliothèque véritablement fonctionnelle.

Vous continuerez à construire sur votre code existant à travers quatre fichiers :

  • Book.java : Conservez votre classe Book avec toutes les fonctionnalités existantes — isbn, title, author, isAvailable, borrowedBy, getDetails(), et les getters/setters appropriés. Assurez-vous d'avoir des méthodes getter pour title et author si vous ne les avez pas encore ajoutées.
  • User.java : Conservez votre classe User inchangée avec id, name, l'ArrayList borrowedBooks, borrowBook(), returnBook(), getBorrowedCount(), et toString().
  • Library.java : Étendez votre classe Library avec des fonctionnalités de recherche. Conservez toutes les méthodes existantes (addBook, registerUser, findBookByIsbn, findUserById, borrowBook, returnBook) et ajoutez ces nouvelles méthodes de recherche :

    searchByTitle(String keyword) - retourne une ArrayList<Book> contenant tous les livres dont le titre contient le mot-clé (insensible à la casse). Utilisez toLowerCase() sur le titre et le mot-clé pour la comparaison.

    searchByAuthor(String keyword) - retourne une ArrayList<Book> contenant tous les livres dont le nom de l'auteur contient le mot-clé (insensible à la casse).

    getAvailableBooks() - retourne une ArrayList<Book> contenant uniquement les livres qui sont actuellement disponibles pour l'emprunt.

  • Main.java : Démontrez votre système de recherche ! Vous recevrez des entrées pour trois livres (ISBN, titre, auteur pour chacun), puis un utilisateur (ID, nom), suivi d'une opération d'emprunt et de deux requêtes de recherche.

    Créez une Library, ajoutez les trois livres et enregistrez l'utilisateur. Traitez l'opération d'emprunt (formatée comme userId:isbn). Effectuez ensuite les deux recherches — la première entrée est un mot-clé pour le titre, la seconde est un mot-clé pour l'auteur.

    Affichez les résultats dans cet ordre :

    • Après l'emprunt, affichez la confirmation d'emprunt
    • Affichez Title search '[keyword]': suivi des détails de chaque livre correspondant sur des lignes séparées (en utilisant getDetails()). Si aucune correspondance n'est trouvée, affichez No books found
    • Affichez Author search '[keyword]': suivi des détails de chaque livre correspondant. Si aucune correspondance n'est trouvée, affichez No books found
    • Affichez Available books: suivi des détails de chaque livre disponible

Vous recevrez les entrées dans cet ordre : book1 ISBN, book1 title, book1 author, book2 ISBN, book2 title, book2 author, book3 ISBN, book3 title, book3 author, user ID, user name, opération d'emprunt, mot-clé de recherche par titre, mot-clé de recherche par auteur.

Par exemple, avec les entrées 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, votre sortie serait :

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

Remarquez comment les méthodes de recherche utilisent une correspondance insensible à la casse — la recherche de "clean" trouve à la fois "Clean Code" et "The Clean Coder". La liste des livres disponibles exclut correctement le livre emprunté. Ces capacités de recherche transforment votre bibliothèque d'une simple collection en un système véritablement utilisable !

Essayez vous-même

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

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Lire les informations du livre 1
        String isbn1 = scanner.nextLine();
        String title1 = scanner.nextLine();
        String author1 = scanner.nextLine();
        
        // Lire les informations du livre 2
        String isbn2 = scanner.nextLine();
        String title2 = scanner.nextLine();
        String author2 = scanner.nextLine();
        
        // Lire les informations du livre 3
        String isbn3 = scanner.nextLine();
        String title3 = scanner.nextLine();
        String author3 = scanner.nextLine();
        
        // Lire les informations de l'utilisateur
        String userId = scanner.nextLine();
        String userName = scanner.nextLine();
        
        // Lire l'opération d'emprunt
        String borrowOp = scanner.nextLine();
        
        // Lire les mots-clés de recherche
        String titleKeyword = scanner.nextLine();
        String authorKeyword = scanner.nextLine();
        
        // Créer les objets Book
        Book book1 = new Book(isbn1, title1, author1);
        Book book2 = new Book(isbn2, title2, author2);
        Book book3 = new Book(isbn3, title3, author3);
        
        // Créer l'objet User
        User user = new User(userId, userName);
        
        // Créer la bibliothèque et ajouter les livres et l'utilisateur
        Library library = new Library();
        library.addBook(book1);
        library.addBook(book2);
        library.addBook(book3);
        library.registerUser(user);
        
        // Traiter l'opération d'emprunt
        String[] parts = borrowOp.split(":");
        String opUserId = parts[0];
        String opIsbn = parts[1];
        library.borrowBook(opUserId, opIsbn);
        
        // TODO : Recherche par titre
        // Afficher "Title search '[titleKeyword]':"
        // Utiliser library.searchByTitle(titleKeyword)
        // Afficher le getDetails() de chaque livre, ou "No books found" si vide
        
        // TODO : Recherche par auteur
        // Afficher "Author search '[authorKeyword]':"
        // Utiliser library.searchByAuthor(authorKeyword)
        // Afficher le getDetails() de chaque livre, ou "No books found" si vide
        
        // TODO : Livres disponibles
        // Afficher "Available books:"
        // Utiliser library.getAvailableBooks()
        // Afficher le getDetails() de chaque livre
    }
}

Toutes les leçons de Programmation Orientée Objet