Menu
Coddy logo textTech

Interface administrateur

Fait partie de la section Programmation Orientée Objet du Journey Java de Coddy — leçon 81 sur 87.

challenge icon

Défi

Facile

Développons votre système de gestion de bibliothèque avec une interface d'administration ! Une véritable bibliothèque a besoin de capacités administratives : ajouter de nouveaux livres à la collection, supprimer les ouvrages obsolètes et enregistrer de nouveaux membres. Vous allez créer une interface qui définit ces opérations administratives et les implémenter dans une classe d'administration dédiée.

Vous continuerez à construire sur votre code existant à travers cinq fichiers :

  • Book.java : Conservez votre classe Book avec toutes les fonctionnalités existantes — isbn, title, author, isAvailable, borrowedBy, getDetails(), et les getters/setters appropriés.
  • User.java : Conservez votre classe User inchangée avec id, name, l'ArrayList borrowedBooks, borrowBook(), returnBook(), getBorrowedCount(), et toString().
  • Library.java : Conservez votre classe Library avec toutes les méthodes existantes. Ajoutez une nouvelle méthode removeBook(String isbn) qui trouve et supprime un livre de la collection par son ISBN. La méthode doit retourner true si le livre a été trouvé et supprimé, sinon false. Un livre ne peut être supprimé que s'il est actuellement disponible (non emprunté).
  • LibraryAdmin.java : Créez une interface appelée LibraryAdmin qui définit le contrat pour les opérations administratives. Votre interface doit déclarer trois méthodes :
    • addBook(String isbn, String title, String author) - retourne un booléen indiquant le succès
    • removeBook(String isbn) - retourne un booléen indiquant le succès
    • registerUser(String id, String name) - retourne un booléen indiquant le succès

    Ensuite, créez une classe appelée AdminService qui implémente cette interface. Le AdminService doit détenir une référence à une Library (passée via son constructeur) et implémenter les trois méthodes en déléguant à la Library tout en ajoutant un retour approprié. Lors de l'ajout d'un livre, créez un nouveau Book et ajoutez-le à la bibliothèque. Lors de l'enregistrement d'un utilisateur, créez un nouveau User et enregistrez-le.

  • Main.java : Démontrez votre système d'administration ! Vous recevrez une série de commandes d'administration sous la forme d'une seule chaîne de caractères séparée par des virgules. Chaque commande suit l'un de ces formats :
    • ADD_BOOK:isbn:title:author
    • REMOVE_BOOK:isbn
    • REGISTER_USER:id:name
    • BORROW:userId:isbn

    Créez une Library et un AdminService. Traitez chaque commande et affichez le résultat :

    • Pour ADD_BOOK : affichez Added: [title] en cas de succès
    • Pour REMOVE_BOOK : affichez Removed: [isbn] en cas de succès, ou Cannot remove: [isbn] si le livre n'existe pas ou est emprunté
    • Pour REGISTER_USER : affichez Registered: [name]
    • Pour BORROW : utilisez la fonctionnalité d'emprunt de la bibliothèque existante

    Après avoir traité toutes les commandes, affichez Library status: suivi des détails de chaque livre et de son statut de disponibilité au format [details] - [Available/Borrowed].

Vous recevrez une entrée : une chaîne de commandes séparées par des virgules.

Par exemple, avec l'entrée REGISTER_USER:U001:Alice,ADD_BOOK:ISBN-001:Clean Code:Robert Martin,ADD_BOOK:ISBN-002:Design Patterns:Gang of Four,BORROW:U001:ISBN-001,REMOVE_BOOK:ISBN-001,REMOVE_BOOK:ISBN-002, votre sortie serait :

Registered: Alice
Added: Clean Code
Added: Design Patterns
Alice borrowed Clean Code
Cannot remove: ISBN-001
Removed: ISBN-002
Library status:
[ISBN-001] Clean Code by Robert Martin - Borrowed

Remarquez comment l'interface d'administration fournit un contrat clair pour les opérations administratives, tandis que l'implémentation AdminService gère la logique réelle. Le système empêche correctement la suppression d'un livre emprunté tout en permettant la suppression de ceux qui sont disponibles. Cette séparation de l'interface et de l'implémentation est un principe clé de la POO qui rend votre code plus facile à maintenir et à tester !

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 commandes séparées par des virgules
        String input = scanner.nextLine();
        String[] commands = input.split(",");
        
        // Créer Library et AdminService
        Library library = new Library();
        AdminService adminService = new AdminService(library);
        
        // Traiter chaque commande
        for (String command : commands) {
            String[] parts = command.split(":");
            String operation = parts[0];
            
            if (operation.equals("ADD_BOOK")) {
                String isbn = parts[1];
                String title = parts[2];
                String author = parts[3];
                if (adminService.addBook(isbn, title, author)) {
                    System.out.println("Added: " + title);
                }
            } else if (operation.equals("REMOVE_BOOK")) {
                String isbn = parts[1];
                if (adminService.removeBook(isbn)) {
                    System.out.println("Removed: " + isbn);
                } else {
                    System.out.println("Cannot remove: " + isbn);
                }
            } else if (operation.equals("REGISTER_USER")) {
                String id = parts[1];
                String name = parts[2];
                if (adminService.registerUser(id, name)) {
                    System.out.println("Registered: " + name);
                }
            } else if (operation.equals("BORROW")) {
                String userId = parts[1];
                String isbn = parts[2];
                library.borrowBook(userId, isbn);
            }
        }
        
        // Afficher le statut de la bibliothèque
        System.out.println("Library status:");
        ArrayList<Book> allBooks = library.getAllBooks();
        for (Book book : allBooks) {
            String status = book.isAvailable() ? "Available" : "Borrowed";
            System.out.println(book.getDetails() + " - " + status);
        }
    }
}

Toutes les leçons de Programmation Orientée Objet