MedienRückgabe- AusleiheFrist simulieren berechnen und testen

Gebührenberechnen
3009594 2024-11-15 17:51:55 +01:00
parent 34b2daa2bb
commit 1b02808644
9 changed files with 188 additions and 95 deletions

View File

@ -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() ;
}

View File

@ -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<String,Mediumverwalter> medien;
private Date ausleiheBeginn;
private Date ausleiheEnde;
private LocalDate ausleiheBeginn,ausleiheEnde;
private Calendar calendar;
@ -18,25 +19,100 @@ 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");
public Ausleihe mediumAusleihen(Benutzer benutzer, String eindeutigenummer) throws MediumNichtGefundenException {
Mediumverwalter mediumAusleihen = findMedium(eindeutigenummer);
mediumAusleihen.setIstAusgeliehen(true);
mediumAusleihen.setAnzahl(mediumAusleihen.getAnzahl() - 1);
this.ausleiheBeginn = new Date();
this.calendar = Calendar.getInstance();
calendar.setTime(ausleiheBeginn);
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<String> mediumRückgabe(ArrayList<Ausleihe> ausleihe, String eindeutigeKennung) {
Ausleihe ausgelieheneMedium = ausleihe.stream()
.filter(k -> k.getMediumverwalter().getMedium().getID().equalsIgnoreCase(eindeutigeKennung)).findFirst()
.orElse(null);
ArrayList<String> 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> 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))
return medien.get(eindeutigeKennung);

View File

@ -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);

View File

@ -24,31 +24,37 @@ public class Mediensuchen {
.map(t -> "Eindutige Kennung= " + t.toString()).collect(Collectors.toCollection(ArrayList::new));
}
public ArrayList<String> medienart(String medienart, HashMap<String,Mediumverwalter> 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:

View File

@ -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"));
}
}

View File

@ -15,8 +15,6 @@ public class BibSystem {
private AusleiheSystem ausleiheSystem;
private Benutzer bibAdmin;
private Benutzer temp;
public BibSystem() {
this.alleBibBenutzer = new ArrayList<>();
@ -48,22 +46,13 @@ public class BibSystem {
}
public ArrayList<String> medienRückgabe(String eindeutigeKennung) {
Ausleihe ausgelieheneMedium = ausleihe.stream()
.filter(k -> k.getMediumverwalter().getMedium().getID().equalsIgnoreCase(eindeutigeKennung)).findFirst()
.orElse(null);
ArrayList<String> ausgeliehenMedien = new ArrayList<>();
return ausleiheSystem.mediumRückgabe(ausleihe, eindeutigeKennung);
}
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());
public double simuliereMedienRückgabe(String eindeutigeKennung, String datum) throws MediumNichtGefundenException {
}
return ausgeliehenMedien;
return ausleiheSystem.SimulieremediumRückgabe(ausleihe, eindeutigeKennung, datum);
}
public ArrayList<String> 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);
Benutzer bibBenutzer = findeBenutzer(bibKartenNummer);
if (temp instanceof Mitarbeiter)
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"));
}

View File

@ -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

View File

@ -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<String> test = bib.medienRückgabe("B001");
if (test.size() == 0)
System.out.println("kein Mehr");
test.forEach(System.out::println);
}

View File

@ -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") );
}
}