Ausleihsystem
Teil des Abschnitts Objektorientierte Programmierung der Java-Journey von Coddy — Lektion 79 von 87.
Aufgabe
EinfachLassen Sie uns das Bibliotheksverwaltungssystem weiter ausbauen, indem wir ein ordnungsgemäßes Ausleihsystem mit einer Library-Klasse erstellen, die die Sammlung von Büchern und Benutzern verwaltet. Hier fängt Ihr System an, sich wie eine echte Bibliothek anzufühlen – es wird nachverfolgt, wer was hat, und Ausleihregeln werden durchgesetzt!
Sie werden Ihren Code über vier Dateien organisieren:
Book.java: Behalten Sie Ihre Book-Klasse aus der vorherigen Herausforderung mit all ihrer Funktionalität bei – isbn, title, author, isAvailable, borrowedBy, getDetails() und die entsprechenden Getter/Setter.User.java: Behalten Sie Ihre User-Klasse mit id, name, der borrowedBooks ArrayList, borrowBook(), returnBook(), getBorrowedCount() und toString() bei.Library.java: Erstellen Sie die zentraleLibrary-Klasse, die alles verwaltet. Ihre Bibliothek sollte zwei ArrayLists führen – eine fürBook-Objekte und eine fürUser-Objekte. Fügen Sie diese Methoden hinzu:addBook(Book book)- fügt ein Buch zur Sammlung der Bibliothek hinzu.registerUser(User user)- fügt einen Benutzer zu den registrierten Benutzern der Bibliothek hinzu.findBookByIsbn(String isbn)- sucht in den Büchern und gibt das Book mit der passenden ISBN zurück, odernull, falls nicht gefunden.findUserById(String id)- sucht in den Benutzern und gibt den User mit der passenden ID zurück, odernull, falls nicht gefunden.borrowBook(String userId, String isbn)- findet den Benutzer und das Buch; wenn beide existieren und das Buch verfügbar ist, lässt es den Benutzer das Buch ausleihen und gibt[userName] borrowed [bookTitle]aus. Wenn das Buch nicht verfügbar ist, geben SieBook not availableaus. Wenn Benutzer oder Buch nicht gefunden werden, geben SieInvalid user or bookaus.returnBook(String userId, String isbn)- findet den Benutzer und das Buch, lässt den Benutzer das Buch zurückgeben und gibt[userName] returned [bookTitle]aus. Wenn Benutzer oder Buch nicht gefunden werden, geben SieInvalid user or bookaus.Main.java: Führen Sie Ihr Bibliothekssystem zusammen! Sie erhalten Eingaben für zwei Bücher (jeweils ISBN, Titel, Autor), einen Benutzer (ID, Name) und dann eine Reihe von Operationen.Erstellen Sie eine Library, fügen Sie beide Bücher hinzu und registrieren Sie den Benutzer. Verarbeiten Sie dann die Operationen – Sie erhalten einen durch Kommas getrennten String, in dem jede Operation als
borrow:userId:isbnoderreturn:userId:isbnformatiert ist.Geben Sie nach der Verarbeitung aller Operationen eine Zusammenfassung aus, die den Status jedes Buches im Format
[isbn]: [Available/Borrowed]anzeigt.
Sie erhalten die Eingaben in dieser Reihenfolge: book1 ISBN, book1 title, book1 author, book2 ISBN, book2 title, book2 author, user ID, user name und schließlich den Operations-String.
Zum Beispiel, mit den Eingaben ISBN-001, Clean Code, Robert Martin, ISBN-002, Design Patterns, Gang of Four, U001, Alice und borrow:U001:ISBN-001,borrow:U001:ISBN-002,return:U001:ISBN-001, wäre Ihre Ausgabe:
Alice borrowed Clean Code
Alice borrowed Design Patterns
Alice returned Clean Code
ISBN-001: Available
ISBN-002: BorrowedDiese Herausforderung führt Komposition, Kapselung und Methodendesign zusammen, um ein zusammenhängendes System zu schaffen. Die Library-Klasse fungiert als Koordinator, der die eigentliche Ausleihlogik an die User- und Book-Klassen delegiert, während sie die gesamte Sammlung verwaltet!
Probier es selbst
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Informationen für Buch 1 lesen
String isbn1 = scanner.nextLine();
String title1 = scanner.nextLine();
String author1 = scanner.nextLine();
// Informationen für Buch 2 lesen
String isbn2 = scanner.nextLine();
String title2 = scanner.nextLine();
String author2 = scanner.nextLine();
// Benutzerinformationen lesen
String userId = scanner.nextLine();
String userName = scanner.nextLine();
// Operations-String lesen (kommagetrennt, Format: borrow:userId:isbn oder return:userId:isbn)
String operationsStr = scanner.nextLine();
// TODO: Book-Objekte für book1 und book2 erstellen
// TODO: Ein User-Objekt erstellen
// TODO: Eine Library erstellen, beide Bücher hinzufügen und den Benutzer registrieren
// TODO: operationsStr nach "," aufteilen und jede Operation verarbeiten
// Für jede Operation nach ":" aufteilen, um Aktion, userId und isbn zu erhalten
// Entsprechend library.borrowBook() oder library.returnBook() aufrufen
// TODO: Zusammenfassung für jedes Buch im Format "[isbn]: [Available/Borrowed]" ausgeben
}
}Alle Lektionen in Objektorientierte Programmierung
1Grundlagen der OOP
Externe DateienEinführung in die OOPKlassen vs. ObjekteDas this-SchlüsselwortMethodenFelder (Attribute)Konstruktor-MethodeKonstruktor-ÜberladungRückblick – Einfacher Taschenrechner4Vererbung
Grundlagen der Vererbung (extends)Das super-SchlüsselwortMethoden überschreiben (@Override)Konstruktor-VerkettungDie Object-KlasseEinfache & mehrstufige VererbungWarum keine Mehrfachvererbung von KlassenZusammenfassung - Mitarbeiter-Hierarchie7Spezielle Methoden & Object-Klasse
toString()-Methodeequals() und hashCode()clone()-MethodecompareTo() und ComparableComparator-InterfaceZusammenfassung – Benutzerdefiniertes Sortieren10Ausnahmebehandlung in OOP
Exception-KlassenhierarchieBenutzerdefinierte ExceptionsChecked vs. Unchecked ErrorsTry-With-Resources-PatternRecap – Validierter Benutzer13Projekt: Bibliotheksverwaltung
Projektübersicht & UML-DesignBuch- und Benutzerklassen2Zugriffsmodifikatoren & Kapselung
Überblick über ZugriffsebenenGetter- und Setter-MethodenInformation HidingDas final-SchlüsselwortRückblick – Bankkonto-Manager5Polymorphismus
Grundlagen der MethodenüberladungMethodenüberschreibung (Laufzeit)Upcasting und DowncastingDer instanceof-OperatorAbstrakte Klassen und MethodenZusammenfassung – Formenrechner8Fortgeschrittene OOP-Konzepte
Komposition vs. VererbungAggregation vs. KompositionInnere, geschachtelte & anonyme KlassenEnums und Enum-MethodenRecords (Java 16+)Sealed Classes (Java 17+)11Design Patterns Teil 1
Einführung in Design PatternsSingleton-PatternFactory-PatternBuilder-PatternObserver-PatternStrategy-Pattern14Abschlussherausforderungen
E-Learning-PlattformBanksystemSpielcharakter-EntwicklungFahrzeugvermietung3Klasseneigenschaften & Statische Member
Instanz- vs. statische VariablenStatische MethodenStatische BlöckeKonstanten (static final)Zusammenfassung – Zähler & Utility6Interfaces & Abstrakte Klassen
Einführung in InterfacesInterfaces implementierenImplementierung mehrerer InterfacesDefault- & statische Methoden in InterfacesAbstrakte Klassen vs. InterfacesFunktionale InterfacesZusammenfassung - Zahlungssystem