MedienRückgabe- AusleiheFrist simulieren berechnen und testen
parent
34b2daa2bb
commit
1b02808644
|
@ -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() ;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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"));
|
||||
}
|
||||
|
||||
}
|
|
@ -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"));
|
||||
}
|
||||
|
|
|
@ -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
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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") );
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue