Compare commits

...

2 Commits

6 changed files with 386 additions and 60 deletions

4
Aausleihe.java 100644
View File

@ -0,0 +1,4 @@
public class Aausleihe {
}

View File

@ -1,19 +1,23 @@
import java.util.Date; import java.util.Date;
import java.util.Calendar;
abstract class Benutzer { class Benutzer {
private String name; private String name;
private String nachname; private String nachname;
private int kundennummer; private int kundennummer;
private Date date; private Date date;
Benutzer(String name,String nachname,int kundennummer,Date date){
this.name=name;
this.nachname=nachname;
this.date=date;
this.kundennummer=kundennummer;
// Konstruktor
Benutzer(String name, String nachname, int kundennummer, Date date) {
this.name = name;
this.nachname = nachname;
this.date = date;
this.kundennummer = kundennummer;
} }
// Getter-Methoden
public String getNachname() { public String getNachname() {
return nachname; return nachname;
} }
@ -29,20 +33,33 @@ abstract class Benutzer {
public int getKundennummer() { public int getKundennummer() {
return kundennummer; return kundennummer;
} }
public static class Erwachsen extends Benutzer{
Erwachsen(String name,String nachname,int kundennummer,Date date){
super(name,nachname,kundennummer,date);
// Methode zum Extrahieren des Jahres aus dem Date
public static int getJahr(Benutzer benutzer) {
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
} }
// Die Unterklassen Erwachsen und Kinder bleiben unverändert
public static class Erwachsen extends Benutzer {
Erwachsen(String name, String nachname, int kundennummer, Date date) {
super(name, nachname, kundennummer, date);
} }
public static class Kinder extends Benutzer{
Kinder(String name,String nachname,int kundennummer,Date date){
super(name,nachname,kundennummer,date);
} }
public static class Kinder extends Benutzer {
Kinder(String name, String nachname, int kundennummer, Date date) {
super(name, nachname, kundennummer, date);
}
}
public static class Admin extends Benutzer {
Admin(String name, String nachname, int kundennummer, Date date) {
super(name, nachname, kundennummer, date);
} }
}
} }

View File

@ -1,2 +1,22 @@
public class Main { public class Main {
public static void main(String[] args) {
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));
verwaltung.mediensListe.add(creator.factoryMedien("Inception", "Christopher Nolan", 3, "dvd", 0));
verwaltung.mediensListe.add(creator.factoryMedien("Matrix", "Wachowski", 4, "dvd", 0));
verwaltung.mediensListe.add(creator.factoryMedien("Thriller", "", 5, "cd", 0));
verwaltung.mediensListe.add(creator.factoryMedien("Back in Black", "", 6, "cd", 0));
verwaltung.mediensListe.add(creator.factoryMedien("Schach", "", 7, "sb", 0));
verwaltung.mediensListe.add(creator.factoryMedien("Monopoly", "", 8, "sb", 0));
verwaltung.mediensListe.add(creator.factoryMedien("Minecraft", "Mojang", 9, "videospiel", 0));
verwaltung.mediensListe.add(creator.factoryMedien("The Witcher 3", "CD Projekt", 10, "videospiel", 0));
// Ui mit der Verwaltung-Instanz initialisieren
Ui ui = new Ui(verwaltung);
ui.anmeldung();
}
} }

View File

