fortschritte bei der AusleiheProzess

MedienAusleihen
3009594 2024-11-13 23:52:40 +01:00
parent 75579d5c4b
commit 8ada9aa90d
17 changed files with 343 additions and 112 deletions

View File

@ -5,11 +5,11 @@ import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import domain.BibSystem;
import domain.ExceptionsKlassen.BenutzerNichtAngemeldetException;
import domain.ExceptionsKlassen.BenutzerNichtGefundenException;
import domain.ExceptionsKlassen.FalscheEingabeException;
import domain.ExceptionsKlassen.MediumNichtGefundenException;
import domain.fassade.BibSystem;
class AusleiheJTest {

View File

@ -90,7 +90,7 @@ public abstract class Benutzer {
@Override
public String toString() {
return "Benutzer [bibAusweisNummer= " + bibAusweis.getKartenNummer() + ", name=" + name + ", alter=" + alter + ", istStudent="
+ istStudent + ", ist im System Online = " + angemeldet + ", ausgeliehenenMedien=" + ausgeliehenenMedien + "]";
+ istStudent + ", ist im System Online = " + angemeldet + "Gebühren= "+ gebühren + ", ausgeliehenenMedien=" + ausgeliehenenMedien + "]";
}

View File

@ -1,93 +0,0 @@
package domain;
import java.util.ArrayList;
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 domain.Benutzer.*;
import domain.ExceptionsKlassen.*;
import domain.Medium.Brettspiel;
import domain.Medium.Buch;
import domain.Medium.Medium;
import domain.Medium.Mediumverwalter;
import domain.UserRegistieren.Registieren;
public class BibSystem {
private ArrayList<Benutzer> alleBibBenutzer;
private HashMap<String,Mediumverwalter> medien;
private ArrayList<Ausleihe> ausleihe;
private AusleiheSystem ausleiheSystem;
public BibSystem() {
this.alleBibBenutzer = new ArrayList<>();
this.medien = new HashMap<>();
this.ausleiheSystem = new AusleiheSystem(medien);
mediumsAufladen();
}
public List<String> mediumDurchsuchen(String title, String bibKartenNummer) throws MediumNichtGefundenException, BenutzerNichtAngemeldetException {
if (!checkIfUserImSystemAngemeldetIst(bibKartenNummer))
throw new BenutzerNichtAngemeldetException("Sie müssen sich erst im System anmelden");
List<String> treffer = medien.values().stream()
.filter(t -> t.getMedium().getTitle().equalsIgnoreCase(title))
.map(t -> t.toString())
.collect(Collectors.toCollection(ArrayList::new));
return (ArrayList<String>) treffer;
}
public void userRegistrieren(String name, String type, int alter,String istAdmin) throws FalscheEingabeException {
Benutzer bibBenutzer = Registieren.userRegistrieren(name, type, alter, istAdmin);
alleBibBenutzer.add(bibBenutzer);
}
public boolean userAnmdelden(String kartennummer) throws BenutzerNichtGefundenException {
Benutzer bibBenutzer = findBenutzer(kartennummer);
bibBenutzer.setAngemeldet(true);
return bibBenutzer.isAngemeldet();
}
public void mediumAusleihen(String kartennummer, String eindeutigeKennung) throws Exception {
Benutzer tempBenutzer = findBenutzer(kartennummer);
if (tempBenutzer instanceof Mitarbeiter)
throw new Exception("Mitarbeiter können keine Mediums ausleihen!");
if (!checkIfUserImSystemAngemeldetIst(kartennummer))
throw new BenutzerNichtAngemeldetException("Sie müssen sich erst im System anmelden");
Ausleihe neueAusleihe = ausleiheSystem.mediumAusleihen(tempBenutzer,eindeutigeKennung);
ausleihe.add(neueAusleihe);
}
private void mediumsAufladen() {
medien.put("B001",new Mediumverwalter (true,10,4, new Buch("t",2018,"Joshua Bloch")));
medien.put("B00", new Mediumverwalter (true,10,4, new Buch("Effektives Java Programmieren",2018,"Joshua Bloch")));
medien.put("BG001", new Mediumverwalter (false,10,4, new Brettspiel("Die Siedler von Catan",2012,"XY Müller")));
}
private boolean checkIfUserImSystemAngemeldetIst(String kartennummer) {
return alleBibBenutzer.stream()
.anyMatch(user -> user.isAngemeldet());
}
private Benutzer findBenutzer(String kartennummer) throws BenutzerNichtGefundenException {
return alleBibBenutzer.stream()
.filter(k -> k.getBibAusweis().getKartenNummer().equalsIgnoreCase(kartennummer))
.findFirst() // nimmt das erste Element des Streams, das die Filterbedingung erfüllt.
.orElseThrow(() -> new BenutzerNichtGefundenException ("Benutzer mit Kartennummer " + kartennummer + " nicht gefunden"));
}
}

View File

@ -0,0 +1,52 @@
package domain.MedienDurchsuchen;
import static org.junit.jupiter.api.Assertions.*;
import java.util.ArrayList;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import domain.Benutzer.Benutzer;
import domain.ExceptionsKlassen.BenutzerNichtAngemeldetException;
import domain.ExceptionsKlassen.BenutzerNichtGefundenException;
import domain.ExceptionsKlassen.FalscheEingabeException;
import domain.ExceptionsKlassen.MediumNichtGefundenException;
import domain.UserRegistieren.Registieren;
import domain.fassade.BibSystem;
class MedienSuchenTest {
private BibSystem fassade;
@BeforeEach
void erstelleObjekt() throws FalscheEingabeException, BenutzerNichtGefundenException {
this.fassade = new BibSystem();
fassade.userRegistrieren("obai", "student", 15, "nein");
fassade.userAnmdelden("K1000");
}
@Disabled
void testMedienSuchenNachTitle()throws MediumNichtGefundenException, FalscheEingabeException, BenutzerNichtAngemeldetException {
ArrayList<String> nichtAusgeliehen = fassade.mediumDurchsuchen("Effektives Java Programmieren", "K1000");
nichtAusgeliehen.forEach(System.out::println);
}
@Disabled
void testMedienSuchenNachMedienart()throws MediumNichtGefundenException, FalscheEingabeException, BenutzerNichtAngemeldetException {
ArrayList<String> nichtAusgeliehen = fassade.mediumDurchsuchen("Videospiele", "K1000");
nichtAusgeliehen.forEach(System.out::println);
}
@Test
void testMedienSuchenNachausgeliehen()throws MediumNichtGefundenException, FalscheEingabeException, BenutzerNichtAngemeldetException {
ArrayList<String> nichtAusgeliehen = fassade.mediumDurchsuchen("ausgeliehen", "K1000");
nichtAusgeliehen.forEach(System.out::println);
}
}

View File

@ -0,0 +1,62 @@
package domain.MedienDurchsuchen;
import java.util.*;
import java.util.stream.Collectors;
import domain.Medium.*;
public class Mediensuchen {
public ArrayList<String> title(String title, HashMap<String,Mediumverwalter> medien) {
return medien.entrySet().stream()
.filter(t -> t.getValue().getMedium().getTitle().equalsIgnoreCase(title))
.map(t -> "Eindutige Kennung= " + t.toString()).collect(Collectors.toCollection(ArrayList::new));
}
public ArrayList<String> ausgeliehen(String ausgeliehen, HashMap<String,Mediumverwalter> medien) {
return medien.entrySet().stream()
.filter(t -> t.getValue().isIstAusgeliehen())
.map(t -> "Eindutige Kennung= " + t.toString()).collect(Collectors.toCollection(ArrayList::new));
}
public ArrayList<String> nichtAusgeliehen(String ausgeliehen, HashMap<String,Mediumverwalter> medien) {
return medien.entrySet().stream()
.filter(t -> !(t.getValue().isIstAusgeliehen()))
.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 -> "Eindutige Kennung= " + t.toString()).collect(Collectors.toCollection(ArrayList::new));
case "Brettspiele":
return medien.entrySet().stream()
.filter(t -> t.getValue().getMedium() instanceof Brettspiel)
.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 -> "Eindutige Kennung= " + t.toString()).collect(Collectors.toCollection(ArrayList::new));
case "Cds":
return medien.entrySet().stream()
.filter(t -> t.getValue().getMedium() instanceof Cd)
.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 -> "Eindutige Kennung= " + t.toString()).collect(Collectors.toCollection(ArrayList::new));
default:
return null;
}
}
}

