2024-11-13 17:48:43 +01:00
|
|
|
import javax.crypto.spec.PSource;
|
2024-11-19 12:59:15 +01:00
|
|
|
import java.time.LocalDate;
|
|
|
|
import java.time.temporal.ChronoUnit;
|
2024-11-13 17:48:43 +01:00
|
|
|
import java.util.*;
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
2024-11-19 12:59:15 +01:00
|
|
|
|
|
|
|
|
2024-11-08 16:21:34 +01:00
|
|
|
public class Verwaltung {
|
2024-11-13 17:48:43 +01:00
|
|
|
LinkedList<Medien> mediensListe = new LinkedList<>();
|
|
|
|
LinkedList<Benutzer> benutzerListe = new LinkedList<>();
|
2024-11-19 12:59:15 +01:00
|
|
|
static LinkedList<Aausleihe> ausliste = new LinkedList<>();
|
|
|
|
Long wochenDauer;
|
|
|
|
|
|
|
|
|
2024-11-13 17:48:43 +01:00
|
|
|
Creator obj = new Creator();
|
|
|
|
|
|
|
|
void addFunktion(Medien medien) {
|
|
|
|
mediensListe.add(medien);
|
|
|
|
}
|
|
|
|
|
|
|
|
void addBenutzer(Benutzer benutzer) {
|
|
|
|
benutzerListe.add(benutzer);
|
|
|
|
}
|
|
|
|
|
|
|
|
static int mrgen() {
|
2024-11-19 12:59:15 +01:00
|
|
|
return new Random().ints(7, 0, 10)
|
|
|
|
.reduce(0, (acc, digit) -> acc * 10 + digit);
|
2024-11-13 17:48:43 +01:00
|
|
|
}
|
|
|
|
|
2024-11-19 12:59:15 +01:00
|
|
|
|
2024-11-13 17:48:43 +01:00
|
|
|
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
|
|
|
|
|
2024-11-19 12:59:15 +01:00
|
|
|
// 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
|
2024-11-13 17:48:43 +01:00
|
|
|
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
|
|
|
|
}
|
|
|
|
|
2024-11-19 12:59:15 +01:00
|
|
|
// 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
|
2024-11-19 16:48:39 +01:00
|
|
|
void remov(Benutzer benutzer) {
|
2024-11-19 12:59:15 +01:00
|
|
|
Aausleihe zuEntfernen = null;
|
|
|
|
|
|
|
|
// Durchsuchen der Liste nach der passenden Ausleihe
|
|
|
|
for (Aausleihe aausleihe : ausliste) {
|
|
|
|
// Überprüfen, ob das Medium und der Benutzer übereinstimmen
|
2024-11-19 16:48:39 +01:00
|
|
|
if (aausleihe.getBenutzer().equals(benutzer)) {
|
2024-11-19 12:59:15 +01:00
|
|
|
zuEntfernen = aausleihe; // Markieren des zu entfernenden Eintrags
|
2024-11-19 16:48:39 +01:00
|
|
|
aausleihe.getMedien().istAusgeliehen = false; // Markiere das Medium als nicht mehr ausgeliehen
|
2024-11-19 12:59:15 +01:00
|
|
|
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;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-11-13 17:48:43 +01:00
|
|
|
|
|
|
|
|
2024-11-19 12:59:15 +01:00
|
|
|
// 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
|
|
|
|
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
|
2024-11-13 17:48:43 +01:00
|
|
|
} else {
|
2024-11-19 12:59:15 +01:00
|
|
|
System.out.println("Keine ausstehenden Gebühren für diesen Benutzer.");
|
2024-11-13 17:48:43 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-11-19 12:59:15 +01:00
|
|
|
|
|
|
|
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
|
|
|
|
}
|
2024-11-13 17:48:43 +01:00
|
|
|
}
|
2024-11-19 12:59:15 +01:00
|
|
|
System.out.println("Das Medium ist entweder nicht ausgeliehen oder gehört nicht diesem Benutzer.");
|
2024-11-13 17:48:43 +01:00
|
|
|
}
|
2024-11-19 12:59:15 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-11-08 16:21:34 +01:00
|
|
|
}
|
2024-11-19 12:59:15 +01:00
|
|
|
|
|
|
|
|