220 lines
8.2 KiB
Plaintext
220 lines
8.2 KiB
Plaintext
prompt 2:
|
|
|
|
ich: erstelle eine Methode overdueGebuehren, die die überfälligen Gebühren berechnet. hier ist die Einsatzklasse
|
|
(Klasse BibliothekSystem):
|
|
|
|
AI: Methode: calculateOverdueFee
|
|
Diese Methode berechnet die überfälligen Gebühren basierend auf den Anzahl der überfälligen Tage.
|
|
Die Berechnung erfolgt nach einer einfachen Regel: 0,50 EUR pro überfälligem Tag.
|
|
|
|
Code
|
|
java
|
|
|
|
// Berechnung der Gebühren für überfällige Medien
|
|
private double calculateOverdueFee(long overdueDays) {
|
|
return overdueDays * 0.50; // Beispiel: 0,50 EUR pro Tag
|
|
}
|
|
|
|
|
|
Einsatzort
|
|
Die Methode wird innerhalb von returnMedium aufgerufen, um die Gebühren zu berechnen:
|
|
|
|
java
|
|
if (currentDate.after(medium.getDueDate())) {
|
|
long overdueDays = (currentDate.getTime() - medium.getDueDate().getTime()) / (1000 * 60 * 60 * 24);
|
|
double fee = calculateOverdueFee(overdueDays);
|
|
System.out.println("Überfällige Gebühren für " + borrower.getName() + ": " + fee + " EUR.");
|
|
}
|
|
|
|
Einbindung in die LibrarySystem-Klasse
|
|
Die Methode ist eine private Hilfsmethode der LibrarySystem-Klasse, da sie nur für interne Berechnungen verwendet wird.
|
|
Sie ist bewusst einfach gehalten, kann aber bei Bedarf erweitert werden,
|
|
z. B. um unterschiedliche Gebühren für verschiedene Medientypen oder Benutzerkategorien zu berücksichtigen.
|
|
|
|
-----------------------------------------------------------
|
|
prompt 3:
|
|
|
|
ich: Das System soll überfällige Artikel verfolgen und Säumnisgebühren berechnen: • Für jeden Tag, an dem ein Gegenstand
|
|
überfällig ist, wird eine Gebühr von 1€ erhoben. • Nach 7 Tagen Überfälligkeit erhöht sich die Gebühr auf 2€ pro Tag.
|
|
Das System sollte den Benutzern die Gesamtgebühren jedes Mal anzeigen, wenn sie sich anmelden, einen Artikel ausleihen
|
|
oder zurückgeben.
|
|
|
|
AI: Um diese Anforderungen umzusetzen, wird das Bibliotheksverwaltungssystem wie folgt erweitert:
|
|
|
|
1. Überarbeitung von calculateOverdueFee
|
|
Die Methode calculateOverdueFee wird angepasst, um die gestaffelten Gebühren zu berücksichtigen:
|
|
|
|
java
|
|
Copy code
|
|
private double calculateOverdueFee(long overdueDays) {
|
|
if (overdueDays <= 0) {
|
|
return 0; // Keine Gebühren, wenn nicht überfällig
|
|
}
|
|
|
|
if (overdueDays <= 7) {
|
|
return overdueDays * 1.0; // 1€ pro Tag für die ersten 7 Tage
|
|
}
|
|
|
|
return (7 * 1.0) + ((overdueDays - 7) * 2.0); // 2€ pro Tag ab dem 8. Tag
|
|
}
|
|
2. Verfolgung von Gebühren pro Benutzer
|
|
Die Klasse User wird erweitert, um aufgelaufene Gebühren zu speichern und zu verwalten:
|
|
|
|
Anpassung der User-Klasse
|
|
java
|
|
Copy code
|
|
public class User {
|
|
private String id;
|
|
private String name;
|
|
private List<Medium> borrowedItems;
|
|
private double outstandingFees; // Aufgelaufene Gebühren
|
|
|
|
public User(String id, String name) {
|
|
this.id = id;
|
|
this.name = name;
|
|
this.borrowedItems = new ArrayList<>();
|
|
this.outstandingFees = 0.0;
|
|
}
|
|
|
|
public double getOutstandingFees() {
|
|
return outstandingFees;
|
|
}
|
|
|
|
public void addFee(double fee) {
|
|
this.outstandingFees += fee;
|
|
}
|
|
|
|
public void clearFees() {
|
|
this.outstandingFees = 0.0;
|
|
}
|
|
|
|
public void listBorrowedItems() {
|
|
if (borrowedItems.isEmpty()) {
|
|
System.out.println("Keine ausgeliehenen Medien.");
|
|
} else {
|
|
System.out.println("Ausgeliehene Medien:");
|
|
for (Medium medium : borrowedItems) {
|
|
System.out.println("- " + medium.getTitle() + " (Rückgabedatum: " + medium.getDueDate() + ")");
|
|
}
|
|
}
|
|
}
|
|
|
|
// Weitere Methoden für Ausleihen und Rückgabe wie bereits implementiert
|
|
}
|
|
3. Gebührenberechnung bei Rückgabe
|
|
Die Methode returnMedium wird angepasst, um aufgelaufene Gebühren direkt in der Benutzerinstanz zu speichern:
|
|
|
|
java
|
|
Copy code
|
|
public void returnMedium(String mediumId) {
|
|
Medium medium = findMedium(mediumId);
|
|
if (medium == null) {
|
|
System.out.println("Medium mit der ID '" + mediumId + "' wurde nicht gefunden.");
|
|
return;
|
|
}
|
|
|
|
if (!medium.isLoaned()) {
|
|
System.out.println("Medium '" + medium.getTitle() + "' ist nicht ausgeliehen.");
|
|
return;
|
|
}
|
|
|
|
User borrower = null;
|
|
for (User user : userManager.getUsers()) {
|
|
if (user.getBorrowedItems().contains(medium)) {
|
|
borrower = user;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (borrower == null) {
|
|
System.out.println("Kein Benutzer gefunden, der dieses Medium ausgeliehen hat.");
|
|
return;
|
|
}
|
|
|
|
borrower.returnItem(medium);
|
|
|
|
// Überfällige Gebühren berechnen
|
|
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.");
|
|
} else {
|
|
System.out.println("Medium '" + medium.getTitle() + "' wurde rechtzeitig zurückgegeben.");
|
|
}
|
|
|
|
// Verbleibende ausgeliehene Medien anzeigen
|
|
System.out.println("Verbleibende ausgeliehene Medien von " + borrower.getName() + ":");
|
|
borrower.listBorrowedItems();
|
|
}
|
|
4. Gebührenanzeige bei Anmeldung
|
|
Eine Methode wird hinzugefügt, um die Gebühren eines Benutzers bei der Anmeldung anzuzeigen:
|
|
|
|
java
|
|
Copy code
|
|
public void showOutstandingFees(String userId) {
|
|
User user = userManager.getUser(userId);
|
|
if (user == null) {
|
|
System.out.println("Benutzer nicht gefunden.");
|
|
return;
|
|
}
|
|
|
|
double fees = user.getOutstandingFees();
|
|
if (fees > 0) {
|
|
System.out.println("Offene Gebühren für " + user.getName() + ": " + fees + " EUR.");
|
|
} else {
|
|
System.out.println("Keine offenen Gebühren für " + user.getName() + ".");
|
|
}
|
|
}
|
|
5. Gebührenzahlung durch Admin
|
|
Ein Admin-Benutzer wird hinzugefügt, der Zahlungen bearbeiten kann:
|
|
|
|
Admin-Klasse
|
|
java
|
|
Copy code
|
|
public class Admin extends User {
|
|
public Admin(String id, String name) {
|
|
super(id, name);
|
|
}
|
|
|
|
public void processPayment(User user, double amount) {
|
|
if (amount <= 0) {
|
|
System.out.println("Ungültiger Zahlungsbetrag.");
|
|
return;
|
|
}
|
|
|
|
if (amount > user.getOutstandingFees()) {
|
|
System.out.println("Betrag übersteigt offene Gebühren.");
|
|
return;
|
|
}
|
|
|
|
user.addFee(-amount); // Reduziert die Gebühren
|
|
System.out.println("Zahlung von " + amount + " EUR für " + user.getName() + " erfolgreich bearbeitet.");
|
|
System.out.println("Verbleibende Gebühren: " + user.getOutstandingFees() + " EUR.");
|
|
}
|
|
}
|
|
Gebührenzahlung
|
|
Die Benutzeroberfläche wird um eine Option für Admins ergänzt:
|
|
|
|
java
|
|
Copy code
|
|
case 6 -> {
|
|
System.out.print("Admin-ID: ");
|
|
String adminId = scanner.next();
|
|
User admin = userManager.getUser(adminId);
|
|
if (admin instanceof Admin) {
|
|
System.out.print("Benutzer-ID: ");
|
|
String userId = scanner.next();
|
|
User user = userManager.getUser(userId);
|
|
if (user == null) {
|
|
System.out.println("Benutzer nicht gefunden.");
|
|
break;
|
|
}
|
|
System.out.print("Zahlungsbetrag: ");
|
|
double amount = scanner.nextDouble();
|
|
((Admin) admin).processPayment(user, amount);
|
|
} else {
|
|
System.out.println("Keine Admin-Rechte.");
|
|
}
|
|
} |