funktionen hinzügefügt und einfache ui erstellt fehlt ausleihen und spezifische funktionen wie zaheln usw.
parent
b59a9cc642
commit
09ee662ab2
|
@ -1,4 +1,50 @@
|
||||||
|
import java.time.LocalDate;
|
||||||
|
|
||||||
public class Aausleihe {
|
public class Aausleihe {
|
||||||
|
private Medien medien;
|
||||||
|
private Benutzer benutzer;
|
||||||
|
private LocalDate date; // Ausleihdatum
|
||||||
|
private LocalDate rueckgabeDatum; // Rückgabedatum
|
||||||
|
|
||||||
|
// Konstruktor für die Aausleihe
|
||||||
|
Aausleihe(Medien medien, Benutzer benutzer, LocalDate date, LocalDate rueckgabeDatum) {
|
||||||
|
this.medien = medien;
|
||||||
|
this.benutzer = benutzer;
|
||||||
|
this.date = date;
|
||||||
|
this.rueckgabeDatum = rueckgabeDatum;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Getter für den Benutzer
|
||||||
|
public Benutzer getBenutzer() {
|
||||||
|
return benutzer;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Getter für das Medium
|
||||||
|
public Medien getMedien() {
|
||||||
|
return medien;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Getter für das Ausleihdatum
|
||||||
|
public LocalDate getDate() {
|
||||||
|
return date;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Getter und Setter für das Rückgabedatum
|
||||||
|
public LocalDate getRueckgabeDatum() {
|
||||||
|
return rueckgabeDatum;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRueckgabeDatum(LocalDate rueckgabeDatum) {
|
||||||
|
this.rueckgabeDatum = rueckgabeDatum;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "Aausleihe{" +
|
||||||
|
"medien=" + medien +
|
||||||
|
", benutzer=" + benutzer +
|
||||||
|
", ausleihdatum=" + date +
|
||||||
|
", rueckgabedatum=" + rueckgabeDatum +
|
||||||
|
'}';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,33 @@
|
||||||
|
class Admin {
|
||||||
|
private final String name = "zabih";
|
||||||
|
private final String nachname = "Mansuri";
|
||||||
|
private final int passwort = 1234;
|
||||||
|
private final String art = "Admin";
|
||||||
|
|
||||||
|
// Getter-Methoden
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getNachname() {
|
||||||
|
return nachname;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getPasswort() {
|
||||||
|
return passwort;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getArt() {
|
||||||
|
return art;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "Admin{" +
|
||||||
|
"Name='" + name + '\'' +
|
||||||
|
", Nachname='" + nachname + '\'' +
|
||||||
|
", Passwort=" + passwort +
|
||||||
|
", Art='" + art + '\'' +
|
||||||
|
'}';
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,65 +1,85 @@
|
||||||
|
class Benutzer {
|
||||||
import java.util.Date;
|
|
||||||
import java.util.Calendar;
|
|
||||||
|
|
||||||
class Benutzer {
|
|
||||||
private String name;
|
private String name;
|
||||||
private String nachname;
|
private String nachname;
|
||||||
private int kundennummer;
|
private int kundennummer;
|
||||||
private Date date;
|
private String art; // Benutzerart (Erwachsener, Schüler/Student, etc.)
|
||||||
|
private double jahresgebuehr; // Jahresgebühr des Benutzers
|
||||||
|
private double gebuehren; // Aktuelle ausstehende Gebühren des Benutzers
|
||||||
|
|
||||||
// Konstruktor
|
// Konstruktor
|
||||||
Benutzer(String name, String nachname, int kundennummer, Date date) {
|
public Benutzer(String name, String nachname, int kundennummer, String art) {
|
||||||
this.name = name;
|
this.name = name;
|
||||||
this.nachname = nachname;
|
this.nachname = nachname;
|
||||||
this.date = date;
|
|
||||||
this.kundennummer = kundennummer;
|
this.kundennummer = kundennummer;
|
||||||
|
this.art = art;
|
||||||
|
|
||||||
|
// Jahresgebühr festlegen basierend auf der Benutzerart
|
||||||
|
if (art.equalsIgnoreCase("Erwachsener")) {
|
||||||
|
this.jahresgebuehr = 50.0; // Beispiel für regulären Preis
|
||||||
|
} else if (art.equalsIgnoreCase("Schüler/Student")) {
|
||||||
|
this.jahresgebuehr = 25.0; // Beispiel für ermäßigten Preis
|
||||||
|
} else {
|
||||||
|
this.jahresgebuehr = 0.0; // Default-Wert, z. B. für Admins oder Kinder
|
||||||
|
}
|
||||||
|
this.gebuehren = 0.0; // Anfangs keine Gebühren
|
||||||
}
|
}
|
||||||
|
|
||||||
// Getter-Methoden
|
// Getter- und Setter-Methoden
|
||||||
public String getNachname() {
|
|
||||||
return nachname;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getName() {
|
public String getName() {
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Date getDate() {
|
public String getNachname() {
|
||||||
return date;
|
return nachname;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getKundennummer() {
|
public int getKundennummer() {
|
||||||
return kundennummer;
|
return kundennummer;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Methode zum Extrahieren des Jahres aus dem Date
|
public String getArt() {
|
||||||
public static int getJahr(Benutzer benutzer) {
|
return art;
|
||||||
Calendar calendar = Calendar.getInstance();
|
|
||||||
calendar.setTime(benutzer.getDate()); // Setzt das Date in das Calendar-Objekt
|
|
||||||
return calendar.get(Calendar.YEAR); // Gibt das Jahr aus dem Calendar-Objekt zurück
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public double getJahresgebuehr() {
|
||||||
|
return jahresgebuehr;
|
||||||
|
}
|
||||||
|
|
||||||
// Die Unterklassen Erwachsen und Kinder bleiben unverändert
|
public double getGebuehren() {
|
||||||
public static class Erwachsen extends Benutzer {
|
return gebuehren;
|
||||||
Erwachsen(String name, String nachname, int kundennummer, Date date) {
|
}
|
||||||
super(name, nachname, kundennummer, date);
|
|
||||||
|
public void setGebuehren(double gebuehren) {
|
||||||
|
this.gebuehren = gebuehren;
|
||||||
|
}
|
||||||
|
|
||||||
|
// toString-Methode
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "Benutzer{" +
|
||||||
|
"Name='" + name + '\'' +
|
||||||
|
", Nachname='" + nachname + '\'' +
|
||||||
|
", Kundennummer=" + kundennummer +
|
||||||
|
", Art='" + art + '\'' +
|
||||||
|
", Jahresgebühr=" + jahresgebuehr +
|
||||||
|
", 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 Kinder extends Benutzer {
|
public static class SchuelerStudent extends Benutzer {
|
||||||
Kinder(String name, String nachname, int kundennummer, Date date) {
|
public SchuelerStudent(String name, String nachname, int kundennummer,String art) {
|
||||||
super(name, nachname, kundennummer, date);
|
super(name, nachname, kundennummer,art);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public static class Admin extends Benutzer {
|
|
||||||
Admin(String name, String nachname, int kundennummer, Date date) {
|
|
||||||
super(name, nachname, kundennummer, date);
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,28 @@
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -11,7 +11,7 @@ public abstract class Medien implements Ausleihbar {
|
||||||
protected int id;
|
protected int id;
|
||||||
protected int frist; // Standard-Ausleihfrist in Wochen
|
protected int frist; // Standard-Ausleihfrist in Wochen
|
||||||
protected int maxVerlängerungen; // Maximale Anzahl an möglichen Verlängerungen
|
protected int maxVerlängerungen; // Maximale Anzahl an möglichen Verlängerungen
|
||||||
protected int aktuelleVerlängerungen; // Aktuelle Anzahl an durchgeführten Verlängerungen
|
protected int aktuelleVerlängerungen=1; // Aktuelle Anzahl an durchgeführten Verlängerungen
|
||||||
protected boolean istAusgeliehen; // Status, ob das Medium ausgeliehen ist
|
protected boolean istAusgeliehen; // Status, ob das Medium ausgeliehen ist
|
||||||
|
|
||||||
// Konstruktor
|
// Konstruktor
|
||||||
|
@ -21,7 +21,7 @@ public abstract class Medien implements Ausleihbar {
|
||||||
this.frist = frist;
|
this.frist = frist;
|
||||||
this.maxVerlängerungen = maxVerlängerungen;
|
this.maxVerlängerungen = maxVerlängerungen;
|
||||||
this.aktuelleVerlängerungen = 0; // Initialisierung ohne Verlängerungen
|
this.aktuelleVerlängerungen = 0; // Initialisierung ohne Verlängerungen
|
||||||
this.istAusgeliehen = false; // Initialer Status: nicht ausgeliehen
|
// Initialer Status: nicht ausgeliehen
|
||||||
}
|
}
|
||||||
|
|
||||||
// Getter-Methoden
|
// Getter-Methoden
|
||||||
|
|
337
Ui.java
337
Ui.java
|
@ -1,13 +1,10 @@
|
||||||
import java.util.*; // Für LinkedList, List, ArrayList, Scanner und andere grundlegende Klassen
|
import java.time.LocalDate;
|
||||||
import java.util.stream.Collectors; // Für die Collectors-Funktionalität in Streams
|
import java.util.*;
|
||||||
import java.text.ParseException; // Für Ausnahmebehandlung beim Parsen von Daten
|
import java.time.temporal.ChronoUnit;
|
||||||
import java.text.SimpleDateFormat;
|
|
||||||
import java.util.function.Predicate;
|
|
||||||
// Für die Verarbeitung von Datumsformaten
|
|
||||||
|
|
||||||
public class Ui {
|
public class Ui {
|
||||||
private Scanner scanner = new Scanner(System.in);
|
private final Scanner scanner = new Scanner(System.in);
|
||||||
private Verwaltung verwaltung;
|
private final Verwaltung verwaltung;
|
||||||
|
|
||||||
// Konstruktor, der eine Verwaltung-Instanz annimmt
|
// Konstruktor, der eine Verwaltung-Instanz annimmt
|
||||||
public Ui(Verwaltung verwaltung) {
|
public Ui(Verwaltung verwaltung) {
|
||||||
|
@ -16,95 +13,293 @@ public class Ui {
|
||||||
|
|
||||||
void anmeldung() {
|
void anmeldung() {
|
||||||
boolean running = true;
|
boolean running = true;
|
||||||
|
|
||||||
while (running) {
|
while (running) {
|
||||||
System.out.println("Willkommen! Bitte wählen Sie eine Option:");
|
System.out.println("Willkommen! Bitte wählen Sie eine Option:");
|
||||||
System.out.println("1: Registrieren");
|
System.out.println("1: Durchsuchen der Medien");
|
||||||
System.out.println("2: Anmelden mit Kundennummer");
|
System.out.println("2: Ausleihen eines Gegenstandes");
|
||||||
System.out.println("3: Suchen nach Objekten");
|
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("0: Programm beenden");
|
System.out.println("0: Programm beenden");
|
||||||
|
|
||||||
int menue = scanner.nextInt();
|
int menue = scanner.nextInt();
|
||||||
scanner.nextLine(); // Leert den Puffer nach nextInt()
|
scanner.nextLine(); // Leert den Puffer nach nextInt()
|
||||||
|
|
||||||
switch (menue) {
|
switch (menue) {
|
||||||
case 1:
|
case 1 -> suchenNachMedien(); // Keine Anmeldung erforderlich
|
||||||
registrieren();
|
case 2 -> ausleihen();
|
||||||
break;
|
case 3 -> rueckgabeDurchfuehren();
|
||||||
|
case 4 -> gebuehrenEinsehen();
|
||||||
case 2:
|
case 5 -> verlaengern();
|
||||||
anmelden();
|
case 6 -> adminrechte();
|
||||||
break;
|
case 7 -> registrieren(); // Registrieren
|
||||||
|
case 8 -> anmelden(); // Anmelden
|
||||||
case 3:
|
case 0 -> {
|
||||||
suchenNachMedien();
|
|
||||||
break;
|
|
||||||
case 4:
|
|
||||||
|
|
||||||
|
|
||||||
case 0:
|
|
||||||
System.out.println("Programm wird beendet. Auf Wiedersehen!");
|
System.out.println("Programm wird beendet. Auf Wiedersehen!");
|
||||||
running = false;
|
running = false;
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
System.out.println("Ungültige Auswahl. Bitte versuchen Sie es erneut.");
|
|
||||||
}
|
}
|
||||||
|
default -> System.out.println("Ungültige Auswahl. Bitte versuchen Sie es erneut.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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("Geben Sie Ihr Geburtsdatum ein (Format: TT.MM.JJJJ): ");
|
|
||||||
String dateInput = scanner.nextLine();
|
|
||||||
|
|
||||||
SimpleDateFormat formatter = new SimpleDateFormat("dd.MM.yyyy");
|
|
||||||
formatter.setLenient(false);
|
|
||||||
|
|
||||||
try {
|
|
||||||
Date geburtsdatum = formatter.parse(dateInput);
|
|
||||||
int genkundennummer = verwaltung.generiereEindeutigeKundennummer();
|
|
||||||
|
|
||||||
Benutzer neuerBenutzer = Creator.factoryBenutzer(name, nachname, genkundennummer, geburtsdatum);
|
|
||||||
verwaltung.benutzerListe.add(neuerBenutzer);
|
|
||||||
|
|
||||||
System.out.println("Registrierung erfolgreich! Ihre Kundennummer lautet: " + genkundennummer);
|
|
||||||
} catch (ParseException e) {
|
|
||||||
System.out.println("Ungültiges Datum. Bitte verwenden Sie das Format TT.MM.JJJJ.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void anmelden() {
|
|
||||||
System.out.print("Geben Sie Ihre Kundennummer zur Anmeldung ein: ");
|
|
||||||
int eingabeKundennummer = scanner.nextInt();
|
|
||||||
Predicate<Benutzer> isKundennummerGleich = benutzer -> benutzer.getKundennummer() == eingabeKundennummer;
|
|
||||||
|
|
||||||
if (verwaltung.benutzerListe.stream().anyMatch(isKundennummerGleich)) {
|
|
||||||
System.out.println("Willkommen zurück, Benutzer mit Kundennummer: " + eingabeKundennummer + "!");
|
|
||||||
} else {
|
|
||||||
System.out.println("Kundennummer '" + eingabeKundennummer + "' nicht gefunden. Bitte registrieren Sie sich.");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void suchenNachMedien() {
|
private void suchenNachMedien() {
|
||||||
System.out.println("Bitte geben Sie stichwortartig an, wonach Sie suchen:");
|
System.out.println("Bitte geben Sie stichwortartig an, wonach Sie suchen:");
|
||||||
String suchbegriff = scanner.nextLine();
|
String suchbegriff = scanner.nextLine();
|
||||||
|
|
||||||
// Die Methode durchsuchenMedien in der Verwaltungsklasse wird aufgerufen
|
|
||||||
List<Medien> gefundeneMedien = Verwaltung.durchsuchenMedien(verwaltung.mediensListe, suchbegriff);
|
List<Medien> gefundeneMedien = Verwaltung.durchsuchenMedien(verwaltung.mediensListe, suchbegriff);
|
||||||
|
|
||||||
if (gefundeneMedien.isEmpty()) {
|
if (gefundeneMedien.isEmpty()) {
|
||||||
System.out.println("Keine Medien gefunden.");
|
System.out.println("Keine Medien gefunden.");
|
||||||
} else {
|
} else {
|
||||||
System.out.println("Gefundene Medien:");
|
System.out.println("Gefundene Medien:");
|
||||||
gefundeneMedien.forEach(System.out::println); // Nutzt die toString()-Methode jeder Medienklasse zur Ausgabe
|
for (Medien medien : gefundeneMedien) {
|
||||||
|
System.out.print(medien.getName());
|
||||||
|
|
||||||
|
if (medien.istAusgeliehen) {
|
||||||
|
// Wenn das Medium ausgeliehen ist, gibt es das Rückgabedatum an
|
||||||
|
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); // Berechnet das Rückgabedatum
|
||||||
|
System.out.println(" ist ausgeliehen. Rückgabedatum: " + rueckgabedatum);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
System.out.println(" ist verfügbar.");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Hier können noch weitere Details zum Medium ausgegeben werden, falls erforderlich
|
||||||
|
System.out.println("Typ: " + medien.getClass().getSimpleName()); // Zeigt den Typ des Mediums an
|
||||||
|
// Weitere Details wie Autor, Jahr, etc. je nach Medium-Typ könnten hier hinzugefügt werden
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Registrierungsmethode
|
||||||
|
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();
|
||||||
|
|
||||||
|
// Generiere eine neue, eindeutige Kundennummer
|
||||||
|
int genkundennummer = verwaltung.generiereEindeutigeKundennummer();
|
||||||
|
|
||||||
|
// Erstelle einen neuen Benutzer
|
||||||
|
Benutzer neuerBenutzer = Creator.factoryBenutzer(name, nachname, genkundennummer, artInput.toLowerCase());
|
||||||
|
|
||||||
|
if (neuerBenutzer != null) {
|
||||||
|
verwaltung.benutzerListe.add(neuerBenutzer); // Benutzer zur Verwaltungsliste hinzufügen
|
||||||
|
System.out.println("Registrierung erfolgreich! Ihre Kundennummer lautet: " + genkundennummer);
|
||||||
|
} else {
|
||||||
|
System.out.println("Ungültige Art. Versuchen Sie es erneut.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Anmeldemethode
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ausleihen eines Mediums
|
||||||
|
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()) {
|
||||||
|
LocalDate heute = LocalDate.now();
|
||||||
|
verwaltung.addAL(medien, benutzer, heute, 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.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Rückgabe eines Mediums
|
||||||
|
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()) {
|
||||||
|
Medien medien = optionalMedien.get();
|
||||||
|
|
||||||
|
// Benutzer nach einem Rückgabedatum fragen
|
||||||
|
System.out.println("Aktuelles Rückgabedatum: " + LocalDate.now());
|
||||||
|
System.out.print("Möchten Sie das Rückgabedatum ändern? (ja/nein): ");
|
||||||
|
String antwort = scanner.nextLine();
|
||||||
|
|
||||||
|
LocalDate rueckgabedatum;
|
||||||
|
if (antwort.equalsIgnoreCase("ja")) {
|
||||||
|
// Benutzer nach einem neuen Rückgabedatum fragen
|
||||||
|
System.out.print("Geben Sie das Rückgabedatum im Format JJJJ-MM-TT ein: ");
|
||||||
|
String datumInput = scanner.nextLine();
|
||||||
|
|
||||||
|
// Versuch, das Datum zu parsen
|
||||||
|
try {
|
||||||
|
rueckgabedatum = LocalDate.parse(datumInput);
|
||||||
|
System.out.println("Das Rückgabedatum wurde auf " + rueckgabedatum + " gesetzt.");
|
||||||
|
} catch (Exception e) {
|
||||||
|
System.out.println("Ungültiges Datum. Rückgabe wird mit dem heutigen Datum durchgeführt.");
|
||||||
|
rueckgabedatum = LocalDate.now(); // Standard auf das heutige Datum
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Standardmäßig wird das heutige Datum verwendet
|
||||||
|
rueckgabedatum = LocalDate.now();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Rückgabe durchführen
|
||||||
|
verwaltung.rueckgabe(id, benutzer, rueckgabedatum);
|
||||||
|
System.out.println("Das Medium wurde erfolgreich zurückgegeben.");
|
||||||
|
} else {
|
||||||
|
System.out.println("Medium mit dieser ID nicht gefunden.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
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:");
|
||||||
|
|
||||||
|
// Liste der ausgeliehenen Medien des Benutzers
|
||||||
|
List<Aausleihe> ausleihen = verwaltung.getAusleihenByBenutzer(benutzer);
|
||||||
|
|
||||||
|
if (ausleihen.isEmpty()) {
|
||||||
|
System.out.println("Sie haben keine ausgeliehenen Medien.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Aktuelles Datum
|
||||||
|
LocalDate heute = LocalDate.now();
|
||||||
|
|
||||||
|
// Durchlaufe alle ausgeliehenen Medien und berechne mögliche Gebühren
|
||||||
|
for (Aausleihe ausleihe : ausleihen) {
|
||||||
|
Medien medien = ausleihe.getMedien();
|
||||||
|
LocalDate faelligkeitsdatum = ausleihe.getDate().plusWeeks(medien.frist); // Annahme: `frist` gibt die Leihfrist in Wochen an
|
||||||
|
|
||||||
|
double gebuehr = 0;
|
||||||
|
if (heute.isAfter(faelligkeitsdatum)) {
|
||||||
|
long ueberfaelligeWochen = ChronoUnit.WEEKS.between(faelligkeitsdatum, heute);
|
||||||
|
gebuehr = ueberfaelligeWochen * 2.0; // Beispiel: 2 EUR pro überfälliger Woche
|
||||||
|
}
|
||||||
|
|
||||||
|
// Gebühr und Fälligkeitsdatum ausgeben
|
||||||
|
System.out.println("Medium: " + medien.getName() +
|
||||||
|
", Fälligkeitsdatum: " + faelligkeitsdatum +
|
||||||
|
", Überfällige Wochen: " + (heute.isAfter(faelligkeitsdatum) ? ChronoUnit.WEEKS.between(faelligkeitsdatum, heute) : 0) +
|
||||||
|
", Gebühr: " + gebuehr + " EUR");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
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.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void verbucheUeberfaelligeGebuehren() {
|
||||||
|
System.out.println("Verbuchen überfälliger Gebühren:");
|
||||||
|
|
||||||
|
LocalDate heute = LocalDate.now();
|
||||||
|
|
||||||
|
for (Aausleihe ausleihe : verwaltung.ausliste) {
|
||||||
|
Medien medien = ausleihe.getMedien();
|
||||||
|
Benutzer benutzer = ausleihe.getBenutzer();
|
||||||
|
LocalDate faelligkeitsdatum = ausleihe.getDate().plusWeeks(medien.frist);
|
||||||
|
|
||||||
|
if (heute.isAfter(faelligkeitsdatum)) {
|
||||||
|
long ueberfaelligeWochen = ChronoUnit.WEEKS.between(faelligkeitsdatum, heute);
|
||||||
|
double gebuehr = ueberfaelligeWochen * 2.0; // Beispiel: 2 EUR pro Woche überfällig
|
||||||
|
System.out.println("Benutzer: " + benutzer.getName() + ", Medium: " + medien.getName() +
|
||||||
|
", Überfällige Wochen: " + ueberfaelligeWochen + ", Gebühr: " + gebuehr + " EUR");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
173
Verwaltung.java
173
Verwaltung.java
|
@ -1,10 +1,18 @@
|
||||||
import javax.crypto.spec.PSource;
|
import javax.crypto.spec.PSource;
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.time.temporal.ChronoUnit;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public class Verwaltung {
|
public class Verwaltung {
|
||||||
LinkedList<Medien> mediensListe = new LinkedList<>();
|
LinkedList<Medien> mediensListe = new LinkedList<>();
|
||||||
LinkedList<Benutzer> benutzerListe = new LinkedList<>();
|
LinkedList<Benutzer> benutzerListe = new LinkedList<>();
|
||||||
|
static LinkedList<Aausleihe> ausliste = new LinkedList<>();
|
||||||
|
Long wochenDauer;
|
||||||
|
|
||||||
|
|
||||||
Creator obj = new Creator();
|
Creator obj = new Creator();
|
||||||
|
|
||||||
void addFunktion(Medien medien) {
|
void addFunktion(Medien medien) {
|
||||||
|
@ -16,20 +24,10 @@ public class Verwaltung {
|
||||||
}
|
}
|
||||||
|
|
||||||
static int mrgen() {
|
static int mrgen() {
|
||||||
Random m = new Random();
|
return new Random().ints(7, 0, 10)
|
||||||
int[] zahl = new int[7];
|
.reduce(0, (acc, digit) -> acc * 10 + digit);
|
||||||
|
|
||||||
int number;
|
|
||||||
for (int i = 0; i < 7; ++i) {
|
|
||||||
number = m.nextInt(10);
|
|
||||||
zahl[i] = number;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
number = Arrays.stream(zahl).reduce(0, (acc, digit) -> {
|
|
||||||
return acc * 10 + digit;
|
|
||||||
});
|
|
||||||
return number;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int generiereEindeutigeKundennummer() {
|
public int generiereEindeutigeKundennummer() {
|
||||||
final int[] genkundennummer = new int[1]; // Verwendung eines Arrays, um den Wert zu ändern
|
final int[] genkundennummer = new int[1]; // Verwendung eines Arrays, um den Wert zu ändern
|
||||||
|
@ -43,9 +41,14 @@ public class Verwaltung {
|
||||||
public static List<Medien> durchsuchenMedien(LinkedList<Medien> medienListe, String suchbegriff) {
|
public static List<Medien> durchsuchenMedien(LinkedList<Medien> medienListe, String suchbegriff) {
|
||||||
String suchbegriffKlein = suchbegriff.toLowerCase(); // Der Suchbegriff in Kleinbuchstaben für einfache Vergleiche
|
String suchbegriffKlein = suchbegriff.toLowerCase(); // Der Suchbegriff in Kleinbuchstaben für einfache Vergleiche
|
||||||
|
|
||||||
|
// Wenn der Suchbegriff "all" ist, geben wir die gesamte Liste zurück
|
||||||
|
if (suchbegriffKlein.equals("all")) {
|
||||||
|
return new ArrayList<>(medienListe); // Rückgabe einer Kopie der gesamten Liste
|
||||||
|
}
|
||||||
|
|
||||||
|
// Andernfalls wird der Filter angewendet, um nach Art und Namen zu suchen
|
||||||
return medienListe.stream()
|
return medienListe.stream()
|
||||||
.filter(medien -> {
|
.filter(medien -> {
|
||||||
// Sucht nach dem Mediumstyp (Art des Mediums) und dem Namen des Werkes
|
|
||||||
boolean gefunden = false;
|
boolean gefunden = false;
|
||||||
|
|
||||||
// Überprüfe, ob die Art des Mediums im Suchbegriff enthalten ist
|
// Überprüfe, ob die Art des Mediums im Suchbegriff enthalten ist
|
||||||
|
@ -69,32 +72,134 @@ public class Verwaltung {
|
||||||
.collect(Collectors.toList()); // Rückgabe der gefilterten Liste
|
.collect(Collectors.toList()); // Rückgabe der gefilterten Liste
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
// Methode zum Hinzufügen einer Ausleihe
|
||||||
|
|
||||||
class Creator {
|
void addAL(Medien medien, Benutzer benutzer, LocalDate ausleihDatum,LocalDate reuckgabeDatum) {
|
||||||
|
if (medien.istAusgeliehen) {
|
||||||
static Benutzer factoryBenutzer(String name, String nachname, int kundennummer, Date date) {
|
System.out.println("Das Medium ist bereits ausgeliehen.");
|
||||||
if (Benutzer.getJahr(new Benutzer(name, nachname, kundennummer, date)) > 18) {
|
|
||||||
return new Benutzer.Erwachsen(name, nachname, kundennummer, date);
|
|
||||||
} else {
|
} else {
|
||||||
return new Benutzer.Kinder(name, nachname, kundennummer, date);
|
|
||||||
|
Aausleihe aausleihe = new Aausleihe(medien, benutzer, ausleihDatum,reuckgabeDatum); // Neues Aausleihe-Objekt erstellen
|
||||||
|
ausliste.add(aausleihe);
|
||||||
|
medien.istAusgeliehen = true;
|
||||||
|
medien.maxVerlängerungen--;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Methode zum Entfernen einer Ausleihe und Berechnung der Dauer
|
||||||
|
void remov(Medien medien, Benutzer benutzer) {
|
||||||
|
Aausleihe zuEntfernen = null;
|
||||||
|
|
||||||
|
// Durchsuchen der Liste nach der passenden Ausleihe
|
||||||
|
for (Aausleihe aausleihe : ausliste) {
|
||||||
|
// Überprüfen, ob das Medium und der Benutzer übereinstimmen
|
||||||
|
if (aausleihe.getMedien().equals(medien) && aausleihe.getBenutzer().equals(benutzer)) {
|
||||||
|
zuEntfernen = aausleihe; // Markieren des zu entfernenden Eintrags
|
||||||
|
medien.istAusgeliehen = false; // Markiere das Medium als nicht mehr ausgeliehen
|
||||||
|
break; // Schleife abbrechen, wenn die passende Ausleihe gefunden wurde
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Medien factoryMedien(String name, String regisseur, int id, String art, int erscheinungsjahr) {
|
// Entfernen des markierten Eintrags, falls gefunden
|
||||||
switch (art.toLowerCase()) {
|
if (zuEntfernen != null) {
|
||||||
case "buch":
|
ausliste.remove(zuEntfernen); // Entfernen des markierten Eintrags
|
||||||
return new Medien.Book(name, regisseur, id, erscheinungsjahr); // Autor für Bücher
|
|
||||||
case "dvd":
|
|
||||||
return new Medien.Dvds(name, regisseur, id); // Regisseur für DVDs
|
|
||||||
case "cd":
|
|
||||||
return new Medien.Cds(name, id); // CDs benötigen keinen Autor
|
|
||||||
case "sb": // Brettspiel
|
|
||||||
return new Medien.Brettspiel(name, id); // Brettspiele benötigen keinen Autor
|
|
||||||
case "videospiel":
|
|
||||||
return new Medien.Videospiel(name, regisseur, id); // Entwickler für Videospiele
|
|
||||||
default:
|
|
||||||
throw new IllegalArgumentException("Unbekannter Medientyp: " + art);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
public List<Aausleihe> getAusleihenByBenutzer(Benutzer benutzer) {
|
||||||
|
List<Aausleihe> benutzerAusleihen = new ArrayList<>();
|
||||||
|
for (Aausleihe ausleihe : ausliste) {
|
||||||
|
if (ausleihe.getBenutzer().equals(benutzer)) {
|
||||||
|
benutzerAusleihen.add(ausleihe);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return benutzerAusleihen;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Methode zur Berechnung der Wochen zwischen zwei Date-Objekten
|
||||||
|
long berechneWochenDifferenz(LocalDate ausleihDatum, LocalDate rueckgabeDatum) {
|
||||||
|
return ChronoUnit.DAYS.between(ausleihDatum, rueckgabeDatum);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void rueckgabe(int medienId, Benutzer benutzer, LocalDate rueckgabeDatum) {
|
||||||
|
// Durchsuche die Ausleihen (ausliste) nach einer Übereinstimmung mit Medien-ID und Benutzer-ID
|
||||||
|
for (Aausleihe ausleihe : ausliste) {
|
||||||
|
// 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
|
||||||
|
ausleihe.getMedien().istAusgeliehen = false; // Markiere das Medium als zurückgegeben
|
||||||
|
System.out.println("Das Medium wurde erfolgreich zurückgegeben.");
|
||||||
|
return; // Methode verlassen, Rückgabe abgeschlossen
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private double jahresgebuehr;
|
||||||
|
|
||||||
|
|
||||||
|
public double getJahresgebuehr() {
|
||||||
|
return jahresgebuehr;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void verbuchenGebuehren(Benutzer benutzer) {
|
||||||
|
// 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.");
|
||||||
|
benutzer.setGebuehren(0); // Gebühren zurücksetzen
|
||||||
|
} else {
|
||||||
|
System.out.println("Keine ausstehenden Gebühren für diesen 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.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.maxVerlängerungen--;
|
||||||
|
medien.aktuelleVerlängerungen++;
|
||||||
|
} else {
|
||||||
|
System.out.println("Keine weitere Verlängerung möglich. Maximale Anzahl erreicht.");
|
||||||
|
}
|
||||||
|
return; // Verlängerung durchgeführt, daher beenden
|
||||||
|
}
|
||||||
|
}
|
||||||
|
System.out.println("Das Medium ist entweder nicht ausgeliehen oder gehört nicht diesem Benutzer.");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public double berechneGebuehren(Aausleihe aausleihe, LocalDate aktuellesDatum) {
|
||||||
|
long tageÜberfällig = ChronoUnit.DAYS.between(aausleihe.getRueckgabeDatum(), aktuellesDatum);
|
||||||
|
if (tageÜberfällig <= 0) {
|
||||||
|
return 0; // Keine Gebühren
|
||||||
|
} else if (tageÜberfällig <= 7) {
|
||||||
|
return tageÜberfällig * 1; // 1€/Tag
|
||||||
|
} else {
|
||||||
|
return (7 * 1) + ((tageÜberfällig - 7) * 2); // 2€/Tag nach 7 Tagen
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue