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 fonctionnalité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 ajouterez des méthodes pour effectuer des recherches par titre et par auteur, rendant ainsi votre bibliothèque véritablement fonctionnelle.

Vous continuerez à développer votre code existant réparti sur quatre fichiers :

  • Book.java : conservez votre classe Book avec toutes ses fonctionnalités existantes : isbn, title, author, isAvailable, borrowedBy, getDetails(), ainsi que les getters/setters appropriés. Assurez-vous de disposer de méthodes getter pour title et author si vous ne les avez pas encore ajoutées.
  • User.java : conservez votre classe User telle quelle avec id, name, la ArrayList borrowedBooks, borrowBook(), returnBook(), getBorrowedCount() et toString().
  • Library.java : enrichissez 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) - renvoie une ArrayList<Book> contenant tous les livres dont le titre contient le mot-clé (sans distinction entre majuscules et minuscules). Utilisez toLowerCase() sur le titre et le mot-clé pour effectuer la comparaison.

    searchByAuthor(String keyword) - renvoie une ArrayList<Book> contenant tous les livres dont le nom de l'auteur contient le mot-clé (sans distinction entre majuscules et minuscules).

    getAvailableBooks() - renvoie une ArrayList<Book> contenant uniquement les livres actuellement disponibles à l'emprunt.

  • Main.java : présentez votre système de recherche ! Vous recevrez les informations de trois livres (ISBN, titre, auteur pour chacun), puis celles d'un utilisateur (ID, nom), suivies d'une opération d'emprunt et de deux requêtes de recherche.

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

    Affichez les résultats dans cet ordre :

    • Après l'emprunt, affichez la confirmation de l'emprunt
    • Affichez Title search '[keyword]':, puis les détails de chaque livre correspondant sur des lignes séparées (en utilisant getDetails()). S'il n'y a aucun résultat, affichez No books found
    • Affichez Author search '[keyword]':, puis les détails de chaque livre correspondant. S'il n'y a aucun résultat, affichez No books found
    • Affichez Available books:, puis les détails de chaque livre disponible

Vous recevrez les entrées dans cet ordre : ISBN de book1, titre de book1, auteur de book1, ISBN de book2, titre de book2, auteur de book2, ISBN de book3, titre de book3, auteur de book3, ID de l'utilisateur, nom de l'utilisateur, opération d'emprunt, mot-clé de recherche de titre, mot-clé de recherche d'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 : rechercher « clean » trouve à la fois « Clean Code » et « The Clean Coder ». La liste des livres disponibles exclut correctement le livre emprunté. Ces fonctionnalités de recherche transforment votre bibliothèque, qui n'était qu'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 Library 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
        // Print "Title search '[titleKeyword]':"
        // Utiliser library.searchByTitle(titleKeyword)
        // Print each book's getDetails(), or "No books found" if empty
        
        // TODO: Author search
        // Print "Author search '[authorKeyword]':"
        // Utiliser library.searchByAuthor(authorKeyword)
        // Print each book's getDetails(), or "No books found" if empty
        
        // TODO: Available books
        // Print "Available books:"
        // Use library.getAvailableBooks()
        // Afficher getDetails() de chaque livre
    }
}

Toutes les leçons de Programmation Orientée Objet

Entraînez-vous par vous-même : Compilateur Java en ligne