143 lines
4.3 KiB
Java
143 lines
4.3 KiB
Java
package LibrarySystem.domain.benutzern;
|
|
|
|
import LibrarySystem.domain.ausleihe.*;
|
|
import LibrarySystem.domain.medien.*;
|
|
|
|
import java.time.LocalDate;
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
import java.util.UUID;
|
|
|
|
public abstract class Benutzer {
|
|
private String kartennummer;
|
|
private String vorname;
|
|
private String nachname;
|
|
private int alter;
|
|
private List<Ausleihe> ausleihen;
|
|
private double offeneGebuehren;
|
|
private boolean gebuehrenBezahlt;
|
|
|
|
Benutzer(String vorname, String nachname, int alter, String prefix) {
|
|
this.kartennummer = generiereKartennummer(prefix);
|
|
this.vorname = vorname;
|
|
this.nachname = nachname;
|
|
this.alter = alter;
|
|
this.ausleihen = new ArrayList<>();
|
|
this.offeneGebuehren = 0.0;
|
|
this.gebuehrenBezahlt = true; // Zu Beginn keine Gebühren offen
|
|
}
|
|
|
|
public void aktualisiereGebuehren(LocalDate aktuellesDatum) {
|
|
if (gebuehrenBezahlt) return; // Keine Aktualisierung erforderlich, wenn bezahlt
|
|
|
|
offeneGebuehren = 0.0;
|
|
for (Ausleihe ausleihe : ausleihen) {
|
|
offeneGebuehren += ausleihe.berechneGebuehren(aktuellesDatum);
|
|
}
|
|
}
|
|
|
|
public void bezahleGebuehren() {
|
|
offeneGebuehren = 0.0;
|
|
gebuehrenBezahlt = true;
|
|
}
|
|
|
|
public void ausleihen(Medium medium, LocalDate datum) {
|
|
Ausleihe neueAusleihe = new Ausleihe(medium, datum);
|
|
ausleihen.add(neueAusleihe);
|
|
System.out.println(vorname + " " + nachname + " hat \"" + medium.getTitel() + "\" ausgeliehen. Rückgabefrist: " + neueAusleihe.getRueckgabeFrist());
|
|
gebuehrenBezahlt = false; // Neue Ausleihe bedeutet potenziell offene Gebühren
|
|
}
|
|
|
|
public void rueckgabe(int mediumId, LocalDate aktuellesDatum) {
|
|
Ausleihe zuRueckgeben = null;
|
|
|
|
for (Ausleihe ausleihe : ausleihen) {
|
|
if (ausleihe.getMedium().getID() == mediumId) {
|
|
zuRueckgeben = ausleihe;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (zuRueckgeben != null) {
|
|
ausleihen.remove(zuRueckgeben);
|
|
System.out.println("Das Medium \"" + zuRueckgeben.getMedium().getTitel() + "\" wurde zurückgegeben.");
|
|
if (aktuellesDatum.isAfter(zuRueckgeben.getRueckgabeFrist())) {
|
|
long ueberfaelligeTage = aktuellesDatum.toEpochDay() - zuRueckgeben.getRueckgabeFrist().toEpochDay();
|
|
System.out.println("Achtung: Rückgabe verspätet! Überfällig um " + ueberfaelligeTage + " Tage.");
|
|
}
|
|
} else {
|
|
System.out.println("Kein Medium mit der ID \"" + mediumId + "\" gefunden.");
|
|
}
|
|
|
|
// Noch ausgeliehene Medien anzeigen
|
|
System.out.println("Aktuell ausgeliehene Medien:");
|
|
for (Ausleihe ausleihe : ausleihen) {
|
|
System.out.println(ausleihe);
|
|
}
|
|
}
|
|
|
|
public void anzeigenAusleihen() {
|
|
System.out.println("Aktuell ausgeliehene Medien:");
|
|
for (Ausleihe ausleihe : ausleihen) {
|
|
System.out.println(ausleihe);
|
|
}
|
|
}
|
|
|
|
// Generiert eine eindeutige Kartennummer mit Präfix
|
|
private String generiereKartennummer(String prefix) {
|
|
return prefix + UUID.randomUUID().toString().substring(0, 8);
|
|
}
|
|
|
|
// Abstrakte Methode für die Jahresgebühr
|
|
public abstract double getJahresgebuehr();
|
|
|
|
public String getKartennummer() {
|
|
return kartennummer;
|
|
}
|
|
|
|
public void setkartennummer(String kartennummer) {
|
|
this.kartennummer = kartennummer;
|
|
}
|
|
|
|
public String getVorname() {
|
|
return vorname;
|
|
}
|
|
|
|
public void setVorname(String vorname) {
|
|
this.vorname = vorname;
|
|
}
|
|
|
|
public String getNachname() {
|
|
return nachname;
|
|
}
|
|
|
|
public void setNachname(String nachname) {
|
|
this.nachname = nachname;
|
|
}
|
|
|
|
public int getAlter() {
|
|
return alter;
|
|
}
|
|
|
|
public void setAlter(int alter) {
|
|
this.alter = alter;
|
|
}
|
|
|
|
public List<Ausleihe> getAusleihen() {
|
|
return ausleihen;
|
|
}
|
|
|
|
public double getOffeneGebuehren() {
|
|
return offeneGebuehren;
|
|
}
|
|
|
|
public boolean sindGebuehrenBezahlt() {
|
|
return gebuehrenBezahlt;
|
|
}
|
|
|
|
@Override
|
|
public String toString() {
|
|
return "Vorame: " + vorname + ", Nachname: " + nachname + ", Alter: " + alter + ", Kartennummer: " + kartennummer;
|
|
}
|
|
}
|