Menu
Coddy logo textTech

Classes Livre et Utilisateur

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

challenge icon

Défi

Facile

Continuons à construire le système de gestion de bibliothèque en développant les classes Book et User de la leçon précédente. Vous allez maintenant ajouter la possibilité pour les utilisateurs d'emprunter des livres, créant ainsi un véritable lien entre ces deux entités.

Vous organiserez votre code sur trois fichiers :

  • Book.java : améliorez votre classe Book du défi précédent. Conservez toutes les fonctionnalités existantes (isbn, title, author, isAvailable avec les getters/setters, ainsi que getDetails()). Ajoutez maintenant un champ privé borrowedBy de type String qui stocke l'identifiant de l'utilisateur ayant emprunté le livre (ou null si le livre n'est pas emprunté). Ajoutez un getter pour borrowedBy et un setter qui met également à jour isAvailable en conséquence : lorsqu'un livre est emprunté (borrowedBy reçoit une valeur non nulle), il devient indisponible ; lorsqu'il est rendu (la valeur est définie sur null), il redevient disponible.
  • User.java : développez votre classe User pour suivre les livres empruntés. Conservez l'id, le name, le constructeur, les getters et toString() existants. Ajoutez un champ privé ArrayList<Book> appelé borrowedBooks (initialisez-le dans le constructeur). Créez une méthode borrowBook(Book book) qui ajoute le livre à la liste de l'utilisateur et définit borrowedBy de ce livre sur l'identifiant de cet utilisateur. Créez une méthode returnBook(Book book) qui retire le livre de la liste et définit borrowedBy sur null. Ajoutez une méthode getBorrowedCount() qui renvoie le nombre de livres que l'utilisateur possède actuellement.
  • Main.java : démontrez le fonctionnement du système d'emprunt. Vous recevrez cinq entrées : ISBN, titre et auteur d'un livre, puis l'identifiant et le nom de l'utilisateur.

    Créez un Book et un User avec ces entrées. Affichez les détails du livre et son état de disponibilité. Faites ensuite emprunter le livre à l'utilisateur. Affichez à nouveau la disponibilité du livre, suivie de l'identité de l'emprunteur au format Borrowed by: [userId]. Affichez le nombre de livres que possède l'utilisateur au format [name] has [count] book(s). Enfin, faites rendre le livre par l'utilisateur et affichez une dernière fois sa disponibilité.

Vous recevrez cinq entrées dans l'ordre suivant : ISBN (String), titre (String), auteur (String), identifiant utilisateur (String) et nom de l'utilisateur (String).

Par exemple, avec les entrées 978-0-13-468599-1, Effective Java, Joshua Bloch, U001 et Alice, votre sortie serait :

[978-0-13-468599-1] Effective Java by Joshua Bloch
Available: true
Available: false
Borrowed by: U001
Alice has 1 book(s)
Available: true

Ce défi s'appuie directement sur votre travail précédent en ajoutant la relation essentielle entre les livres et les utilisateurs, celle qui rend un système de bibliothèque fonctionnel. Vous utiliserez la composition (User « possède » des Books) et verrez comment les modifications apportées à un objet peuvent en affecter un autre grâce à des méthodes bien conçues !

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
        String isbn = scanner.nextLine();
        String title = scanner.nextLine();
        String author = scanner.nextLine();
        
        // Lire les informations de l'utilisateur
        String userId = scanner.nextLine();
        String userName = scanner.nextLine();
        
        // Créer un objet Book avec isbn, title et author
        Book book = new Book(isbn, title, author);
        
        // Créer un objet User avec userId et userName
        User user = new User(userId, userName);
        
        // Afficher les détails du livre en utilisant getDetails()
        System.out.println(book.getDetails());
        
        // Print whether the book is available (format: "Available: true" or "Available: false")
        System.out.println("Available: " + book.isAvailable());
        
        // Faire emprunter le livre par l'utilisateur
        user.borrowBook(book);
        
        // Afficher à nouveau la disponibilité du livre
        System.out.println("Available: " + book.isAvailable());
        
        // Afficher qui l'a emprunté
        System.out.println("Borrowed by: " + book.getBorrowedBy());
        
        // Afficher combien de livres l'utilisateur a
        System.out.println(user.getName() + " has " + user.getBorrowedCount() + " book(s)");
        
        // Faire rendre le livre par l'utilisateur
        user.returnBook(book);
        
        // Afficher la disponibilité une fois de plus
        System.out.println("Available: " + book.isAvailable());
    }
}

Toutes les leçons de Programmation Orientée Objet

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