Bib1/Verwaltung.java

206 lines
7.9 KiB
Java

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<Medien> mediensListe = new LinkedList<>();
LinkedList<Benutzer> benutzerListe = new LinkedList<>();
static LinkedList<Aausleihe> 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<Medien> durchsuchenMedien(LinkedList<Medien> 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<Aausleihe> getAusleihenByBenutzer(Benutzer benutzer) {
List<Aausleihe> 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
}
}
}