Système d'emprunt
Fait partie de la section Programmation Orientée Objet du Journey Java de Coddy. Leçon 79 sur 87.
Défi
FacileContinuons à 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 centraleLibraryqui gère tout. Votre bibliothèque doit conserver deux ArrayLists : l’une pour les objetsBooket l’autre pour les objetsUser. 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, ounulls’il n’est pas trouvé.findUserById(String id)- parcourt les utilisateurs et renvoie le User dont l’ID correspond, ounulls’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, affichezBook not available. Si l’utilisateur ou le livre n’est pas trouvé, affichezInvalid 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é, affichezInvalid 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:isbnoureturn: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: BorrowedCe 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
1Fondamentaux de la POO
Fichiers externesIntroduction à la POOClasses vs ObjetsLe mot-clé thisMéthodesChamps (Attributs)Méthode constructeurSurcharge de constructeurRécapitulatif - Calculatrice simple4Héritage
Héritage de base (extends)Le mot-clé superRedéfinition de méthode (@Override)Chaînage de constructeursLa classe ObjectHéritage simple et multiniveauPourquoi pas d'héritage multiple de classesRécapitulatif - Hiérarchie des employés7Méthodes spéciales et classe Object
Méthode toString()equals() et hashCode()Méthode clone()compareTo() et ComparableInterface ComparatorRécapitulatif - Tri personnalisé10Gestion des exceptions en POO
Hiérarchie des classes d'exceptionExceptions personnaliséesErreurs Checked vs UncheckedPattern Try-with-resourcesRécapitulatif - Utilisateur validé13Projet : Gestion de bibliothèque
Présentation du projet et conception UMLClasses Livre et UtilisateurSystème d'empruntFonctionnalité de rechercheInterface administrateurIntégration de la gestion des exceptionsTests et intégration2Modificateurs d'accès et Encapsulation
Aperçu des niveaux d'accèsMéthodes Getter et SetterMasquage d'informationsLe mot-clé finalRécapitulatif - Gestionnaire de compte bancaire5Polymorphisme
Bases de la surcharge de méthodesRedéfinition de méthodes (Run-Time)Upcasting et DowncastingL'opérateur instanceofClasses et méthodes abstraitesRécapitulatif - Calculateur de formes8Concepts avancés de la POO
Composition vs HéritageAgrégation vs CompositionClasses internes, imbriquées et anonymesEnums et méthodes d'EnumRecords (Java 16+)Classes scellées (Java 17+)11Patrons de conception, partie 1
Introduction aux patrons de conceptionPatron SingletonPatron FabriquePatron MonteurPatron ObservateurPatron Stratégie3Propriétés de classe et membres statiques
Variables d'instance vs variables statiquesMéthodes statiquesBlocs statiquesConstantes (static final)Récapitulatif - Compteur et utilitaire6Interfaces et Classes Abstraites
Introduction aux InterfacesImplémentation d'InterfacesImplémentation d'Interfaces MultiplesDefault et Static dans les InterfacesClasses Abstraites vs InterfacesInterfaces FonctionnellesRécapitulatif - Système de Paiement9La généricité
Introduction à la généricitéClasses génériquesMéthodes génériquesParamètres de type bornésWildcards (?, extends, super)Récapitulatif - Conteneur générique12Patrons de conception, partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Template MethodPatron ÉtatPatron CompositePatron ItérateurEntraînez-vous par vous-même : Compilateur Java en ligne