Compare commits

...

18 Commits

Author SHA1 Message Date
Leon Maximilian Löhle 8c43b4c97d formattierung und minimale anpassungen 2024-11-19 14:42:31 +01:00
Leon Maximilian Löhle 568dd0fd37 formattierung 2024-11-19 14:12:26 +01:00
Leon Maximilian Löhle fbe2ac8d84 Nun keine dangling Kommentare mehr 2024-11-19 14:11:15 +01:00
Leon Maximilian Löhle f587243209 Verlängerung korrigiert und auch mehr Kommentare eingefügt 2024-11-19 11:17:05 +01:00
Leon Maximilian Löhle 9a4e99d73c Erste Kommentare hinzugefügt als auch nach Tests erweiterung des Programms um Anforderungen zu erfüllen 2024-11-19 10:37:32 +01:00
Leon Maximilian Löhle f29119eb09 Nach Tests anpassung um Programm funktional zu machen 2024-11-18 21:26:07 +01:00
Leon Maximilian Löhle cf66cc6bd2 Programm für ausführbarkeit vorbereitet. Änderungen für Lauffähigkeit bereitgestellt 2024-11-18 19:17:24 +01:00
Leon Löhle 54bc0bf9f8 Verbesserung der Kohäsion und der Funktionalität durch Lambdas 2024-11-15 16:21:42 +01:00
Leon Löhle 17a7d60487 Erste Implementierung der Medien unterklassen 2024-11-14 15:08:32 +01:00
Leon Löhle 11cc18f1b3 Anpassung und verbesserung der Medien Klasse, bau der Brettspiel Klasse 2024-11-14 12:44:59 +01:00
Leon Maximilian Löhle 0e4b7f792e Erstellung der ersten Versionen von den Medien unterklassen Buch, Brettspiel 2024-11-13 14:38:54 +01:00
Leon Maximilian Löhle fd98a6d95e Erstellung der ersten Version der Medien Klasse 2024-11-13 13:45:47 +01:00
Leon Maximilian Löhle e4e69eb5cd Fragen Eingefügt 2024-11-12 13:41:29 +01:00
Leon Maximilian Löhle 09eb5660ee Development ordner so geändert, dass auf Stand ist 2024-11-12 09:53:19 +01:00
Leon Maximilian Löhle 2e122475f0 Merge branch 'development' of https://gitty.informatik.hs-mannheim.de/3010261/PR2-Testat-Bibliotheksverwaltungssystem into development 2024-11-12 09:52:15 +01:00
Leon Maximilian Löhle 6449e104fb Erstellen des development Branches und der Grundklassen 2024-11-12 09:51:01 +01:00
Leon Löhle 35b91d9af9 Erstellen der User, Admin und UI Klasse 2024-11-08 21:26:10 +01:00
Leon Löhle 598147dce3 Erstellen der User, Admin und UI Klasse 2024-11-08 21:25:37 +01:00
31 changed files with 1170 additions and 5 deletions

View File

@ -0,0 +1,124 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Palette2">
<group name="Swing">
<item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
</item>
<item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
</item>
<item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
</item>
<item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.svg" removable="false" auto-create-binding="false" can-attach-label="true">
<default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
</item>
<item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
<initial-values>
<property name="text" value="Button" />
</initial-values>
</item>
<item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
<initial-values>
<property name="text" value="RadioButton" />
</initial-values>
</item>
<item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
<initial-values>
<property name="text" value="CheckBox" />
</initial-values>
</item>
<item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
<initial-values>
<property name="text" value="Label" />
</initial-values>
</item>
<item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
</item>
<item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
<preferred-size width="200" height="200" />
</default-constraints>
</item>
<item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
<preferred-size width="200" height="200" />
</default-constraints>
</item>
<item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
</item>
<item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
</item>
<item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
</item>
<item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
</item>
<item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
<preferred-size width="-1" height="20" />
</default-constraints>
</item>
<item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
</item>
<item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
</item>
</group>
</component>
</project>

View File

@ -0,0 +1,39 @@
package Bibliothek;
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() + ")")
);
}
}

View File

