From 1b028086444fc8ac7384b7b9ec8604836e35d7ea Mon Sep 17 00:00:00 2001 From: 3009594 Date: Fri, 15 Nov 2024 17:51:55 +0100 Subject: [PATCH] =?UTF-8?q?MedienR=C3=BCckgabe-=20AusleiheFrist=20simulier?= =?UTF-8?q?en=20berechnen=20und=20testen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/domain/AusleiheSystem/Ausleihe.java | 59 ++++----- .../domain/AusleiheSystem/AusleiheSystem.java | 112 +++++++++++++++--- .../src/domain/Benutzer/Benutzer.java | 9 +- .../Bibliothekskatalog/Mediensuchen.java | 6 + .../fassade/AusleihfristenGebührenTest.java | 26 ++++ .../src/domain/fassade/BibSystem.java | 54 +++------ .../JahresGebührenTest.java | 4 +- .../domain/fassade/MedienRückgabeTest.java | 9 +- .../src/domain/fassade/UserAnmeldenTest.java | 4 +- 9 files changed, 188 insertions(+), 95 deletions(-) create mode 100644 Bibliotheksverwaltungssystem/src/domain/fassade/AusleihfristenGebührenTest.java rename Bibliotheksverwaltungssystem/src/domain/{gebührenBerechnenTest => fassade}/JahresGebührenTest.java (92%) diff --git a/Bibliotheksverwaltungssystem/src/domain/AusleiheSystem/Ausleihe.java b/Bibliotheksverwaltungssystem/src/domain/AusleiheSystem/Ausleihe.java index f09614d..fabf7fb 100644 --- a/Bibliotheksverwaltungssystem/src/domain/AusleiheSystem/Ausleihe.java +++ b/Bibliotheksverwaltungssystem/src/domain/AusleiheSystem/Ausleihe.java @@ -1,48 +1,27 @@ package domain.AusleiheSystem; -import java.text.SimpleDateFormat; +import java.time.LocalDate; import java.util.Date; -import domain.Benutzer.Ausweis; import domain.Benutzer.Benutzer; -import domain.Benutzer.Kunde; -import domain.Medium.Buch; -import domain.Medium.Medium; import domain.Medium.Mediumverwalter; public class Ausleihe { - private SimpleDateFormat simpleFormatter; - private Date ausleiheBeginn, ausleiheEnde; - + private LocalDate ausleiheBeginn, ausleiheEnde; private Mediumverwalter medium; private Benutzer benutzer; private int verlängerungen; - public Ausleihe(Mediumverwalter medium, Benutzer benutzer,Date ausleiheBeginn, Date ausleiheEnde) { + public Ausleihe(Mediumverwalter medium, Benutzer benutzer,LocalDate ausleiheBeginn, LocalDate ausleiheEnde) { this.medium = medium; this.ausleiheBeginn = ausleiheBeginn; this.ausleiheEnde = ausleiheEnde; - this.simpleFormatter = new SimpleDateFormat("dd-MM-yyyy HH:mm"); this.verlängerungen = 0; this.benutzer = benutzer; } - public Date getAusleiheBeginn() { - return ausleiheBeginn; - } - - public void setAusleiheBeginn(Date ausleiheBeginn) { - this.ausleiheBeginn = ausleiheBeginn; - } - - public Date getAusleiheEnde() { - return ausleiheEnde; - } - - public void setAusleiheEnde(Date ausleiheEnde) { - this.ausleiheEnde = ausleiheEnde; - } + public Mediumverwalter getMediumverwalter() { return medium; @@ -52,15 +31,37 @@ public class Ausleihe { return benutzer; } - public void setBenutzer(Benutzer benutzer) { - this.benutzer = benutzer; + + + public LocalDate getAusleiheBeginn() { + return ausleiheBeginn; } + + + public void setAusleiheBeginn(LocalDate ausleiheBeginn) { + this.ausleiheBeginn = ausleiheBeginn; + } + + + + public LocalDate getAusleiheEnde() { + return ausleiheEnde; + } + + + + public void setAusleiheEnde(LocalDate ausleiheEnde) { + this.ausleiheEnde = ausleiheEnde; + } + + + @Override public String toString() { return "Ausgeliehene Mediums= "+ medium.toString()+ - " Ausleihe Beginn= " +simpleFormatter.format(ausleiheBeginn) + - " ,Ausleihe Ende= " + simpleFormatter.format(ausleiheEnde) + + " Ausleihe Beginn= " +ausleiheBeginn + + " ,Ausleihe Ende= " + ausleiheEnde + " ,verlängerungen= " + verlängerungen + " ,inhaber= " + benutzer.toString() ; } diff --git a/Bibliotheksverwaltungssystem/src/domain/AusleiheSystem/AusleiheSystem.java b/Bibliotheksverwaltungssystem/src/domain/AusleiheSystem/AusleiheSystem.java index 22084dd..ee77ef0 100644 --- a/Bibliotheksverwaltungssystem/src/domain/AusleiheSystem/AusleiheSystem.java +++ b/Bibliotheksverwaltungssystem/src/domain/AusleiheSystem/AusleiheSystem.java @@ -1,5 +1,7 @@ package domain.AusleiheSystem; +import java.time.LocalDate; +import java.time.temporal.ChronoUnit; import java.util.*; import domain.Benutzer.Benutzer; @@ -9,8 +11,7 @@ import domain.Medium.*; public class AusleiheSystem { private HashMap medien; - private Date ausleiheBeginn; - private Date ausleiheEnde; + private LocalDate ausleiheBeginn,ausleiheEnde; private Calendar calendar; @@ -18,24 +19,99 @@ public class AusleiheSystem { this.medien = medien; } - public Ausleihe mediumAusleihen(Benutzer benutzer, String eindutigenummer) throws MediumNichtGefundenException { - Mediumverwalter mediumAusleihen = findMedium(eindutigenummer); - if (mediumAusleihen.isIstAusgeliehen()) - throw new MediumNichtGefundenException("Das Medium ist ausgeliehen"); - - mediumAusleihen.setIstAusgeliehen(true); - mediumAusleihen.setAnzahl(mediumAusleihen.getAnzahl() - 1); - this.ausleiheBeginn = new Date(); - this.calendar = Calendar.getInstance(); - calendar.setTime(ausleiheBeginn); + public Ausleihe mediumAusleihen(Benutzer benutzer, String eindeutigenummer) throws MediumNichtGefundenException { + Mediumverwalter mediumAusleihen = findMedium(eindeutigenummer); + + if (mediumAusleihen.isIstAusgeliehen()) + throw new MediumNichtGefundenException("Das Medium ist ausgeliehen"); + - calendar.add(Calendar.WEEK_OF_YEAR, mediumAusleihen.getLeihdauer()); - this.ausleiheEnde = calendar.getTime(); - Ausleihe neueAusleihe = new Ausleihe(mediumAusleihen,benutzer,ausleiheBeginn,ausleiheEnde); - - return neueAusleihe; - + mediumAusleihen.setIstAusgeliehen(true); + mediumAusleihen.setAnzahl(mediumAusleihen.getAnzahl() - 1); + + this.ausleiheBeginn = LocalDate.now(); + + this.ausleiheEnde = ausleiheBeginn.plusWeeks(mediumAusleihen.getLeihdauer()); + + Ausleihe neueAusleihe = new Ausleihe(mediumAusleihen, benutzer, ausleiheBeginn, ausleiheEnde); + + return neueAusleihe; } + + + public ArrayList mediumRückgabe(ArrayList ausleihe, String eindeutigeKennung) { + Ausleihe ausgelieheneMedium = ausleihe.stream() + .filter(k -> k.getMediumverwalter().getMedium().getID().equalsIgnoreCase(eindeutigeKennung)).findFirst() + .orElse(null); + + ArrayList ausgeliehenMedien = new ArrayList<>(); + LocalDate heutigesDatum; + Benutzer bibBenutzer = ausgelieheneMedium.getBenutzer(); + + if (ausgelieheneMedium != null) { + heutigesDatum = LocalDate.now(); + if (heutigesDatum.isAfter(ausgelieheneMedium.getAusleiheEnde())) { + long überfälligeTage = ausgelieheneMedium.getAusleiheEnde().until(heutigesDatum, ChronoUnit.DAYS); + double gebühren = 0.0; + if (überfälligeTage <= 7) + gebühren = überfälligeTage * 1.0; + + else { + gebühren = (7 * 1.0); + gebühren += ((überfälligeTage - 7) * 2.0); + + } + + bibBenutzer.setGebühren( bibBenutzer.getGebühren() + gebühren); + + } + ausgelieheneMedium.getBenutzer().mediumZurückgeben(ausgelieheneMedium); + ausleihe.remove(ausgelieheneMedium); + ausgelieheneMedium.getMediumverwalter().setIstAusgeliehen(false); + ausgelieheneMedium.getMediumverwalter().setAnzahl(ausgelieheneMedium.getMediumverwalter().getAnzahl() + 1); + for (Ausleihe a : ausgelieheneMedium.getBenutzer().getAusgeliehenenMedien()) + ausgeliehenMedien.add(a.toString()); + + } + + return ausgeliehenMedien; + } + + public double SimulieremediumRückgabe(ArrayList ausleihe, String eindeutigeKennung, String datum)throws MediumNichtGefundenException { + Ausleihe ausgelieheneMedium = ausleihe.stream() + .filter(k -> k.getMediumverwalter().getMedium().getID().equalsIgnoreCase(eindeutigeKennung)).findFirst() + .orElse(null); + + LocalDate heutigesDatum; + LocalDate testDatum = LocalDate.parse(datum); + Benutzer bibBenutzer = ausgelieheneMedium.getBenutzer(); + double gebühren = 0.0; + if (ausgelieheneMedium != null) { + heutigesDatum = LocalDate.now(); + + if (heutigesDatum.isAfter(testDatum)) { + long überfälligeTage = testDatum.until(heutigesDatum, ChronoUnit.DAYS); + + + if (überfälligeTage <= 7) + gebühren = überfälligeTage * 1.0; + + else { + gebühren = (7 * 1.0); + gebühren += ((überfälligeTage - 7) * 2.0); + + } + + bibBenutzer.setGebühren( bibBenutzer.getGebühren() + gebühren); + return bibBenutzer.getGebühren(); + } + + }else + throw new MediumNichtGefundenException ("Das Medium wurde nicht gefunden"); + + return gebühren; + } + private Mediumverwalter findMedium(String eindeutigeKennung) throws MediumNichtGefundenException { if (medien.containsKey(eindeutigeKennung)) diff --git a/Bibliotheksverwaltungssystem/src/domain/Benutzer/Benutzer.java b/Bibliotheksverwaltungssystem/src/domain/Benutzer/Benutzer.java index 3260d25..ce3e154 100644 --- a/Bibliotheksverwaltungssystem/src/domain/Benutzer/Benutzer.java +++ b/Bibliotheksverwaltungssystem/src/domain/Benutzer/Benutzer.java @@ -75,12 +75,12 @@ public abstract class Benutzer { return angemeldet; } - public void anmelden(boolean angemeldet) { - this.angemeldet = angemeldet; + public void anmelden() { + this.angemeldet = true; } - public void abmelden(boolean angemeldet) { - this.angemeldet = angemeldet; + public void abmelden() { + this.angemeldet = false ; } @@ -110,6 +110,7 @@ public abstract class Benutzer { return 0.0; } + // Für Testate public double simuliereJahresGebühren(String anmeldeBeginn) { LocalDate aktuellesDatum = LocalDate.now(); LocalDate test = LocalDate.parse(anmeldeBeginn); diff --git a/Bibliotheksverwaltungssystem/src/domain/Bibliothekskatalog/Mediensuchen.java b/Bibliotheksverwaltungssystem/src/domain/Bibliothekskatalog/Mediensuchen.java index 919d4c8..1a19247 100644 --- a/Bibliotheksverwaltungssystem/src/domain/Bibliothekskatalog/Mediensuchen.java +++ b/Bibliotheksverwaltungssystem/src/domain/Bibliothekskatalog/Mediensuchen.java @@ -24,31 +24,37 @@ public class Mediensuchen { .map(t -> "Eindutige Kennung= " + t.toString()).collect(Collectors.toCollection(ArrayList::new)); } + public ArrayList medienart(String medienart, HashMap medien) { switch(medienart) { case "Bücher": return medien.entrySet().stream() .filter(t -> t.getValue().getMedium() instanceof Buch) + .map(t -> ((Buch)t)) .map(t -> "Eindutige Kennung= " + t.toString()).collect(Collectors.toCollection(ArrayList::new)); case "Brettspiele": return medien.entrySet().stream() .filter(t -> t.getValue().getMedium() instanceof Brettspiel) + .map(t -> ((Brettspiel)t)) .map(t -> "Eindutige Kennung= " + t.toString()).collect(Collectors.toCollection(ArrayList::new)); case "Dvds": return medien.entrySet().stream() .filter(t -> t.getValue().getMedium() instanceof Dvd) + .map(t -> ((Dvd)t)) .map(t -> "Eindutige Kennung= " + t.toString()).collect(Collectors.toCollection(ArrayList::new)); case "Cds": return medien.entrySet().stream() .filter(t -> t.getValue().getMedium() instanceof Cd) + .map(t -> ((Cd)t)) .map(t -> "Eindutige Kennung= " + t.toString()).collect(Collectors.toCollection(ArrayList::new)); case "Videospiele": return medien.entrySet().stream() .filter(t -> t.getValue().getMedium() instanceof Videospiel) + .map(t -> ((Videospiel)t)) .map(t -> "Eindutige Kennung= " + t.toString()).collect(Collectors.toCollection(ArrayList::new)); default: diff --git a/Bibliotheksverwaltungssystem/src/domain/fassade/AusleihfristenGebührenTest.java b/Bibliotheksverwaltungssystem/src/domain/fassade/AusleihfristenGebührenTest.java new file mode 100644 index 0000000..8571b10 --- /dev/null +++ b/Bibliotheksverwaltungssystem/src/domain/fassade/AusleihfristenGebührenTest.java @@ -0,0 +1,26 @@ +package domain.fassade; + +import static org.junit.jupiter.api.Assertions.*; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +class AusleihfristenGebührenTest { + + private BibSystem bib; + + @BeforeEach + void setUp() throws Exception { + this.bib = new BibSystem(); + } + + @Test + void test() throws Exception { + bib.userRegistrieren("obai", "student", 15, "nein"); + bib.userAnmdelden("K1001"); + bib.mediumAusleihen("K1001", "B001"); + + assertEquals(2.0,bib.simuliereMedienRückgabe("B001", "2024-11-13")); + } + +} diff --git a/Bibliotheksverwaltungssystem/src/domain/fassade/BibSystem.java b/Bibliotheksverwaltungssystem/src/domain/fassade/BibSystem.java index e4fa706..9cf7286 100644 --- a/Bibliotheksverwaltungssystem/src/domain/fassade/BibSystem.java +++ b/Bibliotheksverwaltungssystem/src/domain/fassade/BibSystem.java @@ -14,8 +14,6 @@ public class BibSystem { private ArrayList ausleihe; private AusleiheSystem ausleiheSystem; private Benutzer bibAdmin; - - private Benutzer temp; public BibSystem() { @@ -48,22 +46,13 @@ public class BibSystem { } public ArrayList medienRückgabe(String eindeutigeKennung) { - Ausleihe ausgelieheneMedium = ausleihe.stream() - .filter(k -> k.getMediumverwalter().getMedium().getID().equalsIgnoreCase(eindeutigeKennung)).findFirst() - .orElse(null); - - ArrayList ausgeliehenMedien = new ArrayList<>(); - - if (ausgelieheneMedium != null) { - ausgelieheneMedium.getBenutzer().mediumZurückgeben(ausgelieheneMedium); - ausleihe.remove(ausgelieheneMedium); - ausgelieheneMedium.getMediumverwalter().setIstAusgeliehen(false); - ausgelieheneMedium.getMediumverwalter().setAnzahl(ausgelieheneMedium.getMediumverwalter().getAnzahl() + 1); - for (Ausleihe a : ausgelieheneMedium.getBenutzer().getAusgeliehenenMedien()) - ausgeliehenMedien.add(a.toString()); - - } - return ausgeliehenMedien; + + return ausleiheSystem.mediumRückgabe(ausleihe, eindeutigeKennung); + } + + public double simuliereMedienRückgabe(String eindeutigeKennung, String datum) throws MediumNichtGefundenException { + + return ausleiheSystem.SimulieremediumRückgabe(ausleihe, eindeutigeKennung, datum); } public ArrayList mediumDurchsuchen(String auswahl, String bibKartenNummer) @@ -102,43 +91,39 @@ public class BibSystem { public boolean userAnmdelden(String bibKartenNummer) throws BenutzerNichtGefundenException { Benutzer bibBenutzer = findeBenutzer(bibKartenNummer); - bibBenutzer.anmelden(true); + bibBenutzer.anmelden(); return bibBenutzer.isAngemeldet(); } public String mediumAusleihen(String bibKartenNummer, String eindeutigeKennung) throws Exception { - this.temp = findeBenutzer(bibKartenNummer); - - if (temp instanceof Mitarbeiter) + Benutzer bibBenutzer = findeBenutzer(bibKartenNummer); + + if (bibBenutzer instanceof Mitarbeiter) throw new Exception("Mitarbeiter können keine Mediums ausleihen!"); if (!checkIfUserImSystemAngemeldetIst(bibKartenNummer)) throw new BenutzerNichtAngemeldetException("Sie müssen sich erst im System anmelden"); - Ausleihe neueAusleihe = ausleiheSystem.mediumAusleihen(temp, eindeutigeKennung); + Ausleihe neueAusleihe = ausleiheSystem.mediumAusleihen(bibBenutzer, eindeutigeKennung); ausleihe.add(neueAusleihe); - temp.ausleihen(neueAusleihe); - + bibBenutzer.ausleihen(neueAusleihe); return "Das Medium wurde erfolgreich ausgeliehen"; } - + // Temporäre Test Methode private void mediumsAufladen() { - Mediumverwalter buch = new Mediumverwalter(true, 10, 4, + Mediumverwalter buch = new Mediumverwalter(true, 10, 28, new Buch("B001", "Effektives Java Programmieren", 2018, "Joshua Bloch")); medien.put(buch.getMedium().getID(), buch); - Mediumverwalter buchIStAusgeliehen = new Mediumverwalter(true, 10, 4, - new Buch("B00", "Effektives C++ Programmieren", 2018, "Joshua Bloch")); + Mediumverwalter buchIStAusgeliehen = new Mediumverwalter(true, 10, 28,new Buch("B00", "Effektives C++ Programmieren", 2018, "Joshua Bloch")); buchIStAusgeliehen.setIstAusgeliehen(true); medien.put(buchIStAusgeliehen.getMedium().getID(), buchIStAusgeliehen); - Mediumverwalter buchIStNichtAusgeliehen = new Mediumverwalter(true, 10, 4, - new Buch("BG001", "Javascript lenren", 2018, "Joshua Bloch")); + Mediumverwalter buchIStNichtAusgeliehen = new Mediumverwalter(true, 10, 28,new Buch("BG001", "Javascript lenren", 2018, "Joshua Bloch")); medien.put(buchIStNichtAusgeliehen.getMedium().getID(), buchIStNichtAusgeliehen); - Mediumverwalter Videospiel = new Mediumverwalter(true, 2, 1, - new Videospiel("BG00122", "The Legend of Zelda: Breath of the Wild", 2017, "Nintendo Switch")); + Mediumverwalter Videospiel = new Mediumverwalter(true, 2, 28,new Videospiel("BG00122", "The Legend of Zelda: Breath of the Wild", 2017, "Nintendo Switch")); medien.put(Videospiel.getMedium().getID(), Videospiel); } @@ -148,8 +133,7 @@ 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/fassade/JahresGebührenTest.java similarity index 92% rename from Bibliotheksverwaltungssystem/src/domain/gebührenBerechnenTest/JahresGebührenTest.java rename to Bibliotheksverwaltungssystem/src/domain/fassade/JahresGebührenTest.java index ce53e54..3c6c221 100644 --- a/Bibliotheksverwaltungssystem/src/domain/gebührenBerechnenTest/JahresGebührenTest.java +++ b/Bibliotheksverwaltungssystem/src/domain/fassade/JahresGebührenTest.java @@ -1,4 +1,4 @@ -package domain.gebührenBerechnenTest; +package domain.fassade; import static org.junit.jupiter.api.Assertions.*; @@ -6,8 +6,6 @@ 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 diff --git a/Bibliotheksverwaltungssystem/src/domain/fassade/MedienRückgabeTest.java b/Bibliotheksverwaltungssystem/src/domain/fassade/MedienRückgabeTest.java index 1623730..68d0ab7 100644 --- a/Bibliotheksverwaltungssystem/src/domain/fassade/MedienRückgabeTest.java +++ b/Bibliotheksverwaltungssystem/src/domain/fassade/MedienRückgabeTest.java @@ -1,7 +1,5 @@ package domain.fassade; -import static org.junit.jupiter.api.Assertions.*; - import java.util.ArrayList; import org.junit.jupiter.api.BeforeEach; @@ -19,10 +17,13 @@ class MedienRückgabeTest { @Test void test() throws Exception { bib.userRegistrieren("obai", "student", 15, "nein"); - bib.userAnmdelden("K1000"); - bib.mediumAusleihen("K1000", "B001"); + bib.userAnmdelden("K1001"); + bib.mediumAusleihen("K1001", "B001"); + bib.mediumAusleihen("K1001", "BG001"); ArrayList test = bib.medienRückgabe("B001"); + if (test.size() == 0) + System.out.println("kein Mehr"); test.forEach(System.out::println); } diff --git a/Bibliotheksverwaltungssystem/src/domain/fassade/UserAnmeldenTest.java b/Bibliotheksverwaltungssystem/src/domain/fassade/UserAnmeldenTest.java index 1a7a136..67a8d21 100644 --- a/Bibliotheksverwaltungssystem/src/domain/fassade/UserAnmeldenTest.java +++ b/Bibliotheksverwaltungssystem/src/domain/fassade/UserAnmeldenTest.java @@ -22,14 +22,14 @@ class UserAnmeldenTest { // True => User ist Angemeldet fassade.userRegistrieren("obai", "Student", 15, "nein"); - assertTrue(fassade.userAnmdelden("K1000")); + assertTrue(fassade.userAnmdelden("K1001")); } @Test void testBenutzerIstNichtImSystem() throws FalscheEingabeException, BenutzerNichtGefundenException { // True, da Benutzer nicht im System ist - assertThrows( BenutzerNichtGefundenException.class, () -> fassade.userAnmdelden("K1000") ); + assertThrows( BenutzerNichtGefundenException.class, () -> fassade.userAnmdelden("K1001") ); } }