From 7858e0c1ce377671f78ed3985b5a9c3bb15a6838 Mon Sep 17 00:00:00 2001 From: obai Date: Mon, 18 Nov 2024 19:00:14 +0100 Subject: [PATCH] Code-Verbesserung --- .../domain/AusleiheSystem/AusleiheSystem.java | 3 +- .../AusleiheSystem/MedienRückgabeTest.java | 12 ++- .../src/domain/Benutzer/Erwachsener.java | 14 ++++ .../src/domain/Benutzer/Mitarbeiter.java | 2 +- .../Benutzer/{Kunde.java => Studenten.java} | 6 +- .../domain/UserRegistieren/Registieren.java | 26 ++++-- .../UserRegistieren/RegistrierenTest.java | 18 +++-- .../src/domain/fassade/BibSystem.java | 53 ++++++++----- .../src/domain/fassade/GebührenTest.java | 8 +- Bibliotheksverwaltungssystem/src/tui/Tui.java | 79 +++++++++++++++++-- 10 files changed, 170 insertions(+), 51 deletions(-) create mode 100644 Bibliotheksverwaltungssystem/src/domain/Benutzer/Erwachsener.java rename Bibliotheksverwaltungssystem/src/domain/Benutzer/{Kunde.java => Studenten.java} (50%) diff --git a/Bibliotheksverwaltungssystem/src/domain/AusleiheSystem/AusleiheSystem.java b/Bibliotheksverwaltungssystem/src/domain/AusleiheSystem/AusleiheSystem.java index 24daa18..404dc73 100644 --- a/Bibliotheksverwaltungssystem/src/domain/AusleiheSystem/AusleiheSystem.java +++ b/Bibliotheksverwaltungssystem/src/domain/AusleiheSystem/AusleiheSystem.java @@ -38,7 +38,8 @@ public class AusleiheSystem { public ArrayList mediumRückgabe(ArrayList ausleihe, String eindeutigeKennung) { Ausleihe ausgelieheneMedium = ausleihe.stream() - .filter(k -> k.getMediumverwalter().getMedium().getID().equalsIgnoreCase(eindeutigeKennung)).findFirst() + .filter(k -> k.getMediumverwalter().getMedium().getID().equalsIgnoreCase(eindeutigeKennung)) + .findFirst() .orElse(null); ArrayList ausgeliehenMedien = new ArrayList<>(); diff --git a/Bibliotheksverwaltungssystem/src/domain/AusleiheSystem/MedienRückgabeTest.java b/Bibliotheksverwaltungssystem/src/domain/AusleiheSystem/MedienRückgabeTest.java index e53f6cd..5e45e3d 100644 --- a/Bibliotheksverwaltungssystem/src/domain/AusleiheSystem/MedienRückgabeTest.java +++ b/Bibliotheksverwaltungssystem/src/domain/AusleiheSystem/MedienRückgabeTest.java @@ -2,12 +2,14 @@ package domain.AusleiheSystem; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; import java.util.ArrayList; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import domain.Benutzer.Benutzer; import domain.fassade.BibSystem; class MedienRückgabeTest { @@ -25,9 +27,13 @@ class MedienRückgabeTest { bib.userAnmelden("K1001"); bib.mediumAusleihen("K1001", "B001"); - double gebühren = bib.datumÄndern("B001", "2022-09-01", "2022-10-01", "2022-10-03"); - assertEquals(2.0,gebühren); - + Benutzer bibUser = bib.findeBenutzer("K1001"); + double gebühren = bib.datumÄndern("B001", "2022-09-01", "2022-10-01", "2022-10-09"); + assertEquals(9.0,gebühren); + assertTrue(bib.adminAnmelden("A1000")); + assertTrue(bib.getgbührenBenutzer("K1001") == 9.0); + bib.gebührenVerbuchen("K1001"); + assertTrue (bibUser.getGebühren() == 0.0); } diff --git a/Bibliotheksverwaltungssystem/src/domain/Benutzer/Erwachsener.java b/Bibliotheksverwaltungssystem/src/domain/Benutzer/Erwachsener.java new file mode 100644 index 0000000..093d634 --- /dev/null +++ b/Bibliotheksverwaltungssystem/src/domain/Benutzer/Erwachsener.java @@ -0,0 +1,14 @@ +package domain.Benutzer; + +public class Erwachsener extends Benutzer { + + public Erwachsener(Ausweis bibAusweis, String name, int alter, boolean istStudent) { + super(bibAusweis, name, alter, istStudent); + } + + @Override + public double getJahresgebühren() { + return 50.0; + } + +} diff --git a/Bibliotheksverwaltungssystem/src/domain/Benutzer/Mitarbeiter.java b/Bibliotheksverwaltungssystem/src/domain/Benutzer/Mitarbeiter.java index 5ac3d20..dff42cd 100644 --- a/Bibliotheksverwaltungssystem/src/domain/Benutzer/Mitarbeiter.java +++ b/Bibliotheksverwaltungssystem/src/domain/Benutzer/Mitarbeiter.java @@ -9,7 +9,7 @@ public class Mitarbeiter extends Benutzer { @Override public double getJahresgebühren() { - return 50.0; + return 0.0; } public void gebührVerbuchen(Benutzer benutzer) { diff --git a/Bibliotheksverwaltungssystem/src/domain/Benutzer/Kunde.java b/Bibliotheksverwaltungssystem/src/domain/Benutzer/Studenten.java similarity index 50% rename from Bibliotheksverwaltungssystem/src/domain/Benutzer/Kunde.java rename to Bibliotheksverwaltungssystem/src/domain/Benutzer/Studenten.java index 3b422f0..bd962ae 100644 --- a/Bibliotheksverwaltungssystem/src/domain/Benutzer/Kunde.java +++ b/Bibliotheksverwaltungssystem/src/domain/Benutzer/Studenten.java @@ -1,10 +1,8 @@ package domain.Benutzer; -import java.time.LocalDate; +public class Studenten extends Benutzer { -public class Kunde extends Benutzer { - - public Kunde(Ausweis bibAusweis, String name, int alter, boolean istStudent) { + public Studenten(Ausweis bibAusweis, String name, int alter, boolean istStudent) { super(bibAusweis, name, alter, istStudent); } diff --git a/Bibliotheksverwaltungssystem/src/domain/UserRegistieren/Registieren.java b/Bibliotheksverwaltungssystem/src/domain/UserRegistieren/Registieren.java index e95e86d..7016581 100644 --- a/Bibliotheksverwaltungssystem/src/domain/UserRegistieren/Registieren.java +++ b/Bibliotheksverwaltungssystem/src/domain/UserRegistieren/Registieren.java @@ -6,21 +6,31 @@ import domain.ExceptionsKlassen.FalscheEingabeException; public class Registieren { public static Benutzer userRegistrieren(String name, String type, int alter,String istAdmin) throws FalscheEingabeException { + Benutzer benutzer; Ausweis ausweis; - if (!name.isEmpty() && (type.equalsIgnoreCase("schüler") || type.equalsIgnoreCase("student")) && istAdmin.equalsIgnoreCase("nein")) { - ausweis = new Ausweis("K"); - benutzer = new Kunde(ausweis,name,alter,false); - } - else if (!name.isEmpty() && type.equalsIgnoreCase("mitarbeiter") && istAdmin.equalsIgnoreCase("ja")) { - ausweis = new Ausweis("A"); - benutzer = new Mitarbeiter(ausweis,name,alter,true); + if (!name.isEmpty()) { + boolean admin = (istAdmin.equalsIgnoreCase("Ja"))? true : false; + if ((type.equalsIgnoreCase("schüler") || type.equalsIgnoreCase("student"))) { + ausweis = new Ausweis("K"); + benutzer = new Studenten(ausweis,name,alter,admin); + } + else if (type.equalsIgnoreCase("erwachsener")) { + ausweis = new Ausweis("K"); + benutzer = new Erwachsener(ausweis,name,alter,admin); + } + else if (type.equalsIgnoreCase("Mitarbeiter")) { + ausweis = new Ausweis("A"); + benutzer = new Erwachsener(ausweis,name,alter,admin); + } + else + throw new FalscheEingabeException("Falsche Eingabe"); + } else throw new FalscheEingabeException("Falsche Eingabe"); return benutzer; - } } diff --git a/Bibliotheksverwaltungssystem/src/domain/UserRegistieren/RegistrierenTest.java b/Bibliotheksverwaltungssystem/src/domain/UserRegistieren/RegistrierenTest.java index c86ac23..fc02498 100644 --- a/Bibliotheksverwaltungssystem/src/domain/UserRegistieren/RegistrierenTest.java +++ b/Bibliotheksverwaltungssystem/src/domain/UserRegistieren/RegistrierenTest.java @@ -3,15 +3,14 @@ package domain.UserRegistieren; import static org.junit.jupiter.api.Assertions.*; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; -import domain.Benutzer.Ausweis; import domain.Benutzer.Benutzer; -import domain.Benutzer.Kunde; +import domain.Benutzer.Erwachsener; import domain.Benutzer.Mitarbeiter; +import domain.Benutzer.Studenten; import domain.ExceptionsKlassen.FalscheEingabeException; -import domain.Medium.Buch; -import domain.Medium.Mediumverwalter; import domain.fassade.BibSystem; class RegistrierenTest { @@ -26,13 +25,18 @@ class RegistrierenTest { void testKunde() throws FalscheEingabeException { Benutzer benutzer = Registieren.userRegistrieren("obai", "student", 15, "nein"); - // True, da Kunde ist - assertTrue(benutzer instanceof Kunde); + // True ist + assertTrue(benutzer instanceof Studenten); String bibKartenNummer = "K1000"; assertTrue(benutzer.getBibAusweis().getKartenNummer().equalsIgnoreCase(bibKartenNummer)); + + + Benutzer erwachsener = Registieren.userRegistrieren("obai", "erwachsener", 15, "nein"); + // True + assertTrue(erwachsener instanceof Erwachsener); } - @Test + @Disabled void testMitarbeiter() throws FalscheEingabeException { Benutzer benutzer = Registieren.userRegistrieren("obai", "mitarbeiter", 15, "ja"); diff --git a/Bibliotheksverwaltungssystem/src/domain/fassade/BibSystem.java b/Bibliotheksverwaltungssystem/src/domain/fassade/BibSystem.java index b9109ae..1e9309b 100644 --- a/Bibliotheksverwaltungssystem/src/domain/fassade/BibSystem.java +++ b/Bibliotheksverwaltungssystem/src/domain/fassade/BibSystem.java @@ -21,7 +21,7 @@ public class BibSystem { this.medien = new HashMap<>(); this.ausleiheSystem = new AusleiheSystem(medien); this.ausleihe = new ArrayList<>(); - bibAdmin = new Mitarbeiter(new Ausweis("A"),"XY Müller",20,false); + this.bibAdmin = new Mitarbeiter(new Ausweis("A"),"Xy Müller",20,false); mediumsAufladen(); } @@ -68,15 +68,6 @@ public class BibSystem { return treffer; } - public ArrayList ausgeliehenGegenstände(String bibKartennummer) throws BenutzerNichtGefundenException{ - Benutzer bibUser = findeBenutzer(bibKartennummer); - ArrayList treffer = new ArrayList<>(); - for (Ausleihe ausleihe:bibUser.getAusgeliehenenMedien()) - treffer.add(ausleihe.toString()); - - return treffer; - - } /* * Aufgaben des Leihsystems: @@ -106,16 +97,35 @@ public class BibSystem { Benutzer benutzer = findeBenutzer(bibKartennummer); return ausleiheSystem.medienVerlängern(benutzer,eindeutigeKennung); } + + // Admin meldet sich an + public boolean adminAnmelden(String bibKartennummerAdmin){ + this.bibAdmin.anmelden(); + return this.bibAdmin.isAngemeldet(); + } - // gebühren Bezahlen - public boolean gebührenBezahlen(double betrag, String bibKartennummer) throws BenutzerNichtGefundenException { + + // aktuelle Gebühren der Benutzer + public double getgbührenBenutzer(String bibKartennummer) throws BenutzerNichtGefundenException { Benutzer benutzer = findeBenutzer(bibKartennummer); - double userBetrag = benutzer.getGebühren(); - if (betrag == userBetrag ) { - ((Mitarbeiter)bibAdmin).gebührVerbuchen(benutzer); - return true; - } - return false; + return benutzer.getGebühren(); + } + + // akteulle ausgelihene Mediums der Benutzer + public ArrayList ausgeliehenGegenstände(String bibKartennummer) throws BenutzerNichtGefundenException { + Benutzer bibUser = findeBenutzer(bibKartennummer); + ArrayList treffer = new ArrayList<>(); + for (Ausleihe ausleihe : bibUser.getAusgeliehenenMedien()) + treffer.add(ausleihe.toString()); + + return treffer; + + } + + public double gebührenVerbuchen(String bibKartennummer) throws BenutzerNichtGefundenException { + Benutzer bibUser = findeBenutzer(bibKartennummer); + ((Mitarbeiter)this.bibAdmin).gebührVerbuchen(bibUser); + return bibUser.getGebühren(); } // Mediums Rückgabe @@ -123,6 +133,7 @@ public class BibSystem { return ausleiheSystem.mediumRückgabe(ausleihe, eindeutigeKennung); } + // Simuliere Datum public double datumÄndern(String eindeutigeKennung,String ausleiheBeginn, String ausleiheEnde,String datum) throws MediumNichtGefundenException { return ausleiheSystem.SimulieremediumRückgabe(ausleihe, eindeutigeKennung, ausleiheBeginn, ausleiheEnde, datum); } @@ -193,10 +204,12 @@ public class BibSystem { } private boolean checkIfUserImSystemAngemeldetIst(String bibKartenNummer) { - return alleBibBenutzer.stream().anyMatch(user -> user.isAngemeldet()); + return alleBibBenutzer.stream() + .filter(b -> b.getBibAusweis().getKartenNummer().equalsIgnoreCase(bibKartenNummer)) + .anyMatch(user -> user.isAngemeldet()); } - private Benutzer findeBenutzer(String bibKartenNummer) throws BenutzerNichtGefundenException { + public Benutzer findeBenutzer(String bibKartenNummer) throws BenutzerNichtGefundenException { return alleBibBenutzer.stream() .filter(k -> k.getBibAusweis().getKartenNummer().equalsIgnoreCase(bibKartenNummer)).findFirst() .orElseThrow(() -> new BenutzerNichtGefundenException( diff --git a/Bibliotheksverwaltungssystem/src/domain/fassade/GebührenTest.java b/Bibliotheksverwaltungssystem/src/domain/fassade/GebührenTest.java index ec9b03e..4826d96 100644 --- a/Bibliotheksverwaltungssystem/src/domain/fassade/GebührenTest.java +++ b/Bibliotheksverwaltungssystem/src/domain/fassade/GebührenTest.java @@ -6,6 +6,7 @@ import static org.junit.jupiter.api.Assertions.*; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import domain.Benutzer.Benutzer; import domain.ExceptionsKlassen.BenutzerNichtGefundenException; import domain.ExceptionsKlassen.FalscheEingabeException; @@ -22,10 +23,15 @@ class GebührenTest { void testGebühren() throws Exception { fassade.userRegistrieren("obai", "schüler", 15, "nein"); fassade.userAnmelden("K1001"); + Benutzer user = fassade.findeBenutzer("K1001"); double gebühren = fassade.jahresGebührenBerechnen("K1001", "2026-11-16"); assertEquals(50.0, gebühren); + assertTrue (user.getGebühren() == gebühren); - + assertTrue(fassade.adminAnmelden("A1000")); + assertTrue(fassade.getgbührenBenutzer("K1001") == 50.0); + fassade.gebührenVerbuchen("K1001"); + assertTrue (user.getGebühren() == 0.0); } } diff --git a/Bibliotheksverwaltungssystem/src/tui/Tui.java b/Bibliotheksverwaltungssystem/src/tui/Tui.java index db8c37f..1b2c73f 100644 --- a/Bibliotheksverwaltungssystem/src/tui/Tui.java +++ b/Bibliotheksverwaltungssystem/src/tui/Tui.java @@ -59,6 +59,9 @@ public class Tui { case "8": verbucheGebührenProzess(); break; + case "9": + datumÄndern(); + break; case "0": programmIstAktiv = false; System.out.println("Programm beendet."); @@ -82,6 +85,7 @@ public class Tui { System.out.println("6. Ausgeliehene Gegenstände anzeigen"); System.out.println("7. Leihfrist verlängern"); System.out.println("8. Gebühren verbuchen (Admin)"); + System.out.println("9. Datum ändern"); System.out.println("0. Programm beenden"); } @@ -223,17 +227,80 @@ public class Tui { private void verbucheGebührenProzess() { System.out.println("<< Gebühren verbuchen >>"); - System.out.print("BibKartennummer des Nutzers: "); + System.out.print("BibKartennummer des Admins: "); String bibKartennummer = eingabe.nextLine(); - System.out.println("Geben Sie bitte den Betrag: "); - double betrag = eingabe.nextInt(); - + try { - if (fassade.gebührenBezahlen(betrag,bibKartennummer)) - System.out.println("Gebühren erfolgreich verbucht."); + if (fassade.adminAnmelden(bibKartennummer)) { + System.out.println("Erfolgreich Angemeldt"); + System.out.println("Welche Aktion: "); + System.out.println("1.Betrag verbuchen"); + System.out.println("2.ausgeliehene Mediums anzeigen"); + System.out.println("3.aktuelles Betrag anzeigen"); + System.out.print(">"); + String auswahl = eingabe.nextLine(); + String userID = eingabe.nextLine(); + + switch (auswahl) { + case "1": + System.out.println(fassade.gebührenVerbuchen(userID)); + break; + + case "2": + ArrayList treffer = fassade.ausgeliehenGegenstände(userID); + treffer.forEach(System.out::println); + break; + + case "3": + System.out.println(fassade.getgbührenBenutzer(userID)); + break; + default: + System.out.println("Falsche Eingabe"); + } + } + } catch (Exception e) { System.out.println("Fehler: " + e.getMessage()); } } + + // Aktion 9 + private void datumÄndern() { + System.out.println("1.Jahresgebühren"); + System.out.println("2.Ausleihefristen"); + String auswahl = eingabe.nextLine(); + + switch (auswahl) { + case "1": + try { + System.out.println("Bibkartennummer:"); + String bibkartennummer = eingabe.nextLine(); + System.out.println("Datum: "); + String datum = eingabe.nextLine(); + fassade.jahresGebührenBerechnen(bibkartennummer, datum); + } catch (BenutzerNichtGefundenException e) { + e.printStackTrace(); + } + break; + case "2": + + try { + System.out.println("Bibkartennummer:"); + String bibkartennummer = eingabe.nextLine(); + System.out.println("AusleihBeginn: "); + String ausleihbeginn = eingabe.nextLine(); + System.out.println("AusleihEnde: "); + String ausleihEnde = eingabe.nextLine(); + System.out.println("Datum vom heute: "); + String heutigesDatum = eingabe.nextLine(); + System.out.println("Medium ID: "); + String mediumID = eingabe.nextLine(); + fassade.datumÄndern(mediumID, ausleihEnde, ausleihEnde, heutigesDatum); + } catch (MediumNichtGefundenException e) { + System.out.println("Fehler: " + e.getMessage()); + } + + } + } }