JahresGebühren simulieren berechnen und bezahlen

Gebührenberechnen
3009594 2024-11-15 14:23:11 +01:00
parent 76334da35f
commit 34b2daa2bb
6 changed files with 118 additions and 58 deletions

View File

@ -1,12 +1,8 @@
package domain.Benutzer; package domain.Benutzer;
import java.text.ParseException; import java.time.LocalDate;
import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date;
import domain.AusleiheSystem.Ausleihe; import domain.AusleiheSystem.Ausleihe;
import domain.Medium.Medium;
public abstract class Benutzer { public abstract class Benutzer {
@ -17,8 +13,7 @@ public abstract class Benutzer {
private ArrayList<Ausleihe> ausgeliehenenMedien; private ArrayList<Ausleihe> ausgeliehenenMedien;
private boolean angemeldet; private boolean angemeldet;
private double gebühren; private double gebühren;
private Date anmeldebeginn; private LocalDate anmeldebeginn;
private SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy");
public Benutzer(Ausweis bibAusweis, String name, int alter, boolean istStudent) { public Benutzer(Ausweis bibAusweis, String name, int alter, boolean istStudent) {
super(); super();
@ -29,7 +24,7 @@ public abstract class Benutzer {
this.ausgeliehenenMedien = new ArrayList<>(); this.ausgeliehenenMedien = new ArrayList<>();
this.angemeldet = false; this.angemeldet = false;
this.gebühren = 0; this.gebühren = 0;
this.anmeldebeginn = new Date(); this.anmeldebeginn = LocalDate.now();
} }
public Ausweis getBibAusweis() { public Ausweis getBibAusweis() {
@ -72,7 +67,7 @@ public abstract class Benutzer {
this.ausgeliehenenMedien.add(medium); this.ausgeliehenenMedien.add(medium);
} }
public void removeMedium(Ausleihe medium) { public void mediumZurückgeben(Ausleihe medium) {
this.ausgeliehenenMedien.remove(medium); this.ausgeliehenenMedien.remove(medium);
} }
@ -80,7 +75,11 @@ public abstract class Benutzer {
return angemeldet; return angemeldet;
} }
public void setAngemeldet(boolean angemeldet) { public void anmelden(boolean angemeldet) {
this.angemeldet = angemeldet;
}
public void abmelden(boolean angemeldet) {
this.angemeldet = angemeldet; this.angemeldet = angemeldet;
} }
@ -93,23 +92,37 @@ public abstract class Benutzer {
this.gebühren = gebühren; this.gebühren = gebühren;
} }
public LocalDate getAnmeldebeginn() {
public Date getAnmeldebeginn() {
return anmeldebeginn; return anmeldebeginn;
} }
public void setAnmeldebeginn(String anmeldebeginn) throws ParseException { public void setAnmeldebeginn(LocalDate anmeldebeginn) {
this.anmeldebeginn = formatter.parse(anmeldebeginn); this.anmeldebeginn = anmeldebeginn;
} }
public double jahresgebühren() {
LocalDate nacheinemJahr = anmeldebeginn.plusYears(1);
if (LocalDate.now().isAfter(nacheinemJahr)) {
this.gebühren += getJahresgebühr();
anmeldebeginn = nacheinemJahr;
return this.gebühren;
}
return 0.0;
}
public double simuliereJahresGebühren(String anmeldeBeginn) {
LocalDate aktuellesDatum = LocalDate.now();
LocalDate test = LocalDate.parse(anmeldeBeginn);
// public Date getAnmeldeEnde() { while (test.isBefore(aktuellesDatum)) {
// return anmeldeEnde; this.gebühren += getJahresgebühr();
// } test = test.plusYears(1);
// }
// public void setAnmeldeEnde(String anmeldeEnde) throws ParseException {
// this.anmeldeEnde= formatter.parse(anmeldeEnde); anmeldebeginn = test;
// } return this.gebühren;
}
public abstract double getJahresgebühr(); public abstract double getJahresgebühr();

View File

@ -1,5 +1,7 @@
package domain.Benutzer; package domain.Benutzer;
import java.time.LocalDate;
public class Kunde extends Benutzer { public class Kunde extends Benutzer {
public Kunde(Ausweis bibAusweis, String name, int alter, boolean istStudent) { public Kunde(Ausweis bibAusweis, String name, int alter, boolean istStudent) {

View File

@ -8,10 +8,11 @@ public class Mitarbeiter extends Benutzer {
@Override @Override
public double getJahresgebühr() { public double getJahresgebühr() {
return 50.0; return 50.0;
} }
public void gebührVerbuchen(Benutzer benutzer) { public void gebührVerbuchen(Benutzer benutzer) {
benutzer.setGebühren(getGebühren() * 0); benutzer.setGebühren(0.0);
} }
} }

View File

@ -1,26 +1,11 @@
package domain.fassade; package domain.fassade;
import java.text.ParseException; import java.util.*;
import java.text.SimpleDateFormat; import domain.AusleiheSystem.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map.Entry;
import java.util.stream.Collector;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import domain.AusleiheSystem.Ausleihe;
import domain.AusleiheSystem.AusleiheSystem;
import domain.Benutzer.*; import domain.Benutzer.*;
import domain.Bibliothekskatalog.Mediensuchen; import domain.Bibliothekskatalog.Mediensuchen;
import domain.ExceptionsKlassen.*; import domain.ExceptionsKlassen.*;
import domain.Medium.Brettspiel; import domain.Medium.*;
import domain.Medium.Buch;
import domain.Medium.Medium;
import domain.Medium.Mediumverwalter;
import domain.Medium.Videospiel;
import domain.UserRegistieren.Registieren; import domain.UserRegistieren.Registieren;
public class BibSystem { public class BibSystem {
@ -28,8 +13,7 @@ public class BibSystem {
private HashMap<String, Mediumverwalter> medien; private HashMap<String, Mediumverwalter> medien;
private ArrayList<Ausleihe> ausleihe; private ArrayList<Ausleihe> ausleihe;
private AusleiheSystem ausleiheSystem; private AusleiheSystem ausleiheSystem;
private Date heutigesDatum; private Benutzer bibAdmin;
private SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy");
private Benutzer temp; private Benutzer temp;
@ -38,11 +22,31 @@ public class BibSystem {
this.alleBibBenutzer = new ArrayList<>(); this.alleBibBenutzer = new ArrayList<>();
this.medien = new HashMap<>(); this.medien = new HashMap<>();
this.ausleiheSystem = new AusleiheSystem(medien); this.ausleiheSystem = new AusleiheSystem(medien);
this.heutigesDatum = new Date();
this.ausleihe = new ArrayList<>(); this.ausleihe = new ArrayList<>();
bibAdmin = new Mitarbeiter(new Ausweis("A"),"XY Müller",20,false);
mediumsAufladen(); mediumsAufladen();
} }
public boolean gebührenBezahlen(double betrag, String bibKartennummer) throws BenutzerNichtGefundenException {
Benutzer benutzer = findeBenutzer(bibKartennummer);
double userBetrag = benutzer.getGebühren();
if (betrag == userBetrag ) {
((Mitarbeiter)bibAdmin).gebührVerbuchen(benutzer);
return true;
}
return false;
}
public double jahresGebührenBerechnen(String bibKartennummer) throws BenutzerNichtGefundenException {
Benutzer benutzer = findeBenutzer(bibKartennummer);
return benutzer.jahresgebühren();
}
public double simuliereJahresGebührenBerechnen(String bibKartennummer, String datum) throws BenutzerNichtGefundenException {
Benutzer benutzer = findeBenutzer(bibKartennummer);
return benutzer.simuliereJahresGebühren(datum);
}
public ArrayList<String> medienRückgabe(String eindeutigeKennung) { public ArrayList<String> medienRückgabe(String eindeutigeKennung) {
Ausleihe ausgelieheneMedium = ausleihe.stream() Ausleihe ausgelieheneMedium = ausleihe.stream()
.filter(k -> k.getMediumverwalter().getMedium().getID().equalsIgnoreCase(eindeutigeKennung)).findFirst() .filter(k -> k.getMediumverwalter().getMedium().getID().equalsIgnoreCase(eindeutigeKennung)).findFirst()
@ -51,7 +55,7 @@ public class BibSystem {
ArrayList<String> ausgeliehenMedien = new ArrayList<>(); ArrayList<String> ausgeliehenMedien = new ArrayList<>();
if (ausgelieheneMedium != null) { if (ausgelieheneMedium != null) {
ausgelieheneMedium.getBenutzer().removeMedium(ausgelieheneMedium); ausgelieheneMedium.getBenutzer().mediumZurückgeben(ausgelieheneMedium);
ausleihe.remove(ausgelieheneMedium); ausleihe.remove(ausgelieheneMedium);
ausgelieheneMedium.getMediumverwalter().setIstAusgeliehen(false); ausgelieheneMedium.getMediumverwalter().setIstAusgeliehen(false);
ausgelieheneMedium.getMediumverwalter().setAnzahl(ausgelieheneMedium.getMediumverwalter().getAnzahl() + 1); ausgelieheneMedium.getMediumverwalter().setAnzahl(ausgelieheneMedium.getMediumverwalter().getAnzahl() + 1);
@ -98,7 +102,7 @@ public class BibSystem {
public boolean userAnmdelden(String bibKartenNummer) throws BenutzerNichtGefundenException { public boolean userAnmdelden(String bibKartenNummer) throws BenutzerNichtGefundenException {
Benutzer bibBenutzer = findeBenutzer(bibKartenNummer); Benutzer bibBenutzer = findeBenutzer(bibKartenNummer);
bibBenutzer.setAngemeldet(true); bibBenutzer.anmelden(true);
return bibBenutzer.isAngemeldet(); return bibBenutzer.isAngemeldet();
} }
@ -118,15 +122,6 @@ public class BibSystem {
return "Das Medium wurde erfolgreich ausgeliehen"; return "Das Medium wurde erfolgreich ausgeliehen";
} }
public Date getHeutigesDatum() {
return heutigesDatum;
}
public void setHeutigesDatum(String heutigesDatum) throws ParseException {
this.heutigesDatum = formatter.parse(heutigesDatum);
}
// Temporäre Test Methode // Temporäre Test Methode
private void mediumsAufladen() { private void mediumsAufladen() {
Mediumverwalter buch = new Mediumverwalter(true, 10, 4, Mediumverwalter buch = new Mediumverwalter(true, 10, 4,
@ -153,7 +148,8 @@ public class BibSystem {
private Benutzer findeBenutzer(String bibKartenNummer) throws BenutzerNichtGefundenException { private Benutzer findeBenutzer(String bibKartenNummer) throws BenutzerNichtGefundenException {
return alleBibBenutzer.stream() return alleBibBenutzer.stream()
.filter(k -> k.getBibAusweis().getKartenNummer().equalsIgnoreCase(bibKartenNummer)).findFirst() .filter(k -> k.getBibAusweis().getKartenNummer().equalsIgnoreCase(bibKartenNummer))
.findFirst()
.orElseThrow(() -> new BenutzerNichtGefundenException( .orElseThrow(() -> new BenutzerNichtGefundenException(
"Benutzer mit Kartennummer " + bibKartenNummer + " nicht gefunden")); "Benutzer mit Kartennummer " + bibKartenNummer + " nicht gefunden"));
} }

View File

@ -0,0 +1,38 @@
package domain.gebührenBerechnenTest;
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import domain.fassade.BibSystem;
class JahresGebührenTest {
BibSystem fassade;
@BeforeEach
void setUp() throws Exception {
fassade = new BibSystem();
}
@Test
void testFürKunde() throws Exception {
fassade.userRegistrieren("obai", "schüler", 15, "nein");
fassade.userAnmdelden("K1001");
double gebühren = fassade.simuliereJahresGebührenBerechnen("K1001", "2020-11-15");
assertEquals(100.0, gebühren);
assertTrue(fassade.gebührenBezahlen(gebühren, "K1001"));
}
@Disabled
void testFürMitarbeiter() throws Exception {
fassade.userRegistrieren("obai", "mitarbeiter", 15, "ja");
fassade.userAnmdelden("A1000");
double gebühren = fassade.simuliereJahresGebührenBerechnen("A1000","2020-11-15");
assertEquals(200.0,gebühren);
}
}

View File

@ -1,6 +1,8 @@
package main; package main;
import java.time.LocalDate;
import domain.ExceptionsKlassen.BenutzerNichtAngemeldetException; import domain.ExceptionsKlassen.BenutzerNichtAngemeldetException;
import domain.ExceptionsKlassen.FalscheEingabeException; import domain.ExceptionsKlassen.FalscheEingabeException;
import domain.ExceptionsKlassen.MediumNichtGefundenException; import domain.ExceptionsKlassen.MediumNichtGefundenException;
@ -9,7 +11,15 @@ import tui.Tui;
public class Main { public class Main {
public static void main(String[] args) throws FalscheEingabeException, MediumNichtGefundenException, BenutzerNichtAngemeldetException { public static void main(String[] args) throws FalscheEingabeException, MediumNichtGefundenException, BenutzerNichtAngemeldetException {
new Tui(); //new Tui();
// Aktuelles Datum
LocalDate today = LocalDate.now();
System.out.println("Heutiges Datum: " + today);
// Datum nach einem Jahr
LocalDate oneYearLater = today.plusYears(1);
System.out.println("Datum nach einem Jahr: " + oneYearLater);
} }
} }