From e38e535f77ce58b92ba6987f112b30478b1d500a Mon Sep 17 00:00:00 2001 From: Zabih Mansuri <3010192@stud.hs-mannheim.de> Date: Mon, 2 Dec 2024 00:19:33 +0100 Subject: [PATCH] =?UTF-8?q?packages=20hinzugef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- UI/Ui.java | 52 +++++++++++++++++++++++++--------- backend/benutzer/Benutzer.java | 4 +++ fassade/Fassade.java | 33 +++++++++++++++++++-- fassade/Verwaltung.java | 4 +++ 4 files changed, 77 insertions(+), 16 deletions(-) diff --git a/UI/Ui.java b/UI/Ui.java index 81f82b3..a982f21 100644 --- a/UI/Ui.java +++ b/UI/Ui.java @@ -2,12 +2,12 @@ package UI; import backend.benutzer.*; import fassade.*; +import backend.creator.Creator; import java.time.LocalDate; import java.util.Scanner; -import backend.creator.Creator; -public class Ui { +public class Ui { private final Fassade fassade; private final Scanner scanner; @@ -21,15 +21,16 @@ public class Ui { boolean weiter = true; while (weiter) { System.out.println("Bitte wählen Sie eine Option:"); - System.out.println("1.Medien durchsuchen"); + System.out.println("1. Medien durchsuchen"); System.out.println("2. Benutzer registrieren"); System.out.println("3. Benutzer anmelden"); - System.out.println("4. ausleihen"); - System.out.println("5.Medien zurückgeben"); + System.out.println("4. Medien ausleihen"); + System.out.println("5. Medien zurückgeben"); System.out.println("6. Medien verlängern"); System.out.println("7. Gebühren einsehen"); System.out.println("8. Zeit verschieben"); - System.out.println("9. Beenden"); + System.out.println("9. Admin-Login zur Gebührenverwaltung"); + System.out.println("10. Beenden"); int auswahl = scanner.nextInt(); scanner.nextLine(); // Puffer leeren @@ -43,23 +44,26 @@ public class Ui { case 6: verlaengern(); break; case 7: gebuehrenEinsehen(); break; case 8: zeitVerschieben(); break; - case 9: weiter = false; break; + case 9: adminLogin(); break; + case 10: weiter = false; break; default: System.out.println("Ungültige Auswahl."); break; } } } + // Medien durchsuchen private void durchsuchenMedien() { - System.out.print("Suchbegriff (oder 'all' für alle backend.medium.Medien): "); + System.out.print("Suchbegriff (oder 'all' für alle Medien): "); String suchbegriff = scanner.nextLine(); var ergebnisse = fassade.durchsuchenMedien(suchbegriff); if (ergebnisse.isEmpty()) { - System.out.println("Keine backend.medium.Medien gefunden."); + System.out.println("Keine Medien gefunden."); } else { ergebnisse.forEach(m -> System.out.println(m)); } } + // Benutzer registrieren private void registrierenBenutzer() { System.out.print("Vorname: "); String vorname = scanner.nextLine(); @@ -68,7 +72,7 @@ public class Ui { System.out.print("Benutzertyp (e für Erwachsener, s für Schüler/Student): "); String art = scanner.nextLine(); - // Erstelle den Benutzer über die backend.benutzer.Creator-Fabrikmethode + // Benutzer über die Fassade registrieren Benutzer benutzer = Creator.factoryBenutzer(vorname, nachname, 0, art); // Kundennummer könnte hier 0 sein, wenn sie noch nicht vergeben wurde. if (benutzer != null) { @@ -79,7 +83,7 @@ public class Ui { } } - + // Benutzer anmelden private void anmeldenBenutzer() { System.out.print("Kundennummer: "); int kundennummer = scanner.nextInt(); @@ -92,8 +96,9 @@ public class Ui { } } + // Medien ausleihen private void ausleihen() { - System.out.print("backend.medium.Medien ID: "); + System.out.print("Medien ID: "); int medienId = scanner.nextInt(); System.out.print("Kundennummer: "); int kundennummer = scanner.nextInt(); @@ -110,8 +115,9 @@ public class Ui { } } + // Medien zurückgeben private void rueckgabe() { - System.out.print("backend.medium.Medien ID: "); + System.out.print("Medien ID: "); int medienId = scanner.nextInt(); System.out.print("Kundennummer: "); int kundennummer = scanner.nextInt(); @@ -128,8 +134,9 @@ public class Ui { } } + // Medien verlängern private void verlaengern() { - System.out.print("backend.medium.Medien ID: "); + System.out.print("Medien ID: "); int medienId = scanner.nextInt(); System.out.print("Kundennummer: "); int kundennummer = scanner.nextInt(); @@ -143,6 +150,7 @@ public class Ui { } } + // Gebühren einsehen private void gebuehrenEinsehen() { System.out.print("Kundennummer: "); int kundennummer = scanner.nextInt(); @@ -156,10 +164,26 @@ public class Ui { } } + // Zeit verschieben private void zeitVerschieben() { System.out.print("Neue Zeit (yyyy-MM-dd): "); String datum = scanner.nextLine(); fassade.zeitVerschieben(LocalDate.parse(datum)); System.out.println("Aktuelles Datum wurde auf " + datum + " geändert."); } + + // Admin-Login zur Gebührenverwaltung + private void adminLogin() { + System.out.print("Admin-Benutzername: "); + String benutzername = scanner.nextLine(); + System.out.print("Admin-Passwort: "); + String passwort = scanner.nextLine(); + + if (fassade.adminLogin(benutzername, passwort)) { + System.out.println("Admin-Login erfolgreich."); + fassade.verbucheUeberfaelligeGebuehren(); // Verbucht überfällige Gebühren + } else { + System.out.println("Falsche Admin-Zugangsdaten."); + } + } } diff --git a/backend/benutzer/Benutzer.java b/backend/benutzer/Benutzer.java index 29c40ae..359c642 100644 --- a/backend/benutzer/Benutzer.java +++ b/backend/benutzer/Benutzer.java @@ -27,6 +27,10 @@ public abstract class Benutzer { } this.gebuehren = 0.0; // Anfangs keine Gebühren } + public void addGebuehr(double betrag) { + this.gebuehren += betrag; // Beispiel: Der Betrag wird zur bestehenden Gebühr des Benutzers hinzugefügt + } + // Getter- und Setter-Methoden public String getName() { diff --git a/fassade/Fassade.java b/fassade/Fassade.java index ae24eca..ca1b551 100644 --- a/fassade/Fassade.java +++ b/fassade/Fassade.java @@ -2,14 +2,22 @@ package fassade; import backend.medium.Medien; import backend.benutzer.*; +import fassade.Aausleihe; import java.time.LocalDate; import java.util.List; +import java.util.stream.Collectors; +import java.time.temporal.ChronoUnit; + public class Fassade { private final Verwaltung verwaltung; private LocalDate aktuellesDatum; + // Dummy Admin-Zugangsdaten + private static final String ADMIN_USERNAME = "admin"; + private static final String ADMIN_PASSWORD = "admin123"; + // Konstruktor public Fassade(Verwaltung verwaltung) { this.verwaltung = verwaltung; @@ -31,11 +39,9 @@ public class Fassade { // backend.medium.Medien durchsuchen public List durchsuchenMedien(String suchbegriff) { - // Rufe die Methode in der fassade.Verwaltung auf und übergebe die medienListe return verwaltung.durchsuchenMedien(verwaltung.mediensListe, suchbegriff); } - // backend.medium.Medien ausleihen public void ausleihen(int medienId, Benutzer benutzer, LocalDate ausleihDatum, LocalDate rueckgabeDatum) { Medien medien = verwaltung.mediensListe.stream() @@ -78,4 +84,27 @@ public class Fassade { public LocalDate getAktuellesDatum() { return aktuellesDatum; // Gibt das aktuelle Datum zurück } + + // Admin-Login-Methode + public boolean adminLogin(String benutzername, String passwort) { + return ADMIN_USERNAME.equals(benutzername) && ADMIN_PASSWORD.equals(passwort); + } + + // Methode zum Verbuchen überfälliger Gebühren + public void verbucheUeberfaelligeGebuehren() { + // Hole alle überfälligen Ausleihen + List ueberfaelligAusleihen = verwaltung.getAlleAusleihen().stream() + .filter(ausleihe -> LocalDate.now().isAfter(ausleihe.getRueckgabeDatum()) && !ausleihe.getMedien().istAusgeliehen()) + .collect(Collectors.toList()); + + // Gebühr für jede überfällige Ausleihe berechnen und dem Benutzer hinzufügen + for (Aausleihe ausleihe : ueberfaelligAusleihen) { + Benutzer benutzer = ausleihe.getBenutzer(); + long ueberfaelligeTage = ChronoUnit.DAYS.between(ausleihe.getRueckgabeDatum(), LocalDate.now()); + double gebuehr = ueberfaelligeTage * 2.0; // Beispiel: 2 EUR pro überfälligem Tag + benutzer.addGebuehr(gebuehr); // Gebühr dem Benutzer hinzufügen + System.out.println("Gebühr für " + benutzer.getName() + ": " + gebuehr + " EUR"); + } + } + } diff --git a/fassade/Verwaltung.java b/fassade/Verwaltung.java index 4d8d981..b3fac5f 100644 --- a/fassade/Verwaltung.java +++ b/fassade/Verwaltung.java @@ -32,6 +32,10 @@ public class Verwaltung { return new Random().ints(7, 0, 10) .reduce(0, (acc, digit) -> acc * 10 + digit); } + public List getAlleAusleihen() { + return new ArrayList<>(ausliste); // gibt alle Ausleihen zurück + } + public int generiereEindeutigeKundennummer() {