@ -1,17 +1,27 @@
public abstract class Medien { // Interface für Medien, die ausgeliehen werden können
// Eigenschaften der Medien-Klasse 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 String name;
protected String autor;
protected int id; protected int id;
protected boolean verlängerung; // Standardwert für alle Medien protected int frist; // Standard-Ausleihfrist in Wochen
protected int frist; // Diese Variable wird in den Unterklassen gesetzt protected int maxVerlängerungen; // Maximale Anzahl an möglichen Verlängerungen
protected int aktuelleVerlängerungen; // Aktuelle Anzahl an durchgeführten Verlängerungen
protected boolean istAusgeliehen; // Status, ob das Medium ausgeliehen ist
// Konstruktor // Konstruktor
public Medien(String name, String autor, int id) { public Medien(String name, int id, int frist, int maxVerlängerungen) {
this.name = name; this.name = name;
this.autor = autor;
this.id = id; this.id = id;
this.verlängerung = false; // Standardwert, falls nicht anders gesetzt this.frist = frist;
this.maxVerlängerungen = maxVerlängerungen;
this.aktuelleVerlängerungen = 0; // Initialisierung ohne Verlängerungen
this.istAusgeliehen = false; // Initialer Status: nicht ausgeliehen
} }
// Getter-Methoden // Getter-Methoden
@ -19,66 +29,133 @@ public abstract class Medien {
return name; return name;
} }
public String getAutor() {
return autor;
}
public int getId() { public int getId() {
return id; return id;
} }
public boolean isVerlängerung() { // Implementierung der Ausleihbar-Methoden
return verlängerung; @Override
public int getMaxVerlängerungen() {
return maxVerlängerungen;
} }
// Setter für verlängerung, falls benötigt @Override
public void setVerlängerung(boolean verlängerung) { public boolean kannVerlängern() {
this.verlängerung = verlängerung; return aktuelleVerlängerungen < maxVerlängerungen;
} }
// Getter für frist @Override
public int getFrist() { public boolean verlängern() {
return frist; if (kannVerlängern()) {
aktuelleVerlängerungen++;
return true; // Verlängerung erfolgreich
}
return false; // Keine Verlängerung mehr möglich
} }
// Statische innere Klassen, die Medien erben 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 { public static class Book extends Medien {
// Spezifische frist für Bücher private String autor;
public Book(String name, String autor, int id) { private int erscheinungsjahr;
super(name, autor, id);
this.frist = 4; // frist für Book ist 4 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 { public static class Dvds extends Medien {
// Spezifische frist für DVDs private String regisseur;
public Dvds(String name, String autor, int id) {
super(name, autor, id); public Dvds(String name, String regisseur, int id) {
this.frist = 1; // frist für Dvds ist 1 super(name, id, 1, 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 static class Cds extends Medien {
// Spezifische frist für CDs public Cds(String name, int id) {
public Cds(String name, String autor, int id) { super(name, id, 2, 0); // Frist für CDs ist 2 Wochen, keine Verlängerung möglich
super(name, autor, id); }
this.frist = 2; // frist für Cds ist 2
@Override
public String toString() {
return "CD: " + name + " (ID: " + id + ")";
} }
} }
// Unterklasse für Brettspiele
public static class Brettspiel extends Medien { public static class Brettspiel extends Medien {
// Spezifische frist für Brettspiele public Brettspiel(String name, int id) {
public Brettspiel(String name, String autor, int id) { super(name, id, 2, 0); // Frist für Brettspiele ist 2 Wochen, keine Verlängerung möglich
super(name, autor, id); }
this.frist = 2; // frist für Brettspiel ist 2
@Override
public String toString() {
return "Brettspiel: " + name + " (ID: " + id + ")";
} }
} }
// Unterklasse für Videospiele
public static class Videospiel extends Medien { public static class Videospiel extends Medien {
// Spezifische frist für Videospiele private String entwickler;
public Videospiel(String name, String autor, int id) {
super(name, autor, id); public Videospiel(String name, String entwickler, int id) {
this.frist = 3; // frist für Videospiel ist 3 super(name, id, 4, 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 + ")";
} }
} }
} }

110
Ui.java 100644
View File