@ -0,0 +1,287 @@
package Bibliothek;
import java.time.LocalDate;
import java.util.*;
import java.util.function.Predicate;
import java.util.stream.Collectors;
public class Bibliotheksverwaltung {
private Map<String, Medien> medienBestand;
private Map<String, Kunde> kundenListe;
private Map<String, Admin> adminListe;
private User eingeloggterBenutzer;
private LocalDate aktuellesDatum = LocalDate.now();
public Bibliotheksverwaltung() {
medienBestand = new HashMap<>();
kundenListe = new HashMap<>();
adminListe = new HashMap<>();
}
/*
* Getter Methoden
*/
public Map<String, Kunde> getKundenListe() {
return kundenListe;
}
public Map<String, Admin> getAdminListe() {
return adminListe;
}
public User getEingeloggterBenutzer() {
return eingeloggterBenutzer;
}
public LocalDate getAktuellesDatum() {
return aktuellesDatum;
}
/*
* Setter für Datumsmanipulation
*
* @param datum
*/
public void setAktuellesDatum(LocalDate datum) {
this.aktuellesDatum = datum;
System.out.println("Systemdatum auf " + aktuellesDatum + " gesetzt.");
}
/*
* Methode mit der man nach Medien suchen kann und angezeigt bekommt ob die Medien geführt werden, ob sie
* verfügbar sind oder ob sie ausgeliehen sind sowohl als auch bis wann ausgeliehen
*
* @param titel
* @return
*/
public List<String> sucheMedienNachTitel(String titel) {
return medienBestand.values().stream()
.filter(medien -> medien.getTitel().toLowerCase().contains(titel.toLowerCase()))
.map(medien -> {
String status = medien.verfuegbar()
? "[Verfügbar]"
: "[Ausgeliehen bis: " + medien.getRueckgabedat() + "]";
return medien.getDetails() + " " + status;
})
.collect(Collectors.toList());
}
/*
* Zeigt alle Medien die in der Bib geführt werden, ebenfalls mit der Info verfügbar oder ausgeliehen
*/
public void alleMedienAnzeigen() {
if (medienBestand.isEmpty()) {
System.out.println("Keine Medien im Bestand.");
} else {
System.out.println("Medienbestand:");
medienBestand.values().forEach(medien -> {
String status = medien.verfuegbar()
? "[Verfügbar]"
: "[Ausgeliehen bis: " + medien.getRueckgabedat() + "]";
System.out.println("- " + medien.getDetails() + " " + status);
});
}
}
/*
* Methode um ein Medium auszuleihen
* Kunde muss dafür eingeloggt sein, Medium kann nicht mehrfach ausgeliehen werden
*
* @param medienId
*/
public void medienAusleihen(String medienId) {
medienId = medienId.trim().toUpperCase(); // Normalisierung
Medien medien = medienBestand.get(medienId);
if (medien == null) {
System.out.println("Medium mit der ID " + medienId + " wurde nicht gefunden.");
return;
}
if (!medien.verfuegbar()) {
System.out.println("Das Medium ist bereits ausgeliehen.");
return;
}
if (!(eingeloggterBenutzer instanceof Kunde)) {
System.out.println("Nur Kunden können Medien ausleihen.");
return;
}
Kunde kunde = (Kunde) eingeloggterBenutzer;
kunde.medienAusleihen(medien);
medien.setVerfuegbar(false);
System.out.println("Medium erfolgreich ausgeliehen: " + medien.getTitel());
}
/*
* Kunde gibt sein ausgeliehens Medium zurück, wenn er überzogen hat
* wird dem konto die Überziehungsgebühr addiert
*
* @param medienId
* @param kundenId
*/
public void medienZurueckgeben(String medienId, String kundenId) {
Medien medien = medienBestand.get(medienId);
Kunde kunde = kundenListe.get(kundenId);
if (medien == null) {
System.out.println("Medium nicht gefunden.");
return;
}
if (kunde == null) {
System.out.println("Kunde nicht gefunden.");
return;
}
if (kunde.getAusgelieheneMedien().contains(medien)) {
double gebuehren = medien.berechneGebuehren(aktuellesDatum);
kunde.addGebuehren(gebuehren);
kunde.medienZurueckgeben(medien);
medien.setVerfuegbar(true);
System.out.println("Medium erfolgreich zurückgegeben: " + medien.getTitel());
if (gebuehren > 0) {
System.out.println("Überziehungsgebühren: " + gebuehren + " € wurden dem Konto hinzugefügt.");
}
} else {
System.out.println("Dieses Medium wurde nicht von diesem Kunden ausgeliehen.");
}
}
/*
*Wenn ein Kunde ein von Ihm ausgeliehenes Medium verlängern möchte und das Medium verlängert werden kann
*wird das Medium um die erlaubte Zeit verlänegrt
* @param medienId
* @param kundenId
*/
public void medienVerlaengern(String medienId, String kundenId) {
Medien medien = medienBestand.get(medienId);
Kunde kunde = kundenListe.get(kundenId);
if (medien != null && kunde != null) {
boolean erfolg = kunde.medienVerlaengern(medien);
if (erfolg) {
System.out.println("Medium erfolgreich verlängert: " + medien.getTitel());
} else {
System.out.println("Verlängerung nicht möglich: Maximale Anzahl erreicht oder Medium ist nicht verlängerbar.");
}
} else {
System.out.println(medien == null ? "Medium nicht gefunden." : "Kunde nicht gefunden.");
}
}
/*
* Erlaubt es neue Medien hinzuzufügen mit ihrer Id und es wird überprüft ob die ID schon vorhanden ist
* @param medien
*/
public void medienHinzufuegen(Medien medien) {
String id = medien.getId().trim().toUpperCase(); // Normalisierung
if (medienBestand.containsKey(id)) {
System.out.println("Ein Medium mit dieser ID existiert bereits: " + id);
return;
}
medienBestand.put(id, medien);
System.out.println("Medium hinzugefügt: " + medien.getTitel() + " (ID: " + id + ")");
}
/*
* Erlaubt es einem registrierten Kunden sich einzuloggen, wenn der Kunde bereits eingeloggt ist,
* wird eine Nachricht darüber zurückgegeben sowie auch wenn der Kunde noch nicht existiert
* @param kundenId
* @return
*/
public boolean loginKunde(String kundenId) {
if (eingeloggterBenutzer != null) {
System.out.println("Ein Benutzer ist bereits eingeloggt: " + eingeloggterBenutzer.getName());
return false;
}
Kunde kunde = kundenListe.get(kundenId);
if (kunde != null) {
eingeloggterBenutzer = kunde;
System.out.println("Kunde eingeloggt: " + kunde.getName());
return true;
} else {
System.out.println("Kunde nicht gefunden.");
return false;
}
}
/*
* Erlaubt es einem Admin sich einzuloggen so wie es auch beim Kunden läuft
* @param adminId
* @return
*/
public boolean loginAdmin(String adminId) {
if (eingeloggterBenutzer != null) {
System.out.println("Ein Benutzer ist bereits eingeloggt: " + eingeloggterBenutzer.getName());
return false;
}
Admin admin = adminListe.get(adminId);
if (admin != null) {
eingeloggterBenutzer = admin;
System.out.println("Admin eingeloggt: " + admin.getName());
return true;
} else {
System.out.println("Admin nicht gefunden.");
return false;
}
}
/*
* loggt den Benutzer aus, sollte allerdings keiner eingeloggt sein wird eine Fehlermeldung ausgegeben
*/
public void logout() {
if (eingeloggterBenutzer != null) {
System.out.println("Benutzer " + eingeloggterBenutzer.getName() + " wurde ausgeloggt.");
eingeloggterBenutzer = null;
} else {
System.out.println("Kein Benutzer ist eingeloggt.");
}
}
/*
* Erstellt einen neuen Kunden mit dem K oder S präfix sowie einer hochzählenden Nummer um erkenntlich zu machen
* ob ein Student oder ein normaler Kunde vorhanden ist
* @param name
* @param istStudent
* @return
*/
public Kunde registriereKunde(String name, boolean istStudent) {
String prefix = istStudent ? "S" : "K";
int maxId = kundenListe.keySet().stream()
.filter(id -> id.startsWith(prefix))
.map(id -> id.replaceAll("[^0-9]", ""))
.mapToInt(Integer::parseInt)
.max()
.orElse(0);
String neueId = prefix + (maxId + 1);
Kunde neuerKunde = new Kunde(neueId, name, istStudent);
kundenListe.put(neueId, neuerKunde);
System.out.println("Neuer Kunde registriert: " + name + " (ID: " + neueId + ")");
return neuerKunde;
}
/*
* Erlaubt es dem Kunden seine ausgeliehenen Medien anzusehen als auch ob überziehungskosten entstanden sind
*/
public void zeigeAusgelieheneMedien() {
if (!(eingeloggterBenutzer instanceof Kunde)) {
System.out.println("Nur eingeloggte Kunden können ausgeliehene Medien anzeigen.");
return;
}
Kunde kunde = (Kunde) eingeloggterBenutzer;
List<Medien> ausgelieheneMedien = kunde.getAusgelieheneMedien();
if (ausgelieheneMedien.isEmpty()) {
System.out.println("Es wurden keine Medien ausgeliehen.");
} else {
System.out.println("Ausgeliehene Medien:");
ausgelieheneMedien.forEach(medien -> {
double gebuehren = medien.berechneGebuehren(aktuellesDatum);
String status = medien.verfuegbar()
? "[Verfügbar]"
: "[Ausgeliehen bis: " + medien.getRueckgabedat() + ", Gebühren: " + gebuehren + " €]";
System.out.println("- " + medien.getDetails() + " " + status);
});
}
}
}

