Ausleihsystem
Teil des Abschnitts Objektorientierte Programmierung der Java-Journey von Coddy. Lektion 79 von 87.
Aufgabe
EinfachFahren wir mit dem Aufbau des Library Management Systems fort, indem wir ein richtiges Ausleihsystem mit einer Library-Klasse erstellen, die die Sammlung von Büchern und Benutzern verwaltet. Hier beginnt sich dein System wie eine echte Bibliothek anzufühlen: Es verfolgt, wer was hat, und setzt Ausleihregeln durch!
Du wirst deinen Code auf vier Dateien verteilen:
Book.java: Behalte deine Book-Klasse aus der vorherigen Aufgabe mit ihrer gesamten Funktionalität: isbn, title, author, isAvailable, borrowedBy, getDetails() sowie den passenden Gettern/Settern.User.java: Behalte deine User-Klasse mit id, name, der borrowedBooks ArrayList, borrowBook(), returnBook(), getBorrowedCount() und toString().Library.java: Erstelle die zentraleLibrary-Klasse, die alles verwaltet. Deine Bibliothek sollte zwei ArrayLists verwalten: eine fürBook-Objekte und eine fürUser-Objekte. Füge 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)– durchsucht die Bücher und gibt das Book mit der passenden ISBN zurück odernull, wenn es nicht gefunden wurde.findUserById(String id)– durchsucht die Benutzer und gibt den User mit der passenden ID zurück odernull, wenn er nicht gefunden wurde.borrowBook(String userId, String isbn)– findet den Benutzer und das Buch und lässt den Benutzer, wenn beide existieren und das Buch verfügbar ist, das Buch ausleihen; anschließend wird[userName] borrowed [bookTitle]ausgegeben. Wenn das Buch nicht verfügbar ist, gibBook not availableaus. Wenn der Benutzer oder das Buch nicht gefunden wurde, gibInvalid user or bookaus.returnBook(String userId, String isbn)– findet den Benutzer und das Buch, lässt den Benutzer anschließend das Buch zurückgeben und gibt[userName] returned [bookTitle]aus. Wenn der Benutzer oder das Buch nicht gefunden wurde, gibInvalid user or bookaus.Main.java: Führe dein Bibliothekssystem zusammen! Du erhältst Eingaben für zwei Bücher (jeweils ISBN, Titel und Autor), einen Benutzer (ID, Name) und anschließend eine Reihe von Operationen.Erstelle eine Library, füge beide Bücher hinzu und registriere den Benutzer. Verarbeite anschließend die Operationen: Du erhältst eine durch Kommas getrennte Zeichenkette, in der jede Operation als
borrow:userId:isbnoderreturn:userId:isbnformatiert ist.Gib nach der Verarbeitung aller Operationen eine Zusammenfassung aus, die den Status jedes Buchs im Format
[isbn]: [Available/Borrowed]anzeigt.
Du erhältst die Eingaben in dieser Reihenfolge: ISBN von book1, Titel von book1, Autor von book1, ISBN von book2, Titel von book2, Autor von book2, Benutzer-ID, Benutzername und schließlich die Operationszeichenkette.
Bei 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ürde deine Ausgabe beispielsweise so aussehen:
Alice borrowed Clean Code
Alice borrowed Design Patterns
Alice returned Clean Code
ISBN-001: Available
ISBN-002: BorrowedDiese Aufgabe führt Komposition, Kapselung und Methodendesign zusammen, um ein zusammenhängendes System zu erstellen. Die Library-Klasse fungiert als Koordinator, delegiert die eigentliche Ausleihlogik an die User- und Book-Klassen und verwaltet gleichzeitig die gesamte Sammlung!
Probier es selbst
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Buch-1-Informationen lesen
String isbn1 = scanner.nextLine();
String title1 = scanner.nextLine();
String author1 = scanner.nextLine();
// Buch-2-Informationen 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: Erstelle Book-Objekte für book1 und book2
// TODO: Erstelle ein User-Objekt
// TODO: Erstelle eine Library, füge beide Bücher hinzu und registriere den Benutzer
// TODO: Teile operationsStr bei "," und verarbeite jede Operation
// Für jede Operation bei ":" aufteilen, um action, userId, isbn zu erhalten
// Rufe entsprechend library.borrowBook() oder library.returnBook() auf
// TODO: Gib Zusammenfassung für jedes Buch im Format "[isbn]: [Available/Borrowed]" aus
}
}Alle Lektionen in Objektorientierte Programmierung
1Grundlagen der OOP
Externe DateienEinführung in die OOPKlassen vs. ObjekteDas Schlüsselwort thisMethodenFelder (Attribute)KonstruktormethodeÜberladen von KonstruktorenRückblick – Einfacher Taschenrechner4Vererbung
Grundlegende Vererbung (extends)Das Schlüsselwort superÜberschreiben von Methoden (@Override)KonstruktorverkettungDie Object-KlasseEinfach- und mehrstufige VererbungWarum keine Mehrfachvererbung von KlassenRückblick – Mitarbeiterhierarchie7Spezielle Methoden & Object-Klasse
toString()-Methodeequals() und hashCode()clone()-MethodecompareTo() und ComparableComparator-SchnittstelleRückblick – Benutzerdefinierte Sortierung10Exception Handling in OOP
Hierarchie der Exception-KlassenBenutzerdefinierte ExceptionsGeprüfte vs. ungeprüfte FehlerTry-with-Resources-MusterRückblick – Validierter Benutzer13Projekt: Bibliotheksverwaltung
Projektübersicht & UML-EntwurfBuch- und BenutzerklassenAusleihsystemSuchfunktionalitätAdministrationsoberflächeIntegration der AusnahmebehandlungTesten und Integration2Zugriffsmodifikatoren & Kapselung
Übersicht der ZugriffsebenenGetter- und Setter-MethodenInformationsverbergungDas Schlüsselwort finalRückblick – Bankkontoverwaltung5Polymorphismus
Grundlagen der MethodenüberladungMethodenüberschreibung (Laufzeit)Upcasting und DowncastingDer instanceof-OperatorAbstrakte Klassen und MethodenRückblick – Formrechner8Fortgeschrittene OOP-Konzepte
Komposition vs. VererbungAggregation vs. KompositionInnere, verschachtelte & anonyme KlassenEnums und Enum-MethodenRecords (Java 16+)Versiegelte Klassen (Java 17+)11Entwurfsmuster Teil 1
Einführung in EntwurfsmusterSingleton-MusterFactory-MusterBuilder-MusterObserver-MusterStrategie-Muster14Abschließende Herausforderungen
E-Learning-PlattformBankingsystemEntwicklung einer SpielfigurFahrzeugvermietungsdienst3Klassen-Props & statische Member
Instanz- vs. statische VariablenStatische MethodenStatische BlöckeKonstanten (static final)Wiederholung – Counter & Utility6Schnittstellen & abstrakte Klassen
Einführung in InterfacesInterfaces implementierenMehrere Interfaces implementierenDefault & Static in InterfacesAbstrakte Klassen vs. InterfacesFunktionale InterfacesRückblick – ZahlungssystemÜbe selbstständig: Online-Java-Compiler