PR2-Testate/LibrarySystem/facade/BibliothekSystem.java

100 lines
3.5 KiB
Java

package LibrarySystem.facade;
import LibrarySystem.domain.benutzern.*;
import LibrarySystem.domain.medien.*;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class BibliothekSystem {
private List<Benutzer> benutzerListe;
private LocalDate aktuellesDatum;
private List<Medium> medienListe;
public BibliothekSystem() {
this.benutzerListe = new ArrayList<>();
this.aktuellesDatum = LocalDate.now();
this.medienListe = new ArrayList<>();
initialMedienHinzufuegen();
}
// Methode zum Hinzufügen von Medien
private void initialMedienHinzufuegen() {
// Beispiel-Medien hinzufügen
Buch buch1 = new Buch(123,"Java lernen", "Max Mustermann", 2020, "Buch");
Buch buch2 = new Buch(234,"Java für Einsteiger", "Erika Musterfrau", 2014, "Buch");
DVD dvd1 = new DVD(345,"Die Matrix", "Lana Wachowski", 2014, "DVD");
CD cd1 = new CD(456,"Best of Mozart", "-", 1850, "CD");
Brettspiel brettspiel1 = new Brettspiel(567,"Monopoly", "-",2010, "Brettspiel");
Videospiel videospiel1 = new Videospiel(678,"Minecraft", "-", 2011, "Videospiel");
// Medien zur Bibliothek hinzufügen
addMedium(buch1);
addMedium(buch2);
addMedium(dvd1);
addMedium(cd1);
addMedium(brettspiel1);
addMedium(videospiel1);
}
public void addMedium(Medium medium) {
medienListe.add(medium);
}
// Durchsuchen der Medien nach einem Titel (Teilstring) und Filterung nach Eigenschaften
public List<Medium> durchsuchenMedien(String titelTeil, String medienart) {
List medienliste = medienListe.stream()
.filter(m -> m.getTitel().toLowerCase().contains(titelTeil.toLowerCase())) // Titel-Filter
.filter(m -> medienart == null || m.getMedienart().equalsIgnoreCase(medienart)) // Medienart-Filter
//.filter(m -> istAusgeliehen == null || m.istAusgeliehen() == istAusgeliehen) // Ausleihstatus-Filter
.collect(Collectors.toList());
if(medienliste.isEmpty()) {
System.out.println("Keine passende Medien gefunden.");
return null;
} else {
return medienliste;
}
}
public void datumAendern(LocalDate neuesDatum) {
this.aktuellesDatum = neuesDatum;
System.out.println("Systemdatum geändert auf: " + aktuellesDatum);
}
public LocalDate getAktuellesDatum() {
return aktuellesDatum;
}
public void benutzerRegistrieren(Benutzer benutzer) {
benutzerListe.add(benutzer);
System.out.println("Benutzer registriert: " + benutzer);
}
public void zeigeGebuehren(Benutzer benutzer) {
benutzer.aktualisiereGebuehren(aktuellesDatum);
if (benutzer.sindGebuehrenBezahlt()) {
System.out.println("Alle Gebühren von " + benutzer.getName() + " sind bezahlt.");
} else {
System.out.println("Aktuelle Gebühren für " + benutzer.getName() + ": " + benutzer.getOffeneGebuehren() + "€");
}
}
public Benutzer anmelden(String kartennummer) {
for (Benutzer benutzer : benutzerListe) {
if (benutzer.getKartennummer().equals(kartennummer)) {
System.out.println("Willkommen, " + benutzer.getName() + "!");
return benutzer;
}
}
System.out.println("Benutzer nicht gefunden.");
return null;
}
}