View File

@ -0,0 +1,27 @@
package Bibliothek;
public class Brettspiel extends Medien {
private int spieleranzahl;
private int spieldauer;
public Brettspiel(String titel, String id, int erscheinungsjahr, int spieleranzahl, int spieldauer) {
super(titel, id, erscheinungsjahr);
this.spieleranzahl = spieleranzahl;
this.spieldauer = spieldauer;
}
@Override
public int getAusleihdauer() {
return 2;
}
@Override
public int getMaxVerlaengerungen() {
return 0;
}
@Override
public String getDetails() {
return "Brettspiel: " + titel + " (" + erscheinungsjahr + "), Spieleranzahl: " + spieleranzahl + ", Spieldauer: " + spieldauer + " Minuten";
}
}

View File

@ -0,0 +1,27 @@
package Bibliothek;
public class Buch extends Medien {
private String autor;
private int seitenanzahl;
public Buch(String titel, String id, int erscheinungsjahr, String autor, int seitenanzahl) {
super(titel, id, erscheinungsjahr);
this.autor = autor;
this.seitenanzahl = seitenanzahl;
}
@Override
public int getAusleihdauer() {
return 4;
}
@Override
public int getMaxVerlaengerungen() {
return 3;
}
@Override
public String getDetails() {
return "Buch: " + titel + " von " + autor + " (" + erscheinungsjahr + "), " + seitenanzahl + " Seiten";
}
}

View File

@ -0,0 +1,27 @@
package Bibliothek;
public class CD extends Medien {
private String kuenstler;
private int tracks;
public CD(String titel, String id, int erscheinungsjahr, String kuenstler, int tracks) {
super(titel, id, erscheinungsjahr);
this.kuenstler = kuenstler;
this.tracks = tracks;
}
@Override
public int getAusleihdauer() {
return 2;
}
@Override
public int getMaxVerlaengerungen() {
return 0;
}
@Override
public String getDetails() {
return "CD: " + titel + " von " + kuenstler + " (" + erscheinungsjahr + "), " + tracks + " Tracks";
}
}

View File

@ -0,0 +1,27 @@
package Bibliothek;
public class DVD extends Medien {
private String regisseur;
private int spieldauer;
public DVD(String titel, String id, int erscheinungsjahr, String regisseur, int spieldauer) {
super(titel, id, erscheinungsjahr);
this.regisseur = regisseur;
this.spieldauer = spieldauer;
}
@Override
public int getAusleihdauer() {
return 1;
}
@Override
public int getMaxVerlaengerungen() {
return 0;
}
@Override
public String getDetails() {
return "DVD: " + titel + " von " + regisseur + " (" + erscheinungsjahr + "), Spieldauer: " + spieldauer + " Minuten";
}
}

View File

@ -0,0 +1,60 @@
package Bibliothek;
import java.time.LocalDate;
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 addGebuehren(double betrag) {
if (betrag > 0) {
this.gebuehren += betrag;
}
}
public void gebuehrenErhoehen(double betrag) {
this.gebuehren += betrag;
}
public double berechneGesamtgebuehren(LocalDate aktuellesDatum) {
return ausgelieheneMedien.stream()
.mapToDouble(medien -> medien.berechneGebuehren(aktuellesDatum))
.sum();
}
public Medien sucheAusgeliehenesMedium(String medienId) {
return ausgelieheneMedien.stream()
.filter(medien -> medien.getId().equalsIgnoreCase(medienId))
.findFirst()
.orElse(null);
}
public boolean medienVerlaengern(Medien medien) {
Consumer<Medien> verlaengerung = m -> {
if (ausgelieheneMedien.contains(m) && m.verlaengern()) { // Kein Argument übergeben
System.out.println("Medium verlängert: " + m.getTitel());
} else {
System.out.println("Verlängerung nicht möglich.");
}
};
verlaengerung.accept(medien);
return false;
}
}

View File

