Menu
Coddy logo textTech

Système d'emprunt

Fait partie de la section Programmation Orientée Objet du Journey Java de Coddy. Leçon 79 sur 87.

challenge icon

Défi

Facile

Continuons à construire le système de gestion de bibliothèque en créant un système d’emprunt approprié avec une classe Library qui gère la collection de livres et d’utilisateurs. C’est ici que votre système commence à ressembler à une vraie bibliothèque : il suit qui possède quoi et applique les règles d’emprunt !

Vous organiserez votre code sur quatre fichiers :

  • Book.java : conservez votre classe Book du défi précédent avec toutes ses fonctionnalités : isbn, title, author, isAvailable, borrowedBy, getDetails(), ainsi que les getters/setters appropriés.
  • User.java : conservez votre classe User avec id, name, la ArrayList borrowedBooks, borrowBook(), returnBook(), getBorrowedCount() et toString().
  • Library.java : créez la classe centrale Library qui gère tout. Votre bibliothèque doit conserver deux ArrayLists : l’une pour les objets Book et l’autre pour les objets User. Incluez ces méthodes :

    addBook(Book book) - ajoute un livre à la collection de la bibliothèque.

    registerUser(User user) - ajoute un utilisateur aux utilisateurs inscrits de la bibliothèque.

    findBookByIsbn(String isbn) - parcourt les livres et renvoie le Book dont l’ISBN correspond, ou null s’il n’est pas trouvé.

    findUserById(String id) - parcourt les utilisateurs et renvoie le User dont l’ID correspond, ou null s’il n’est pas trouvé.

    borrowBook(String userId, String isbn) - trouve l’utilisateur et le livre, puis, si les deux existent et que le livre est disponible, fait emprunter le livre à l’utilisateur et affiche [userName] borrowed [bookTitle]. Si le livre n’est pas disponible, affichez Book not available. Si l’utilisateur ou le livre n’est pas trouvé, affichez Invalid user or book.

    returnBook(String userId, String isbn) - trouve l’utilisateur et le livre, puis fait retourner le livre à l’utilisateur et affiche [userName] returned [bookTitle]. Si l’utilisateur ou le livre n’est pas trouvé, affichez Invalid user or book.

  • Main.java : assemblez votre système de bibliothèque ! Vous recevrez les entrées de deux livres (ISBN, titre, auteur pour chacun), d’un utilisateur (ID, nom), puis d’une série d’opérations.

    Créez une Library, ajoutez les deux livres et inscrivez l’utilisateur. Traitez ensuite les opérations : vous recevrez une chaîne séparée par des virgules, où chaque opération est au format borrow:userId:isbn ou return:userId:isbn.

    Après avoir traité toutes les opérations, affichez un résumé indiquant le statut de chaque livre au format [isbn]: [Available/Borrowed].

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, ID de l’utilisateur, nom de l’utilisateur, et enfin la chaîne d’opérations.

Par exemple, avec les entrées ISBN-001, Clean Code, Robert Martin, ISBN-002, Design Patterns, Gang of Four, U001, Alice et borrow:U001:ISBN-001,borrow:U001:ISBN-002,return:U001:ISBN-001, votre sortie serait :

Alice borrowed Clean Code
Alice borrowed Design Patterns
Alice returned Clean Code
ISBN-001: Available
ISBN-002: Borrowed

Ce défi rassemble la composition, l’encapsulation et la conception de méthodes afin de créer un système cohérent. La classe Library agit comme coordinatrice, en déléguant la logique réelle d’emprunt aux classes User et Book tout en gérant la collection dans son ensemble !

Essayez vous-même

import java.util.Scanner;

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 de l'utilisateur
        String userId = scanner.nextLine();
        String userName = scanner.nextLine();
        
        // Lire la chaîne d'opérations (séparées par des virgules, format : borrow:userId:isbn ou return:userId:isbn)
        String operationsStr = scanner.nextLine();
        
        // TODO: Créer les objets Book pour book1 et book2
        
        // TODO: Créer un objet User
        
        // TODO: Créer une Library, ajouter les deux livres et enregistrer l'utilisateur
        
        // TODO: Diviser operationsStr par "," et traiter chaque opération
        //       Pour chaque opération, diviser par ":" pour obtenir action, userId, isbn
        //       Appeler library.borrowBook() ou library.returnBook() en conséquence
        
        // TODO: Afficher le résumé pour chaque livre au format "[isbn]: [Available/Borrowed]"
    }
}

Toutes les leçons de Programmation Orientée Objet

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