Verbesserung der Kohäsion und der Funktionalität durch Lambdas
parent
17a7d60487
commit
54bc0bf9f8
|
@ -1,4 +1,44 @@
|
||||||
package Bibliothek;
|
package Bibliothek;
|
||||||
|
|
||||||
public class Admin {
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
|
public class Admin extends User {
|
||||||
|
|
||||||
|
public Admin(String id, String name) {
|
||||||
|
super(id, name);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void gebuehrenVerbuchen(Kunde kunde, double betrag) {
|
||||||
|
if (kunde == null) {
|
||||||
|
System.out.println("Kunde nicht gefunden.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Consumer<Double> verbuchen = b -> {
|
||||||
|
if (b > kunde.getGebuehren()) {
|
||||||
|
System.out.println("Zahlung von " + b + "€ ist höher als die offenen Gebühren (" + kunde.getGebuehren() + "€).");
|
||||||
|
} else {
|
||||||
|
kunde.gebuehrenErhoehen(-b); // Gebühren reduzieren
|
||||||
|
System.out.println("Admin " + name + " hat eine Zahlung von " + b + "€ für Kunde '" + kunde.getName() + "' verbucht.");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
verbuchen.accept(betrag);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ausgelieheneMedienAnzeigen(Kunde kunde) {
|
||||||
|
if (kunde == null) {
|
||||||
|
System.out.println("Kunde nicht gefunden.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
System.out.println("Ausgeliehene Medien von " + kunde.getName() + ":");
|
||||||
|
kunde.getAusgelieheneMedien().forEach(medien ->
|
||||||
|
System.out.println("- " + medien.getTitel() + " (Rückgabedatum: " + medien.getRueckgabedat() + ")")
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void rolleAnzeigen() {
|
||||||
|
System.out.println("Admin: " + name);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,67 @@
|
||||||
package Bibliothek;
|
package Bibliothek;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
import java.util.function.Predicate;
|
||||||
|
|
||||||
public class Bibliotheksverwaltung {
|
public class Bibliotheksverwaltung {
|
||||||
|
private Map<String, Medien> medienBestand;
|
||||||
|
private Map<String, Kunde> kundenListe;
|
||||||
|
private Map<String, Admin> adminListe;
|
||||||
|
|
||||||
|
public Bibliotheksverwaltung() {
|
||||||
|
medienBestand = new HashMap<>();
|
||||||
|
kundenListe = new HashMap<>();
|
||||||
|
adminListe = new HashMap<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void medienHinzufuegen(Medien medien) {
|
||||||
|
medienBestand.put(medien.getId(), medien);
|
||||||
|
System.out.println("Medium hinzugefügt: " + medien.getTitel());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void alleMedienAnzeigen() {
|
||||||
|
System.out.println("Medienbestand:");
|
||||||
|
medienBestand.values().forEach(m ->
|
||||||
|
System.out.println("- " + m.getDetails() +
|
||||||
|
(m.verfuegbar() ? " [Verfügbar]" : " [Ausgeliehen]"))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void medienDurchsuchen(String suchbegriff) {
|
||||||
|
System.out.println("Suchergebnisse für '" + suchbegriff + "':");
|
||||||
|
medienBestand.values().stream()
|
||||||
|
.filter(m -> m.getTitel().toLowerCase().contains(suchbegriff.toLowerCase()))
|
||||||
|
.forEach(m -> System.out.println("- " + m.getDetails()));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void medienFiltern(Predicate<Medien> kriterium) {
|
||||||
|
System.out.println("Gefilterte Medien:");
|
||||||
|
medienBestand.values().stream()
|
||||||
|
.filter(kriterium)
|
||||||
|
.forEach(m -> System.out.println("- " + m.getDetails()));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void medienAusleihen(String medienId, String kundenId) {
|
||||||
|
Optional.ofNullable(medienBestand.get(medienId))
|
||||||
|
.ifPresentOrElse(
|
||||||
|
medien -> Optional.ofNullable(kundenListe.get(kundenId))
|
||||||
|
.ifPresentOrElse(
|
||||||
|
kunde -> kunde.medienAusleihen(medien),
|
||||||
|
() -> System.out.println("Kunde nicht gefunden.")
|
||||||
|
),
|
||||||
|
() -> System.out.println("Medium nicht gefunden.")
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void medienZurueckgeben(String medienId, String kundenId) {
|
||||||
|
Optional.ofNullable(medienBestand.get(medienId))
|
||||||
|
.ifPresentOrElse(
|
||||||
|
medien -> Optional.ofNullable(kundenListe.get(kundenId))
|
||||||
|
.ifPresentOrElse(
|
||||||
|
kunde -> kunde.medienZurueckgeben(medien),
|
||||||
|
() -> System.out.println("Kunde nicht gefunden.")
|
||||||
|
),
|
||||||
|
() -> System.out.println("Medium nicht gefunden.")
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,7 @@ package Bibliothek;
|
||||||
|
|
||||||
public class Brettspiel extends Medien {
|
public class Brettspiel extends Medien {
|
||||||
private int spieleranzahl;
|
private int spieleranzahl;
|
||||||
private int spieldauer; // in Minuten
|
private int spieldauer;
|
||||||
|
|
||||||
public Brettspiel(String id, String titel, int erscheinungsjahr, int spieleranzahl, int spieldauer) {
|
public Brettspiel(String id, String titel, int erscheinungsjahr, int spieleranzahl, int spieldauer) {
|
||||||
super(id, titel, erscheinungsjahr);
|
super(id, titel, erscheinungsjahr);
|
||||||
|
@ -11,12 +11,17 @@ public class Brettspiel extends Medien {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getAusleihdauer() { return 3; } // 3 Wochen für Brettspiele
|
public int getAusleihdauer() {
|
||||||
|
return 3;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getMaxVerlaengerungen() { return 2; } // Brettspiele können 2-mal verlängert werden
|
public int getMaxVerlaengerungen() {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getDetails() {
|
public String getDetails() {
|
||||||
return "Brettspiel: " + titel + ", Spieleranzahl: " + spieleranzahl + ", Spieldauer: " + spieldauer + " Minuten";
|
return "Brettspiel: " + titel + " (" + erscheinungsjahr + "), Spieleranzahl: " + spieleranzahl + ", Spieldauer: " + spieldauer + " Minuten";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,12 +11,17 @@ public class Buch extends Medien {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getAusleihdauer() { return 4; } // 4 Wochen
|
public int getAusleihdauer() {
|
||||||
|
return 4;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getMaxVerlaengerungen() { return 3; }
|
public int getMaxVerlaengerungen() {
|
||||||
|
return 3;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getDetails() {
|
public String getDetails() {
|
||||||
return "Buch: " + titel + " von " + autor + " (" + erscheinungsjahr + "), Seiten: " + seitenanzahl;
|
return "Buch: " + titel + " von " + autor + " (" + erscheinungsjahr + "), " + seitenanzahl + " Seiten";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,21 +2,26 @@ package Bibliothek;
|
||||||
|
|
||||||
public class CD extends Medien {
|
public class CD extends Medien {
|
||||||
private String kuenstler;
|
private String kuenstler;
|
||||||
private int anzahlTitel;
|
private int tracks;
|
||||||
|
|
||||||
public CD(String id, String titel, int erscheinungsjahr, String kuenstler, int anzahlTitel) {
|
public CD(String id, String titel, int erscheinungsjahr, String kuenstler, int tracks) {
|
||||||
super(id, titel, erscheinungsjahr);
|
super(id, titel, erscheinungsjahr);
|
||||||
this.kuenstler = kuenstler;
|
this.kuenstler = kuenstler;
|
||||||
this.anzahlTitel = anzahlTitel;
|
this.tracks = tracks;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getAusleihdauer() { return 2; } // 2 Wochen für CDs
|
public int getAusleihdauer() {
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getMaxVerlaengerungen() { return 2; } // CDs können maximal 2-mal verlängert werden
|
public int getMaxVerlaengerungen() {
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getDetails() {
|
public String getDetails() {
|
||||||
return "CD: " + titel + " von " + kuenstler + " (" + erscheinungsjahr + "), Titelanzahl: " + anzahlTitel;
|
return "CD: " + titel + " von " + kuenstler + " (" + erscheinungsjahr + "), " + tracks + " Tracks";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,7 @@ package Bibliothek;
|
||||||
|
|
||||||
public class DVD extends Medien {
|
public class DVD extends Medien {
|
||||||
private String regisseur;
|
private String regisseur;
|
||||||
private int spieldauer; // Spieldauer in Minuten
|
private int spieldauer;
|
||||||
|
|
||||||
public DVD(String id, String titel, int erscheinungsjahr, String regisseur, int spieldauer) {
|
public DVD(String id, String titel, int erscheinungsjahr, String regisseur, int spieldauer) {
|
||||||
super(id, titel, erscheinungsjahr);
|
super(id, titel, erscheinungsjahr);
|
||||||
|
@ -11,9 +11,14 @@ public class DVD extends Medien {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getAusleihdauer() { return 1; } // 1 Woche für DVDs
|
public int getAusleihdauer() {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getMaxVerlaengerungen() { return 1; } // DVDs können nur einmal verlängert werden
|
public int getMaxVerlaengerungen() {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getDetails() {
|
public String getDetails() {
|
||||||
|
|
|
@ -0,0 +1,61 @@
|
||||||
|
package Bibliothek;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
|
public class Kunde extends User {
|
||||||
|
private boolean istStudent; // True, wenn Kunde ein Student ist
|
||||||
|
private double gebuehren; // Offene Gebühren
|
||||||
|
|
||||||
|
public Kunde(String id, String name, boolean istStudent) {
|
||||||
|
super(id, name);
|
||||||
|
this.istStudent = istStudent;
|
||||||
|
this.gebuehren = 0.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean istStudent() {
|
||||||
|
return istStudent;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getGebuehren() {
|
||||||
|
return gebuehren;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void gebuehrenErhoehen(double betrag) {
|
||||||
|
this.gebuehren += betrag;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void berechneGebuehren() {
|
||||||
|
// Gebühren berechnen basierend auf verspäteter Rückgabe
|
||||||
|
ausgelieheneMedien.forEach(medien -> {
|
||||||
|
if (medien.getRueckgabedat().isBefore(java.time.LocalDate.now())) {
|
||||||
|
int ueberfaelligeTage = java.time.Period.between(
|
||||||
|
medien.getRueckgabedat(),
|
||||||
|
java.time.LocalDate.now()
|
||||||
|
).getDays();
|
||||||
|
|
||||||
|
double tagessatz = istStudent ? 0.5 : 1.0; // Studenten zahlen 50% weniger
|
||||||
|
gebuehren += ueberfaelligeTage <= 7
|
||||||
|
? ueberfaelligeTage * tagessatz
|
||||||
|
: (7 * tagessatz) + ((ueberfaelligeTage - 7) * 2);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public void medienVerlaengern(Medien medien, int aktuelleVerlaengerungen) {
|
||||||
|
Consumer<Medien> verlaengerung = m -> {
|
||||||
|
if (ausgelieheneMedien.contains(m) && m.verlaengern(aktuelleVerlaengerungen)) {
|
||||||
|
System.out.println("Medium verlängert: " + m.getTitel());
|
||||||
|
} else {
|
||||||
|
System.out.println("Verlängerung nicht möglich.");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
verlaengerung.accept(medien);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void rolleAnzeigen() {
|
||||||
|
System.out.println("Kunde: " + name + (istStudent ? " (Student)" : " (Erwachsener)"));
|
||||||
|
}
|
||||||
|
}
|
|
@ -6,14 +6,13 @@ public abstract class Medien {
|
||||||
protected String titel;
|
protected String titel;
|
||||||
protected String id;
|
protected String id;
|
||||||
protected int erscheinungsjahr;
|
protected int erscheinungsjahr;
|
||||||
protected boolean verfuegbar;
|
protected boolean verfuegbar = true;
|
||||||
protected LocalDate rueckgabedat;
|
protected LocalDate rueckgabedat;
|
||||||
|
|
||||||
public Medien(String titel, String id, int erscheinungsjahr) {
|
public Medien(String titel, String id, int erscheinungsjahr) {
|
||||||
this.titel = titel;
|
this.titel = titel;
|
||||||
this.id = id;
|
this.id = id;
|
||||||
this.erscheinungsjahr = erscheinungsjahr;
|
this.erscheinungsjahr = erscheinungsjahr;
|
||||||
this.verfuegbar = true;
|
|
||||||
}
|
}
|
||||||
public String getTitel() {
|
public String getTitel() {
|
||||||
return titel;
|
return titel;
|
||||||
|
@ -27,6 +26,14 @@ public abstract class Medien {
|
||||||
public void setId(String id) {
|
public void setId(String id) {
|
||||||
this.id = id;
|
this.id = id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public LocalDate getRueckgabedat() {
|
||||||
|
return rueckgabedat;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean verfuegbar(){
|
||||||
|
return verfuegbar;
|
||||||
|
}
|
||||||
public int getErscheinungsjahr() {
|
public int getErscheinungsjahr() {
|
||||||
return erscheinungsjahr;
|
return erscheinungsjahr;
|
||||||
}
|
}
|
||||||
|
@ -47,13 +54,22 @@ public abstract class Medien {
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean verlaengern(int aktuelleVerlaengerungen) {
|
public boolean verlaengern(int aktuelleVerlaengerungen) {
|
||||||
if (aktuelleVerlaengerungen < getMaxVerlaengerungen()) {
|
if (verfuegbar) {
|
||||||
rueckgabedat = rueckgabedat.plusWeeks(getAusleihdauer());
|
System.out.println("Medium '" + titel + "' ist verfügbar und kann nicht verlängert werden.");
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
if (rueckgabedat == null) {
|
||||||
|
System.out.println("Medium '" + titel + "' hat kein Rückgabedatum. Verlängerung nicht möglich.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (aktuelleVerlaengerungen >= getMaxVerlaengerungen()) {
|
||||||
|
System.out.println("Medium '" + titel + "' kann nicht weiter verlängert werden. Maximale Verlängerungen erreicht.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
rueckgabedat = rueckgabedat.plusWeeks(getAusleihdauer());
|
||||||
|
System.out.println("Medium '" + titel + "' wurde verlängert. Neues Rückgabedatum: " + rueckgabedat);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
public void zurueckgeben() {
|
public void zurueckgeben() {
|
||||||
verfuegbar = true;
|
verfuegbar = true;
|
||||||
rueckgabedat = null;
|
rueckgabedat = null;
|
||||||
|
|
|
@ -1,4 +1,50 @@
|
||||||
package Bibliothek;
|
package Bibliothek;
|
||||||
|
|
||||||
public class User {
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public abstract class User {
|
||||||
|
protected String id;
|
||||||
|
protected String name;
|
||||||
|
protected List<Medien> ausgelieheneMedien;
|
||||||
|
|
||||||
|
public User(String id, String name) {
|
||||||
|
this.id = id;
|
||||||
|
this.name = name;
|
||||||
|
this.ausgelieheneMedien = new ArrayList<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Medien> getAusgelieheneMedien() {
|
||||||
|
return ausgelieheneMedien;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void medienAusleihen(Medien medien) {
|
||||||
|
if (medien.verfuegbar()) {
|
||||||
|
medien.ausleihen();
|
||||||
|
ausgelieheneMedien.add(medien);
|
||||||
|
System.out.println(name + " hat '" + medien.getTitel() + "' ausgeliehen.");
|
||||||
|
} else {
|
||||||
|
System.out.println("'" + medien.getTitel() + "' ist nicht verfügbar.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void medienZurueckgeben(Medien medien) {
|
||||||
|
if (ausgelieheneMedien.contains(medien)) {
|
||||||
|
medien.zurueckgeben();
|
||||||
|
ausgelieheneMedien.remove(medien);
|
||||||
|
System.out.println(name + " hat '" + medien.getTitel() + "' zurückgegeben.");
|
||||||
|
} else {
|
||||||
|
System.out.println("'" + medien.getTitel() + "' wurde nicht von " + name + " ausgeliehen.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract void rolleAnzeigen();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,22 +1,27 @@
|
||||||
package Bibliothek;
|
package Bibliothek;
|
||||||
|
|
||||||
public class Videospiel extends Medien {
|
public class Videospiel extends Medien {
|
||||||
private String plattform; // z.B. PC, PlayStation, Xbox
|
private String plattform;
|
||||||
private String genre;
|
private String entwickler;
|
||||||
|
|
||||||
public Videospiel(String id, String titel, int erscheinungsjahr, String plattform, String genre) {
|
public Videospiel(String id, String titel, int erscheinungsjahr, String plattform, String entwickler) {
|
||||||
super(id, titel, erscheinungsjahr);
|
super(id, titel, erscheinungsjahr);
|
||||||
this.plattform = plattform;
|
this.plattform = plattform;
|
||||||
this.genre = genre;
|
this.entwickler = entwickler;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getAusleihdauer() { return 2; } // 2 Wochen für Videospiele
|
public int getAusleihdauer() {
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getMaxVerlaengerungen() { return 1; } // Videospiele können nur einmal verlängert werden
|
public int getMaxVerlaengerungen() {
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getDetails() {
|
public String getDetails() {
|
||||||
return "Videospiel: " + titel + " (" + plattform + ", Genre: " + genre + ", " + erscheinungsjahr + ")";
|
return "Videospiel: " + titel + " (" + erscheinungsjahr + "), Plattform: " + plattform + ", Entwickler: " + entwickler;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue