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) { mediensListe.add(medien); } void addBenutzer(Benutzer benutzer) { benutzerListe.add(benutzer); } static int mrgen() { 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 { genkundennummer[0] = mrgen(); // Eine neue Kundennummer generieren } while (benutzerListe.stream().anyMatch(benutzer -> benutzer.getKundennummer() == genkundennummer[0])); return genkundennummer[0]; // Rückgabe der Kundennummer } // Verbesserte Version der durchsuchenMedien-Methode 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 -> { boolean gefunden = false; // Überprüfe, ob die Art des Mediums im Suchbegriff enthalten ist if (medien instanceof Medien.Book) { gefunden |= "buch".contains(suchbegriffKlein); } else if (medien instanceof Medien.Dvds) { gefunden |= "dvd".contains(suchbegriffKlein); } else if (medien instanceof Medien.Cds) { gefunden |= "cd".contains(suchbegriffKlein); } else if (medien instanceof Medien.Brettspiel) { gefunden |= "sb".contains(suchbegriffKlein); // "sb" für Brettspiel } else if (medien instanceof Medien.Videospiel) { gefunden |= "videospiel".contains(suchbegriffKlein); } // Zusätzlich wird nach dem Namen des Werkes gesucht gefunden |= medien.getName().toLowerCase().contains(suchbegriffKlein); return gefunden; // Wenn das Medium den Suchbegriff in der Art oder im Namen enthält, bleibt es in der Liste }) .collect(Collectors.toList()); // Rückgabe der gefilterten Liste } // Methode zum Hinzufügen einer Ausleihe void addAL(Medien medien, Benutzer benutzer, LocalDate ausleihDatum,LocalDate reuckgabeDatum) { if (medien.istAusgeliehen) { System.out.println("Das Medium ist bereits ausgeliehen."); } else { 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 } } } 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 } } }