diff --git a/Aausleihe.java b/Aausleihe.java index 9a7af4d..33b572d 100644 --- a/Aausleihe.java +++ b/Aausleihe.java @@ -1,4 +1,50 @@ +import java.time.LocalDate; + public class Aausleihe { + private Medien medien; + private Benutzer benutzer; + private LocalDate date; // Ausleihdatum + private LocalDate rueckgabeDatum; // Rückgabedatum + // Konstruktor für die Aausleihe + Aausleihe(Medien medien, Benutzer benutzer, LocalDate date, LocalDate rueckgabeDatum) { + this.medien = medien; + this.benutzer = benutzer; + this.date = date; + this.rueckgabeDatum = rueckgabeDatum; + } + // Getter für den Benutzer + public Benutzer getBenutzer() { + return benutzer; + } + + // Getter für das Medium + public Medien getMedien() { + return medien; + } + + // Getter für das Ausleihdatum + public LocalDate getDate() { + return date; + } + + // Getter und Setter für das Rückgabedatum + public LocalDate getRueckgabeDatum() { + return rueckgabeDatum; + } + + public void setRueckgabeDatum(LocalDate rueckgabeDatum) { + this.rueckgabeDatum = rueckgabeDatum; + } + + @Override + public String toString() { + return "Aausleihe{" + + "medien=" + medien + + ", benutzer=" + benutzer + + ", ausleihdatum=" + date + + ", rueckgabedatum=" + rueckgabeDatum + + '}'; + } } diff --git a/Admin.java b/Admin.java new file mode 100644 index 0000000..eabda5b --- /dev/null +++ b/Admin.java @@ -0,0 +1,33 @@ +class Admin { + private final String name = "zabih"; + private final String nachname = "Mansuri"; + private final int passwort = 1234; + private final String art = "Admin"; + + // Getter-Methoden + public String getName() { + return name; + } + + public String getNachname() { + return nachname; + } + + public int getPasswort() { + return passwort; + } + + public String getArt() { + return art; + } + + @Override + public String toString() { + return "Admin{" + + "Name='" + name + '\'' + + ", Nachname='" + nachname + '\'' + + ", Passwort=" + passwort + + ", Art='" + art + '\'' + + '}'; + } +} \ No newline at end of file diff --git a/Benutzer.java b/Benutzer.java index 9d39bf8..8ca44e4 100644 --- a/Benutzer.java +++ b/Benutzer.java @@ -1,65 +1,85 @@ - -import java.util.Date; -import java.util.Calendar; - - class Benutzer { +class Benutzer { private String name; private String nachname; private int kundennummer; - private Date date; - + private String art; // Benutzerart (Erwachsener, Schüler/Student, etc.) + private double jahresgebuehr; // Jahresgebühr des Benutzers + private double gebuehren; // Aktuelle ausstehende Gebühren des Benutzers // Konstruktor - Benutzer(String name, String nachname, int kundennummer, Date date) { + public Benutzer(String name, String nachname, int kundennummer, String art) { this.name = name; this.nachname = nachname; - this.date = date; this.kundennummer = kundennummer; + this.art = art; + + // Jahresgebühr festlegen basierend auf der Benutzerart + if (art.equalsIgnoreCase("Erwachsener")) { + this.jahresgebuehr = 50.0; // Beispiel für regulären Preis + } else if (art.equalsIgnoreCase("Schüler/Student")) { + this.jahresgebuehr = 25.0; // Beispiel für ermäßigten Preis + } else { + this.jahresgebuehr = 0.0; // Default-Wert, z. B. für Admins oder Kinder + } + this.gebuehren = 0.0; // Anfangs keine Gebühren } - // Getter-Methoden - public String getNachname() { - return nachname; - } - + // Getter- und Setter-Methoden public String getName() { return name; } - public Date getDate() { - return date; + public String getNachname() { + return nachname; } public int getKundennummer() { return kundennummer; } - // Methode zum Extrahieren des Jahres aus dem Date - public static int getJahr(Benutzer benutzer) { - Calendar calendar = Calendar.getInstance(); - calendar.setTime(benutzer.getDate()); // Setzt das Date in das Calendar-Objekt - return calendar.get(Calendar.YEAR); // Gibt das Jahr aus dem Calendar-Objekt zurück + public String getArt() { + return art; } + public double getJahresgebuehr() { + return jahresgebuehr; + } - // Die Unterklassen Erwachsen und Kinder bleiben unverändert - public static class Erwachsen extends Benutzer { - Erwachsen(String name, String nachname, int kundennummer, Date date) { - super(name, nachname, kundennummer, date); + public double getGebuehren() { + return gebuehren; + } + + public void setGebuehren(double gebuehren) { + this.gebuehren = gebuehren; + } + + // toString-Methode + @Override + public String toString() { + return "Benutzer{" + + "Name='" + name + '\'' + + ", Nachname='" + nachname + '\'' + + ", Kundennummer=" + kundennummer + + ", Art='" + art + '\'' + + ", Jahresgebühr=" + jahresgebuehr + + ", Ausstehende Gebühren=" + gebuehren + + '}'; + } + + // Spezifische Benutzertypen als Unterklassen + public static class Erwachsener extends Benutzer { + public Erwachsener(String name, String nachname, int kundennummer) { + super(name, nachname, kundennummer, "Erwachsener"); } } - public static class Kinder extends Benutzer { - Kinder(String name, String nachname, int kundennummer, Date date) { - super(name, nachname, kundennummer, date); + public static class SchuelerStudent extends Benutzer { + public SchuelerStudent(String name, String nachname, int kundennummer,String art) { + super(name, nachname, kundennummer,art); } } - public static class Admin extends Benutzer { - Admin(String name, String nachname, int kundennummer, Date date) { - super(name, nachname, kundennummer, date); - - } - } - } + + + diff --git a/Fragen.txt b/Brechnung.txt similarity index 100% rename from Fragen.txt rename to Brechnung.txt diff --git a/Creator.java b/Creator.java new file mode 100644 index 0000000..97953d6 --- /dev/null +++ b/Creator.java @@ -0,0 +1,28 @@ +class Creator { + static Benutzer factoryBenutzer(String name, String nachname, int kundennummer, String art) { + if (art.equals("e")) { + return new Benutzer.Erwachsener(name, nachname, kundennummer); + } else if (art.equals("s")) { + return new Benutzer.SchuelerStudent(name, nachname, kundennummer, art); + } else { + return null; + } + } + + public static Medien factoryMedien(String name, String regisseur, int id, String art, int erscheinungsjahr) { + switch (art.toLowerCase()) { + case "buch": + return new Medien.Book(name, regisseur, id, erscheinungsjahr); + case "dvd": + return new Medien.Dvds(name, regisseur, id); + case "cd": + return new Medien.Cds(name, id); + case "sb": + return new Medien.Brettspiel(name, id); + case "videospiel": + return new Medien.Videospiel(name, regisseur, id); + default: + throw new IllegalArgumentException("Unbekannter Medientyp: " + art); + } + } +} \ No newline at end of file diff --git a/Main.java b/Main.java index 8607e1c..2cb7082 100644 --- a/Main.java +++ b/Main.java @@ -19,4 +19,4 @@ public class Main { Ui ui = new Ui(verwaltung); ui.anmeldung(); } -} +} \ No newline at end of file diff --git a/Medien.java b/Medien.java index e49f4b6..5b9f1d0 100644 --- a/Medien.java +++ b/Medien.java @@ -11,7 +11,7 @@ public abstract class Medien implements Ausleihbar { protected int id; protected int frist; // Standard-Ausleihfrist in Wochen protected int maxVerlängerungen; // Maximale Anzahl an möglichen Verlängerungen - protected int aktuelleVerlängerungen; // Aktuelle Anzahl an durchgeführten Verlängerungen + protected int aktuelleVerlängerungen=1; // Aktuelle Anzahl an durchgeführten Verlängerungen protected boolean istAusgeliehen; // Status, ob das Medium ausgeliehen ist // Konstruktor @@ -21,7 +21,7 @@ public abstract class Medien implements Ausleihbar { this.frist = frist; this.maxVerlängerungen = maxVerlängerungen; this.aktuelleVerlängerungen = 0; // Initialisierung ohne Verlängerungen - this.istAusgeliehen = false; // Initialer Status: nicht ausgeliehen + // Initialer Status: nicht ausgeliehen } // Getter-Methoden diff --git a/Ui.java b/Ui.java index c7eae44..58ff9ad 100644 --- a/Ui.java +++ b/Ui.java @@ -1,13 +1,10 @@ -import java.util.*; // Für LinkedList, List, ArrayList, Scanner und andere grundlegende Klassen -import java.util.stream.Collectors; // Für die Collectors-Funktionalität in Streams -import java.text.ParseException; // Für Ausnahmebehandlung beim Parsen von Daten -import java.text.SimpleDateFormat; -import java.util.function.Predicate; -// Für die Verarbeitung von Datumsformaten +import java.time.LocalDate; +import java.util.*; +import java.time.temporal.ChronoUnit; public class Ui { - private Scanner scanner = new Scanner(System.in); - private Verwaltung verwaltung; + private final Scanner scanner = new Scanner(System.in); + private final Verwaltung verwaltung; // Konstruktor, der eine Verwaltung-Instanz annimmt public Ui(Verwaltung verwaltung) { @@ -16,95 +13,293 @@ public class Ui { void anmeldung() { boolean running = true; - while (running) { System.out.println("Willkommen! Bitte wählen Sie eine Option:"); - System.out.println("1: Registrieren"); - System.out.println("2: Anmelden mit Kundennummer"); - System.out.println("3: Suchen nach Objekten"); + System.out.println("1: Durchsuchen der Medien"); + System.out.println("2: Ausleihen eines Gegenstandes"); + System.out.println("3: Rückgabe eines Gegenstandes"); + System.out.println("4: Ausgeliehene Gegenstände und Gebühren anzeigen"); + System.out.println("5: Verlängern der Leihfrist"); + System.out.println("6: Verbuchen von überfälligen Gebühren (Admin)"); + System.out.println("7: Registrieren"); + System.out.println("8: Anmelden"); System.out.println("0: Programm beenden"); int menue = scanner.nextInt(); scanner.nextLine(); // Leert den Puffer nach nextInt() switch (menue) { - case 1: - registrieren(); - break; - - case 2: - anmelden(); - break; - - case 3: - suchenNachMedien(); - break; - case 4: - - - case 0: + case 1 -> suchenNachMedien(); // Keine Anmeldung erforderlich + case 2 -> ausleihen(); + case 3 -> rueckgabeDurchfuehren(); + case 4 -> gebuehrenEinsehen(); + case 5 -> verlaengern(); + case 6 -> adminrechte(); + case 7 -> registrieren(); // Registrieren + case 8 -> anmelden(); // Anmelden + case 0 -> { System.out.println("Programm wird beendet. Auf Wiedersehen!"); running = false; - break; - - default: - System.out.println("Ungültige Auswahl. Bitte versuchen Sie es erneut."); + } + default -> System.out.println("Ungültige Auswahl. Bitte versuchen Sie es erneut."); } } } - private void registrieren() { - System.out.print("Geben Sie Ihren Vornamen ein: "); - String name = scanner.nextLine(); - - System.out.print("Geben Sie Ihren Nachnamen ein: "); - String nachname = scanner.nextLine(); - - System.out.print("Geben Sie Ihr Geburtsdatum ein (Format: TT.MM.JJJJ): "); - String dateInput = scanner.nextLine(); - - SimpleDateFormat formatter = new SimpleDateFormat("dd.MM.yyyy"); - formatter.setLenient(false); - - try { - Date geburtsdatum = formatter.parse(dateInput); - int genkundennummer = verwaltung.generiereEindeutigeKundennummer(); - - Benutzer neuerBenutzer = Creator.factoryBenutzer(name, nachname, genkundennummer, geburtsdatum); - verwaltung.benutzerListe.add(neuerBenutzer); - - System.out.println("Registrierung erfolgreich! Ihre Kundennummer lautet: " + genkundennummer); - } catch (ParseException e) { - System.out.println("Ungültiges Datum. Bitte verwenden Sie das Format TT.MM.JJJJ."); - } - } - - private void anmelden() { - System.out.print("Geben Sie Ihre Kundennummer zur Anmeldung ein: "); - int eingabeKundennummer = scanner.nextInt(); - Predicate isKundennummerGleich = benutzer -> benutzer.getKundennummer() == eingabeKundennummer; - - if (verwaltung.benutzerListe.stream().anyMatch(isKundennummerGleich)) { - System.out.println("Willkommen zurück, Benutzer mit Kundennummer: " + eingabeKundennummer + "!"); - } else { - System.out.println("Kundennummer '" + eingabeKundennummer + "' nicht gefunden. Bitte registrieren Sie sich."); - } - } - private void suchenNachMedien() { System.out.println("Bitte geben Sie stichwortartig an, wonach Sie suchen:"); String suchbegriff = scanner.nextLine(); - // Die Methode durchsuchenMedien in der Verwaltungsklasse wird aufgerufen List gefundeneMedien = Verwaltung.durchsuchenMedien(verwaltung.mediensListe, suchbegriff); if (gefundeneMedien.isEmpty()) { System.out.println("Keine Medien gefunden."); } else { System.out.println("Gefundene Medien:"); - gefundeneMedien.forEach(System.out::println); // Nutzt die toString()-Methode jeder Medienklasse zur Ausgabe + for (Medien medien : gefundeneMedien) { + System.out.print(medien.getName()); + + if (medien.istAusgeliehen) { + // Wenn das Medium ausgeliehen ist, gibt es das Rückgabedatum an + Optional ausleiheOpt = verwaltung.ausliste.stream() + .filter(ausleihe -> ausleihe.getMedien().equals(medien)) + .findFirst(); + + if (ausleiheOpt.isPresent()) { + Aausleihe ausleihe = ausleiheOpt.get(); + LocalDate rueckgabedatum = ausleihe.getDate().plusWeeks(medien.frist); // Berechnet das Rückgabedatum + System.out.println(" ist ausgeliehen. Rückgabedatum: " + rueckgabedatum); + } + } else { + System.out.println(" ist verfügbar."); + } + + // Hier können noch weitere Details zum Medium ausgegeben werden, falls erforderlich + System.out.println("Typ: " + medien.getClass().getSimpleName()); // Zeigt den Typ des Mediums an + // Weitere Details wie Autor, Jahr, etc. je nach Medium-Typ könnten hier hinzugefügt werden + } } } -} + // Registrierungsmethode + private void registrieren() { + System.out.print("Geben Sie Ihren Vornamen ein: "); + String name = scanner.nextLine(); + + System.out.print("Geben Sie Ihren Nachnamen ein: "); + String nachname = scanner.nextLine(); + + System.out.print("Für Student geben Sie 's' und für Erwachsener 'e' ein: "); + String artInput = scanner.nextLine(); + + // Generiere eine neue, eindeutige Kundennummer + int genkundennummer = verwaltung.generiereEindeutigeKundennummer(); + + // Erstelle einen neuen Benutzer + Benutzer neuerBenutzer = Creator.factoryBenutzer(name, nachname, genkundennummer, artInput.toLowerCase()); + + if (neuerBenutzer != null) { + verwaltung.benutzerListe.add(neuerBenutzer); // Benutzer zur Verwaltungsliste hinzufügen + System.out.println("Registrierung erfolgreich! Ihre Kundennummer lautet: " + genkundennummer); + } else { + System.out.println("Ungültige Art. Versuchen Sie es erneut."); + } + } + + // Anmeldemethode + private Benutzer anmelden() { + System.out.print("Geben Sie Ihre Kundennummer zur Anmeldung ein: "); + int eingabeKundennummer = scanner.nextInt(); + scanner.nextLine(); // Puffer leeren + + Optional benutzerOpt = verwaltung.benutzerListe.stream() + .filter(benutzer -> benutzer.getKundennummer() == eingabeKundennummer) + .findFirst(); + + if (benutzerOpt.isPresent()) { + System.out.println("Willkommen zurück, " + benutzerOpt.get().getName()); + return benutzerOpt.get(); + } else { + System.out.println("Kundennummer nicht gefunden."); + return null; + } + } + + // Ausleihen eines Mediums + private void ausleihen() { + Benutzer benutzer = anmelden(); + if (benutzer == null) { + System.out.println("Sie müssen sich zuerst anmelden."); + return; + } + + System.out.print("Geben Sie die ID des gewünschten Mediums ein: "); + int id = scanner.nextInt(); + scanner.nextLine(); // Puffer leeren + + Optional optionalMedien = verwaltung.mediensListe.stream() + .filter(medien -> medien.getId() == id) + .findFirst(); + + if (optionalMedien.isPresent()) { + Medien medien = optionalMedien.get(); + if (!medien.istAusgeliehen()) { + LocalDate heute = LocalDate.now(); + verwaltung.addAL(medien, benutzer, heute, null); + System.out.println("Das Medium wurde erfolgreich ausgeliehen."); + } else { + System.out.println("Das Medium ist bereits ausgeliehen."); + } + } else { + System.out.println("Medium mit dieser ID nicht gefunden."); + } + } + + // Rückgabe eines Mediums + private void rueckgabeDurchfuehren() { + Benutzer benutzer = anmelden(); + if (benutzer == null) { + System.out.println("Sie müssen sich zuerst anmelden."); + return; + } + + System.out.print("Geben Sie die ID des Mediums ein, das Sie zurückgeben möchten: "); + int id = scanner.nextInt(); + scanner.nextLine(); // Puffer leeren + + Optional optionalMedien = verwaltung.mediensListe.stream() + .filter(medien -> medien.getId() == id) + .findFirst(); + + if (optionalMedien.isPresent()) { + Medien medien = optionalMedien.get(); + + // Benutzer nach einem Rückgabedatum fragen + System.out.println("Aktuelles Rückgabedatum: " + LocalDate.now()); + System.out.print("Möchten Sie das Rückgabedatum ändern? (ja/nein): "); + String antwort = scanner.nextLine(); + + LocalDate rueckgabedatum; + if (antwort.equalsIgnoreCase("ja")) { + // Benutzer nach einem neuen Rückgabedatum fragen + System.out.print("Geben Sie das Rückgabedatum im Format JJJJ-MM-TT ein: "); + String datumInput = scanner.nextLine(); + + // Versuch, das Datum zu parsen + try { + rueckgabedatum = LocalDate.parse(datumInput); + System.out.println("Das Rückgabedatum wurde auf " + rueckgabedatum + " gesetzt."); + } catch (Exception e) { + System.out.println("Ungültiges Datum. Rückgabe wird mit dem heutigen Datum durchgeführt."); + rueckgabedatum = LocalDate.now(); // Standard auf das heutige Datum + } + } else { + // Standardmäßig wird das heutige Datum verwendet + rueckgabedatum = LocalDate.now(); + } + + // Rückgabe durchführen + verwaltung.rueckgabe(id, benutzer, rueckgabedatum); + System.out.println("Das Medium wurde erfolgreich zurückgegeben."); + } else { + System.out.println("Medium mit dieser ID nicht gefunden."); + } + } + + + private void gebuehrenEinsehen() { + Benutzer benutzer = anmelden(); + if (benutzer == null) { + System.out.println("Sie müssen sich zuerst anmelden."); + return; + } + + System.out.println("Ihre ausstehenden Gebühren:"); + + // Liste der ausgeliehenen Medien des Benutzers + List ausleihen = verwaltung.getAusleihenByBenutzer(benutzer); + + if (ausleihen.isEmpty()) { + System.out.println("Sie haben keine ausgeliehenen Medien."); + return; + } + + // Aktuelles Datum + LocalDate heute = LocalDate.now(); + + // Durchlaufe alle ausgeliehenen Medien und berechne mögliche Gebühren + for (Aausleihe ausleihe : ausleihen) { + Medien medien = ausleihe.getMedien(); + LocalDate faelligkeitsdatum = ausleihe.getDate().plusWeeks(medien.frist); // Annahme: `frist` gibt die Leihfrist in Wochen an + + double gebuehr = 0; + if (heute.isAfter(faelligkeitsdatum)) { + long ueberfaelligeWochen = ChronoUnit.WEEKS.between(faelligkeitsdatum, heute); + gebuehr = ueberfaelligeWochen * 2.0; // Beispiel: 2 EUR pro überfälliger Woche + } + + // Gebühr und Fälligkeitsdatum ausgeben + System.out.println("Medium: " + medien.getName() + + ", Fälligkeitsdatum: " + faelligkeitsdatum + + ", Überfällige Wochen: " + (heute.isAfter(faelligkeitsdatum) ? ChronoUnit.WEEKS.between(faelligkeitsdatum, heute) : 0) + + ", Gebühr: " + gebuehr + " EUR"); + } + } + + private void verlaengern() { + Benutzer benutzer = anmelden(); + if (benutzer == null) { + System.out.println("Sie müssen sich zuerst anmelden."); + return; + } + + System.out.print("Geben Sie die ID des Mediums ein, das Sie verlängern möchten: "); + int id = scanner.nextInt(); + scanner.nextLine(); // Puffer leeren + + Optional optionalMedien = verwaltung.mediensListe.stream() + .filter(medien -> medien.getId() == id) + .findFirst(); + + if (optionalMedien.isPresent()) { + verwaltung.verlängern(optionalMedien.get(), benutzer); + System.out.println("Das Medium wurde verlängert."); + } else { + System.out.println("Medium mit dieser ID nicht gefunden."); + } + } + + private void adminrechte() { + System.out.print("Geben Sie den Admin-Benutzernamen ein: "); + String benutzername = scanner.nextLine(); + System.out.print("Geben Sie das Admin-Passwort ein: "); + String passwort = scanner.nextLine(); + + if (benutzername.equals("admin") && passwort.equals("admin123")) { + System.out.println("Admin-Login erfolgreich."); + verbucheUeberfaelligeGebuehren(); + } else { + System.out.println("Falsche Admin-Zugangsdaten."); + } + } + + private void verbucheUeberfaelligeGebuehren() { + System.out.println("Verbuchen überfälliger Gebühren:"); + + LocalDate heute = LocalDate.now(); + + for (Aausleihe ausleihe : verwaltung.ausliste) { + Medien medien = ausleihe.getMedien(); + Benutzer benutzer = ausleihe.getBenutzer(); + LocalDate faelligkeitsdatum = ausleihe.getDate().plusWeeks(medien.frist); + + if (heute.isAfter(faelligkeitsdatum)) { + long ueberfaelligeWochen = ChronoUnit.WEEKS.between(faelligkeitsdatum, heute); + double gebuehr = ueberfaelligeWochen * 2.0; // Beispiel: 2 EUR pro Woche überfällig + System.out.println("Benutzer: " + benutzer.getName() + ", Medium: " + medien.getName() + + ", Überfällige Wochen: " + ueberfaelligeWochen + ", Gebühr: " + gebuehr + " EUR"); + } + } + } +} diff --git a/Verwaltung.java b/Verwaltung.java index 5174c21..7b2195f 100644 --- a/Verwaltung.java +++ b/Verwaltung.java @@ -1,10 +1,18 @@ import javax.crypto.spec.PSource; +import java.time.LocalDate; +import java.time.temporal.ChronoUnit; import java.util.*; import java.util.stream.Collectors; + + public class Verwaltung { LinkedList mediensListe = new LinkedList<>(); LinkedList benutzerListe = new LinkedList<>(); + static LinkedList ausliste = new LinkedList<>(); + Long wochenDauer; + + Creator obj = new Creator(); void addFunktion(Medien medien) { @@ -16,21 +24,11 @@ public class Verwaltung { } static int mrgen() { - Random m = new Random(); - int[] zahl = new int[7]; - - int number; - for (int i = 0; i < 7; ++i) { - number = m.nextInt(10); - zahl[i] = number; - } - - number = Arrays.stream(zahl).reduce(0, (acc, digit) -> { - return acc * 10 + digit; - }); - return number; + return new Random().ints(7, 0, 10) + .reduce(0, (acc, digit) -> acc * 10 + digit); } + public int generiereEindeutigeKundennummer() { final int[] genkundennummer = new int[1]; // Verwendung eines Arrays, um den Wert zu ändern do { @@ -43,9 +41,14 @@ public class Verwaltung { public static List durchsuchenMedien(LinkedList medienListe, String suchbegriff) { String suchbegriffKlein = suchbegriff.toLowerCase(); // Der Suchbegriff in Kleinbuchstaben für einfache Vergleiche + // Wenn der Suchbegriff "all" ist, geben wir die gesamte Liste zurück + if (suchbegriffKlein.equals("all")) { + return new ArrayList<>(medienListe); // Rückgabe einer Kopie der gesamten Liste + } + + // Andernfalls wird der Filter angewendet, um nach Art und Namen zu suchen return medienListe.stream() .filter(medien -> { - // Sucht nach dem Mediumstyp (Art des Mediums) und dem Namen des Werkes boolean gefunden = false; // Überprüfe, ob die Art des Mediums im Suchbegriff enthalten ist @@ -69,32 +72,134 @@ public class Verwaltung { .collect(Collectors.toList()); // Rückgabe der gefilterten Liste } -} + // Methode zum Hinzufügen einer Ausleihe -class Creator { - - static Benutzer factoryBenutzer(String name, String nachname, int kundennummer, Date date) { - if (Benutzer.getJahr(new Benutzer(name, nachname, kundennummer, date)) > 18) { - return new Benutzer.Erwachsen(name, nachname, kundennummer, date); + void addAL(Medien medien, Benutzer benutzer, LocalDate ausleihDatum,LocalDate reuckgabeDatum) { + if (medien.istAusgeliehen) { + System.out.println("Das Medium ist bereits ausgeliehen."); } else { - return new Benutzer.Kinder(name, nachname, kundennummer, date); + + Aausleihe aausleihe = new Aausleihe(medien, benutzer, ausleihDatum,reuckgabeDatum); // Neues Aausleihe-Objekt erstellen + ausliste.add(aausleihe); + medien.istAusgeliehen = true; + medien.maxVerlängerungen--; + } + + } + + + // Methode zum Entfernen einer Ausleihe und Berechnung der Dauer + void remov(Medien medien, Benutzer benutzer) { + Aausleihe zuEntfernen = null; + + // Durchsuchen der Liste nach der passenden Ausleihe + for (Aausleihe aausleihe : ausliste) { + // Überprüfen, ob das Medium und der Benutzer übereinstimmen + if (aausleihe.getMedien().equals(medien) && aausleihe.getBenutzer().equals(benutzer)) { + zuEntfernen = aausleihe; // Markieren des zu entfernenden Eintrags + medien.istAusgeliehen = false; // Markiere das Medium als nicht mehr ausgeliehen + break; // Schleife abbrechen, wenn die passende Ausleihe gefunden wurde + } + } + + // Entfernen des markierten Eintrags, falls gefunden + if (zuEntfernen != null) { + ausliste.remove(zuEntfernen); // Entfernen des markierten Eintrags + } + } + public List getAusleihenByBenutzer(Benutzer benutzer) { + List benutzerAusleihen = new ArrayList<>(); + for (Aausleihe ausleihe : ausliste) { + if (ausleihe.getBenutzer().equals(benutzer)) { + benutzerAusleihen.add(ausleihe); + } + } + return benutzerAusleihen; + } + + + + + + + // Methode zur Berechnung der Wochen zwischen zwei Date-Objekten + long berechneWochenDifferenz(LocalDate ausleihDatum, LocalDate rueckgabeDatum) { + return ChronoUnit.DAYS.between(ausleihDatum, rueckgabeDatum); + } + + + + + void rueckgabe(int medienId, Benutzer benutzer, LocalDate rueckgabeDatum) { + // Durchsuche die Ausleihen (ausliste) nach einer Übereinstimmung mit Medien-ID und Benutzer-ID + for (Aausleihe ausleihe : ausliste) { + // Vergleiche Medien-ID und Benutzer-ID + if (ausleihe.getMedien().getId() == medienId && ausleihe.getBenutzer().equals(benutzer)) { + // Wenn das Medium und der Benutzer übereinstimmen + ausleihe.setRueckgabeDatum(rueckgabeDatum); // Setze das Rückgabedatum + ausleihe.getMedien().istAusgeliehen = false; // Markiere das Medium als zurückgegeben + System.out.println("Das Medium wurde erfolgreich zurückgegeben."); + return; // Methode verlassen, Rückgabe abgeschlossen + } } } - public static Medien factoryMedien(String name, String regisseur, int id, String art, int erscheinungsjahr) { - switch (art.toLowerCase()) { - case "buch": - return new Medien.Book(name, regisseur, id, erscheinungsjahr); // Autor für Bücher - case "dvd": - return new Medien.Dvds(name, regisseur, id); // Regisseur für DVDs - case "cd": - return new Medien.Cds(name, id); // CDs benötigen keinen Autor - case "sb": // Brettspiel - return new Medien.Brettspiel(name, id); // Brettspiele benötigen keinen Autor - case "videospiel": - return new Medien.Videospiel(name, regisseur, id); // Entwickler für Videospiele - default: - throw new IllegalArgumentException("Unbekannter Medientyp: " + art); + private double jahresgebuehr; + + + public double getJahresgebuehr() { + return jahresgebuehr; + } + + + public void verbuchenGebuehren(Benutzer benutzer) { + // Admin prüft, ob Gebühren vorhanden sind + double gebuehren = benutzer.getGebuehren(); + if (gebuehren > 0) { + System.out.println("Gebühren von " + gebuehren + "€ wurden erfolgreich verbucht."); + benutzer.setGebuehren(0); // Gebühren zurücksetzen + } else { + System.out.println("Keine ausstehenden Gebühren für diesen Benutzer."); } } + + + public void verlängern(Medien medien, Benutzer benutzer) { + for (Aausleihe aausleihe : ausliste) { + // Überprüfen, ob das richtige Medium und der richtige Benutzer vorliegen + if (aausleihe.getMedien().equals(medien) && aausleihe.getBenutzer().equals(benutzer)) { + if (medien.verlängern()&& medien.kannVerlängern()) { // Medien.verlängern() prüft, ob noch Verlängerungen möglich sind + System.out.println("Das Medium wurde erfolgreich verlängert. Aktuelle Verlängerungen: " + medien.getMaxVerlängerungen()); + medien.maxVerlängerungen--; + medien.aktuelleVerlängerungen++; + } else { + System.out.println("Keine weitere Verlängerung möglich. Maximale Anzahl erreicht."); + } + return; // Verlängerung durchgeführt, daher beenden + } + } + System.out.println("Das Medium ist entweder nicht ausgeliehen oder gehört nicht diesem Benutzer."); + } + + + + + + + + public double berechneGebuehren(Aausleihe aausleihe, LocalDate aktuellesDatum) { + long tageÜberfällig = ChronoUnit.DAYS.between(aausleihe.getRueckgabeDatum(), aktuellesDatum); + if (tageÜberfällig <= 0) { + return 0; // Keine Gebühren + } else if (tageÜberfällig <= 7) { + return tageÜberfällig * 1; // 1€/Tag + } else { + return (7 * 1) + ((tageÜberfällig - 7) * 2); // 2€/Tag nach 7 Tagen + } + } + + + } + +