Code-Verbesserung nach dem Feedback

main
obai 2024-11-20 12:01:33 +01:00
parent eda91e849a
commit de0b00d4ae
39 changed files with 206 additions and 291 deletions

View File

@ -0,0 +1,54 @@
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 -> t.getValue().getMedium())
.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 -> t.getValue().getMedium())
.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 -> t.getValue().getMedium())
.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 -> t.getValue().getMedium())
.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 -> t.getValue().getMedium())
.map(t -> ((Videospiel)t))
.map(t -> "Eindutige Kennung= " + t.toString())
.collect(Collectors.toCollection(ArrayList::new));
default:
return null;
}
}
kann man das Code igrendwoie zusammenfassung??
Antwort:
a, dein Code kann stark vereinfacht und zusammengefasst werden, indem du redundante Codeblöcke vermeidest. Alle case-Blöcke folgen demselben Muster. Du kannst die Class-Objekte (wie Buch.class, Brettspiel.class, etc.) als Parameter verwenden, um den Vergleich dynamisch zu gestalten.
Hier ist die überarbeitete und zusammengefasste Version:
Zusammenfassung des Codes

View File

@ -1,26 +0,0 @@
package domain.AusleiheSystem;
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import domain.fassade.BibSystem;
class AusleiheJTest {
private BibSystem bib;
@BeforeEach
void setUp() throws Exception {
this.bib = new BibSystem();
}
@Test
void test() throws Exception {
bib.userRegistrieren("obai", "student", 15, "nein");
bib.userAnmelden("K1000");
bib.mediumAusleihen("K1000", "B001");
}
}

View File

@ -1,14 +0,0 @@
package domain.Benutzer;
public class Studenten extends Benutzer {
public Studenten(Ausweis bibAusweis, String name, int alter, boolean istStudent) {
super(bibAusweis, name, alter, istStudent);
}
@Override
public double getJahresgebühren() {
return 25.0;
}
}

View File

@ -1,88 +0,0 @@
package domain.Bibliothekskatalog;
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
import java.util.*;
import java.util.stream.Collectors;
import domain.AusleiheSystem.Ausleihe;
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 -> t.getValue().getMedium())
.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 -> t.getValue().getMedium())
.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 -> t.getValue().getMedium())
.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 -> t.getValue().getMedium())
.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 -> t.getValue().getMedium())
.map(t -> ((Videospiel)t))
.map(t -> "Eindutige Kennung= " + t.toString())
.collect(Collectors.toCollection(ArrayList::new));
default:
return null;
}
}
public ArrayList<String> baldVerfügbareMedien(ArrayList<Ausleihe> ausleihe) {
LocalDate heutigesDatum = LocalDate.now();
return ausleihe.stream()
.filter(t -> t.getAusleiheEnde().until(heutigesDatum, ChronoUnit.DAYS) <= 3)
.map(t -> t.getMediumverwalter())
.map(t -> t.toString())
.collect(Collectors.toCollection(ArrayList::new));
}
}

View File

@ -1,66 +0,0 @@
package domain.Testate;
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.fassade.BibSystem;
class AusleihenTest {
private BibSystem bib;
@BeforeEach
void setUp() throws Exception {
this.bib = new BibSystem();
}
@Disabled
void testAusleiheFris() throws Exception {
bib.userRegistrieren("obai", "student", 15, "nein");
bib.userAnmelden("K1001");
double gerbühren = bib.mediumAusleihen("K1001", "B001");
assertEquals(0.0,gerbühren);
// das ist ein Test für das Testate:
String ausleihBeginn = "2024-11-01";
String ausleihEnde = "2024-12-01";
String heutigesDatum = "2024-12-05";
double überfälligeGebühren = bib.datumÄndern("B001", ausleihBeginn, ausleihEnde, heutigesDatum);
assertEquals(4.0,überfälligeGebühren);
// Gebühren bezahlen (Admin)
assertTrue(bib.adminAnmelden("A1000"));
assertEquals(4.0,bib.getgbührenBenutzer("K1001"));
assertTrue(bib.gebührenVerbuchen("K1001"));
}
@Test
void testMitJahresGebühren() throws Exception {
bib.userRegistrieren("obai", "student", 15, "nein");
bib.userAnmelden("K1001");
double gerbühren = bib.mediumAusleihen("K1001", "B001");
assertEquals(0.0,gerbühren);
// das ist eine Test für das Testate:
String ausleihBeginn = "2024-11-01";
String ausleihEnde = "2024-12-01";
String heutigesDatum = "2024-12-05";
double überfälligeGebühren = bib.datumÄndern("B001", ausleihBeginn, ausleihEnde, heutigesDatum);
assertEquals(4.0,überfälligeGebühren);
// setze noch jahresGebühren dazu
double jahreGebühren = bib.jahresGebührenBerechnen("K1001", "2025-11-19");
assertEquals(29.0,jahreGebühren);
// Gebühren bezahlen (Admin)
assertTrue(bib.adminAnmelden("A1000"));
assertEquals(29.0,bib.getgbührenBenutzer("K1001"));
assertTrue(bib.gebührenVerbuchen("K1001"));
}
}

