Medien Rückgabe

RückgabeFeature
3009594 2024-11-14 21:40:07 +01:00
parent c58e4e9dcf
commit 76334da35f
14 changed files with 211 additions and 87 deletions

View File

@ -3,6 +3,10 @@ package domain.AusleiheSystem;
import java.text.SimpleDateFormat;
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;
@ -10,15 +14,18 @@ public class Ausleihe {
private SimpleDateFormat simpleFormatter;
private Date ausleiheBeginn, ausleiheEnde;
private Mediumverwalter medium;
private Benutzer benutzer;
private int verlängerungen;
public Ausleihe(Mediumverwalter medium,Date ausleiheBeginn, Date ausleiheEnde) {
public Ausleihe(Mediumverwalter medium, Benutzer benutzer,Date ausleiheBeginn, Date 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() {
@ -37,12 +44,24 @@ public class Ausleihe {
this.ausleiheEnde = ausleiheEnde;
}
public Mediumverwalter getMedium() {
public Mediumverwalter getMediumverwalter() {
return medium;
}
public Benutzer getBenutzer() {
return benutzer;
}
public void setBenutzer(Benutzer benutzer) {
this.benutzer = benutzer;
}
@Override
public String toString() {
return "Ausgeliehene Mediums= "+ medium.toString()+ " Ausleihe Beginn= " +simpleFormatter.format(ausleiheBeginn) + " ,Ausleihe Ende= " + simpleFormatter.format(ausleiheEnde) + " ,verlängerungen= " + verlängerungen;
return "Ausgeliehene Mediums= "+ medium.toString()+
" Ausleihe Beginn= " +simpleFormatter.format(ausleiheBeginn) +
" ,Ausleihe Ende= " + simpleFormatter.format(ausleiheEnde) +
" ,verlängerungen= " + verlängerungen +
" ,inhaber= " + benutzer.toString() ;
}
}

View File

@ -31,9 +31,8 @@ public class AusleiheSystem {
calendar.add(Calendar.WEEK_OF_YEAR, mediumAusleihen.getLeihdauer());
this.ausleiheEnde = calendar.getTime();
Ausleihe neueAusleihe = new Ausleihe(mediumAusleihen,ausleiheBeginn,ausleiheEnde);
benutzer.ausleihen(neueAusleihe);
System.out.println(benutzer.getAusgeliehenenMedien());
Ausleihe neueAusleihe = new Ausleihe(mediumAusleihen,benutzer,ausleiheBeginn,ausleiheEnde);
return neueAusleihe;
}

View File

@ -17,7 +17,7 @@ public abstract class Benutzer {
private ArrayList<Ausleihe> ausgeliehenenMedien;
private boolean angemeldet;
private double gebühren;
private Date anmeldebeginn,anmeldeEnde;
private Date anmeldebeginn;
private SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy");
public Benutzer(Ausweis bibAusweis, String name, int alter, boolean istStudent) {
@ -103,22 +103,28 @@ public abstract class Benutzer {
this.anmeldebeginn = formatter.parse(anmeldebeginn);
}
public Date getAnmeldeEnde() {
return anmeldeEnde;
}
public void setAnmeldeEnde(String anmeldeEnde) throws ParseException {
this.anmeldeEnde= formatter.parse(anmeldeEnde);
}
// public Date getAnmeldeEnde() {
// return anmeldeEnde;
// }
//
// public void setAnmeldeEnde(String anmeldeEnde) throws ParseException {
// this.anmeldeEnde= formatter.parse(anmeldeEnde);
// }
public abstract double getJahresgebühr();
@Override
public String toString() {
return "Benutzer [bibAusweisNummer= " + bibAusweis.getKartenNummer() + ", name=" + name + ", alter=" + alter + ", istStudent="
+ istStudent + ", ist im System Online = " + angemeldet + "Gebühren= "+ gebühren +"Anmeldet seit= " + formatter.format(anmeldeEnde) + ", ausgeliehenenMedien=" + ausgeliehenenMedien + "]";
return "Benutzer [bibAusweisNummer= " + bibAusweis.getKartenNummer() +
", name=" + name +
", alter=" + alter +
", istStudent=" + istStudent +
", ist im System Online = " + angemeldet +
" ,Gebühren= "+ gebühren + "]";
}
public String zeigeAusgeliehenMediums() {
return "Ausgeliehene Mediums= " + ausgeliehenenMedien;
}
}

View File

@ -4,8 +4,8 @@ package domain.Medium;
public class Brettspiel extends Medium {
private String Verlag;
public Brettspiel(String title, int erscheinungsjahr, String Verlag) {
super(title, erscheinungsjahr);
public Brettspiel(String ID,String title, int erscheinungsjahr, String Verlag) {
super(ID,title, erscheinungsjahr);
if (Verlag.isEmpty())
this.Verlag = "-";

View File

@ -5,8 +5,8 @@ public class Buch extends Medium {
private String autor;
public Buch(String title, int erscheinungsjahr, String autor) {
super(title, erscheinungsjahr);
public Buch(String ID,String title, int erscheinungsjahr, String autor) {
super(ID,title, erscheinungsjahr);
if (autor.isEmpty())
this.autor = "-";

View File

@ -5,8 +5,8 @@ import java.util.Date;
public class Cd extends Medium {
private String Künstler;
public Cd(String title, int erscheinungsjahr,String Künstler) {
super(title, erscheinungsjahr);
public Cd(String ID,String title, int erscheinungsjahr,String Künstler) {
super(ID,title, erscheinungsjahr);
if (Künstler.isEmpty())
this.Künstler = "-";

View File

@ -4,8 +4,8 @@ package domain.Medium;
public class Dvd extends Medium {
private String regisseur;
public Dvd(String title, int erscheinungsjahr,String regisseur) {
super(title, erscheinungsjahr);
public Dvd(String ID,String title, int erscheinungsjahr,String regisseur) {
super(ID,title, erscheinungsjahr);
if (regisseur.isEmpty())
this.regisseur = "-";

View File

@ -1,16 +1,17 @@
package domain.Medium;
import java.util.Date;
public abstract class Medium {
private String title;
private int erscheinungsjahr;
private String ID;
public Medium(String title, int erscheinungsjahr) {
public Medium(String ID,String title, int erscheinungsjahr) {
super();
this.title = title;
this.erscheinungsjahr = erscheinungsjahr;
this.ID = ID;
}
public String getTitle() {
@ -20,10 +21,14 @@ public abstract class Medium {
public int getErscheinungsjahr() {
return erscheinungsjahr;
}
public String getID() {
return ID;
}
@Override
public String toString() {
return "title=" + title + ", erscheinungsjahr=" + erscheinungsjahr;
return "ID= "+ ID + " ,title=" + title + ", erscheinungsjahr=" + erscheinungsjahr;
}
}

View File

@ -48,9 +48,13 @@ public class Mediumverwalter {
@Override
public String toString() {
return "Medium=" + medium.toString() + " ,verlängerbar=" + verlängerbar + ", anzahl=" + anzahl + ",ist Ausgeliehen= " + istAusgeliehen + ", Leihdauer="
+ leihdauer ;
return "Medium=" + medium.toString() +
" ,verlängerbar=" + verlängerbar +
", anzahl=" + anzahl +
",ist Ausgeliehen= " + istAusgeliehen +
", Leihdauer=" + leihdauer ;
}
}

View File

@ -6,8 +6,8 @@ public class Videospiel extends Medium {
private String plattform;
public Videospiel(String title, int erscheinungsjahr, String plattform) {
super(title, erscheinungsjahr);
public Videospiel(String ID,String title, int erscheinungsjahr, String plattform) {
super(ID,title, erscheinungsjahr);
if (plattform.isEmpty())
this.plattform = "-";

View File

@ -25,12 +25,14 @@ import domain.UserRegistieren.Registieren;
public class BibSystem {
private ArrayList<Benutzer> alleBibBenutzer;
private HashMap<String,Mediumverwalter> medien;
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 temp;
public BibSystem() {
this.alleBibBenutzer = new ArrayList<>();
@ -40,60 +42,83 @@ public class BibSystem {
this.ausleihe = new ArrayList<>();
mediumsAufladen();
}
public ArrayList<String> mediumDurchsuchen(String auswahl, String bibKartenNummer) throws FalscheEingabeException, MediumNichtGefundenException, BenutzerNichtAngemeldetException {
if (!checkIfUserImSystemAngemeldetIst(bibKartenNummer))
throw new BenutzerNichtAngemeldetException("Sie müssen sich erst im System anmelden");
ArrayList<String> treffer = new ArrayList<>();
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<>();
if (ausgelieheneMedium != null) {
ausgelieheneMedium.getBenutzer().removeMedium(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 ArrayList<String> mediumDurchsuchen(String auswahl, String bibKartenNummer)
throws FalscheEingabeException, MediumNichtGefundenException, BenutzerNichtAngemeldetException {
if (!checkIfUserImSystemAngemeldetIst(bibKartenNummer))
throw new BenutzerNichtAngemeldetException("Sie müssen sich erst im System anmelden");
ArrayList<String> treffer = new ArrayList<>();
Mediensuchen medienSuchen = new Mediensuchen();
if(auswahl.equalsIgnoreCase("ausgeliehen"))
if (auswahl.equalsIgnoreCase("ausgeliehen"))
treffer = medienSuchen.ausgeliehen(auswahl, medien);
else if(auswahl.equalsIgnoreCase("nicht Ausgeliehen"))
else if (auswahl.equalsIgnoreCase("nicht Ausgeliehen"))
treffer = medienSuchen.nichtAusgeliehen(auswahl, medien);
else if(auswahl.equalsIgnoreCase("Bücher") || auswahl.equalsIgnoreCase("Brettspiele") || auswahl.equalsIgnoreCase("Dvds") || auswahl.equalsIgnoreCase("Cds") || auswahl.equalsIgnoreCase("Videospiele") )
else if (auswahl.equalsIgnoreCase("Bücher") || auswahl.equalsIgnoreCase("Brettspiele")
|| auswahl.equalsIgnoreCase("Dvds") || auswahl.equalsIgnoreCase("Cds")
|| auswahl.equalsIgnoreCase("Videospiele"))
treffer = medienSuchen.medienart(auswahl, medien);
else
treffer = medienSuchen.title(auswahl, medien);
if (treffer.size() == 0)
throw new MediumNichtGefundenException("Kein treffer");
return treffer;
}
public void userRegistrieren(String name, String type, int alter,String istAdmin) throws FalscheEingabeException {
public void userRegistrieren(String name, String type, int alter, String istAdmin) throws FalscheEingabeException {
Benutzer bibBenutzer = Registieren.userRegistrieren(name, type, alter, istAdmin);
alleBibBenutzer.add(bibBenutzer);
alleBibBenutzer.add(bibBenutzer);
}
public boolean userAnmdelden(String bibKartenNummer) throws BenutzerNichtGefundenException {
Benutzer bibBenutzer = findeBenutzer(bibKartenNummer);
Benutzer bibBenutzer = findeBenutzer(bibKartenNummer);
bibBenutzer.setAngemeldet(true);
return bibBenutzer.isAngemeldet();
}
public String mediumAusleihen(String bibKartenNummer, String eindeutigeKennung) throws Exception {
Benutzer tempBenutzer = findeBenutzer(bibKartenNummer);
this.temp = findeBenutzer(bibKartenNummer);
if (tempBenutzer instanceof Mitarbeiter)
if (temp instanceof Mitarbeiter)
throw new Exception("Mitarbeiter können keine Mediums ausleihen!");
if (!checkIfUserImSystemAngemeldetIst(bibKartenNummer))
if (!checkIfUserImSystemAngemeldetIst(bibKartenNummer))
throw new BenutzerNichtAngemeldetException("Sie müssen sich erst im System anmelden");
Ausleihe neueAusleihe = ausleiheSystem.mediumAusleihen(tempBenutzer,eindeutigeKennung);
Ausleihe neueAusleihe = ausleiheSystem.mediumAusleihen(temp, eindeutigeKennung);
ausleihe.add(neueAusleihe);
return "Das Medium wurde erfolgreich ausgeliehen";
temp.ausleihen(neueAusleihe);
return "Das Medium wurde erfolgreich ausgeliehen";
}
public Date getHeutigesDatum() {
return heutigesDatum;
}
@ -104,18 +129,22 @@ public class BibSystem {
// Temporäre Test Methode
private void mediumsAufladen() {
Mediumverwalter buch = new Mediumverwalter(true, 10, 4, new Buch("Effektives Java Programmieren", 2018, "Joshua Bloch"));
medien.put("B001",buch);
Mediumverwalter buchIStAusgeliehen = new Mediumverwalter(true, 10, 4, new Buch("Effektives C++ Programmieren", 2018, "Joshua Bloch"));
Mediumverwalter buch = new Mediumverwalter(true, 10, 4,
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"));
buchIStAusgeliehen.setIstAusgeliehen(true);
medien.put("B00", buchIStAusgeliehen);
Mediumverwalter buchIStNichtAusgeliehen = new Mediumverwalter(true, 10, 4, new Buch("Javascript lenren", 2018, "Joshua Bloch"));
medien.put("BG001",buchIStNichtAusgeliehen);
Mediumverwalter Videospiel = new Mediumverwalter(true,2,1,new Videospiel ("The Legend of Zelda: Breath of the Wild", 2017,"Nintendo Switch"));
medien.put("BG00122",Videospiel);
medien.put(buchIStAusgeliehen.getMedium().getID(), buchIStAusgeliehen);
Mediumverwalter buchIStNichtAusgeliehen = new Mediumverwalter(true, 10, 4,
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"));
medien.put(Videospiel.getMedium().getID(), Videospiel);
}
private boolean checkIfUserImSystemAngemeldetIst(String bibKartenNummer) {
@ -125,7 +154,8 @@ public class BibSystem {
private Benutzer findeBenutzer(String bibKartenNummer) throws BenutzerNichtGefundenException {
return alleBibBenutzer.stream()
.filter(k -> k.getBibAusweis().getKartenNummer().equalsIgnoreCase(bibKartenNummer)).findFirst()
.orElseThrow(() -> new BenutzerNichtGefundenException("Benutzer mit Kartennummer " + bibKartenNummer + " nicht gefunden"));
.orElseThrow(() -> new BenutzerNichtGefundenException(
"Benutzer mit Kartennummer " + bibKartenNummer + " nicht gefunden"));
}
}

View File

@ -0,0 +1,29 @@
package domain.fassade;
import static org.junit.jupiter.api.Assertions.*;
import java.util.ArrayList;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
class MedienRückgabeTest {
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("K1000");
bib.mediumAusleihen("K1000", "B001");
ArrayList<String> test = bib.medienRückgabe("B001");
test.forEach(System.out::println);
}
}

View File

@ -1,5 +1,6 @@
package tui;
import java.util.ArrayList;
import java.util.Scanner;
import domain.ExceptionsKlassen.BenutzerNichtAngemeldetException;
@ -52,11 +53,33 @@ public class Tui {
case "4":
mediumAusleihenProzess();
break;
case "5":
mediumsRückgabeProzess();
}
}
}
private void mediumsRückgabeProzess() throws FalscheEingabeException, MediumNichtGefundenException, BenutzerNichtAngemeldetException {
String eindutigekennung;
boolean mediumsRückgabeProzess = true;
while (mediumsRückgabeProzess) {
System.out.println("Geben Sie bitte das eindutige Kennung des Mediums an");
eindutigekennung = eingabe.nextLine();
ArrayList<String> ausgeliehneMedien = fassade.medienRückgabe(eindutigekennung);
System.out.println("Medium ist erfolgreich zurückgegeben");
if (ausgeliehneMedien.size() == 0)
System.out.println("Sie haben keine Mediums mehr");
else
ausgeliehneMedien.stream().forEach(System.out::println);
startBibProgramm();
}
}
private void mediumAusleihenProzess(){
String kartennummer;
String eindutigeKennung;

View File

@ -1,18 +1,27 @@
Projektstruktur aufsetzen:
ich werde erst das Git-Repository und die Grundstruktur erstellen.
werde danach die Hauptverzeichnisse und grundlegende Klassen erstellen.
Ich werde in meiner Hauptverzeichnisse drei Packages anlegen:
1. domain für das Geschäftslogik
2. Tui texteulle user Interface Benutzeroberfläche (UI) und Controller-Logik
- die BibliotheksUI-Klasse, die die Interaktion mit dem Benutzer ermöglicht.
- hierbei werde ich Methoden für Anmeldung, Medienausleihe, Medienrückgabe, Verlängerung, und Gebührenerfassung erstellen
3. Main main klasse damit ich mein Software ausführe
Anforderungsanalyse:
Für das Bibliotheksverwaltungssystem werde ich zunächst eine gründliche Analyse der Anforderungen durchführen.
Hierbei werde ich festlegen, welche Funktionen und Ziele die Software erfüllen soll. Ein wesentlicher Aspekt ist auch,
die unterschiedlichen Akteure zu identifizieren, die die Software verwenden werden, um ihre Bedürfnisse und Anforderungen zu berücksichtigen.
Hierbei werde ich festlegen, welche Funktionen und Ziele die BibSoftware erfüllen soll.
Das Bibsystem unterstützt 6 Aktionen:
Aktion1 : Registrieren
Also hier werde ich in der UI dem Benutzer die Möglichkeit seine Daten einzugeben(Name,alter,etc...)
die Fassade nimmt die Daten entgegen und erstellt für die Benutzer ein neues Konto und ein neuer Ausweis
hier soll der kunde eingeben, ob er normale Kunde ist oder ein Mitarbeiter(Admin)
danach werde ich festlegen, welche Klassen ich für mein Software benötige
- Entwickle die abstrakte Klasse Medium mit Attributen und Methoden.
- Implementiere spezifische Medienklassen (Buch, DVD, CD, Brettspiel, Videospiel).
- Erstelle eine abstrakte Klasse Benutzer und spezifische Benutzerklassen (Erwachsener, Schüler, Student).
- Implementiere die AdminBenutzer-Klasse für spezielle Verwaltungsfunktionen.
Design und Datenstrukturentscheidung:
In diesem Schritt plane und entwerfe ich die grundlegende Klassenstruktur.
Dazu werde ich ermitteln, wie viele Klassen benötigt werden und welche Attribute und Methoden jede Klasse enthalten soll.
ich werde auch die Beziehungen zwischen den Klassen definieren(z.b Vererbung, Assoziation, etc..)