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 benutzerListe; private LocalDate aktuellesDatum; private List 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 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; } }