@ -0,0 +1,59 @@
package Bibliothek;
public class Main {
public static void main(String[] args) {
Bibliotheksverwaltung verwaltung = new Bibliotheksverwaltung();
/*
Hart codierte Kunden und Admin
*/
Kunde kunde1 = new Kunde("S1", "Max Mustermann", true);
Kunde kunde2 = new Kunde("K1", "Lisa Müller", false);
verwaltung.getKundenListe().put(kunde1.getId(), kunde1);
verwaltung.getKundenListe().put(kunde2.getId(), kunde2);
Admin admin = new Admin("A1", "Anna Schmidt");
verwaltung.getAdminListe().put(admin.getId(), admin);
/*
* Hart codierte Medien
*/
Medien buch1 = new Buch("Der Herr der Ringe", "B1", 1954, "J.R.R. Tolkien", 1200);
Medien buch2 = new Buch("Game of Thrones 1: Der Winter naht", "B2", 1996, "George R.R. Martin", 576);
Medien buch3 = new Buch("Harry Potter and the Prisoner of Azkaban", "B3", 2014, "J.K. Rowling", 480);
Medien dvd1 = new DVD("Inception", "D1", 2010, "Christopher Nolan", 148);
Medien dvd2 = new DVD("Batman 'The Dark Knight'", "D2", 2008, "Christopher Nolan", 152);
Medien dvd3 = new DVD("Star Wars: Episode 3 'Die Rache der Sith'", "D3", 2005, "George Lucas", 140);
Medien cd1 = new CD("Black Ice", "CD1", 2001, "ACDC", 15);
Medien cd2 = new CD("From Zero", "CD2", 2024, "Linkin Park", 11);
Medien cd3 = new CD("The War to end all Wars", "CD3", 2022, "Sabaton", 10);
Medien br1 = new Brettspiel("Wizard", "BR1", 1984, 4, 50);
Medien br2 = new Brettspiel("Mensch Ärgere dich nicht", "BR2", 1910, 6, 50);
Medien br3 = new Brettspiel("Monopoly Star Wars Edition", "BR3", 2016, 4, 60);
Medien vd1 = new Videospiel("Cyberpunk2077", "VD1", 2022, "PC/PS5/XBOX", "CD Projekt Red");
Medien vd2 = new Videospiel("Landwirtschafts-Simulator 25", "VD2", 2024, "PC/PS5/XBOX", "Giants");
Medien vd3 = new Videospiel("CFB25", "VD3", 2024, "PC/PS5/XBOX", "EA-Sports");
/*
* Hinzufügen Methode der hart codierten Medien
*/
verwaltung.medienHinzufuegen(buch1);
verwaltung.medienHinzufuegen(buch2);
verwaltung.medienHinzufuegen(buch3);
verwaltung.medienHinzufuegen(dvd1);
verwaltung.medienHinzufuegen(dvd2);
verwaltung.medienHinzufuegen(dvd3);
verwaltung.medienHinzufuegen(cd1);
verwaltung.medienHinzufuegen(cd2);
verwaltung.medienHinzufuegen(cd3);
verwaltung.medienHinzufuegen(br1);
verwaltung.medienHinzufuegen(br2);
verwaltung.medienHinzufuegen(br3);
verwaltung.medienHinzufuegen(vd1);
verwaltung.medienHinzufuegen(vd2);
verwaltung.medienHinzufuegen(vd3);
// Starte UI
UI tui = new UI(verwaltung);
tui.start();
}
}

View File

