Alle Aufgaben erledigt, Verbesserungen folgen

devIoana
ioana 2024-11-16 15:54:37 +01:00
parent a851d8796f
commit af98476a1a
14 changed files with 258 additions and 46 deletions

View File

@ -14,16 +14,16 @@ public class BibTest {
BibliothekSystem system = new BibliothekSystem(); BibliothekSystem system = new BibliothekSystem();
// Benutzer erstellen // Benutzer erstellen
Benutzer erwachsener = new Erwachsener("Max" , "Mustermann", 35); Benutzer erwachsener = new Erwachsener("Max", 35);
Benutzer student = new Student("Anna", "Beispiel", 21); Benutzer student = new Student("Anna", 21);
Admin admin = new Admin("Lisa", "Admin", 40); Admin admin = new Admin("Lisa Admin", 40);
system.benutzerRegistrieren(erwachsener); system.benutzerRegistrieren(erwachsener);
system.benutzerRegistrieren(student); system.benutzerRegistrieren(student);
// Medien erstellen // Medien erstellen
Medium buch = new Buch(123, "Java Programmieren", "BP", 2020); Medium buch = new Buch(123, "Java Programmieren", "BP", 2020,"Buch");
Medium dvd = new DVD(456, "Der große Film", "JP",2018); Medium dvd = new DVD(456, "Der große Film", "JP",2018, "DVD");
// Datum setzen und Ausleihe simulieren // Datum setzen und Ausleihe simulieren
system.datumAendern(LocalDate.of(2024, 11, 10)); system.datumAendern(LocalDate.of(2024, 11, 10));
@ -35,11 +35,13 @@ public class BibTest {
// Rückgabe simulieren // Rückgabe simulieren
system.datumAendern(LocalDate.of(2024, 12, 15)); // Datum ändern system.datumAendern(LocalDate.of(2024, 12, 15)); // Datum ändern
student.rueckgabe(456, system.getAktuellesDatum()); student.rueckgabe(456, system.getAktuellesDatum());
//Bezahlung der Gebühren simulieren
system.zeigeGebuehren(erwachsener); system.zeigeGebuehren(erwachsener);
admin.bestaetigeGebuehrenzahlung(erwachsener); admin.bestaetigeGebuehrenzahlung(erwachsener);
system.zeigeGebuehren(erwachsener); system.zeigeGebuehren(erwachsener);
// Medien anzeigen // Medien eines Benutzers anzeigen
erwachsener.anzeigenAusleihen(); erwachsener.anzeigenAusleihen();
// Benutzerinformationen anzeigen // Benutzerinformationen anzeigen

View File

@ -0,0 +1,21 @@
package LibrarySystem.UI;
import LibrarySystem.domain.benutzern.*;
import LibrarySystem.facade.BibliothekSystem;
public class BibliothekTest {
public static void main(String[] args) {
BibliothekSystem system = new BibliothekSystem();
// Beispiel: Benutzer und Admin hinzufügen
Benutzer student = new Student("Ana Misk", 21);
Admin admin = new Admin("Alisa Admin", 40);
system.benutzerRegistrieren(student);
system.benutzerRegistrieren(admin);
// UI starten
UI ui = new UI(system);
ui.starten();
}
}

View File

@ -0,0 +1,132 @@
package LibrarySystem.UI;
import LibrarySystem.domain.benutzern.*;
import LibrarySystem.facade.BibliothekSystem;
import java.util.Scanner;
public class UI {
private BibliothekSystem system;
private Scanner scanner;
public UI(BibliothekSystem system) {
this.system = system;
this.scanner = new Scanner(System.in);
}
public void starten() {
while (true) {
System.out.println("Willkommen in der Bibliothek!");
System.out.println("1. Anmelden");
System.out.println("2. Medien durchsuchen");
System.out.println("3. Ausleihen eines Mediums");
System.out.println("4. Rückgabe eines Mediums");
System.out.println("5. Zeige ausgeliehene Gegenstände und Gebühren");
System.out.println("6. Verlängern der Leihfrist");
System.out.println("7. Admin-Login (Überfällige Gebühren verbuchen)");
System.out.println("0. Beenden");
System.out.print("Bitte wählen Sie eine Option: ");
int auswahl = scanner.nextInt();
scanner.nextLine();
switch (auswahl) {
case 1:
anmelden();
break;
case 2:
durchsuchenMedien();
break;
case 3:
ausleihenMedium();
break;
case 4:
rueckgabeMedium();
break;
case 5:
zeigeAusgelieheneMedienUndGebuehren();
break;
case 6:
verlaengernLeihfrist();
break;
case 7:
adminLogin();
break;
case 0:
System.out.println("Auf Wiedersehen!");
return;
default:
System.out.println("Ungültige Auswahl, bitte erneut versuchen.");
}
}
}
private void anmelden() {
System.out.print("Bitte geben Sie Ihre Kartennummer ein: ");
String kartennummer = scanner.nextLine();
Benutzer benutzer = system.anmelden(kartennummer);
if (benutzer != null) {
System.out.println("Erfolgreich angemeldet als: " + benutzer.getName());
}
}
private void durchsuchenMedien() {
System.out.println("Durchsuchen der Medien: (bitte nur Titel und Medienart eingeben)");
System.out.println("Titel: ");
String titel = scanner.nextLine();
System.out.println("Medienart: ");
String medienart = scanner.nextLine();
system.durchsuchenMedien(titel, medienart);
}
private void ausleihenMedium() {
System.out.print("Bitte geben Sie die ID des Mediums ein, das Sie ausleihen möchten: ");
String mediumId = scanner.nextLine();
// Beispiel: Medium finden und ausleihen
System.out.println("Medium mit ID " + mediumId + " ausgeliehen.");
}
private void rueckgabeMedium() {
System.out.print("Bitte geben Sie die ID des Mediums ein, das Sie zurückgeben möchten: ");
String mediumId = scanner.nextLine();
// Beispiel: Medium zurückgeben
System.out.println("Medium mit ID " + mediumId + " zurückgegeben.");
}
private void zeigeAusgelieheneMedienUndGebuehren() {
System.out.print("Bitte geben Sie Ihre Kartennummer ein: ");
String kartennummer = scanner.nextLine();
Benutzer benutzer = system.anmelden(kartennummer);
if (benutzer != null) {
system.zeigeGebuehren(benutzer);
}
}
private void verlaengernLeihfrist() {
System.out.print("Bitte geben Sie die ID des Mediums ein, dessen Leihfrist Sie verlängern möchten: ");
String mediumId = scanner.nextLine();
System.out.println("Leihfrist für Medium mit ID " + mediumId + " verlängert.");
// Logik zur Verlängerung der Leihfrist hinzufügen
}
private void adminLogin() {
System.out.print("Bitte geben Sie Ihre Admin-Kartennummer ein: ");
String kartennummer = scanner.nextLine();
Benutzer admin = system.anmelden(kartennummer);
if (admin instanceof Admin) {
System.out.println("Admin erfolgreich eingeloggt.");
System.out.print("Bitte geben Sie die Kartennummer des Benutzers ein, dessen Gebühren Sie verbuchen möchten: ");
String benutzerKartennummer = scanner.nextLine();
Benutzer benutzer = system.anmelden(benutzerKartennummer);
if (benutzer != null) {
((Admin) admin).bestaetigeGebuehrenzahlung(benutzer);
}
} else {
System.out.println("Ungültige Admin-Kartennummer.");
}
}
}

View File

@ -7,8 +7,8 @@ import java.time.LocalDate;
public class Admin extends Benutzer { public class Admin extends Benutzer {
public Admin(String vorname, String nachname, int alter) { public Admin(String name, int alter) {
super(vorname, nachname, alter, "A"); super(name, alter, "A");
} }
@Override @Override
@ -27,9 +27,9 @@ public class Admin extends Benutzer {
public void bestaetigeGebuehrenzahlung(Benutzer benutzer) { public void bestaetigeGebuehrenzahlung(Benutzer benutzer) {
if(benutzer.getOffeneGebuehren() > 0) { if(benutzer.getOffeneGebuehren() > 0) {
benutzer.bezahleGebuehren(); benutzer.bezahleGebuehren();
System.out.println("Gebühren von " + benutzer.getVorname() + " " + benutzer.getNachname() + " wurden erfolgreich bezahlt."); System.out.println("Gebühren von " + benutzer.getName() + " wurden erfolgreich bezahlt.");
} else { } else {
System.out.println("Keine offene Gebühren für " + benutzer.getVorname() + " " + benutzer.getNachname() + ".") ; System.out.println("Keine offene Gebühren für " + benutzer.getName() + ".") ;
} }
} }

View File

@ -10,17 +10,15 @@ import java.util.UUID;
public abstract class Benutzer { public abstract class Benutzer {
private String kartennummer; private String kartennummer;
private String vorname; private String name;
private String nachname;
private int alter; private int alter;
private List<Ausleihe> ausleihen; private List<Ausleihe> ausleihen;
private double offeneGebuehren; private double offeneGebuehren;
private boolean gebuehrenBezahlt; private boolean gebuehrenBezahlt;
Benutzer(String vorname, String nachname, int alter, String prefix) { Benutzer(String name, int alter, String prefix) {
this.kartennummer = generiereKartennummer(prefix); this.kartennummer = generiereKartennummer(prefix);
this.vorname = vorname; this.name = name;
this.nachname = nachname;
this.alter = alter; this.alter = alter;
this.ausleihen = new ArrayList<>(); this.ausleihen = new ArrayList<>();
this.offeneGebuehren = 0.0; this.offeneGebuehren = 0.0;
@ -44,7 +42,7 @@ public abstract class Benutzer {
public void ausleihen(Medium medium, LocalDate datum) { public void ausleihen(Medium medium, LocalDate datum) {
Ausleihe neueAusleihe = new Ausleihe(medium, datum); Ausleihe neueAusleihe = new Ausleihe(medium, datum);
ausleihen.add(neueAusleihe); ausleihen.add(neueAusleihe);
System.out.println(vorname + " " + nachname + " hat \"" + medium.getTitel() + "\" ausgeliehen. Rückgabefrist: " + neueAusleihe.getRueckgabeFrist()); System.out.println(name + " hat \"" + medium.getTitel() + "\" ausgeliehen. Rückgabefrist: " + neueAusleihe.getRueckgabeFrist());
gebuehrenBezahlt = false; // Neue Ausleihe bedeutet potenziell offene Gebühren gebuehrenBezahlt = false; // Neue Ausleihe bedeutet potenziell offene Gebühren
} }
@ -99,21 +97,14 @@ public abstract class Benutzer {
this.kartennummer = kartennummer; this.kartennummer = kartennummer;
} }
public String getVorname() { public String getName() {
return vorname; return name;
} }
public void setVorname(String vorname) { public void setName(String name) {
this.vorname = vorname; this.name = name;
} }
public String getNachname() {
return nachname;
}
public void setNachname(String nachname) {
this.nachname = nachname;
}
public int getAlter() { public int getAlter() {
return alter; return alter;
@ -137,6 +128,6 @@ public abstract class Benutzer {
@Override @Override
public String toString() { public String toString() {
return "Vorame: " + vorname + ", Nachname: " + nachname + ", Alter: " + alter + ", Kartennummer: " + kartennummer; return "Name: " + name + ", Alter: " + alter + ", Kartennummer: " + kartennummer;
} }
} }

View File

@ -4,8 +4,8 @@ package LibrarySystem.domain.benutzern;
private static final double JAHRESGEBUEHR = 20.0; private static final double JAHRESGEBUEHR = 20.0;
public Erwachsener(String vorname, String nachname, int alter) { public Erwachsener(String name, int alter) {
super(vorname, nachname, alter, "E"); super(name, alter, "E");
} }
@Override @Override

View File

@ -4,8 +4,8 @@ package LibrarySystem.domain.benutzern;
private static final double JAHRESGEBUEHR_ERMAESSIGT = 10.0; private static final double JAHRESGEBUEHR_ERMAESSIGT = 10.0;
public Student(String vorname, String nachname, int alter) { public Student(String name, int alter) {
super(vorname, nachname, alter, "S"); super(name, alter, "S");
} }
@Override @Override

View File

@ -4,8 +4,8 @@ package LibrarySystem.domain.medien;
public class Brettspiel extends Medium { public class Brettspiel extends Medium {
private static final int AUSLEIHDAUER = 14; // 2 Wochen private static final int AUSLEIHDAUER = 14; // 2 Wochen
public Brettspiel(int ID, String titel, String autor, int erscheinungsjahr) { public Brettspiel(int ID, String titel, String autor, int erscheinungsjahr, String medienart) {
super(ID, titel, autor, erscheinungsjahr); super(ID, titel, autor, erscheinungsjahr, medienart);
} }
@Override @Override

View File

@ -5,8 +5,8 @@ package LibrarySystem.domain.medien;
public class Buch extends Medium { public class Buch extends Medium {
private static final int AUSLEIHDAUER = 28; //4 Wochen in Tagen private static final int AUSLEIHDAUER = 28; //4 Wochen in Tagen
public Buch(int ID, String titel, String autor, int erscheinungsjahr) { public Buch(int ID, String titel, String autor, int erscheinungsjahr, String medienart) {
super(ID, titel, autor, erscheinungsjahr); super(ID, titel, autor, erscheinungsjahr, medienart);
} }
@Override @Override

View File

@ -3,8 +3,8 @@ package LibrarySystem.domain.medien;
public class CD extends Medium { public class CD extends Medium {
public static final int AUSLEIHDAUER = 14; // 2 Wochen public static final int AUSLEIHDAUER = 14; // 2 Wochen
public CD(int ID, String titel, String autor, int erscheinungsjahr) { public CD(int ID, String titel, String autor, int erscheinungsjahr, String medienart) {
super(ID, titel, autor, erscheinungsjahr); super(ID, titel, autor, erscheinungsjahr, medienart);
} }
@Override @Override

View File

@ -3,8 +3,8 @@ package LibrarySystem.domain.medien;
public class DVD extends Medium { public class DVD extends Medium {
private static final int AUSLEIHDAUER = 7; // 1 Woche private static final int AUSLEIHDAUER = 7; // 1 Woche
public DVD(int ID, String titel, String autor, int erscheinungsjahr) { public DVD(int ID, String titel, String autor, int erscheinungsjahr, String medienart) {
super(ID, titel, autor, erscheinungsjahr); super(ID, titel, autor, erscheinungsjahr, medienart);
} }
@Override @Override

View File

@ -5,12 +5,16 @@ package LibrarySystem.domain.medien;
private String titel; private String titel;
private String autor; private String autor;
private int erscheinungsjahr; private int erscheinungsjahr;
private String medienart;
private boolean istAusgeliehen;
public Medium(int ID, String titel, String autor, int erscheinungsjahr) { public Medium(int ID, String titel, String autor, int erscheinungsjahr, String medienart) {
this.ID = ID; this.ID = ID;
this.titel = titel; this.titel = titel;
this.autor = autor; this.autor = autor;
this.erscheinungsjahr = erscheinungsjahr; this.erscheinungsjahr = erscheinungsjahr;
this.medienart = medienart;
this.istAusgeliehen = false;
} }
// Abstrakte Methoden: Jede Unterklasse definiert ihre Ausleihdauer und Verlängerbarkeit // Abstrakte Methoden: Jede Unterklasse definiert ihre Ausleihdauer und Verlängerbarkeit
@ -50,8 +54,25 @@ package LibrarySystem.domain.medien;
this.erscheinungsjahr = erscheinungsjahr; this.erscheinungsjahr = erscheinungsjahr;
} }
public String getMedienart() {
return medienart;
}
public void setMedienart(String Medienart) {
this.medienart = Medienart;
}
public boolean istAusgeliehen() {
return istAusgeliehen;
}
public void setIstAusgeliehen(boolean istAusgeliehen) {
this.istAusgeliehen = istAusgeliehen;
}
@Override @Override
public String toString() { public String toString() {
return "ID: " + ID + ", Titel: " + titel + ", Autor: " + autor + ", Erscheinungsjahr: " + erscheinungsjahr; return "ID: " + ID + ", Titel: " + titel + ", Autor: " + autor + ", Erscheinungsjahr: " + erscheinungsjahr;
} }
} }

View File

@ -3,8 +3,8 @@ package LibrarySystem.domain.medien;
public class Videospiel extends Medium { public class Videospiel extends Medium {
private static final int AUSLEIHDAUER = 28; // 4 Wochen private static final int AUSLEIHDAUER = 28; // 4 Wochen
public Videospiel(int ID, String titel, String autor, int erscheinungsjahr) { public Videospiel(int ID, String titel, String autor, int erscheinungsjahr, String medienart) {
super(ID, titel, autor, erscheinungsjahr); super(ID, titel, autor, erscheinungsjahr, medienart);
} }
@Override @Override

View File

@ -1,20 +1,65 @@
package LibrarySystem.facade; package LibrarySystem.facade;
import LibrarySystem.domain.benutzern.*; import LibrarySystem.domain.benutzern.*;
import LibrarySystem.domain.medien.*;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors;
public class BibliothekSystem { public class BibliothekSystem {
private List<Benutzer> benutzerListe; private List<Benutzer> benutzerListe;
private LocalDate aktuellesDatum; private LocalDate aktuellesDatum;
private List<Medium> medienListe;
public BibliothekSystem() { public BibliothekSystem() {
this.benutzerListe = new ArrayList<>(); this.benutzerListe = new ArrayList<>();
this.aktuellesDatum = LocalDate.now(); this.aktuellesDatum = LocalDate.now();
this.medienListe = new ArrayList<>();
initialMedienHinzufuegen();
}
// Methode zum Hinzufügen von Medien
private void initialMedienHinzufuegen() {
// Beispiel-Medien hinzufügen
Buch buch1 = new Buch(123,"Java lernen", "Max Mustermann", 2020, "Buch");
Buch buch2 = new Buch(234,"Java für Einsteiger", "Erika Musterfrau", 2014, "Buch");
DVD dvd1 = new DVD(345,"Die Matrix", "Lana Wachowski", 2014, "DVD");
CD cd1 = new CD(456,"Best of Mozart", "-", 1850, "CD");
Brettspiel brettspiel1 = new Brettspiel(567,"Monopoly", "-",2010, "Brettspiel");
Videospiel videospiel1 = new Videospiel(678,"Minecraft", "-", 2011, "Videospiel");
// Medien zur Bibliothek hinzufügen
addMedium(buch1);
addMedium(buch2);
addMedium(dvd1);
addMedium(cd1);
addMedium(brettspiel1);
addMedium(videospiel1);
}
public void addMedium(Medium medium) {
medienListe.add(medium);
}
// Durchsuchen der Medien nach einem Titel (Teilstring) und Filterung nach Eigenschaften
public List<Medium> durchsuchenMedien(String titelTeil, String medienart) {
List medienliste = medienListe.stream()
.filter(m -> m.getTitel().toLowerCase().contains(titelTeil.toLowerCase())) // Titel-Filter
.filter(m -> medienart == null || m.getMedienart().equalsIgnoreCase(medienart)) // Medienart-Filter
//.filter(m -> istAusgeliehen == null || m.istAusgeliehen() == istAusgeliehen) // Ausleihstatus-Filter
.collect(Collectors.toList());
if(medienliste.isEmpty()) {
System.out.println("Keine passende Medien gefunden.");
return null;
} else {
return medienliste;
}
} }
public void datumAendern(LocalDate neuesDatum) { public void datumAendern(LocalDate neuesDatum) {
@ -35,16 +80,16 @@ public class BibliothekSystem {
benutzer.aktualisiereGebuehren(aktuellesDatum); benutzer.aktualisiereGebuehren(aktuellesDatum);
if (benutzer.sindGebuehrenBezahlt()) { if (benutzer.sindGebuehrenBezahlt()) {
System.out.println("Alle Gebühren von " + benutzer.getVorname() + " " + benutzer.getNachname() + " sind bezahlt."); System.out.println("Alle Gebühren von " + benutzer.getName() + " sind bezahlt.");
} else { } else {
System.out.println("Aktuelle Gebühren für " + benutzer.getVorname() + " " + benutzer.getNachname() + ": " + benutzer.getOffeneGebuehren() + "€"); System.out.println("Aktuelle Gebühren für " + benutzer.getName() + ": " + benutzer.getOffeneGebuehren() + "€");
} }
} }
public Benutzer anmelden(String kartennummer) { public Benutzer anmelden(String kartennummer) {
for (Benutzer benutzer : benutzerListe) { for (Benutzer benutzer : benutzerListe) {
if (benutzer.getKartennummer().equals(kartennummer)) { if (benutzer.getKartennummer().equals(kartennummer)) {
System.out.println("Willkommen, " + benutzer.getVorname() + " " + benutzer.getNachname() + "!"); System.out.println("Willkommen, " + benutzer.getName() + "!");
return benutzer; return benutzer;
} }
} }