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

View File

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

View File

@ -8,10 +8,11 @@ public class Mitarbeiter extends Benutzer {
@Override
public double getJahresgebühr() {
return 50.0;
}
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;
import java.text.ParseException;
import java.text.SimpleDateFormat;
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 java.util.*;
import domain.AusleiheSystem.*;
import domain.Benutzer.*;
import domain.Bibliothekskatalog.Mediensuchen;
import domain.ExceptionsKlassen.*;
import domain.Medium.Brettspiel;
import domain.Medium.Buch;
import domain.Medium.Medium;
import domain.Medium.Mediumverwalter;
import domain.Medium.Videospiel;
import domain.Medium.*;
import domain.UserRegistieren.Registieren;
public class BibSystem {
@ -28,8 +13,7 @@ public class BibSystem {
private HashMap<String, Mediumverwalter> medien;
private ArrayList<Ausleihe> ausleihe;
private AusleiheSystem ausleiheSystem;
private Date heutigesDatum;
private SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy");
private Benutzer bibAdmin;
private Benutzer temp;
@ -38,11 +22,31 @@ public class BibSystem {
this.alleBibBenutzer = new ArrayList<>();
this.medien = new HashMap<>();
this.ausleiheSystem = new AusleiheSystem(medien);
this.heutigesDatum = new Date();
this.ausleihe = new ArrayList<>();
bibAdmin = new Mitarbeiter(new Ausweis("A"),"XY Müller",20,false);
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) {
Ausleihe ausgelieheneMedium = ausleihe.stream()
.filter(k -> k.getMediumverwalter().getMedium().getID().equalsIgnoreCase(eindeutigeKennung)).findFirst()
@ -51,7 +55,7 @@ public class BibSystem {
ArrayList<String> ausgeliehenMedien = new ArrayList<>();
if (ausgelieheneMedium != null) {
ausgelieheneMedium.getBenutzer().removeMedium(ausgelieheneMedium);
ausgelieheneMedium.getBenutzer().mediumZurückgeben(ausgelieheneMedium);
ausleihe.remove(ausgelieheneMedium);
ausgelieheneMedium.getMediumverwalter().setIstAusgeliehen(false);
ausgelieheneMedium.getMediumverwalter().setAnzahl(ausgelieheneMedium.getMediumverwalter().getAnzahl() + 1);
@ -98,7 +102,7 @@ public class BibSystem {
public boolean userAnmdelden(String bibKartenNummer) throws BenutzerNichtGefundenException {
Benutzer bibBenutzer = findeBenutzer(bibKartenNummer);
bibBenutzer.setAngemeldet(true);
bibBenutzer.anmelden(true);
return bibBenutzer.isAngemeldet();
}
@ -118,15 +122,6 @@ public class BibSystem {
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
private void mediumsAufladen() {
Mediumverwalter buch = new Mediumverwalter(true, 10, 4,
@ -153,7 +148,8 @@ public class BibSystem {
private Benutzer findeBenutzer(String bibKartenNummer) throws BenutzerNichtGefundenException {
return alleBibBenutzer.stream()
.filter(k -> k.getBibAusweis().getKartenNummer().equalsIgnoreCase(bibKartenNummer)).findFirst()
.filter(k -> k.getBibAusweis().getKartenNummer().equalsIgnoreCase(bibKartenNummer))
.findFirst()
.orElseThrow(() -> new BenutzerNichtGefundenException(
"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;
import java.time.LocalDate;
import domain.ExceptionsKlassen.BenutzerNichtAngemeldetException;
import domain.ExceptionsKlassen.FalscheEingabeException;
import domain.ExceptionsKlassen.MediumNichtGefundenException;
@ -9,7 +11,15 @@ import tui.Tui;
public class Main {
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);
}
}