@ -0,0 +1,110 @@
package Bibliothek;
import java.time.LocalDate;
public abstract class Medien {
protected String titel;
protected String id;
protected int erscheinungsjahr;
protected boolean verfuegbar = true;
protected LocalDate rueckgabedat;
protected int verlaengerungen;
public Medien(String titel, String id, int erscheinungsjahr) {
this.titel = titel;
this.id = id;
this.erscheinungsjahr = erscheinungsjahr;
}
public String getTitel() {
return titel;
}
public void setTitel(String titel) {
this.titel = titel;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public LocalDate getRueckgabedat() {
return rueckgabedat;
}
public boolean verfuegbar() {
return verfuegbar;
}
public int getErscheinungsjahr() {
return erscheinungsjahr;
}
public void setErscheinungsjahr(int er) {
this.erscheinungsjahr = er;
}
public void setVerfuegbar(boolean verfuegbar) {
this.verfuegbar = verfuegbar;
}
public abstract int getAusleihdauer();
public abstract int getMaxVerlaengerungen();
public void ausleihen() {
if (verfuegbar) {
verfuegbar = false;
rueckgabedat = LocalDate.now().plusWeeks(getAusleihdauer());
System.out.println("Ausgeliehen bis: " + rueckgabedat);
} else {
System.out.println("Nicht verfügbar.");
}
}
public int getVerlaengerungen() {
return verlaengerungen;
}
public boolean verlaengern() {
if (getMaxVerlaengerungen() == 0) {
System.out.println("Dieses Medium kann nicht verlängert werden.");
return false;
}
if (verlaengerungen < getMaxVerlaengerungen()) {
verlaengerungen++;
rueckgabedat = rueckgabedat.plusWeeks(getAusleihdauer());
System.out.println("Das Medium wurde verlängert. Neues Rückgabedatum: " + rueckgabedat);
return true;
} else {
System.out.println("Maximale Verlängerungsanzahl erreicht.");
return false;
}
}
public void zurueckgeben() {
verfuegbar = true;
rueckgabedat = null;
}
public boolean istUeberzogen(LocalDate aktuellesDatum) {
return rueckgabedat != null && rueckgabedat.isBefore(aktuellesDatum);
}
public double berechneGebuehren(LocalDate aktuellesDatum) {
if (rueckgabedat == null || !istUeberzogen(aktuellesDatum)) {
return 0.0;
}
long ueberzogeneTage = java.time.temporal.ChronoUnit.DAYS.between(rueckgabedat, aktuellesDatum);
return ueberzogeneTage * 0.50;
}
public abstract String getDetails();
}

View File

@ -0,0 +1,281 @@
package Bibliothek;
import java.time.LocalDate;
import java.util.Scanner;
public class UI {
private Bibliotheksverwaltung verwaltung;
private Scanner scanner;
public UI(Bibliotheksverwaltung verwaltung) {
this.verwaltung = verwaltung;
this.scanner = new Scanner(System.in);
}
public void start() {
String auswahl;
do {
zeigeMenue();
auswahl = scanner.nextLine();
verarbeiteAuswahl(auswahl);
} while (!auswahl.equals("0"));
System.out.println("Programm beendet.");
}
private void zeigeMenue() {
System.out.println("\n--- Bibliothekssystem ---");
System.out.println("1. Anmelden (Kunde)");
System.out.println("2. Anmelden (Admin)");
System.out.println("3. Abmelden");
System.out.println("4. Neuen Kunden registrieren");
System.out.println("5. Medien durchsuchen");
System.out.println("6. Medien anzeigen");
System.out.println("7. Medien ausleihen");
System.out.println("8. Medien zurückgeben");
System.out.println("9. Medien verlängern");
System.out.println("10. Gebühren anzeigen");
System.out.println("11. Gebühren verbuchen (Admin)");
System.out.println("12. Medien hinzufügen (Admin)");
System.out.println("13. Meine ausgeliehenen Medien anzeigen");
System.out.println("14. Datum einstellen");
System.out.println("0. Beenden");
System.out.print("Auswahl: ");
}
private void verarbeiteAuswahl(String auswahl) {
switch (auswahl) {
case "1" -> loginKunde();
case "2" -> loginAdmin();
case "3" -> logout();
case "4" -> kundeRegistrieren();
case "5" -> medienDurchsuchen();
case "6" -> alleMedienAnzeigen();
case "7" -> medienAusleihen();
case "8" -> medienZurueckgeben();
case "9" -> medienVerlaengern();
case "10" -> gebuehrenAnzeigen();
case "11" -> gebuehrenVerbuchen();
case "12" -> medienHinzufuegen();
case "13" -> ausgeliehenenMedienAnzeigen();
case "14" -> datumEinstellen();
case "0" -> System.out.println("Beende das Programm...");
default -> System.out.println("Ungültige Auswahl. Bitte erneut versuchen.");
}
}
/*
* Wartet auf die Eingabe der Kunden-Id, wenn diese existiert wird der User eingeloggt
*/
private void loginKunde() {
System.out.print("Kunden-ID eingeben: ");
String kundenId = scanner.nextLine();
if (verwaltung.loginKunde(kundenId)) {
System.out.println("Erfolgreich als Kunde angemeldet.");
} else {
System.out.println("Anmeldung fehlgeschlagen.");
}
}
/*
* Wartet auf die Eingaben der Admin-ID, einloggen erfolgt gleich wie beim Kunden
*/
private void loginAdmin() {
System.out.print("Admin-ID eingeben: ");
String adminId = scanner.nextLine();
if (verwaltung.loginAdmin(adminId)) {
System.out.println("Erfolgreich als Admin angemeldet.");
} else {
System.out.println("Anmeldung fehlgeschlagen.");
}
}
private void logout() {
verwaltung.logout();
}
/*
* Fragt den neuen Kunden nach seinem Namen als auch, ob es ein Student ist
* Wenn der Kunde ein Student ist, dann wird die Kunden-ID mit einem S sonst einem K beginnend
*/
private void kundeRegistrieren() {
System.out.print("Name eingeben: ");
String name = scanner.nextLine();
System.out.print("Ist der Kunde ein Student? (ja/nein): ");
String studentAntwort = scanner.nextLine().toLowerCase();
boolean istStudent = studentAntwort.equals("ja");
Kunde neuerKunde = verwaltung.registriereKunde(name, istStudent);
}
/*
* Wartet auf die Einagbe des Kunden nach was gesucht werden soll
* Nimmt dann den Suchbegriff und vergleicht den eingegebenen Begriff mit allem in Medien
*/
private void medienDurchsuchen() {
System.out.print("Suchbegriff eingeben: ");
String suchbegriff = scanner.nextLine();
var ergebnisse = verwaltung.sucheMedienNachTitel(suchbegriff);
if (ergebnisse.isEmpty()) {
System.out.println("Keine Medien gefunden.");
} else {
System.out.println("Suchergebnisse:");
ergebnisse.forEach(System.out::println);
}
}
private void alleMedienAnzeigen() {
verwaltung.alleMedienAnzeigen();
}
private void medienAusleihen() {
if (!(verwaltung.getEingeloggterBenutzer() instanceof Kunde)) {
System.out.println("Bitte loggen Sie sich als Kunde ein, um Medien auszuleihen.");
return;
}
System.out.print("Medium-ID eingeben: ");
String medienId = scanner.nextLine().trim();
verwaltung.medienAusleihen(medienId);
}
private void medienZurueckgeben() {
if (!(verwaltung.getEingeloggterBenutzer() instanceof Kunde)) {
System.out.println("Bitte loggen Sie sich als Kunde ein, um Medien zurückzugeben.");
return;
}
System.out.print("Medium-ID eingeben: ");
String medienId = scanner.nextLine();
Kunde kunde = (Kunde) verwaltung.getEingeloggterBenutzer();
verwaltung.medienZurueckgeben(medienId, kunde.getId());
}
private void medienVerlaengern() {
System.out.print("Medium-ID eingeben: ");
String medienId = scanner.nextLine();
if (!(verwaltung.getEingeloggterBenutzer() instanceof Kunde)) {
System.out.println("Nur Kunden können Medien verlängern.");
return;
}
Kunde kunde = (Kunde) verwaltung.getEingeloggterBenutzer();
Medien medien = kunde.sucheAusgeliehenesMedium(medienId); // Suche im Kundenbestand
if (medien == null) {
System.out.println("Medium wurde nicht gefunden oder gehört nicht zu diesem Kunden.");
return;
}
if (!medien.verlaengern()) {
System.out.println("Die Verlängerung war nicht erfolgreich.");
}
}
private void gebuehrenAnzeigen() {
if (!(verwaltung.getEingeloggterBenutzer() instanceof Kunde)) {
System.out.println("Nur eingeloggte Kunden können ihre Gebühren anzeigen.");
return;
}
Kunde kunde = (Kunde) verwaltung.getEingeloggterBenutzer();
System.out.println("Gesamtgebühren für " + kunde.getName() + ": " + kunde.getGebuehren() + " €");
}
private void gebuehrenVerbuchen() {
if (!(verwaltung.getEingeloggterBenutzer() instanceof Admin)) {
System.out.println("Nur Admins können Gebühren verbuchen. Bitte als Admin einloggen.");
return;
}
System.out.print("Kunden-ID eingeben: ");
String kundenId = scanner.nextLine();
Kunde kunde = verwaltung.getKundenListe().get(kundenId);
if (kunde == null) {
System.out.println("Kunde nicht gefunden.");
return;
}
System.out.print("Betrag eingeben: ");
try {
double betrag = Double.parseDouble(scanner.nextLine());
Admin admin = (Admin) verwaltung.getEingeloggterBenutzer();
admin.gebuehrenVerbuchen(kunde, betrag);
System.out.println("Gebühren erfolgreich verbucht.");
} catch (NumberFormatException e) {
System.out.println("Ungültige Eingabe. Bitte einen gültigen Betrag eingeben.");
}
}
private void medienHinzufuegen() {
if (!(verwaltung.getEingeloggterBenutzer() instanceof Admin)) {
System.out.println("Nur Admins können Medien hinzufügen. Bitte als Admin einloggen.");
return;
}
System.out.print("Medienart (Buch, DVD, CD, Brettspiel, Videospiel) eingeben: ");
String medienart = scanner.nextLine();
System.out.print("ID eingeben: ");
String id = scanner.nextLine();
System.out.print("Titel eingeben: ");
String titel = scanner.nextLine();
System.out.print("Erscheinungsjahr eingeben: ");
int jahr;
try {
jahr = Integer.parseInt(scanner.nextLine());
Medien medien = null;
switch (medienart.toLowerCase()) {
case "buch":
System.out.print("Autor eingeben: ");
String autor = scanner.nextLine();
System.out.print("Seitenanzahl eingeben: ");
int seiten = Integer.parseInt(scanner.nextLine());
medien = new Buch(id, titel, jahr, autor, seiten);
break;
case "dvd":
System.out.print("Regisseur eingeben: ");
String regisseur = scanner.nextLine();
System.out.print("Spieldauer (Minuten) eingeben: ");
int spieldauerDVD = Integer.parseInt(scanner.nextLine());
medien = new DVD(id, titel, jahr, regisseur, spieldauerDVD);
break;
case "cd":
System.out.print("Künstler eingeben: ");
String kuenstler = scanner.nextLine();
System.out.print("Anzahl der Tracks eingeben: ");
int tracks = Integer.parseInt(scanner.nextLine());
medien = new CD(id, titel, jahr, kuenstler, tracks);
break;
case "brettspiel":
System.out.print("Spieleranzahl eingeben: ");
int spieler = Integer.parseInt(scanner.nextLine());
System.out.print("Spieldauer (Minuten) eingeben: ");
int spieldauerBrettspiel = Integer.parseInt(scanner.nextLine());
medien = new Brettspiel(id, titel, jahr, spieler, spieldauerBrettspiel);
break;
case "videospiel":
System.out.print("Plattform eingeben: ");
String plattform = scanner.nextLine();
System.out.print("Entwickler eingeben: ");
String entwickler = scanner.nextLine();
medien = new Videospiel(id, titel, jahr, plattform, entwickler);
break;
default:
System.out.println("Ungültige Medienart.");
return;
}
verwaltung.medienHinzufuegen(medien);
System.out.println("Medium erfolgreich hinzugefügt.");
} catch (NumberFormatException e) {
System.out.println("Ungültige Eingabe. Bitte eine Zahl eingeben.");
}
}
private void ausgeliehenenMedienAnzeigen() {
verwaltung.zeigeAusgelieheneMedien();
}
private void datumEinstellen() {
System.out.print("Neues Datum eingeben (YYYY-MM-DD): ");
String eingabe = scanner.nextLine();
try {
LocalDate neuesDatum = LocalDate.parse(eingabe);
verwaltung.setAktuellesDatum(neuesDatum);
} catch (Exception e) {
System.out.println("Ungültiges Datum. Bitte im Format YYYY-MM-DD eingeben.");
}
}
}

View File

@ -0,0 +1,48 @@
package Bibliothek;
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.");
}
}
}