@ -0,0 +1,110 @@
import java.util.*; // Für LinkedList, List, ArrayList, Scanner und andere grundlegende Klassen
import java.util.stream.Collectors; // Für die Collectors-Funktionalität in Streams
import java.text.ParseException; // Für Ausnahmebehandlung beim Parsen von Daten
import java.text.SimpleDateFormat;
import java.util.function.Predicate;
// Für die Verarbeitung von Datumsformaten
public class Ui {
private Scanner scanner = new Scanner(System.in);
private Verwaltung verwaltung;
// Konstruktor, der eine Verwaltung-Instanz annimmt
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: Registrieren");
System.out.println("2: Anmelden mit Kundennummer");
System.out.println("3: Suchen nach Objekten");
System.out.println("0: Programm beenden");
int menue = scanner.nextInt();
scanner.nextLine(); // Leert den Puffer nach nextInt()
switch (menue) {
case 1:
registrieren();
break;
case 2:
anmelden();
break;
case 3:
suchenNachMedien();
break;
case 4:
case 0:
System.out.println("Programm wird beendet. Auf Wiedersehen!");
running = false;
break;
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() {
System.out.println("Bitte geben Sie stichwortartig an, wonach Sie suchen:");
String suchbegriff = scanner.nextLine();
// Die Methode durchsuchenMedien in der Verwaltungsklasse wird aufgerufen
List<Medien> gefundeneMedien = Verwaltung.durchsuchenMedien(verwaltung.mediensListe, suchbegriff);
if (gefundeneMedien.isEmpty()) {
System.out.println("Keine Medien gefunden.");
} else {
System.out.println("Gefundene Medien:");
gefundeneMedien.forEach(System.out::println); // Nutzt die toString()-Methode jeder Medienklasse zur Ausgabe
}
}
}

View File

@ -1,2 +1,100 @@
import javax.crypto.spec.PSource;
import java.util.*;
import java.util.stream.Collectors;
public class Verwaltung { public class Verwaltung {
LinkedList<Medien> mediensListe = new LinkedList<>();
LinkedList<Benutzer> benutzerListe = new LinkedList<>();
Creator obj = new Creator();
void addFunktion(Medien medien) {
mediensListe.add(medien);
}
void addBenutzer(Benutzer benutzer) {
benutzerListe.add(benutzer);
}
static int mrgen() {
Random m = new Random();
int[] zahl = new int[7];
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() {
final int[] genkundennummer = new int[1]; // Verwendung eines Arrays, um den Wert zu ändern
do {
genkundennummer[0] = mrgen(); // Eine neue Kundennummer generieren
} while (benutzerListe.stream().anyMatch(benutzer -> benutzer.getKundennummer() == genkundennummer[0]));
return genkundennummer[0]; // Rückgabe der Kundennummer
}
// Verbesserte Version der durchsuchenMedien-Methode
public static List<Medien> durchsuchenMedien(LinkedList<Medien> medienListe, String suchbegriff) {
String suchbegriffKlein = suchbegriff.toLowerCase(); // Der Suchbegriff in Kleinbuchstaben für einfache Vergleiche
return medienListe.stream()
.filter(medien -> {
// Sucht nach dem Mediumstyp (Art des Mediums) und dem Namen des Werkes
boolean gefunden = false;
// Überprüfe, ob die Art des Mediums im Suchbegriff enthalten ist
if (medien instanceof Medien.Book) {
gefunden |= "buch".contains(suchbegriffKlein);
} else if (medien instanceof Medien.Dvds) {
gefunden |= "dvd".contains(suchbegriffKlein);
} else if (medien instanceof Medien.Cds) {
gefunden |= "cd".contains(suchbegriffKlein);
} else if (medien instanceof Medien.Brettspiel) {
gefunden |= "sb".contains(suchbegriffKlein); // "sb" für Brettspiel
} else if (medien instanceof Medien.Videospiel) {
gefunden |= "videospiel".contains(suchbegriffKlein);
}
// Zusätzlich wird nach dem Namen des Werkes gesucht
gefunden |= medien.getName().toLowerCase().contains(suchbegriffKlein);
return gefunden; // Wenn das Medium den Suchbegriff in der Art oder im Namen enthält, bleibt es in der Liste
})
.collect(Collectors.toList()); // Rückgabe der gefilterten Liste
}
}
class Creator {
static Benutzer factoryBenutzer(String name, String nachname, int kundennummer, Date date) {
if (Benutzer.getJahr(new Benutzer(name, nachname, kundennummer, date)) > 18) {
return new Benutzer.Erwachsen(name, nachname, kundennummer, date);
} else {
return new Benutzer.Kinder(name, nachname, kundennummer, date);
}
}
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); // 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);
}
}
} }