prompt 4: ich: implementiere einen weiteren punkt in die ui, der eine manuelle systemdatumänderung erlaubt, um die rückgabe mit gebührenkonto ausprobieren zu können. Hier ist die UI Klasse (Eingabe von UI Klasse) AI:Um eine manuelle Änderung des Systemdatums in der Benutzeroberfläche zu ermöglichen, müssen folgende Schritte durchgeführt werden: 1. Hinzufügen eines Systemdatums Ein globales Systemdatum wird hinzugefügt, das in der gesamten Anwendung verwendet wird. Dies ermöglicht es, das Datum manuell zu ändern. Hinzufügen zur LibrarySystem-Klasse java Copy code import java.util.Calendar; import java.util.Date; public class LibrarySystem { private Date currentDate; public LibrarySystem() { this.currentDate = new Date(); // Standardmäßig aktuelles Datum } public Date getCurrentDate() { return currentDate; } public void setCurrentDate(Date date) { this.currentDate = date; System.out.println("Systemdatum erfolgreich auf " + date + " geändert."); } public void resetCurrentDate() { this.currentDate = new Date(); System.out.println("Systemdatum auf aktuelles Datum zurückgesetzt: " + currentDate); } } 2. Anpassung der Berechnungen Die Methoden, die auf das aktuelle Datum angewiesen sind (z. B. Rückgabefristen und Gebührenberechnung), nutzen nun das globale currentDate. Beispiel: returnMedium java Copy code if (currentDate.after(medium.getDueDate())) { long overdueDays = (currentDate.getTime() - medium.getDueDate().getTime()) / (1000 * 60 * 60 * 24); double fee = calculateOverdueFee(overdueDays); borrower.addFee(fee); System.out.println("Medium '" + medium.getTitle() + "' wurde erfolgreich zurückgegeben."); System.out.println("Überfällige Gebühren für " + borrower.getName() + ": " + fee + " EUR."); } 3. Erweiterung der Benutzeroberfläche Eine neue Option wird hinzugefügt, um das Datum manuell zu ändern oder zurückzusetzen. Code für die UI: java Copy code case 7 -> { System.out.println("Systemdatum ändern:"); System.out.println("1. Manuelles Datum setzen"); System.out.println("2. Datum auf aktuelles zurücksetzen"); int option = scanner.nextInt(); switch (option) { case 1 -> { System.out.print("Neues Datum eingeben (Format: yyyy-MM-dd): "); String dateInput = scanner.next(); try { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); Date newDate = dateFormat.parse(dateInput); librarySystem.setCurrentDate(newDate); } catch (ParseException e) { System.out.println("Ungültiges Datum. Bitte im Format yyyy-MM-dd eingeben."); } } case 2 -> librarySystem.resetCurrentDate(); default -> System.out.println("Ungültige Option."); } } --------------------------------------------------------------------- prompt 5: ich: das rückgabeDatum wird bei mir so berechnet, sodass immer das systemdatum verwendet wird. kannst du das so verbessern, so dass es auch mit dem manuellen Datum funktioniert? public Date rechneRueckgabedatum(){ Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.DAY_OF_YEAR, getAusleihdauer()); this.rueckgabedatum = calendar.getTime(); return rueckgabedatum; } AI: Um sicherzustellen, dass die Methode rechneRueckgabedatum mit dem manuellen Systemdatum arbeitet, anstatt immer das aktuelle Datum zu verwenden, können wir das globale Systemdatum aus der LibrarySystem-Klasse einbinden. Dazu müssen wir das Systemdatum explizit in die Berechnung einfließen lassen. Verbesserte Implementierung der Methode java Copy code public Date rechneRueckgabedatum(Date systemDate) { Calendar calendar = Calendar.getInstance(); calendar.setTime(systemDate); // Verwende das übergebene Systemdatum calendar.add(Calendar.DAY_OF_YEAR, getAusleihdauer()); // Füge die Ausleihdauer hinzu this.rueckgabedatum = calendar.getTime(); return rueckgabedatum; } Anpassung der Aufrufe Damit die Methode korrekt funktioniert, muss das Systemdatum beim Aufruf übergeben werden. Beispielsweise: Ausleihe eines Mediums Wenn ein Medium ausgeliehen wird, rufst du rechneRueckgabedatum mit dem aktuellen Systemdatum auf: java Copy code public void leiheMediumAus(Medium medium) { if (medium.isLoaned()) { System.out.println("Das Medium '" + medium.getTitle() + "' ist bereits ausgeliehen."); return; } Date rueckgabeDatum = medium.rechneRueckgabedatum(librarySystem.getCurrentDate()); medium.setLoaned(true); medium.setDueDate(rueckgabeDatum); System.out.println("Medium '" + medium.getTitle() + "' erfolgreich ausgeliehen."); System.out.println("Rückgabedatum: " + rueckgabeDatum); } Alternative: Systemdatum global bereitstellen Falls viele Klassen das Systemdatum verwenden, kannst du es direkt über eine Singleton-Instanz der LibrarySystem-Klasse bereitstellen: Singleton-Pattern für LibrarySystem java Copy code public class LibrarySystem { private static LibrarySystem instance; private Date currentDate; private LibrarySystem() { this.currentDate = new Date(); } public static LibrarySystem getInstance() { if (instance == null) { instance = new LibrarySystem(); } return instance; } public Date getCurrentDate() { return currentDate; } public void setCurrentDate(Date date) { this.currentDate = date; } public void resetCurrentDate() { this.currentDate = new Date(); } } Aufruf ohne Übergabe des Datums Wenn die Methode auf das Singleton zugreifen kann, wird die Übergabe des Datums überflüssig: java Copy code public Date rechneRueckgabedatum() { Calendar calendar = Calendar.getInstance(); calendar.setTime(LibrarySystem.getInstance().getCurrentDate()); calendar.add(Calendar.DAY_OF_YEAR, getAusleihdauer()); this.rueckgabedatum = calendar.getTime(); return rueckgabedatum; } Zusammenfassung der Änderungen Neue Methode: Die Methode rechneRueckgabedatum akzeptiert jetzt ein systemDate als Parameter. Systemweite Änderungen: Das Systemdatum wird durch die LibrarySystem-Klasse verwaltet. Globale Verfügbarkeit: Entweder durch explizite Übergabe oder über ein Singleton-Pattern. Mit diesen Änderungen passt sich das Rückgabedatum automatisch an das manuelle Systemdatum an.