262 lines
10 KiB
Java
262 lines
10 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; //Standardmäßig aktuelles Datum
|
|
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", 3);
|
|
Buch buch2 = new Buch("234","Java für Einsteiger", "Erika Musterfrau", 2014, "Buch", 3);
|
|
Buch buch3 = new Buch("2345","Java für Einsteiger", "Erika Musterfrau", 2014, "Buch", 3);
|
|
DVD dvd1 = new DVD("345","Die Matrix", "Lana Wachowski", 2014, "DVD", 0);
|
|
DVD dvd2 = new DVD("543","Die Matrix", "Lana Wachowski", 2014, "DVD", 0);
|
|
CD cd1 = new CD("456","Best of Mozart", "-", 1850, "CD", 0);
|
|
CD cd2 = new CD("654","Christmas Carols", "-", 2000, "CD", 0);
|
|
Brettspiel brettspiel1 = new Brettspiel("567","Monopoly", "-",2010, "Brettspiel", 0);
|
|
Brettspiel brettspiel2 = new Brettspiel("765","Siedler von Catan", "-",2014, "Brettspiel", 0);
|
|
Videospiel videospiel1 = new Videospiel("678","Minecraft", "-", 2011, "Videospiel", 1);
|
|
Videospiel videospiel2 = new Videospiel("876","Call of Duty", "-", 2017, "Videospiel",1);
|
|
|
|
// 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(aktuellesDatum));
|
|
System.out.println(benutzer.getName() + " hat " + medium.getTitel() + " ausgeliehen.");
|
|
System.out.println("Rückgabedatum: " + medium.getRueckgabedatum());
|
|
System.out.println("Verlängerungen möglich insgesamt: " + medium.getVerlaengerungen());
|
|
} 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()+"' ist nicht ausgeliehen.");
|
|
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
|
|
ausleiher.rueckgabe(medium);
|
|
System.out.println("Medium '"+medium.getTitel()+"' wurde erfolgreich am " + getAktuellesDatum() + " zurückgegeben.");
|
|
|
|
|
|
//Für die Angabe des Gebührenkontos
|
|
//Von AI teilweise generiert
|
|
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("Medium '" + medium.getTitel() + "' wurde erfolgreich zurückgegeben.");
|
|
System.out.println("Überfällige Gebühren für " + ausleiher.getName() + ": " + gebuehr + " Eur.");
|
|
}else {
|
|
System.out.println("Medium '" + medium.getTitel()+ "' wurde rechtzeitig zurückgegeben");
|
|
}
|
|
|
|
System.out.println("Verbleibende ausgeliehene Medien von " + ausleiher.getName() + ":");
|
|
ausleiher.anzeigenAusleihen();
|
|
|
|
}
|
|
|
|
//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()) {
|
|
if (medium.istVerlaengerbar()) {
|
|
if (medium.istVerlaengerbar()) {
|
|
medium.verlaengerungen--;
|
|
setzeAktuellesDatumZurueck();
|
|
medium.setRueckgabedatum(medium.rechneRueckgabedatum(aktuellesDatum));
|
|
} else{
|
|
System.out.println("Keine Verlängerung mehr möglich.");
|
|
}
|
|
System.out.println("Leihfrist für '" + medium.getTitel() + "' verlängert.");
|
|
System.out.println("Neues Rückgabedatum: " + medium.getRueckgabedatum());
|
|
System.out.println("Weitere Verlängerungen möglich: " + medium.getVerlaengerungen());
|
|
} else{
|
|
System.out.println("Verlängerung nicht möglich. Bitte geben Sie das Medium an dem Rückgabedatum zurück!");
|
|
}
|
|
|
|
} else {
|
|
System.out.println("Verlängerung nicht möglich, da Kartennummer flasch ist oder Medium existiert nicht.");
|
|
}
|
|
}
|
|
|
|
//Methode zum Finden eines Benutzers
|
|
public Benutzer findeBenutzer(String kartennummer) {
|
|
return benutzerListe.get(Integer.parseInt(kartennummer));
|
|
}
|
|
|
|
//Methode zum Finden eines Mediums
|
|
//Von AI generiert
|
|
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 manuellesDatum) {
|
|
this.aktuellesDatum = manuellesDatum;
|
|
System.out.println("Systemdatum geändert auf: " + aktuellesDatum);
|
|
}
|
|
|
|
public Date getAktuellesDatum() {
|
|
return aktuellesDatum;
|
|
}
|
|
|
|
public void setzeAktuellesDatumZurueck(){
|
|
this.aktuellesDatum = new Date();
|
|
}
|
|
|
|
public void benutzerRegistrieren(Benutzer benutzer) {
|
|
benutzerListe.add(benutzer);
|
|
double jahresgebuehr = benutzer.getJahresgebuehr();
|
|
System.out.println("Benutzer registriert: " + benutzer + ", Jahresgebühr: " + jahresgebuehr);
|
|
}
|
|
|
|
/*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() + "€");
|
|
}
|
|
}*/
|
|
|
|
|
|
|
|
//Methode zum Berechnen der overdue-Gebühren
|
|
//Von AI generiert
|
|
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
|
|
}
|
|
|
|
}
|