View File

@ -6,7 +6,11 @@ public class Brettspiel extends Medium {
public Brettspiel(String title, int erscheinungsjahr, String Verlag) {
super(title, erscheinungsjahr);
this.Verlag = Verlag;
if (Verlag.isEmpty())
this.Verlag = "-";
else
this.Verlag = Verlag;
}
public String getVerlag() {

View File

@ -7,7 +7,11 @@ public class Buch extends Medium {
public Buch(String title, int erscheinungsjahr, String autor) {
super(title, erscheinungsjahr);
this.autor = autor;
if (autor.isEmpty())
this.autor = "-";
else
this.autor = autor;
}

View File

@ -7,7 +7,11 @@ public class Cd extends Medium {
private String Künstler;
public Cd(String title, int erscheinungsjahr,String Künstler) {
super(title, erscheinungsjahr);
this.Künstler = Künstler;
if (Künstler.isEmpty())
this.Künstler = "-";
else
this.Künstler = Künstler;
}
public String getKünstler() {

View File

@ -6,7 +6,11 @@ public class Dvd extends Medium {
private String regisseur;
public Dvd(String title, int erscheinungsjahr,String regisseur) {
super(title, erscheinungsjahr);
this.regisseur = regisseur;
if (regisseur.isEmpty())
this.regisseur = "-";
else
this.regisseur = regisseur;
}
public String getRegisseur() {

View File

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

View File

@ -8,7 +8,11 @@ public class Videospiel extends Medium {
public Videospiel(String title, int erscheinungsjahr, String plattform) {
super(title, erscheinungsjahr);
this.plattform = plattform;
if (plattform.isEmpty())
this.plattform = "-";
else
this.plattform = plattform;
}
public String getPlattform() {

View File

@ -5,7 +5,6 @@ import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import domain.BibSystem;
import domain.Benutzer.Ausweis;
import domain.Benutzer.Benutzer;
import domain.Benutzer.Kunde;
@ -13,6 +12,7 @@ import domain.Benutzer.Mitarbeiter;
import domain.ExceptionsKlassen.FalscheEingabeException;
import domain.Medium.Buch;
import domain.Medium.Mediumverwalter;
import domain.fassade.BibSystem;
class RegistrierenTest {
private BibSystem bib;

View File

@ -0,0 +1,119 @@
package domain.fassade;
import java.util.ArrayList;
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 domain.Benutzer.*;
import domain.ExceptionsKlassen.*;
import domain.MedienDurchsuchen.Mediensuchen;
import domain.Medium.Brettspiel;
import domain.Medium.Buch;
import domain.Medium.Medium;
import domain.Medium.Mediumverwalter;
import domain.Medium.Videospiel;
import domain.UserRegistieren.Registieren;
public class BibSystem {
private ArrayList<Benutzer> alleBibBenutzer;
private HashMap<String,Mediumverwalter> medien;
private ArrayList<Ausleihe> ausleihe;
private AusleiheSystem ausleiheSystem;
public BibSystem() {
this.alleBibBenutzer = new ArrayList<>();
this.medien = new HashMap<>();
this.ausleiheSystem = new AusleiheSystem(medien);
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<>();
Mediensuchen medienSuchen = new Mediensuchen();
if(auswahl.equalsIgnoreCase("ausgeliehen"))
treffer = medienSuchen.ausgeliehen(auswahl, medien);
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") )
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 {
Benutzer bibBenutzer = Registieren.userRegistrieren(name, type, alter, istAdmin);
alleBibBenutzer.add(bibBenutzer);
}
public boolean userAnmdelden(String bibKartenNummer) throws BenutzerNichtGefundenException {
Benutzer bibBenutzer = findeBenutzer(bibKartenNummer);
bibBenutzer.setAngemeldet(true);
return bibBenutzer.isAngemeldet();
}
public void mediumAusleihen(String bibKartenNummer, String eindeutigeKennung) throws Exception {
Benutzer tempBenutzer = findeBenutzer(bibKartenNummer);
if (tempBenutzer 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(tempBenutzer,eindeutigeKennung);
ausleihe.add(neueAusleihe);
}
// 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"));
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);
}
private boolean checkIfUserImSystemAngemeldetIst(String bibKartenNummer) {
return alleBibBenutzer.stream().anyMatch(user -> user.isAngemeldet());
}
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"));
}
}

View File

@ -1,10 +1,11 @@
package domain;
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.Disabled;
import org.junit.jupiter.api.Test;
import domain.Benutzer.Benutzer;
@ -22,13 +23,21 @@ class MediumDurchsuchenTest {
fassade = new BibSystem();
}
@Test
@Disabled
void testMediumsuchen() throws FalscheEingabeException, BenutzerNichtGefundenException, MediumNichtGefundenException, BenutzerNichtAngemeldetException {
fassade.userRegistrieren("obai", "student", 15, "nein");
assertTrue(fassade.userAnmdelden("K1000"));
ArrayList<String> treffer = (ArrayList<String>) fassade.mediumDurchsuchen("Effektives Java Programmieren", "B001");
System.out.println(treffer);
treffer.forEach(System.out::println);
}
@Test
void testMediumNichtGefunden() throws FalscheEingabeException, BenutzerNichtGefundenException, MediumNichtGefundenException, BenutzerNichtAngemeldetException {
fassade.userRegistrieren("obai", "student", 15, "nein");
assertTrue(fassade.userAnmdelden("K1000"));
assertThrows(MediumNichtGefundenException.class, () -> fassade.mediumDurchsuchen("C++ Programmieren", "B001"));
}
}

View File

@ -0,0 +1,35 @@
package domain.fassade;
import static org.junit.Assert.assertThrows;
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import domain.ExceptionsKlassen.BenutzerNichtGefundenException;
import domain.ExceptionsKlassen.FalscheEingabeException;
class UserAnmeldenTest {
BibSystem fassade;
@BeforeEach
void setUp() throws Exception {
fassade = new BibSystem();
}
@Test
void testAnmelden() throws FalscheEingabeException, BenutzerNichtGefundenException {
// True => User ist Angemeldet
fassade.userRegistrieren("obai", "Student", 15, "nein");
assertTrue(fassade.userAnmdelden("K1000"));
}
@Test
void testBenutzerIstNichtImSystem() throws FalscheEingabeException, BenutzerNichtGefundenException {
// True, da Benutzer nicht im System ist
assertThrows( BenutzerNichtGefundenException.class, () -> fassade.userAnmdelden("K1000") );
}
}

View File

@ -2,11 +2,11 @@ package tui;
import java.util.Scanner;
import domain.BibSystem;
import domain.ExceptionsKlassen.BenutzerNichtAngemeldetException;
import domain.ExceptionsKlassen.BenutzerNichtGefundenException;
import domain.ExceptionsKlassen.FalscheEingabeException;
import domain.ExceptionsKlassen.MediumNichtGefundenException;
import domain.fassade.BibSystem;
public class Tui {
private BibSystem fassade;
@ -17,7 +17,7 @@ public class Tui {
startBibProgramm();
}
private void startBibProgramm() {
private void startBibProgramm() throws FalscheEingabeException, MediumNichtGefundenException, BenutzerNichtAngemeldetException {
String aktion;
System.out.println("<< Willkommen in der Bibliothek >>");
@ -69,7 +69,7 @@ public class Tui {
System.out.println("Geben Sie bitte die eindutige Kennung des Mediums");
System.out.print(">");
eindutigeKennung = eingabe.nextLine();
try {
fassade.mediumAusleihen(kartennummer, eindutigeKennung);
@ -81,8 +81,29 @@ public class Tui {
}
private void mediumDurchsuchenProzess() {
private void mediumDurchsuchenProzess() throws FalscheEingabeException, MediumNichtGefundenException, BenutzerNichtAngemeldetException {
String auswahl;
String bibKartennummer;
boolean mediumDurchsuchenProzess = true;
System.out.println("Wählen Sie bitte aus, wonache Sie suchen möchten");
while (mediumDurchsuchenProzess) {
System.out.println("Katalog der Bibliothek: ");
System.out.println("Title");
System.out.println("Ausgeliehene Medien");
System.out.println("Nicht Ausgeliehene Medien");
System.out.println("Medienart (Bücher,Brettspiele,Dvds,Cds oder Videospiele");
System.out.println("zurück");
auswahl = eingabe.nextLine();
if (auswahl.equalsIgnoreCase("zurück")){
mediumDurchsuchenProzess = false;
startBibProgramm();
}
System.out.println("gebe Sie nun Ihre BibKartenummer");
bibKartennummer = eingabe.nextLine();
fassade.mediumDurchsuchen(auswahl, bibKartennummer);
}
}
private void anmeldenProzess() {
@ -90,7 +111,6 @@ public class Tui {
System.out.println("Geben Sie bitte die Kartennummer Ihres Bibliotheksausweises an: ");
System.out.print(">");
kartennummer = eingabe.nextLine();
try {
if (fassade.userAnmdelden(kartennummer))
System.out.println("Sie sind nun im System Angemeldet");

View File

@ -3,6 +3,13 @@ Für das Bibliotheksverwaltungssystem werde ich zunächst eine gründliche Analy
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.
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)
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.