View File

@ -0,0 +1,27 @@
package Bibliothek;
public class Videospiel extends Medien {
private String plattform;
private String entwickler;
public Videospiel(String titel, String id, int erscheinungsjahr, String plattform, String entwickler) {
super(titel, id, erscheinungsjahr);
this.plattform = plattform;
this.entwickler = entwickler;
}
@Override
public int getAusleihdauer() {
return 4;
}
@Override
public int getMaxVerlaengerungen() {
return 1;
}
@Override
public String getDetails() {
return "Videospiel: " + titel + " (" + erscheinungsjahr + "), Plattform: " + plattform + ", Entwickler: " + entwickler;
}
}

View File

@ -1,5 +0,0 @@
public class Main {
public static void main(String[] args) {
System.out.println("Hello world!");
}
}

View File

@ -0,0 +1,6 @@
1- Grundgerüst erstellen. Es soll Bücher sowie verschiedene Medien geben
2- Man soll die Medien oder Bücker ausleihen können
3- Man soll nach Ausleihbaren Sachen suchen können
4- Wenn man etwas ausgeliehen hat soll man die Ausleihdauer verlängern können
5- Wenn die Ausleihzeit beendet ist, soll man die entstandenen Kosten bezahlen
6- Es soll eine vergünstigung für Schüler und Studenten geben

