From 34b2daa2bbd67478b62ba02ac19e3832ecb1ec6b Mon Sep 17 00:00:00 2001 From: 3009594 Date: Fri, 15 Nov 2024 14:23:11 +0100 Subject: [PATCH] =?UTF-8?q?JahresGeb=C3=BChren=20simulieren=20berechnen=20?= =?UTF-8?q?und=20bezahlen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/domain/Benutzer/Benutzer.java | 57 ++++++++++------- .../src/domain/Benutzer/Kunde.java | 2 + .../src/domain/Benutzer/Mitarbeiter.java | 3 +- .../src/domain/fassade/BibSystem.java | 64 +++++++++---------- .../JahresGebührenTest.java | 38 +++++++++++ .../src/main/Main.java | 12 +++- 6 files changed, 118 insertions(+), 58 deletions(-) create mode 100644 Bibliotheksverwaltungssystem/src/domain/gebührenBerechnenTest/JahresGebührenTest.java diff --git a/Bibliotheksverwaltungssystem/src/domain/Benutzer/Benutzer.java b/Bibliotheksverwaltungssystem/src/domain/Benutzer/Benutzer.java index 5094297..3260d25 100644 --- a/Bibliotheksverwaltungssystem/src/domain/Benutzer/Benutzer.java +++ b/Bibliotheksverwaltungssystem/src/domain/Benutzer/Benutzer.java @@ -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 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(); diff --git a/Bibliotheksverwaltungssystem/src/domain/Benutzer/Kunde.java b/Bibliotheksverwaltungssystem/src/domain/Benutzer/Kunde.java index 6e78019..68d8cea 100644 --- a/Bibliotheksverwaltungssystem/src/domain/Benutzer/Kunde.java +++ b/Bibliotheksverwaltungssystem/src/domain/Benutzer/Kunde.java @@ -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) { diff --git a/Bibliotheksverwaltungssystem/src/domain/Benutzer/Mitarbeiter.java b/Bibliotheksverwaltungssystem/src/domain/Benutzer/Mitarbeiter.java index cfbb8a9..3e3530a 100644 --- a/Bibliotheksverwaltungssystem/src/domain/Benutzer/Mitarbeiter.java +++ b/Bibliotheksverwaltungssystem/src/domain/Benutzer/Mitarbeiter.java @@ -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); } } diff --git a/Bibliotheksverwaltungssystem/src/domain/fassade/BibSystem.java b/Bibliotheksverwaltungssystem/src/domain/fassade/BibSystem.java index e070080..e4fa706 100644 --- a/Bibliotheksverwaltungssystem/src/domain/fassade/BibSystem.java +++ b/Bibliotheksverwaltungssystem/src/domain/fassade/BibSystem.java @@ -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 medien; private ArrayList 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 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 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")); } diff --git a/Bibliotheksverwaltungssystem/src/domain/gebührenBerechnenTest/JahresGebührenTest.java b/Bibliotheksverwaltungssystem/src/domain/gebührenBerechnenTest/JahresGebührenTest.java new file mode 100644 index 0000000..ce53e54 --- /dev/null +++ b/Bibliotheksverwaltungssystem/src/domain/gebührenBerechnenTest/JahresGebührenTest.java @@ -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); + + } + +} diff --git a/Bibliotheksverwaltungssystem/src/main/Main.java b/Bibliotheksverwaltungssystem/src/main/Main.java index 08a3d4d..612952e 100644 --- a/Bibliotheksverwaltungssystem/src/main/Main.java +++ b/Bibliotheksverwaltungssystem/src/main/Main.java @@ -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); } }