View File

@ -1,29 +0,0 @@
package domain.Testate;
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.Test;
import domain.Benutzer.*;
import domain.ExceptionsKlassen.FalscheEingabeException;
import domain.UserRegistieren.Registieren;
class RegistrierenTest {
@Test
void testKunde() throws FalscheEingabeException {
Benutzer student = Registieren.userRegistrieren("Müller", "student", 15, "nein");
// True
assertTrue(student instanceof Studenten);
Benutzer erwachsener = Registieren.userRegistrieren("Schneider", "erwachsener", 15, "nein");
// True
assertTrue(erwachsener instanceof Erwachsener);
Benutzer mitarbeiter = Registieren.userRegistrieren("Schuchmacher", "mitarbeiter", 15, "ja");
assertTrue(mitarbeiter instanceof Mitarbeiter);
}
}

View File

@ -1,10 +1,10 @@
package domain.AusleiheSystem;
package domain.ausleihSystem;
import java.time.LocalDate;
import java.util.Date;
import domain.Benutzer.Benutzer;
import domain.Medium.Mediumverwalter;
import domain.benutzer.Benutzer;
import domain.medium.Mediumverwalter;
public class Ausleihe {

View File

@ -1,4 +1,4 @@
package domain.Testate;
package domain.ausleihSystem;
import static org.junit.jupiter.api.Assertions.*;
@ -7,7 +7,7 @@ import org.junit.jupiter.api.Test;
import domain.fassade.BibSystem;
class MediumsVerlängernTest {
class AusleiheJTest {
private BibSystem bib;
@ -20,8 +20,9 @@ class MediumsVerlängernTest {
void test() throws Exception {
bib.userRegistrieren("obai", "student", 15, "nein");
bib.userAnmelden("K1001");
bib.mediumAusleihen("K1001", "B001");
assertTrue(bib.medienVerlängern("B001", "K1001"));
double userGebühren = bib.mediumAusleihen("K1001", "B001");
assertEquals(0.0,userGebühren);
}
}

View File

@ -1,12 +1,12 @@
package domain.AusleiheSystem;
package domain.ausleihSystem;
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
import java.util.*;
import domain.Benutzer.Benutzer;
import domain.ExceptionsKlassen.MediumNichtGefundenException;
import domain.Medium.*;
import domain.benutzer.Benutzer;
import domain.exceptionsKlassen.MediumNichtGefundenException;
import domain.medium.*;
public class AusleiheSystem {

View File

@ -1,4 +1,4 @@
package domain.AusleiheSystem;
package domain.ausleihSystem;
import static org.junit.jupiter.api.Assertions.assertEquals;
@ -9,7 +9,7 @@ import java.util.ArrayList;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import domain.Benutzer.Benutzer;
import domain.benutzer.Benutzer;
import domain.fassade.BibSystem;
class MedienRückgabeTest {

View File

@ -1,4 +1,4 @@
package domain.AusleiheSystem;
package domain.ausleihSystem;
import static org.junit.jupiter.api.Assertions.*;

View File

@ -1,4 +1,4 @@
package domain.Benutzer;
package domain.benutzer;
public class Ausweis {
private String kartennummer;

View File

@ -1,8 +1,9 @@
package domain.Benutzer;
package domain.benutzer;
import java.time.LocalDate;
import java.util.ArrayList;
import domain.AusleiheSystem.Ausleihe;
import domain.ausleihSystem.Ausleihe;
public abstract class Benutzer {

View File

@ -1,4 +1,4 @@
package domain.Benutzer;
package domain.benutzer;
public class Erwachsener extends Benutzer {

View File

@ -1,4 +1,4 @@
package domain.Benutzer;
package domain.benutzer;
public class Mitarbeiter extends Benutzer {

View File

@ -0,0 +1,14 @@
package domain.benutzer;
public class Student extends Benutzer {
public Student(Ausweis bibAusweis, String name, int alter, boolean istStudent) {
super(bibAusweis, name, alter, istStudent);
}
@Override
public double getJahresgebühren() {
return 25.0;
}
}

View File

@ -1,4 +1,4 @@
package domain.Bibliothekskatalog;
package domain.bibliothekskatalog;
import static org.junit.jupiter.api.Assertions.*;
@ -8,13 +8,13 @@ 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.benutzer.Benutzer;
import domain.exceptionsKlassen.BenutzerNichtAngemeldetException;
import domain.exceptionsKlassen.BenutzerNichtGefundenException;
import domain.exceptionsKlassen.FalscheEingabeException;
import domain.exceptionsKlassen.MediumNichtGefundenException;
import domain.fassade.BibSystem;
import domain.fassade.Registieren;
class MedienSuchenTest {
@ -35,14 +35,14 @@ private BibSystem fassade;
}
@Disabled
@Test
void testMedienSuchenNachMedienart()throws MediumNichtGefundenException, FalscheEingabeException, BenutzerNichtAngemeldetException, BenutzerNichtGefundenException {
ArrayList<String> nichtAusgeliehen = fassade.mediumDurchsuchen("Videospiele", "K1001");
nichtAusgeliehen.forEach(System.out::println);
}
@Test
@Disabled
void testMedienSuchenNachausgeliehen()throws MediumNichtGefundenException, FalscheEingabeException, BenutzerNichtAngemeldetException, BenutzerNichtGefundenException {
ArrayList<String> nichtAusgeliehen = fassade.mediumDurchsuchen("ausgeliehen", "K1001");
nichtAusgeliehen.forEach(System.out::println);

View File

@ -0,0 +1,69 @@
package domain.bibliothekskatalog;
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
import java.util.*;
import java.util.stream.Collectors;
import domain.ausleihSystem.Ausleihe;
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) {
// Map zur Zuordnung von medienart zu Klassen
Map<String, Class<?>> medienKlassen = Map.of(
"Bücher", Buch.class,
"Brettspiele", Brettspiel.class,
"Dvds", Dvd.class,
"Cds", Cd.class,
"Videospiele", Videospiel.class
);
// Ermitteln der entsprechenden Klasse für die angegebene Medienart
Class<?> klasse = medienKlassen.get(medienart);
if (klasse == null) {
return null; // Ungültige Medienart
}
// Stream für die Filterung und Konvertierung
return medien.entrySet().stream()
.filter(t -> klasse.isInstance(t.getValue().getMedium())) // Filtert nach der Klasse
.map(t -> klasse.cast(t.getValue().getMedium())) // Castet das Medium zur richtigen Klasse
.map(t -> "Eindutige Kennung= " + t.toString()) // Konvertiert zu String
.collect(Collectors.toCollection(ArrayList::new)); // Sammeln als ArrayList
}
public ArrayList<String> baldVerfügbareMedien(ArrayList<Ausleihe> ausleihe) {
LocalDate heutigesDatum = LocalDate.now();
return ausleihe.stream()
.filter(t -> t.getAusleiheEnde().until(heutigesDatum, ChronoUnit.DAYS) <= 3)
.map(t -> t.getMediumverwalter())
.map(t -> t.toString())
.collect(Collectors.toCollection(ArrayList::new));
}
}

View File

@ -1,4 +1,4 @@
package domain.ExceptionsKlassen;
package domain.exceptionsKlassen;
public class BenutzerNichtAngemeldetException extends Exception {

View File

@ -1,4 +1,4 @@
package domain.ExceptionsKlassen;
package domain.exceptionsKlassen;
public class BenutzerNichtGefundenException extends Exception {

View File

@ -1,4 +1,4 @@
package domain.ExceptionsKlassen;
package domain.exceptionsKlassen;
public class FalscheEingabeException extends Exception {

View File

@ -1,4 +1,4 @@
package domain.ExceptionsKlassen;
package domain.exceptionsKlassen;
public class MediumNichtGefundenException extends Exception {

View File

@ -1,12 +1,12 @@
package domain.fassade;
import java.util.*;
import domain.AusleiheSystem.*;
import domain.Benutzer.*;
import domain.Bibliothekskatalog.Mediensuchen;
import domain.ExceptionsKlassen.*;
import domain.Medium.*;
import domain.UserRegistieren.Registieren;
import domain.ausleihSystem.*;
import domain.benutzer.*;
import domain.bibliothekskatalog.Mediensuchen;
import domain.exceptionsKlassen.*;
import domain.medium.*;
public class BibSystem {
private ArrayList<Benutzer> alleBibBenutzer;
@ -215,7 +215,7 @@ public class BibSystem {
Mediumverwalter buchIStNichtAusgeliehen = new Mediumverwalter(new Buch("BG001", "Javascript lenren", 2018, "Joshua Bloch"),true, 10, 28);
medien.put(buchIStNichtAusgeliehen.getMedium().getID(), buchIStNichtAusgeliehen);
Mediumverwalter Videospiel = new Mediumverwalter(new Videospiel("BG00122", "The Legend of Zelda: Breath of the Wild", 2017, "Nintendo Switch"),true, 2, 28);
Mediumverwalter Videospiel = new Mediumverwalter(new Videospiel("BG00122", "The Legend of Zelda: Breath of the Wild", 2017, "Nintendo Switch"),false, 2, 28);
medien.put(Videospiel.getMedium().getID(), Videospiel);
}

View File

@ -6,9 +6,9 @@ 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;
import domain.benutzer.Benutzer;
import domain.exceptionsKlassen.BenutzerNichtGefundenException;
import domain.exceptionsKlassen.FalscheEingabeException;
class GebührenTest {

View File

@ -1,7 +1,7 @@
package domain.UserRegistieren;
package domain.fassade;
import domain.Benutzer.*;
import domain.ExceptionsKlassen.FalscheEingabeException;
import domain.benutzer.*;
import domain.exceptionsKlassen.FalscheEingabeException;
public class Registieren {
@ -14,7 +14,7 @@ public class Registieren {
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);
benutzer = new Student(ausweis,name,alter,admin);
}
else if (type.equalsIgnoreCase("erwachsener")) {
ausweis = new Ausweis("K");

View File

@ -1,4 +1,4 @@
package domain.UserRegistieren;
package domain.fassade;
import static org.junit.jupiter.api.Assertions.*;
@ -6,12 +6,11 @@ import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import domain.Benutzer.Benutzer;
import domain.Benutzer.Erwachsener;
import domain.Benutzer.Mitarbeiter;
import domain.Benutzer.Studenten;
import domain.ExceptionsKlassen.FalscheEingabeException;
import domain.fassade.BibSystem;
import domain.benutzer.Benutzer;
import domain.benutzer.Erwachsener;
import domain.benutzer.Mitarbeiter;
import domain.benutzer.Student;
import domain.exceptionsKlassen.FalscheEingabeException;
class RegistrierenTest {
private BibSystem bib;
@ -26,7 +25,7 @@ class RegistrierenTest {
Benutzer benutzer = Registieren.userRegistrieren("obai", "student", 15, "nein");
// True ist
assertTrue(benutzer instanceof Studenten);
assertTrue(benutzer instanceof Student);
String bibKartenNummer = "K1000";
assertTrue(benutzer.getBibAusweis().getKartenNummer().equalsIgnoreCase(bibKartenNummer));

View File

@ -6,8 +6,8 @@ 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;
import domain.exceptionsKlassen.BenutzerNichtGefundenException;
import domain.exceptionsKlassen.FalscheEingabeException;
class UserAnmeldenTest {

View File

@ -1,4 +1,4 @@
package domain.Medium;
package domain.medium;
public class Brettspiel extends Medium {

View File

@ -1,4 +1,4 @@
package domain.Medium;
package domain.medium;
public class Buch extends Medium {

View File

@ -1,4 +1,4 @@
package domain.Medium;
package domain.medium;
import java.util.Date;

View File

@ -1,4 +1,4 @@
package domain.Medium;
package domain.medium;
public class Dvd extends Medium {

View File

@ -1,4 +1,4 @@
package domain.Medium;
package domain.medium;
public abstract class Medium {

View File

@ -1,4 +1,4 @@
package domain.Medium;
package domain.medium;
public class Mediumverwalter {

View File

@ -1,4 +1,4 @@
package domain.Medium;
package domain.medium;
import java.util.Date;

View File

@ -1,6 +1,6 @@
package main;
import domain.ExceptionsKlassen.*;
import domain.exceptionsKlassen.*;
import tui.Tui;
public class Main {

View File

@ -1,8 +1,8 @@
package MedienHinzüfugen;
package medienHinzüfugen;
import java.util.Scanner;
import domain.ExceptionsKlassen.FalscheEingabeException;
import domain.exceptionsKlassen.FalscheEingabeException;
import domain.fassade.BibSystem;
public class MedienHinzufügen {

View File

@ -3,9 +3,9 @@ package tui;
import java.util.ArrayList;
import java.util.Scanner;
import MedienHinzüfugen.MedienHinzufügen;
import domain.ExceptionsKlassen.*;
import domain.exceptionsKlassen.*;
import domain.fassade.BibSystem;
import medienHinzüfugen.MedienHinzufügen;
public class Tui {
private BibSystem fassade;