Buch- und Benutzerklassen
Teil des Abschnitts Objektorientierte Programmierung der Java-Journey von Coddy — Lektion 78 von 87.
Aufgabe
EinfachLassen Sie uns das Bibliotheksverwaltungssystem weiter ausbauen, indem wir die Klassen Book und User aus der vorherigen Lektion erweitern. Jetzt fügen Sie die Möglichkeit für Benutzer hinzu, Bücher auszuleihen, wodurch eine echte Verbindung zwischen diesen beiden Entitäten entsteht.
Sie werden Ihren Code über drei Dateien organisieren:
Book.java: Erweitern Sie Ihre Book-Klasse aus der vorherigen Herausforderung. Behalten Sie alle vorhandenen Funktionen bei (isbn, title, author, isAvailable mit Gettern/Settern undgetDetails()). Fügen Sie nun ein privates FeldborrowedByvom TypStringhinzu, das die ID des Benutzers speichert, der das Buch ausgeliehen hat (odernull, wenn es nicht ausgeliehen ist). Fügen Sie einen Getter fürborrowedByund einen Setter hinzu, der auchisAvailableentsprechend 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: Erweitern Sie Ihre User-Klasse, um ausgeliehene Bücher zu verfolgen. Behalten Sie die vorhandenen Felder id, name, den Konstruktor, die Getter undtoString()bei. Fügen Sie ein privatesArrayList<Book>-Feld namensborrowedBookshinzu (initialisieren Sie es im Konstruktor). Erstellen Sie eine MethodeborrowBook(Book book), die das Buch zur Liste des Benutzers hinzufügt undborrowedBydes Buches auf die ID dieses Benutzers setzt. Erstellen Sie eine MethodereturnBook(Book book), die das Buch aus der Liste entfernt undborrowedByauf null setzt. Fügen Sie eine MethodegetBorrowedCount()hinzu, die zurückgibt, wie viele Bücher der Benutzer derzeit hat.Main.java: Demonstrieren Sie das Ausleihsystem in Aktion. Sie erhalten fünf Eingaben: ISBN, Titel, Autor für ein Buch, dann Benutzer-ID und Name.Erstellen Sie ein Book und einen User mit diesen Eingaben. Geben Sie die Details des Buches und den Verfügbarkeitsstatus aus. Lassen Sie dann den Benutzer das Buch ausleihen. Geben Sie die Verfügbarkeit des Buches erneut aus, gefolgt davon, wer es ausgeliehen hat, im Format
Borrowed by: [userId]. Geben Sie aus, wie viele Bücher der Benutzer hat, im Format[name] has [count] book(s). Lassen Sie schließlich den Benutzer das Buch zurückgeben und geben Sie die Verfügbarkeit ein letztes Mal aus.
Sie erhalten fünf Eingaben in der Reihenfolge: ISBN (String), Titel (String), Autor (String), Benutzer-ID (String) und Benutzername (String).
Zum Beispiel, mit den Eingaben 978-0-13-468599-1, Effective Java, Joshua Bloch, U001 und Alice, wäre Ihre 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 Ihrer vorherigen Arbeit auf und fügt die entscheidende Beziehung zwischen Büchern und Benutzern hinzu, die ein Bibliothekssystem funktionsfähig macht. Sie verwenden Komposition (User "hat" Books) und sehen, wie Änderungen an einem Objekt ein anderes durch gut gestaltete Methoden 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 Buches mit getDetails() ausgeben
System.out.println(book.getDetails());
// Ausgeben, ob das Buch verfügbar ist (Format: "Available: true" oder "Available: false")
System.out.println("Available: " + book.isAvailable());
// Den Benutzer das Buch ausleihen lassen
user.borrowBook(book);
// Die Verfügbarkeit des Buches 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 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