Compare commits
No commits in common. "main" and "neue-Branch" have entirely different histories.
main
...
neue-Branc
|
@ -1,2 +0,0 @@
|
|||
.idea/
|
||||
*.iml
|
|
@ -1,8 +1,3 @@
|
|||
package fassade;
|
||||
|
||||
import backend.medium.Medien;
|
||||
import backend.benutzer.*;
|
||||
|
||||
import java.time.LocalDate;
|
||||
|
||||
public class Aausleihe {
|
||||
|
@ -11,7 +6,7 @@ public class Aausleihe {
|
|||
private LocalDate date; // Ausleihdatum
|
||||
private LocalDate rueckgabeDatum; // Rückgabedatum
|
||||
|
||||
// Konstruktor für die fassade.Aausleihe
|
||||
// Konstruktor für die Aausleihe
|
||||
Aausleihe(Medien medien, Benutzer benutzer, LocalDate date, LocalDate rueckgabeDatum) {
|
||||
this.medien = medien;
|
||||
this.benutzer = benutzer;
|
||||
|
@ -46,7 +41,7 @@ public class Aausleihe {
|
|||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "fassade.Aausleihe{" +
|
||||
return "Aausleihe{" +
|
||||
"medien=" + medien +
|
||||
", benutzer=" + benutzer +
|
||||
", ausleihdatum=" + date +
|
|
@ -1,15 +1,13 @@
|
|||
package backend.benutzer;
|
||||
|
||||
class Admin {
|
||||
private final String name = "zabih";
|
||||
private final String nachname = "Mansuri";
|
||||
private final int passwort = 1234;
|
||||
|
||||
private final String art = "backend.benutzer.Admin";
|
||||
private final String art = "Admin";
|
||||
|
||||
// Getter-Methoden
|
||||
public String getName() {
|
||||
return name;//return
|
||||
return name;
|
||||
}
|
||||
|
||||
public String getNachname() {
|
||||
|
@ -26,7 +24,7 @@ class Admin {
|
|||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "backend.benutzer.Admin{" +
|
||||
return "Admin{" +
|
||||
"Name='" + name + '\'' +
|
||||
", Nachname='" + nachname + '\'' +
|
||||
", Passwort=" + passwort +
|
|
@ -1,7 +1,4 @@
|
|||
// Datei: Benutzer.java
|
||||
package backend.benutzer;
|
||||
|
||||
public abstract class Benutzer {
|
||||
abstract class Benutzer {
|
||||
private String name;
|
||||
private String nachname;
|
||||
private int kundennummer;
|
||||
|
@ -11,7 +8,7 @@ public abstract class Benutzer {
|
|||
private double gebuehren; // Aktuelle ausstehende Gebühren des Benutzers
|
||||
|
||||
// Konstruktor
|
||||
public Benutzer(String name, String nachname, int kundennummer, String art) {
|
||||
public Benutzer(String name, String nachname, int kundennummer, String art) {
|
||||
this.name = name;
|
||||
this.nachname = nachname;
|
||||
this.kundennummer = kundennummer;
|
||||
|
@ -27,10 +24,6 @@ public abstract class Benutzer {
|
|||
}
|
||||
this.gebuehren = 0.0; // Anfangs keine Gebühren
|
||||
}
|
||||
public void addGebuehr(double betrag) {
|
||||
this.gebuehren += betrag; // Beispiel: Der Betrag wird zur bestehenden Gebühr des Benutzers hinzugefügt
|
||||
}
|
||||
|
||||
|
||||
// Getter- und Setter-Methoden
|
||||
public String getName() {
|
||||
|
@ -73,4 +66,21 @@ public abstract class Benutzer {
|
|||
", Ausstehende Gebühren=" + gebuehren +
|
||||
'}';
|
||||
}
|
||||
|
||||
// Spezifische Benutzertypen als Unterklassen
|
||||
public static class Erwachsener extends Benutzer {
|
||||
public Erwachsener(String name, String nachname, int kundennummer) {
|
||||
super(name, nachname, kundennummer, "Erwachsener");
|
||||
}
|
||||
}
|
||||
|
||||
public static class SchuelerStudent extends Benutzer {
|
||||
public SchuelerStudent(String name, String nachname, int kundennummer,String art) {
|
||||
super(name, nachname, kundennummer,art);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
Wie kann ich die Vererbung für Medienarten am besten strukturieren, um die unterschiedlichen Ausleihregeln und Fälligkeitsdaten zu unterstützen? Sollten die spezifischen Regeln (z. B. Ausleihfrist, Anzahl der Verlängerungen) direkt in den Medientypklassen definiert sein, oder wäre eine zentrale fassade.Verwaltung sinnvoller?
|
||||
Wie kann ich die Vererbung für Medienarten am besten strukturieren, um die unterschiedlichen Ausleihregeln und Fälligkeitsdaten zu unterstützen? Sollten die spezifischen Regeln (z. B. Ausleihfrist, Anzahl der Verlängerungen) direkt in den Medientypklassen definiert sein, oder wäre eine zentrale Verwaltung sinnvoller?
|
||||
|
||||
Wie detailliert sollte die Benutzerverwaltung aufgebaut sein? Wäre es beispielsweise besser, getrennte Klassen für „Erwachsene“ und „Schüler/Studenten“ zu erstellen, oder würde eine allgemeine Benutzerklasse mit einem Attribut für den Benutzertyp ausreichen? Und wie lässt sich der backend.benutzer.Admin-Status am besten einbinden?
|
||||
Wie detailliert sollte die Benutzerverwaltung aufgebaut sein? Wäre es beispielsweise besser, getrennte Klassen für „Erwachsene“ und „Schüler/Studenten“ zu erstellen, oder würde eine allgemeine Benutzerklasse mit einem Attribut für den Benutzertyp ausreichen? Und wie lässt sich der Admin-Status am besten einbinden?
|
||||
|
||||
Wie detailliert muss die Gebührenverwaltung implementiert sein, insbesondere für überfällige backend.medium.Medien? Soll die Logik für Gebührenberechnung und -verwaltung direkt in die backend.medium.Medien- oder Benutzerklassen integriert werden, oder wäre es besser, diese in eine separate Klasse oder ein Interface für mehr Flexibilität auszulagern?
|
||||
Wie detailliert muss die Gebührenverwaltung implementiert sein, insbesondere für überfällige Medien? Soll die Logik für Gebührenberechnung und -verwaltung direkt in die Medien- oder Benutzerklassen integriert werden, oder wäre es besser, diese in eine separate Klasse oder ein Interface für mehr Flexibilität auszulagern?
|
||||
|
|
|
@ -0,0 +1,29 @@
|
|||
class Creator {
|
||||
static Benutzer factoryBenutzer(String name, String nachname, int kundennummer, String art) {
|
||||
if (art.equals("e")) {
|
||||
return new Benutzer.Erwachsener(name, nachname, kundennummer);
|
||||
} else if (art.equals("s")) {
|
||||
return new Benutzer.SchuelerStudent(name, nachname, kundennummer, art);
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static Medien factoryMedien(String name, String regisseur, int id, String art, int erscheinungsjahr) {
|
||||
switch (art.toLowerCase()) {
|
||||
case "buch":
|
||||
return new Medien.Book(name, regisseur, id, erscheinungsjahr);
|
||||
case "dvd":
|
||||
return new Medien.Dvds(name, regisseur, id);
|
||||
case "cd":
|
||||
return new Medien.Cds(name, id);
|
||||
case "sb":
|
||||
return new Medien.Brettspiel(name, id);
|
||||
case "videospiel":
|
||||
return new Medien.Videospiel(name, regisseur, id);
|
||||
default:
|
||||
throw new IllegalArgumentException("Unbekannter Medientyp: " + art);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,16 +1,9 @@
|
|||
package UI;
|
||||
|
||||
import backend.creator.*; // Importiert alle Klassen aus dem benutzer-Paket
|
||||
import fassade.*;
|
||||
// Creator gehört zum benutzer-Paket
|
||||
|
||||
|
||||
public class Main {
|
||||
public static void main(String[] args) {
|
||||
// Erstelle die Instanzen
|
||||
Creator creator = new Creator();
|
||||
Verwaltung verwaltung = new Verwaltung();
|
||||
|
||||
|
||||
// Medienobjekte hinzufügen
|
||||
verwaltung.mediensListe.add(creator.factoryMedien("Java Programmierung", "Max Mustermann", 1, "buch", 2020));
|
||||
verwaltung.mediensListe.add(creator.factoryMedien("Datenstrukturen", "Julia Schmidt", 2, "buch", 2018));
|
||||
|
@ -23,13 +16,8 @@ public class Main {
|
|||
verwaltung.mediensListe.add(creator.factoryMedien("Minecraft", "Mojang", 9, "videospiel", 0));
|
||||
verwaltung.mediensListe.add(creator.factoryMedien("The Witcher 3", "CD Projekt", 10, "videospiel", 0));
|
||||
|
||||
// Erstelle die fassade mit der fassade
|
||||
Fassade fassade = new Fassade(verwaltung);
|
||||
|
||||
// UI mit der fassade.Fassade initialisieren
|
||||
Ui ui = new Ui(fassade);
|
||||
|
||||
// Anmeldung starten
|
||||
ui.starten();
|
||||
// Ui mit der Verwaltung-Instanz initialisieren7
|
||||
Ui ui = new Ui(verwaltung);
|
||||
ui.anmeldung();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,162 @@
|
|||
// Interface für Medien, die ausgeliehen werden können
|
||||
interface Ausleihbar {
|
||||
int getMaxVerlängerungen(); // Gibt die maximale Anzahl an Verlängerungen zurück
|
||||
boolean kannVerlängern(); // Prüft, ob das Medium verlängerbar ist
|
||||
boolean verlängern(); // Verlängert das Medium, wenn möglich
|
||||
}
|
||||
|
||||
// Abstrakte Basisklasse für alle Medien
|
||||
public abstract class Medien implements Ausleihbar {
|
||||
protected String name;
|
||||
protected int id;
|
||||
protected int frist; // Standard-Ausleihfrist in Wochen
|
||||
protected int maxVerlängerungen; // Maximale Anzahl an möglichen Verlängerungen
|
||||
protected int aktuelleVerlängerungen=1; // Aktuelle Anzahl an durchgeführten Verlängerungen
|
||||
protected boolean istAusgeliehen; // Status, ob das Medium ausgeliehen ist
|
||||
|
||||
// Konstruktor
|
||||
public Medien(String name, int id, int frist, int maxVerlängerungen) {
|
||||
this.name = name;
|
||||
this.id = id;
|
||||
this.frist = frist;
|
||||
this.maxVerlängerungen = maxVerlängerungen;
|
||||
this.aktuelleVerlängerungen = 0; // Initialisierung ohne Verlängerungen
|
||||
// Initialer Status: nicht ausgeliehen
|
||||
}
|
||||
|
||||
// Getter-Methoden
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public int getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
// Implementierung der Ausleihbar-Methoden
|
||||
@Override
|
||||
public int getMaxVerlängerungen() {
|
||||
return maxVerlängerungen;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean kannVerlängern() {
|
||||
return aktuelleVerlängerungen < maxVerlängerungen;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean verlängern() {
|
||||
if (kannVerlängern()) {
|
||||
aktuelleVerlängerungen++;
|
||||
return true; // Verlängerung erfolgreich
|
||||
}
|
||||
return false; // Keine Verlängerung mehr möglich
|
||||
}
|
||||
|
||||
public boolean istAusgeliehen() {
|
||||
return istAusgeliehen;
|
||||
}
|
||||
|
||||
public void ausleihen() {
|
||||
if (!istAusgeliehen) {
|
||||
istAusgeliehen = true;
|
||||
} else {
|
||||
System.out.println("Das Medium ist bereits ausgeliehen.");
|
||||
}
|
||||
}
|
||||
|
||||
public void zurückgeben() {
|
||||
istAusgeliehen = false;
|
||||
}
|
||||
|
||||
// Unterklasse für Bücher
|
||||
public static class Book extends Medien
|
||||
{
|
||||
private String autor;
|
||||
private int erscheinungsjahr;
|
||||
|
||||
public Book(String name, String autor, int id, int erscheinungsjahr) {
|
||||
super(name, id, 4, 3); // Frist für Bücher ist 4 Wochen, bis zu 3 Mal verlängerbar
|
||||
this.autor = autor;
|
||||
this.erscheinungsjahr = erscheinungsjahr;
|
||||
}
|
||||
|
||||
// Getter-Methoden für spezifische Eigenschaften von Büchern
|
||||
public String getAutor() {
|
||||
return autor;
|
||||
}
|
||||
|
||||
public int getErscheinungsjahr() {
|
||||
return erscheinungsjahr;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Buch: " + name + " von " + autor + " (ID: " + id + ", Jahr: " + erscheinungsjahr + ")";
|
||||
}
|
||||
}
|
||||
|
||||
// Unterklasse für DVDs
|
||||
public static class Dvds extends Medien {
|
||||
private String regisseur;
|
||||
|
||||
public Dvds(String name, String regisseur, int id) {
|
||||
super(name, id, 7, 0); // Frist für DVDs ist 1 Woche, keine Verlängerung möglich
|
||||
this.regisseur = regisseur;
|
||||
}
|
||||
|
||||
// Getter-Methoden für spezifische Eigenschaften von DVDs
|
||||
public String getRegisseur() {
|
||||
return regisseur;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "DVD: " + name + " von " + regisseur + " (ID: " + id + ")";
|
||||
}
|
||||
}
|
||||
|
||||
// Unterklasse für CDs
|
||||
public static class Cds extends Medien {
|
||||
public Cds(String name, int id) {
|
||||
super(name, id, 14, 0); // Frist für CDs ist 2 Wochen, keine Verlängerung möglich
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "CD: " + name + " (ID: " + id + ")";
|
||||
}
|
||||
}
|
||||
|
||||
// Unterklasse für Brettspiele
|
||||
public static class Brettspiel extends Medien {
|
||||
public Brettspiel(String name, int id) {
|
||||
super(name, id, 14, 0); // Frist für Brettspiele ist 2 Wochen, keine Verlängerung möglich
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Brettspiel: " + name + " (ID: " + id + ")";
|
||||
}
|
||||
}
|
||||
|
||||
// Unterklasse für Videospiele
|
||||
public static class Videospiel extends Medien {
|
||||
private String entwickler;
|
||||
|
||||
public Videospiel(String name, String entwickler, int id) {
|
||||
super(name, id, 28 , 1); // Frist für Videospiele ist 4 Wochen, einmal verlängerbar
|
||||
this.entwickler = entwickler;
|
||||
}
|
||||
|
||||
// Getter-Methoden für spezifische Eigenschaften von Videospielen
|
||||
public String getEntwickler() {
|
||||
return entwickler;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Videospiel: " + name + " von " + entwickler + " (ID: " + id + ")";
|
||||
}
|
||||
}
|
||||
}
|
189
UI/Ui.java
189
UI/Ui.java
|
@ -1,189 +0,0 @@
|
|||
package UI;
|
||||
|
||||
import backend.benutzer.*;
|
||||
import fassade.*;
|
||||
import backend.creator.Creator;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.util.Scanner;
|
||||
|
||||
public class Ui {
|
||||
|
||||
private final Fassade fassade;
|
||||
private final Scanner scanner;
|
||||
|
||||
public Ui(Fassade fassade) {
|
||||
this.fassade = fassade;
|
||||
this.scanner = new Scanner(System.in);
|
||||
}
|
||||
|
||||
public void starten() {
|
||||
boolean weiter = true;
|
||||
while (weiter) {
|
||||
System.out.println("Bitte wählen Sie eine Option:");
|
||||
System.out.println("1. Medien durchsuchen");
|
||||
System.out.println("2. Benutzer registrieren");
|
||||
System.out.println("3. Benutzer anmelden");
|
||||
System.out.println("4. Medien ausleihen");
|
||||
System.out.println("5. Medien zurückgeben");
|
||||
System.out.println("6. Medien verlängern");
|
||||
System.out.println("7. Gebühren einsehen");
|
||||
System.out.println("8. Zeit verschieben");
|
||||
System.out.println("9. Admin-Login zur Gebührenverwaltung");
|
||||
System.out.println("10. Beenden");
|
||||
|
||||
int auswahl = scanner.nextInt();
|
||||
scanner.nextLine(); // Puffer leeren
|
||||
|
||||
switch (auswahl) {
|
||||
case 1: durchsuchenMedien(); break;
|
||||
case 2: registrierenBenutzer(); break;
|
||||
case 3: anmeldenBenutzer(); break;
|
||||
case 4: ausleihen(); break;
|
||||
case 5: rueckgabe(); break;
|
||||
case 6: verlaengern(); break;
|
||||
case 7: gebuehrenEinsehen(); break;
|
||||
case 8: zeitVerschieben(); break;
|
||||
case 9: adminLogin(); break;
|
||||
case 10: weiter = false; break;
|
||||
default: System.out.println("Ungültige Auswahl."); break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Medien durchsuchen
|
||||
private void durchsuchenMedien() {
|
||||
System.out.print("Suchbegriff (oder 'all' für alle Medien): ");
|
||||
String suchbegriff = scanner.nextLine();
|
||||
var ergebnisse = fassade.durchsuchenMedien(suchbegriff);
|
||||
if (ergebnisse.isEmpty()) {
|
||||
System.out.println("Keine Medien gefunden.");
|
||||
} else {
|
||||
ergebnisse.forEach(m -> System.out.println(m));
|
||||
}
|
||||
}
|
||||
|
||||
// Benutzer registrieren
|
||||
private void registrierenBenutzer() {
|
||||
System.out.print("Vorname: ");
|
||||
String vorname = scanner.nextLine();
|
||||
System.out.print("Nachname: ");
|
||||
String nachname = scanner.nextLine();
|
||||
System.out.print("Benutzertyp (e für Erwachsener, s für Schüler/Student): ");
|
||||
String art = scanner.nextLine();
|
||||
|
||||
// Benutzer über die Fassade registrieren
|
||||
Benutzer benutzer = Creator.factoryBenutzer(vorname, nachname, 0, art); // Kundennummer könnte hier 0 sein, wenn sie noch nicht vergeben wurde.
|
||||
|
||||
if (benutzer != null) {
|
||||
fassade.registriereBenutzer(benutzer);
|
||||
System.out.println("Benutzer erfolgreich registriert.");
|
||||
} else {
|
||||
System.out.println("Fehler: Ungültiger Benutzertyp.");
|
||||
}
|
||||
}
|
||||
|
||||
// Benutzer anmelden
|
||||
private void anmeldenBenutzer() {
|
||||
System.out.print("Kundennummer: ");
|
||||
int kundennummer = scanner.nextInt();
|
||||
scanner.nextLine(); // Puffer leeren
|
||||
Benutzer benutzer = fassade.anmeldenBenutzer(kundennummer);
|
||||
if (benutzer != null) {
|
||||
System.out.println("Benutzer angemeldet: " + benutzer.getName() + " " + benutzer.getNachname());
|
||||
} else {
|
||||
System.out.println("Benutzer nicht gefunden.");
|
||||
}
|
||||
}
|
||||
|
||||
// Medien ausleihen
|
||||
private void ausleihen() {
|
||||
System.out.print("Medien ID: ");
|
||||
int medienId = scanner.nextInt();
|
||||
System.out.print("Kundennummer: ");
|
||||
int kundennummer = scanner.nextInt();
|
||||
scanner.nextLine(); // Puffer leeren
|
||||
|
||||
Benutzer benutzer = fassade.anmeldenBenutzer(kundennummer);
|
||||
if (benutzer != null) {
|
||||
System.out.print("Rückgabedatum (yyyy-MM-dd): ");
|
||||
LocalDate rueckgabeDatum = LocalDate.parse(scanner.nextLine());
|
||||
fassade.ausleihen(medienId, benutzer, LocalDate.now(), rueckgabeDatum);
|
||||
System.out.println("Ausleihe erfolgreich.");
|
||||
} else {
|
||||
System.out.println("Benutzer nicht gefunden.");
|
||||
}
|
||||
}
|
||||
|
||||
// Medien zurückgeben
|
||||
private void rueckgabe() {
|
||||
System.out.print("Medien ID: ");
|
||||
int medienId = scanner.nextInt();
|
||||
System.out.print("Kundennummer: ");
|
||||
int kundennummer = scanner.nextInt();
|
||||
scanner.nextLine(); // Puffer leeren
|
||||
|
||||
Benutzer benutzer = fassade.anmeldenBenutzer(kundennummer);
|
||||
if (benutzer != null) {
|
||||
System.out.print("Rückgabedatum (yyyy-MM-dd): ");
|
||||
LocalDate rueckgabeDatum = LocalDate.parse(scanner.nextLine());
|
||||
fassade.rueckgabe(medienId, benutzer, rueckgabeDatum);
|
||||
System.out.println("Rückgabe erfolgreich.");
|
||||
} else {
|
||||
System.out.println("Benutzer nicht gefunden.");
|
||||
}
|
||||
}
|
||||
|
||||
// Medien verlängern
|
||||
private void verlaengern() {
|
||||
System.out.print("Medien ID: ");
|
||||
int medienId = scanner.nextInt();
|
||||
System.out.print("Kundennummer: ");
|
||||
int kundennummer = scanner.nextInt();
|
||||
scanner.nextLine(); // Puffer leeren
|
||||
|
||||
Benutzer benutzer = fassade.anmeldenBenutzer(kundennummer);
|
||||
if (benutzer != null) {
|
||||
fassade.verlaengern(medienId, benutzer);
|
||||
} else {
|
||||
System.out.println("Benutzer nicht gefunden.");
|
||||
}
|
||||
}
|
||||
|
||||
// Gebühren einsehen
|
||||
private void gebuehrenEinsehen() {
|
||||
System.out.print("Kundennummer: ");
|
||||
int kundennummer = scanner.nextInt();
|
||||
scanner.nextLine(); // Puffer leeren
|
||||
|
||||
Benutzer benutzer = fassade.anmeldenBenutzer(kundennummer);
|
||||
if (benutzer != null) {
|
||||
System.out.println("Ausstehende Gebühren: " + benutzer.getGebuehren() + "€");
|
||||
} else {
|
||||
System.out.println("Benutzer nicht gefunden.");
|
||||
}
|
||||
}
|
||||
|
||||
// Zeit verschieben
|
||||
private void zeitVerschieben() {
|
||||
System.out.print("Neue Zeit (yyyy-MM-dd): ");
|
||||
String datum = scanner.nextLine();
|
||||
fassade.zeitVerschieben(LocalDate.parse(datum));
|
||||
System.out.println("Aktuelles Datum wurde auf " + datum + " geändert.");
|
||||
}
|
||||
|
||||
// Admin-Login zur Gebührenverwaltung
|
||||
private void adminLogin() {
|
||||
System.out.print("Admin-Benutzername: ");
|
||||
String benutzername = scanner.nextLine();
|
||||
System.out.print("Admin-Passwort: ");
|
||||
String passwort = scanner.nextLine();
|
||||
|
||||
if (fassade.adminLogin(benutzername, passwort)) {
|
||||
System.out.println("Admin-Login erfolgreich.");
|
||||
fassade.verbucheUeberfaelligeGebuehren(); // Verbucht überfällige Gebühren
|
||||
} else {
|
||||
System.out.println("Falsche Admin-Zugangsdaten.");
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,291 @@
|
|||
import java.time.LocalDate;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
import java.util.*;
|
||||
|
||||
public class Ui {
|
||||
private final Scanner scanner = new Scanner(System.in);
|
||||
private final Verwaltung verwaltung;
|
||||
|
||||
// Zeitversatz für Tests
|
||||
private LocalDate aktuelleZeit = LocalDate.now();
|
||||
|
||||
public Ui(Verwaltung verwaltung) {
|
||||
this.verwaltung = verwaltung;
|
||||
}
|
||||
|
||||
void anmeldung() {
|
||||
boolean running = true;
|
||||
while (running) {
|
||||
System.out.println("Willkommen! Bitte wählen Sie eine Option:");
|
||||
System.out.println("1: Durchsuchen der Medien");
|
||||
System.out.println("2: Ausleihen eines Gegenstandes");
|
||||
System.out.println("3: Rückgabe eines Gegenstandes");
|
||||
System.out.println("4: Ausgeliehene Gegenstände und Gebühren anzeigen");
|
||||
System.out.println("5: Verlängern der Leihfrist");
|
||||
System.out.println("6: Verbuchen von überfälligen Gebühren (Admin)");
|
||||
System.out.println("7: Registrieren");
|
||||
System.out.println("8: Anmelden");
|
||||
System.out.println("9: Zeit verschieben (Testoption)");
|
||||
System.out.println("0: Programm beenden");
|
||||
|
||||
int menue = scanner.nextInt();
|
||||
scanner.nextLine(); // Leert den Puffer nach nextInt()
|
||||
|
||||
switch (menue) {
|
||||
case 1 -> suchenNachMedien();
|
||||
case 2 -> ausleihen();
|
||||
case 3 -> rueckgabeDurchfuehren();
|
||||
case 4 -> gebuehrenEinsehen();
|
||||
case 5 -> verlaengern();
|
||||
case 6 -> adminrechte();
|
||||
case 7 -> registrieren();
|
||||
case 8 -> anmelden();
|
||||
case 9 -> zeitVerschieben();
|
||||
case 0 -> {
|
||||
System.out.println("Programm wird beendet. Auf Wiedersehen!");
|
||||
running = false;
|
||||
}
|
||||
default -> System.out.println("Ungültige Auswahl. Bitte versuchen Sie es erneut.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void suchenNachMedien() {
|
||||
System.out.println("Bitte geben Sie stichwortartig an, wonach Sie suchen:");
|
||||
String suchbegriff = scanner.nextLine();
|
||||
|
||||
List<Medien> gefundeneMedien = Verwaltung.durchsuchenMedien(verwaltung.mediensListe, suchbegriff);
|
||||
|
||||
if (gefundeneMedien.isEmpty()) {
|
||||
System.out.println("Keine Medien gefunden.");
|
||||
} else {
|
||||
System.out.println("Gefundene Medien:");
|
||||
for (Medien medien : gefundeneMedien) {
|
||||
System.out.print(medien.getName());
|
||||
|
||||
if (medien.istAusgeliehen) {
|
||||
Optional<Aausleihe> ausleiheOpt = verwaltung.ausliste.stream()
|
||||
.filter(ausleihe -> ausleihe.getMedien().equals(medien))
|
||||
.findFirst();
|
||||
|
||||
if (ausleiheOpt.isPresent()) {
|
||||
Aausleihe ausleihe = ausleiheOpt.get();
|
||||
LocalDate rueckgabedatum = ausleihe.getDate().plusWeeks(medien.frist);
|
||||
System.out.println(" ist ausgeliehen. Rückgabedatum: " + rueckgabedatum);
|
||||
}
|
||||
} else {
|
||||
System.out.println(" ist verfügbar.");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void registrieren() {
|
||||
System.out.print("Geben Sie Ihren Vornamen ein: ");
|
||||
String name = scanner.nextLine();
|
||||
|
||||
System.out.print("Geben Sie Ihren Nachnamen ein: ");
|
||||
String nachname = scanner.nextLine();
|
||||
|
||||
System.out.print("Für Student geben Sie 's' und für Erwachsener 'e' ein: ");
|
||||
String artInput = scanner.nextLine();
|
||||
|
||||
int genkundennummer = verwaltung.generiereEindeutigeKundennummer();
|
||||
Benutzer neuerBenutzer = Creator.factoryBenutzer(name, nachname, genkundennummer, artInput.toLowerCase());
|
||||
|
||||
if (neuerBenutzer != null) {
|
||||
verwaltung.benutzerListe.add(neuerBenutzer);
|
||||
System.out.println("Registrierung erfolgreich! Ihre Kundennummer lautet: " + genkundennummer);
|
||||
} else {
|
||||
System.out.println("Ungültige Art. Versuchen Sie es erneut.");
|
||||
}
|
||||
}
|
||||
|
||||
private Benutzer anmelden() {
|
||||
System.out.print("Geben Sie Ihre Kundennummer zur Anmeldung ein: ");
|
||||
int eingabeKundennummer = scanner.nextInt();
|
||||
scanner.nextLine(); // Puffer leeren
|
||||
|
||||
Optional<Benutzer> benutzerOpt = verwaltung.benutzerListe.stream()
|
||||
.filter(benutzer -> benutzer.getKundennummer() == eingabeKundennummer)
|
||||
.findFirst();
|
||||
|
||||
if (benutzerOpt.isPresent()) {
|
||||
System.out.println("Willkommen zurück, " + benutzerOpt.get().getName());
|
||||
return benutzerOpt.get();
|
||||
} else {
|
||||
System.out.println("Kundennummer nicht gefunden.");
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private void ausleihen() {
|
||||
Benutzer benutzer = anmelden();
|
||||
if (benutzer == null) {
|
||||
System.out.println("Sie müssen sich zuerst anmelden.");
|
||||
return;
|
||||
}
|
||||
|
||||
System.out.print("Geben Sie die ID des gewünschten Mediums ein: ");
|
||||
int id = scanner.nextInt();
|
||||
scanner.nextLine(); // Puffer leeren
|
||||
|
||||
Optional<Medien> optionalMedien = verwaltung.mediensListe.stream()
|
||||
.filter(medien -> medien.getId() == id)
|
||||
.findFirst();
|
||||
|
||||
if (optionalMedien.isPresent()) {
|
||||
Medien medien = optionalMedien.get();
|
||||
if (!medien.istAusgeliehen()) {
|
||||
verwaltung.addAL(medien, benutzer, aktuelleZeit, null);
|
||||
System.out.println("Das Medium wurde erfolgreich ausgeliehen.");
|
||||
} else {
|
||||
System.out.println("Das Medium ist bereits ausgeliehen.");
|
||||
}
|
||||
} else {
|
||||
System.out.println("Medium mit dieser ID nicht gefunden.");
|
||||
}
|
||||
}
|
||||
|
||||
private void rueckgabeDurchfuehren() {
|
||||
Benutzer benutzer = anmelden();
|
||||
if (benutzer == null) {
|
||||
System.out.println("Sie müssen sich zuerst anmelden.");
|
||||
return;
|
||||
}
|
||||
|
||||
System.out.print("Geben Sie die ID des Mediums ein, das Sie zurückgeben möchten: ");
|
||||
int id = scanner.nextInt();
|
||||
scanner.nextLine(); // Puffer leeren
|
||||
|
||||
Optional<Medien> optionalMedien = verwaltung.mediensListe.stream()
|
||||
.filter(medien -> medien.getId() == id)
|
||||
.findFirst();
|
||||
|
||||
if (optionalMedien.isPresent()) {
|
||||
verwaltung.rueckgabe(id, benutzer, aktuelleZeit);
|
||||
System.out.println("Das Medium wurde erfolgreich zurückgegeben.");
|
||||
} else {
|
||||
System.out.println("Medium mit dieser ID nicht gefunden.");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void verlaengern() {
|
||||
Benutzer benutzer = anmelden();
|
||||
if (benutzer == null) {
|
||||
System.out.println("Sie müssen sich zuerst anmelden.");
|
||||
return;
|
||||
}
|
||||
|
||||
System.out.print("Geben Sie die ID des Mediums ein, das Sie verlängern möchten: ");
|
||||
int id = scanner.nextInt();
|
||||
scanner.nextLine(); // Puffer leeren
|
||||
|
||||
Optional<Medien> optionalMedien = verwaltung.mediensListe.stream()
|
||||
.filter(medien -> medien.getId() == id)
|
||||
.findFirst();
|
||||
|
||||
if (optionalMedien.isPresent()) {
|
||||
verwaltung.verlängern(optionalMedien.get(), benutzer);
|
||||
System.out.println("Das Medium wurde verlängert.");
|
||||
} else {
|
||||
System.out.println("Medium mit dieser ID nicht gefunden.");
|
||||
}
|
||||
}
|
||||
|
||||
private void adminrechte() {
|
||||
System.out.print("Geben Sie den Admin-Benutzernamen ein: ");
|
||||
String benutzername = scanner.nextLine();
|
||||
System.out.print("Geben Sie das Admin-Passwort ein: ");
|
||||
String passwort = scanner.nextLine();
|
||||
|
||||
if (benutzername.equals("admin") && passwort.equals("admin123")) {
|
||||
System.out.println("Admin-Login erfolgreich.");
|
||||
verbucheUeberfaelligeGebuehren();
|
||||
} else {
|
||||
System.out.println("Falsche Admin-Zugangsdaten.");
|
||||
}
|
||||
System.out.println("möchten sie zahlungen löschem geben sie benutzer id ein");
|
||||
int id=scanner.nextInt();
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
private void verbucheUeberfaelligeGebuehren() {
|
||||
System.out.println("Verbuchen überfälliger Gebühren:");
|
||||
|
||||
for (Aausleihe ausleihe : verwaltung.ausliste) {
|
||||
Medien medien = ausleihe.getMedien();
|
||||
Benutzer benutzer = ausleihe.getBenutzer();
|
||||
LocalDate faelligkeitsdatum = ausleihe.getDate().plusDays(medien.frist);
|
||||
|
||||
if (aktuelleZeit.isAfter(faelligkeitsdatum)) {
|
||||
long ueberfaelligeWochen = ChronoUnit.DAYS.between(faelligkeitsdatum, aktuelleZeit);
|
||||
double gebuehr = ueberfaelligeWochen;
|
||||
System.out.println("Benutzer: " + benutzer.getName() + ", Medium: " + medien.getName() +
|
||||
", Überfällige Wochen: " + ueberfaelligeWochen + ", Gebühr: " + gebuehr + " EUR");
|
||||
}
|
||||
}
|
||||
}
|
||||
private void gebuehrenEinsehen() {
|
||||
Benutzer benutzer = anmelden();
|
||||
if (benutzer == null) {
|
||||
System.out.println("Sie müssen sich zuerst anmelden.");
|
||||
return;
|
||||
}
|
||||
|
||||
System.out.println("Ihre ausstehenden Gebühren:");
|
||||
List<Aausleihe> ausleihen = verwaltung.getAusleihenByBenutzer(benutzer);
|
||||
|
||||
if (ausleihen.isEmpty()) {
|
||||
System.out.println("Sie haben keine ausgeliehenen Medien.");
|
||||
return;
|
||||
}
|
||||
|
||||
boolean hatAusgelieheneMedien = false;
|
||||
|
||||
for (Aausleihe ausleihe : ausleihen) {
|
||||
Medien medien = ausleihe.getMedien();
|
||||
|
||||
// Prüfen, ob das Medium ausgeliehen ist
|
||||
if (!medien.istAusgeliehen()) {
|
||||
continue; // Überspringt Medien, die nicht ausgeliehen sind
|
||||
}
|
||||
|
||||
hatAusgelieheneMedien = true; // Mindestens ein Medium ist ausgeliehen
|
||||
|
||||
LocalDate faelligkeitsdatum = ausleihe.getDate().plusWeeks(medien.frist);
|
||||
double gebuehr = 0;
|
||||
|
||||
// Gebühren berechnen, wenn das Medium überfällig ist
|
||||
if (aktuelleZeit.isAfter(faelligkeitsdatum)) {
|
||||
long ueberfaelligeTage = ChronoUnit.DAYS.between(faelligkeitsdatum, aktuelleZeit);
|
||||
gebuehr = ueberfaelligeTage * 2.0; // 2 EUR pro überfälligem Tag
|
||||
}
|
||||
|
||||
// Details zum Medium ausgeben
|
||||
System.out.println("Medium: " + medien.getName() +
|
||||
", Fälligkeitsdatum: " + faelligkeitsdatum +
|
||||
", Gebühr: " + gebuehr + " EUR");
|
||||
}
|
||||
|
||||
if (!hatAusgelieheneMedien) {
|
||||
System.out.println("Sie haben keine ausgeliehenen Medien.");
|
||||
}
|
||||
}
|
||||
|
||||
private void zeitVerschieben() {
|
||||
System.out.println("Aktuelles Datum: " + aktuelleZeit);
|
||||
System.out.print("Geben Sie das neue Datum im Format JJJJ-MM-TT ein: ");
|
||||
String neuesDatum = scanner.nextLine();
|
||||
|
||||
try {
|
||||
aktuelleZeit = LocalDate.parse(neuesDatum);
|
||||
System.out.println("Die Zeit wurde erfolgreich auf " + aktuelleZeit + " geändert.");
|
||||
} catch (Exception e) {
|
||||
System.out.println("Ungültiges Datum. Bitte versuchen Sie es erneut.");
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,8 +1,4 @@
|
|||
package fassade;
|
||||
import backend.benutzer.*;
|
||||
import backend.medium.*;
|
||||
import backend.creator.Creator;
|
||||
|
||||
import javax.crypto.spec.PSource;
|
||||
import java.time.LocalDate;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
import java.util.*;
|
||||
|
@ -12,8 +8,8 @@ import java.util.stream.Collectors;
|
|||
|
||||
public class Verwaltung {
|
||||
|
||||
public LinkedList<Medien> mediensListe = new LinkedList<>();
|
||||
public LinkedList<Benutzer> benutzerListe = new LinkedList<>();
|
||||
LinkedList<Medien> mediensListe = new LinkedList<>();
|
||||
LinkedList<Benutzer> benutzerListe = new LinkedList<>();
|
||||
static LinkedList<Aausleihe> ausliste = new LinkedList<>();
|
||||
Long wochenDauer;
|
||||
|
||||
|
@ -32,10 +28,6 @@ public class Verwaltung {
|
|||
return new Random().ints(7, 0, 10)
|
||||
.reduce(0, (acc, digit) -> acc * 10 + digit);
|
||||
}
|
||||
public List<Aausleihe> getAlleAusleihen() {
|
||||
return new ArrayList<>(ausliste); // gibt alle Ausleihen zurück
|
||||
}
|
||||
|
||||
|
||||
|
||||
public int generiereEindeutigeKundennummer() {
|
||||
|
@ -61,15 +53,15 @@ public class Verwaltung {
|
|||
boolean gefunden = false;
|
||||
|
||||
// Überprüfe, ob die Art des Mediums im Suchbegriff enthalten ist
|
||||
if (medien instanceof Book) {
|
||||
if (medien instanceof Medien.Book) {
|
||||
gefunden |= "buch".contains(suchbegriffKlein);
|
||||
} else if (medien instanceof Dvds) {
|
||||
} else if (medien instanceof Medien.Dvds) {
|
||||
gefunden |= "dvd".contains(suchbegriffKlein);
|
||||
} else if (medien instanceof Cds) {
|
||||
} else if (medien instanceof Medien.Cds) {
|
||||
gefunden |= "cd".contains(suchbegriffKlein);
|
||||
} else if (medien instanceof Brettspiel) {
|
||||
gefunden |= "sb".contains(suchbegriffKlein); // "sb" für backend.medium.Brettspiel
|
||||
} else if (medien instanceof Videospiel) {
|
||||
} else if (medien instanceof Medien.Brettspiel) {
|
||||
gefunden |= "sb".contains(suchbegriffKlein); // "sb" für Brettspiel
|
||||
} else if (medien instanceof Medien.Videospiel) {
|
||||
gefunden |= "videospiel".contains(suchbegriffKlein);
|
||||
}
|
||||
|
||||
|
@ -88,10 +80,10 @@ public class Verwaltung {
|
|||
System.out.println("Das Medium ist bereits ausgeliehen.");
|
||||
} else {
|
||||
|
||||
Aausleihe aausleihe = new Aausleihe(medien, benutzer, ausleihDatum,reuckgabeDatum); // Neues fassade.Aausleihe-Objekt erstellen
|
||||
Aausleihe aausleihe = new Aausleihe(medien, benutzer, ausleihDatum,reuckgabeDatum); // Neues Aausleihe-Objekt erstellen
|
||||
ausliste.add(aausleihe);
|
||||
medien.istAusgeliehen = true;
|
||||
|
||||
medien.maxVerlängerungen--;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -140,9 +132,9 @@ public class Verwaltung {
|
|||
|
||||
|
||||
void rueckgabe(int medienId, Benutzer benutzer, LocalDate rueckgabeDatum) {
|
||||
// Durchsuche die Ausleihen (ausliste) nach einer Übereinstimmung mit backend.medium.Medien-ID und Benutzer-ID
|
||||
// Durchsuche die Ausleihen (ausliste) nach einer Übereinstimmung mit Medien-ID und Benutzer-ID
|
||||
for (Aausleihe ausleihe : ausliste) {
|
||||
// Vergleiche backend.medium.Medien-ID und Benutzer-ID
|
||||
// Vergleiche Medien-ID und Benutzer-ID
|
||||
if (ausleihe.getMedien().getId() == medienId && ausleihe.getBenutzer().equals(benutzer)) {
|
||||
// Wenn das Medium und der Benutzer übereinstimmen
|
||||
ausleihe.setRueckgabeDatum(rueckgabeDatum); // Setze das Rückgabedatum
|
||||
|
@ -161,7 +153,7 @@ public class Verwaltung {
|
|||
|
||||
|
||||
public void verbuchenGebuehren(Benutzer benutzer) {
|
||||
// backend.benutzer.Admin prüft, ob Gebühren vorhanden sind
|
||||
// Admin prüft, ob Gebühren vorhanden sind
|
||||
double gebuehren = benutzer.getGebuehren();
|
||||
if (gebuehren > 0) {
|
||||
System.out.println("Gebühren von " + gebuehren + "€ wurden erfolgreich verbucht.");
|
||||
|
@ -172,13 +164,14 @@ public class Verwaltung {
|
|||
}
|
||||
|
||||
|
||||
public void verlängern(Medien medien, Benutzer benutzer) {
|
||||
public void verlängern(Medien medien, Benutzer benutzer) {
|
||||
for (Aausleihe aausleihe : ausliste) {
|
||||
// Überprüfen, ob das richtige Medium und der richtige Benutzer vorliegen
|
||||
if (aausleihe.getMedien().equals(medien) && aausleihe.getBenutzer().equals(benutzer)) {
|
||||
if (medien.kannVerlängern()) { // backend.medium.Medien.verlängern() prüft, ob noch Verlängerungen möglich sind
|
||||
if (medien.verlängern()&& medien.kannVerlängern()) { // Medien.verlängern() prüft, ob noch Verlängerungen möglich sind
|
||||
System.out.println("Das Medium wurde erfolgreich verlängert. Aktuelle Verlängerungen: " + medien.getMaxVerlängerungen());
|
||||
medien.verlängern();
|
||||
medien.maxVerlängerungen--;
|
||||
medien.aktuelleVerlängerungen++;
|
||||
} else {
|
||||
System.out.println("Keine weitere Verlängerung möglich. Maximale Anzahl erreicht.");
|
||||
}
|
||||
|
@ -194,7 +187,6 @@ public class Verwaltung {
|
|||
|
||||
|
||||
|
||||
|
||||
public double berechneGebuehren(Aausleihe aausleihe, LocalDate aktuellesDatum) {
|
||||
long tageÜberfällig = ChronoUnit.DAYS.between(aausleihe.getRueckgabeDatum(), aktuellesDatum);
|
||||
if (tageÜberfällig <= 0) {
|
|
@ -1,8 +0,0 @@
|
|||
// Datei: Erwachsener.java
|
||||
package backend.benutzer;
|
||||
|
||||
public class Erwachsener extends Benutzer {
|
||||
public Erwachsener(String name, String nachname, int kundennummer) {
|
||||
super(name, nachname, kundennummer, "Erwachsener");
|
||||
}
|
||||
}
|
|
@ -1,8 +0,0 @@
|
|||
// Datei: SchuelerStudent.java
|
||||
package backend.benutzer;
|
||||
|
||||
public class SchuelerStudent extends Benutzer {
|
||||
public SchuelerStudent(String name, String nachname, int kundennummer, String art) {
|
||||
super(name, nachname, kundennummer, art);
|
||||
}
|
||||
}
|
|
@ -1,34 +0,0 @@
|
|||
package backend.creator; // Creator gehört zum benutzer-Paket
|
||||
import backend.medium.*; // Importiert alle Klassen aus dem medium-Paket
|
||||
import backend.benutzer.*;// Optional, falls du auf die anderen Benutzer-Klassen zugreifen möchtest
|
||||
|
||||
public class Creator {
|
||||
// Factory-Methode für Benutzer
|
||||
public static Benutzer factoryBenutzer(String name, String nachname, int kundennummer, String art) {
|
||||
if (art.equalsIgnoreCase("e")) {
|
||||
return new Erwachsener(name, nachname, kundennummer); // Erstelle einen Erwachsenen
|
||||
} else if (art.equalsIgnoreCase("s")) {
|
||||
return new SchuelerStudent(name, nachname, kundennummer, art); // Erstelle einen Schüler/Studenten
|
||||
} else {
|
||||
return null; // Unbekannte Benutzerart
|
||||
}
|
||||
}
|
||||
|
||||
// Factory-Methode für backend.medium.Medien
|
||||
public static Medien factoryMedien(String name, String regisseur, int id, String art, int erscheinungsjahr) {
|
||||
switch (art.toLowerCase()) {
|
||||
case "buch":
|
||||
return new Book(name, regisseur, id, erscheinungsjahr);
|
||||
case "dvd":
|
||||
return new Dvds(name, regisseur, id);
|
||||
case "cd":
|
||||
return new Cds(name, id);
|
||||
case "sb":
|
||||
return new Brettspiel(name, id);
|
||||
case "videospiel":
|
||||
return new Videospiel(name, regisseur, id);
|
||||
default:
|
||||
throw new IllegalArgumentException("Unbekannter Medientyp: " + art);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,26 +0,0 @@
|
|||
package backend.medium;
|
||||
|
||||
public class Book extends Medien {
|
||||
private String autor;
|
||||
private int erscheinungsjahr;
|
||||
|
||||
public Book(String name, String autor, int id, int erscheinungsjahr) {
|
||||
super(name, id, 4, 3); // Frist für Bücher ist 4 Wochen, bis zu 3 Mal verlängerbar
|
||||
this.autor = autor;
|
||||
this.erscheinungsjahr = erscheinungsjahr;
|
||||
}
|
||||
|
||||
// Getter-Methoden für spezifische Eigenschaften von Büchern
|
||||
public String getAutor() {
|
||||
return autor;
|
||||
}
|
||||
|
||||
public int getErscheinungsjahr() {
|
||||
return erscheinungsjahr;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Buch: " + name + " von " + autor + " (ID: " + id + ", Jahr: " + erscheinungsjahr + ")";
|
||||
}
|
||||
}
|
|
@ -1,12 +0,0 @@
|
|||
package backend.medium;
|
||||
|
||||
public class Brettspiel extends Medien {
|
||||
public Brettspiel(String name, int id) {
|
||||
super(name, id, 14, 0); // Frist für Brettspiele ist 2 Wochen, keine Verlängerung möglich
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "backend.medium.Brettspiel: " + name + " (ID: " + id + ")";
|
||||
}
|
||||
}
|
|
@ -1,12 +0,0 @@
|
|||
package backend.medium;
|
||||
|
||||
public class Cds extends Medien {
|
||||
public Cds(String name, int id) {
|
||||
super(name, id, 14, 0); // Frist für CDs ist 2 Wochen, keine Verlängerung möglich
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "CD: " + name + " (ID: " + id + ")";
|
||||
}
|
||||
}
|
|
@ -1,20 +0,0 @@
|
|||
package backend.medium;
|
||||
|
||||
public class Dvds extends Medien {
|
||||
private String regisseur;
|
||||
|
||||
public Dvds(String name, String regisseur, int id) {
|
||||
super(name, id, 7, 0); // Frist für DVDs ist 1 Woche, keine Verlängerung möglich
|
||||
this.regisseur = regisseur;
|
||||
}
|
||||
|
||||
// Getter-Methoden für spezifische Eigenschaften von DVDs
|
||||
public String getRegisseur() {
|
||||
return regisseur;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "DVD: " + name + " von " + regisseur + " (ID: " + id + ")";
|
||||
}
|
||||
}
|
|
@ -1,76 +0,0 @@
|
|||
package backend.medium;
|
||||
|
||||
// Interface für backend.medium.Medien, die ausgeliehen werden können
|
||||
interface Ausleihbar {
|
||||
int getMaxVerlängerungen(); // Gibt die maximale Anzahl an Verlängerungen zurück
|
||||
boolean kannVerlängern(); // Prüft, ob das Medium verlängerbar ist
|
||||
boolean verlängern(); // Verlängert das Medium, wenn möglich
|
||||
}
|
||||
|
||||
// Abstrakte Basisklasse für alle backend.medium.Medien
|
||||
public abstract class Medien implements Ausleihbar {
|
||||
protected String name;
|
||||
protected int id;
|
||||
protected int frist; // Standard-Ausleihfrist in Wochen
|
||||
protected int maxVerlängerungen; // Maximale Anzahl an möglichen Verlängerungen
|
||||
protected int aktuelleVerlängerungen = 0; // Aktuelle Anzahl an durchgeführten Verlängerungen
|
||||
public boolean istAusgeliehen; // Status, ob das Medium ausgeliehen ist
|
||||
|
||||
// Konstruktor
|
||||
public Medien(String name, int id, int frist, int maxVerlängerungen) {
|
||||
this.name = name;
|
||||
this.id = id;
|
||||
this.frist = frist;
|
||||
this.maxVerlängerungen = maxVerlängerungen;
|
||||
}
|
||||
|
||||
// Getter-Methoden
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public int getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
// Implementierung der backend.medium.Ausleihbar-Methoden
|
||||
@Override
|
||||
public int getMaxVerlängerungen() {
|
||||
return maxVerlängerungen;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean kannVerlängern() {
|
||||
return aktuelleVerlängerungen < maxVerlängerungen;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean verlängern() {
|
||||
if (kannVerlängern()) {
|
||||
aktuelleVerlängerungen++;
|
||||
return true; // Verlängerung erfolgreich
|
||||
}
|
||||
return false; // Keine Verlängerung mehr möglich
|
||||
}
|
||||
|
||||
public boolean istAusgeliehen() {
|
||||
return istAusgeliehen;
|
||||
}
|
||||
|
||||
public void ausleihen() {
|
||||
if (!istAusgeliehen) {
|
||||
istAusgeliehen = true;
|
||||
} else {
|
||||
System.out.println("Das Medium ist bereits ausgeliehen.");
|
||||
}
|
||||
}
|
||||
|
||||
public int getAktuelleVerlängerungen() {
|
||||
return aktuelleVerlängerungen;
|
||||
}
|
||||
|
||||
|
||||
public void zurückgeben() {
|
||||
istAusgeliehen = false;
|
||||
}
|
||||
}
|
|
@ -1,20 +0,0 @@
|
|||
package backend.medium;
|
||||
|
||||
public class Videospiel extends Medien {
|
||||
private String entwickler;
|
||||
|
||||
public Videospiel(String name, String entwickler, int id) {
|
||||
super(name, id, 28, 1); // Frist für Videospiele ist 4 Wochen, einmal verlängerbar
|
||||
this.entwickler = entwickler;
|
||||
}
|
||||
|
||||
// Getter-Methoden für spezifische Eigenschaften von Videospielen
|
||||
public String getEntwickler() {
|
||||
return entwickler;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "backend.medium.Videospiel: " + name + " von " + entwickler + " (ID: " + id + ")";
|
||||
}
|
||||
}
|
|
@ -1,110 +0,0 @@
|
|||
package fassade;
|
||||
|
||||
import backend.medium.Medien;
|
||||
import backend.benutzer.*;
|
||||
import fassade.Aausleihe;
|
||||
import java.time.LocalDate;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
|
||||
|
||||
public class Fassade {
|
||||
|
||||
private final Verwaltung verwaltung;
|
||||
private LocalDate aktuellesDatum;
|
||||
|
||||
// Dummy Admin-Zugangsdaten
|
||||
private static final String ADMIN_USERNAME = "admin";
|
||||
private static final String ADMIN_PASSWORD = "admin123";
|
||||
|
||||
// Konstruktor
|
||||
public Fassade(Verwaltung verwaltung) {
|
||||
this.verwaltung = verwaltung;
|
||||
this.aktuellesDatum = LocalDate.now(); // Initiales Datum ist das heutige Datum
|
||||
}
|
||||
|
||||
// Benutzer registrieren
|
||||
public void registriereBenutzer(Benutzer benutzer) {
|
||||
verwaltung.addBenutzer(benutzer); // Benutzer zur fassade.Verwaltung hinzufügen
|
||||
}
|
||||
|
||||
// Benutzer anmelden
|
||||
public Benutzer anmeldenBenutzer(int kundennummer) {
|
||||
return verwaltung.benutzerListe.stream()
|
||||
.filter(b -> b.getKundennummer() == kundennummer)
|
||||
.findFirst()
|
||||
.orElse(null); // Gibt null zurück, wenn Benutzer nicht gefunden wurde
|
||||
}
|
||||
|
||||
// backend.medium.Medien durchsuchen
|
||||
public List<Medien> durchsuchenMedien(String suchbegriff) {
|
||||
return verwaltung.durchsuchenMedien(verwaltung.mediensListe, suchbegriff);
|
||||
}
|
||||
|
||||
// backend.medium.Medien ausleihen
|
||||
public void ausleihen(int medienId, Benutzer benutzer, LocalDate ausleihDatum, LocalDate rueckgabeDatum) {
|
||||
Medien medien = verwaltung.mediensListe.stream()
|
||||
.filter(m -> m.getId() == medienId)
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
|
||||
if (medien != null) {
|
||||
verwaltung.addAL(medien, benutzer, ausleihDatum, rueckgabeDatum); // Leihe das Medium aus
|
||||
} else {
|
||||
System.out.println("backend.medium.Medien nicht gefunden.");
|
||||
}
|
||||
}
|
||||
|
||||
// backend.medium.Medien zurückgeben
|
||||
public void rueckgabe(int medienId, Benutzer benutzer, LocalDate rueckgabeDatum) {
|
||||
verwaltung.rueckgabe(medienId, benutzer, rueckgabeDatum); // Rückgabe des Mediums
|
||||
}
|
||||
|
||||
// backend.medium.Medien verlängern
|
||||
public void verlaengern(int medienId, Benutzer benutzer) {
|
||||
Medien medien = verwaltung.mediensListe.stream()
|
||||
.filter(m -> m.getId() == medienId)
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
|
||||
if (medien != null) {
|
||||
verwaltung.verlängern(medien, benutzer); // Verlängere die Leihfrist
|
||||
} else {
|
||||
System.out.println("backend.medium.Medien nicht gefunden.");
|
||||
}
|
||||
}
|
||||
|
||||
// Zeit verschieben
|
||||
public void zeitVerschieben(LocalDate neuesDatum) {
|
||||
this.aktuellesDatum = neuesDatum; // Aktuelles Datum auf das neue Datum setzen
|
||||
}
|
||||
|
||||
// Aktuelles Datum abrufen
|
||||
public LocalDate getAktuellesDatum() {
|
||||
return aktuellesDatum; // Gibt das aktuelle Datum zurück
|
||||
}
|
||||
|
||||
// Admin-Login-Methode
|
||||
public boolean adminLogin(String benutzername, String passwort) {
|
||||
return ADMIN_USERNAME.equals(benutzername) && ADMIN_PASSWORD.equals(passwort);
|
||||
}
|
||||
|
||||
// Methode zum Verbuchen überfälliger Gebühren
|
||||
public void verbucheUeberfaelligeGebuehren() {
|
||||
// Hole alle überfälligen Ausleihen
|
||||
List<Aausleihe> ueberfaelligAusleihen = verwaltung.getAlleAusleihen().stream()
|
||||
.filter(ausleihe -> LocalDate.now().isAfter(ausleihe.getRueckgabeDatum()) && !ausleihe.getMedien().istAusgeliehen())
|
||||
.collect(Collectors.toList());
|
||||
|
||||
// Gebühr für jede überfällige Ausleihe berechnen und dem Benutzer hinzufügen
|
||||
for (Aausleihe ausleihe : ueberfaelligAusleihen) {
|
||||
Benutzer benutzer = ausleihe.getBenutzer();
|
||||
long ueberfaelligeTage = ChronoUnit.DAYS.between(ausleihe.getRueckgabeDatum(), LocalDate.now());
|
||||
double gebuehr = ueberfaelligeTage * 2.0; // Beispiel: 2 EUR pro überfälligem Tag
|
||||
benutzer.addGebuehr(gebuehr); // Gebühr dem Benutzer hinzufügen
|
||||
System.out.println("Gebühr für " + benutzer.getName() + ": " + gebuehr + " EUR");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue