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 étendant 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 une véritable connexion 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, et getDetails()). Ajoutez maintenant un champ privé borrowedBy de type String qui stocke l'ID de l'utilisateur ayant emprunté le livre (ou null s'il 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 est défini sur une valeur non nulle), il devient indisponible ; lorsqu'il est retourné (défini sur null), il redeviendra disponible.
  • User.java : Étendez votre classe User pour suivre les livres empruntés. Conservez les id, name, constructeur, getters et toString() existants. Ajoutez un champ privé ArrayList<Book> nommé 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 le borrowedBy du livre sur l'ID 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 retourne le nombre de livres que l'utilisateur possède actuellement.
  • Main.java : Démontrez le système d'emprunt en action. Vous recevrez cinq entrées : l'ISBN, le titre, l'auteur d'un livre, puis l'ID 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 statut de disponibilité. Ensuite, faites en sorte que l'utilisateur emprunte le livre. Affichez à nouveau la disponibilité du livre, suivie de l'identité de l'emprunteur au format Borrowed by: [userId]. Affichez combien de livres l'utilisateur possède au format [name] has [count] book(s). Enfin, faites en sorte que l'utilisateur rende le livre et affichez la disponibilité une dernière fois.

Vous recevrez cinq entrées dans l'ordre : ISBN (String), title (String), author (String), user ID (String), et user name (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 cruciale entre les livres et les utilisateurs qui rend un système de bibliothèque fonctionnel. Vous utiliserez la composition (User "a" 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());
        
        // Afficher si le livre est disponible (format : "Available: true" ou "Available: false")
        System.out.println("Available: " + book.isAvailable());
        
        // Faire en sorte que l'utilisateur emprunte le livre
        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 possède
        System.out.println(user.getName() + " has " + user.getBorrowedCount() + " book(s)");
        
        // Faire en sorte que l'utilisateur rende le livre
        user.returnBook(book);
        
        // Afficher la disponibilité une dernière fois
        System.out.println("Available: " + book.isAvailable());
    }
}

Toutes les leçons de Programmation Orientée Objet