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 véritable système d'emprunt 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 : suivre qui possède quoi et appliquer 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(), et les getters/setters appropriés.
  • User.java : Conservez votre classe User avec id, name, l'ArrayList borrowedBooks, borrowBook(), returnBook(), getBorrowedCount(), et toString().
  • Library.java : Créez la classe centrale Library qui gère tout. Votre bibliothèque doit maintenir deux ArrayLists — une pour les objets Book et une 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 enregistrés de la bibliothèque.

    findBookByIsbn(String isbn) - parcourt les livres et retourne le Book avec l'ISBN correspondant, ou null s'il n'est pas trouvé.

    findUserById(String id) - parcourt les utilisateurs et retourne l'User avec l'ID correspondant, 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 par l'utilisateur et affiche [userName] borrowed [bookTitle]. Si le livre n'est pas disponible, affiche Book not available. Si l'utilisateur ou le livre n'est pas trouvé, affiche Invalid user or book.

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

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

    Créez une Library, ajoutez les deux livres et enregistrez l'utilisateur. Traitez ensuite les opérations — vous recevrez une chaîne de caractères séparée par des virgules où chaque opération est formatée comme borrow:userId:isbn ou return:userId:isbn.

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

Vous recevrez les entrées dans cet ordre : book1 ISBN, book1 title, book1 author, book2 ISBN, book2 title, book2 author, user ID, user name, et enfin la chaîne des 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 pour créer un système cohérent. La classe Library agit comme un coordinateur, déléguant la logique d'emprunt réelle aux classes User et Book tout en gérant l'ensemble de la collection !

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 des opérations (séparées par des virgules, format : borrow:userId:isbn ou return:userId:isbn)
        String operationsStr = scanner.nextLine();
        
        // TODO: Créer des 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