PR2-Testate/LibrarySystem/facade/BibliothekSystem.java

215 lines
8.1 KiB
Java

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<Benutzer> benutzerListe;
private Date aktuellesDatum;
private List<Medium> 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<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 -> 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.setOffeneGebuehren(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 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) {
return overdueTagen * 1; // 1 euro pro Tag
}
}