View File

@ -0,0 +1,6 @@
Wenn ein Kunde etwas länger behält und nicht verlängert und auch nie wieder kommt um zu bezahlen was passiert dann? Erhöht sich die Summe für den Verzug bis ins Unendliche oder sagt man ab einem gewissen punkt ist schluss?
-->
Kann der Kunde sein Konto löschen?
-->
Wie soll das mit dem Datum gehandelt werden, so wie beim Parkhaus oder gibt es diesmal eine andere Lösung (eingeschlossen mit enter heutiges Datum)?
-->

3
fragen.txt 100644
View File

@ -0,0 +1,3 @@
Wenn ein Kunde etwas länger behält und nicht verlängert und auch nie wieder kommt um zu bezahlen was passiert dann? Erhöht sich die Summe für den Verzug bis ins Unendliche oder sagt man ab einem gewissen punkt ist schluss?
Kann der Kunde sein Konto löschen?
Wie soll das mit dem Datum gehandelt werden, so wie beim Parkhaus oder gibt es diesmal eine andere Lösung (eingeschlossen mit enter heutiges Datum)?

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,6 @@
1- Grundgerüst erstellen. Es soll Bücher sowie verschiedene Medien geben
2- Man soll die Medien oder Bücker ausleihen können
3- Man soll nach Ausleihbaren Sachen suchen können
4- Wenn man etwas ausgeliehen hat soll man die Ausleihdauer verlängern können
5- Wenn die Ausleihzeit beendet ist, soll man die entstandenen Kosten bezahlen
6- Es soll eine vergünstigung für Schüler und Studenten geben

View File

@ -0,0 +1,6 @@
Wenn ein Kunde etwas länger behält und nicht verlängert und auch nie wieder kommt um zu bezahlen was passiert dann? Erhöht sich die Summe für den Verzug bis ins Unendliche oder sagt man ab einem gewissen punkt ist schluss?
-->
Kann der Kunde sein Konto löschen?
-->
Wie soll das mit dem Datum gehandelt werden, so wie beim Parkhaus oder gibt es diesmal eine andere Lösung (eingeschlossen mit enter heutiges Datum)?
-->