Buch- und Benutzerklassen
Teil des Abschnitts Objektorientierte Programmierung der Java-Journey von Coddy. Lektion 78 von 87.
Aufgabe
EinfachFahren wir mit dem Aufbau des Library Management System fort, indem wir die Book- und User-Klassen aus der vorherigen Lektion erweitern. Jetzt fügst du die Möglichkeit hinzu, dass Benutzer Bücher ausleihen können, wodurch eine echte Verbindung zwischen diesen beiden Entitäten entsteht.
Du wirst deinen Code auf drei Dateien verteilen:
Book.java: Erweitere deine Book-Klasse aus der vorherigen Herausforderung. Behalte alle bestehenden Funktionen bei (isbn, title, author, isAvailable mit Gettern/Settern undgetDetails()). Füge nun ein privates FeldborrowedByvom TypStringhinzu, das die ID des Benutzers speichert, der das Buch ausgeliehen hat (odernull, wenn es nicht ausgeliehen ist). Füge einen Getter fürborrowedByund einen Setter hinzu, der außerdemisAvailableentsprechend aktualisiert: Wenn ein Buch ausgeliehen wird (borrowedBy wird auf einen Wert ungleich null gesetzt), wird es nicht verfügbar; wenn es zurückgegeben wird (auf null gesetzt), wird es wieder verfügbar.User.java: Erweitere deine User-Klasse, um ausgeliehene Bücher zu verwalten. Behalte die bestehenden id, name, den Constructor, die Getter undtoString()bei. Füge ein privates Feld vom TypArrayList<Book>mit dem NamenborrowedBookshinzu (Initialize es im Constructor). Erstelle eineborrowBook(Book book)-Methode, die das Buch zur Liste des Benutzers hinzufügt undborrowedBydes Buches auf die ID dieses Benutzers setzt. Erstelle einereturnBook(Book book)-Methode, die das Buch aus der Liste entfernt undborrowedByauf null setzt. Füge einegetBorrowedCount()-Methode hinzu, die zurückgibt, wie viele Bücher der Benutzer derzeit hat.Main.java: Zeige das Ausleihsystem in Aktion. Du erhältst fünf Eingaben: ISBN, title und author eines Buches, anschließend die Benutzer-ID und den Namen.Create ein Book und einen User mit diesen Eingaben. Gib die Details und den Verfügbarkeitsstatus des Buches aus. Lass den Benutzer anschließend das Buch ausleihen. Gib die Verfügbarkeit des Buches erneut aus, gefolgt davon, wer es ausgeliehen hat, im Format
Borrowed by: [userId]. Gib aus, wie viele Bücher der Benutzer hat, im Format[name] has [count] book(s). Lass den Benutzer schließlich das Buch zurückgeben und gib die Verfügbarkeit ein weiteres Mal aus.
Du erhältst fünf Eingaben in dieser Reihenfolge: ISBN (String), title (String), author (String), Benutzer-ID (String) und Benutzername (String).
Wenn die Eingaben beispielsweise 978-0-13-468599-1, Effective Java, Joshua Bloch, U001 und Alice lauten, wäre deine Ausgabe:
[978-0-13-468599-1] Effective Java by Joshua Bloch
Available: true
Available: false
Borrowed by: U001
Alice has 1 book(s)
Available: trueDiese Herausforderung baut direkt auf deiner vorherigen Arbeit auf und fügt die entscheidende Beziehung zwischen Büchern und Benutzern hinzu, die ein Library Management System funktionsfähig macht. Du wirst Komposition verwenden (User "has" Books) und sehen, wie Änderungen an einem Objekt über gut gestaltete Methoden ein anderes Objekt beeinflussen können!
Probier es selbst
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Buchinformationen lesen
String isbn = scanner.nextLine();
String title = scanner.nextLine();
String author = scanner.nextLine();
// Benutzerinformationen lesen
String userId = scanner.nextLine();
String userName = scanner.nextLine();
// Ein Book-Objekt mit isbn, title und author erstellen
Book book = new Book(isbn, title, author);
// Ein User-Objekt mit userId und userName erstellen
User user = new User(userId, userName);
// Die Details des Buchs mit getDetails() ausgeben
System.out.println(book.getDetails());
// Print whether the book is available (format: "Available: true" or "Available: false")
System.out.println("Available: " + book.isAvailable());
// Den Benutzer das Buch ausleihen lassen
user.borrowBook(book);
// Die Verfügbarkeit des Buchs erneut ausgeben
System.out.println("Available: " + book.isAvailable());
// Ausgeben, wer es ausgeliehen hat
System.out.println("Borrowed by: " + book.getBorrowedBy());
// Ausgeben, wie viele Bücher der Benutzer hat
System.out.println(user.getName() + " has " + user.getBorrowedCount() + " book(s)");
// Den Benutzer das Buch zurückgeben lassen
user.returnBook(book);
// Die Verfügbarkeit noch einmal ausgeben
System.out.println("Available: " + book.isAvailable());
}
}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