package LibrarySystem.facade; //Imports aus domain import LibrarySystem.domain.benutzern.*; import LibrarySystem.domain.medien.*; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.stream.Collectors; public class BibliothekSystem { private List benutzerListe; private Date aktuellesDatum; private List medienListe; public BibliothekSystem() { this.benutzerListe = new ArrayList<>(); this.aktuellesDatum = new Date(); this.medienListe = new ArrayList<>(); initialMedienHinzufuegen(); initialBenutzerHinzufuegen(); } // 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"); Buch buch3 = new Buch("2345","Java für Einsteiger", "Erika Musterfrau", 2014, "Buch"); DVD dvd1 = new DVD("345","Die Matrix", "Lana Wachowski", 2014, "DVD"); DVD dvd2 = new DVD("543","Die Matrix", "Lana Wachowski", 2014, "DVD"); CD cd1 = new CD("456","Best of Mozart", "-", 1850, "CD"); CD cd2 = new CD("654","Christmas Carols", "-", 2000, "CD"); Brettspiel brettspiel1 = new Brettspiel("567","Monopoly", "-",2010, "Brettspiel"); Brettspiel brettspiel2 = new Brettspiel("765","Siedler von Catan", "-",2014, "Brettspiel"); Videospiel videospiel1 = new Videospiel("678","Minecraft", "-", 2011, "Videospiel"); Videospiel videospiel2 = new Videospiel("876","Call of Duty", "-", 2017, "Videospiel"); // Medien zur Bibliothek hinzufügen addMedium(buch1); addMedium(buch2); addMedium(buch3); addMedium(dvd1); addMedium(dvd2); addMedium(cd1); addMedium(cd2); addMedium(brettspiel1); addMedium(brettspiel2); addMedium(videospiel1); addMedium(videospiel2); } //Methode zum Hinzufügen von Medien in die Medienliste public void addMedium(Medium medium) { medienListe.add(medium); } // Methode zum Hinzufügen von Benutzern und Admin private void initialBenutzerHinzufuegen(){ Benutzer student = new Student("1234567", "Ana Misk", 21); Benutzer erwachsener = new Erwachsener("2345678","Paul Mark", 34); Admin admin = new Admin("3456789", "Alisa Admin", 40); benutzerRegistrieren(student); benutzerRegistrieren(erwachsener); benutzerRegistrieren(admin); } //Methode zum Anmelden eines Benutzers public Benutzer anmelden(String kartennummer) { for (Benutzer benutzer : benutzerListe) { if (benutzer.getKartennummer().equals(kartennummer)) { return benutzer; } } System.out.println("Benutzer nicht gefunden."); return null; } // 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 -> ausgeliehen == null || m.istAusgeliehen() == istAusgeliehen) // Ausleihstatus-Filter .collect(Collectors.toList()); if(medienliste.isEmpty()) { System.out.println("Keine passende Medien gefunden."); return null; } else { return medienliste; } } // Methode zum Ausleihen eines Mediums public void ausleiheMedium(String kartennummer, String mediumID){ Benutzer benutzer = anmelden(kartennummer); Medium medium = findeMedium(mediumID); if (benutzer != null && medium != null && !medium.istAusgeliehen()) { benutzer.ausleihen(medium); medium.setRueckgabedatum(medium.rechneRueckgabedatum()); System.out.println(benutzer.getName() + " hat " + medium.getTitel() + " ausgeliehen."); System.out.println("Rückgabedatum: " + medium.getRueckgabedatum()); } else { System.out.println("Ausleihe nicht möglich."); } } //Methode zum Rückgeben eines Mediums public void rueckgabeMedium(String mediumID){ Medium medium = findeMedium(mediumID); Benutzer ausleiher = null; if(medium == null) { System.out.println("Medium mit der ID " + mediumID + " nicht gefunden."); return; } if(!medium.istAusgeliehen()) { System.out.println("Medium '"+medium.getTitel()+"' nicht gefunden."); return; } // Benutzer finden, der das Medium ausgeliehen hat for(Benutzer benutzer : benutzerListe) { if(benutzer.getAusleihen().contains(medium)){ ausleiher = benutzer; break; } } if(ausleiher == null) { System.out.println("Kein Benutzer gefunden, der dieses Medium ausgeliehen hat."); return; } //Medium zurückgeben try { ausleiher.rueckgabe(medium); System.out.println("Medium '"+medium.getTitel()+"' wurde erfolgreich zurückgegeben."); if(aktuellesDatum.after(medium.getRueckgabedatum())){ long overdueTage = (aktuellesDatum.getTime() - medium.getRueckgabedatum().getTime()) / (1000 * 60 * 60 * 24); System.out.println("überfällige Tagen: " + overdueTage); double gebuehr = rechneOverdueGebuehren(overdueTage); ausleiher.addiereZuOffeneGebuehren(gebuehr); System.out.println("Überfällige Gebühren für " + ausleiher.getName() + gebuehr + " Eur."); }else { System.out.println("Keine überfällige Gebühren."); } ausleiher.anzeigenAusleihen(); } catch (Exception e) { System.out.println(e.getMessage()); } } //Methode zum Anzeigen des Gebührenkontos public void zeigeGebuehrenkonto(String kartennummer){ Benutzer benutzer = anmelden(kartennummer); if (benutzer == null) { System.out.println("Kein Benutzer gefunden."); return; } double gebuehren = benutzer.getOffeneGebuehren(); if (gebuehren>0){ System.out.println("Offene Gebühren für " + benutzer.getName() + ": " + gebuehren + " Eur."); } else { System.out.println("Keine offene Gebühren für "+ benutzer.getName()); } } //Methode zum Verlängern eines Mediums public void verlaengernMedium(String kartennummer,String mediumID){ Benutzer benutzer = anmelden(kartennummer); Medium medium = findeMedium(mediumID); if (benutzer != null && medium != null && medium.istAusgeliehen()) { medium.verlaengern(); System.out.println("Leihfrist für '" + medium.getTitel() + "' verlängert."); System.out.println("Neues Rückgabedatum: " + medium.getRueckgabedatum()); } else { System.out.println("Verlängerung nicht möglich."); } } //Methode zum Finden eines Benutzers public Benutzer findeBenutzer(String kartennummer) { return benutzerListe.get(Integer.parseInt(kartennummer)); } //Methode zum Finden eines Mediums public Medium findeMedium(String ID) { return medienListe.stream() .filter(m -> m.getID().equals(ID)) .findFirst() .orElse(null); } //Methode, um das Systemdatum zu setzen public void setAktuellesDatum(Date neuesDatum) { this.aktuellesDatum = neuesDatum; System.out.println("Systemdatum geändert auf: " + aktuellesDatum); } public Date 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 double rechneOverdueGebuehren(long overdueTagen) { if (overdueTagen <= 0){ return 0; } if (overdueTagen <= 7){ return overdueTagen * 1.0; //1 euro pro Tag für die ersten 7 Tage } return (7*1.0) + ((overdueTagen - 7) * 2.0); // 2 euro pro Tag ab dem 8. Tag } }