funktionen hinzügefügt und einfache ui erstellt fehlt ausleihen und spezifische funktionen wie zaheln usw.
parent
6e0ca44113
commit
324b2efda9
|
@ -0,0 +1,4 @@
|
|||
public class Aausleihe {
|
||||
|
||||
|
||||
}
|
|
@ -1,19 +1,23 @@
|
|||
|
||||
import java.util.Date;
|
||||
import java.util.Calendar;
|
||||
|
||||
abstract class Benutzer {
|
||||
class Benutzer {
|
||||
private String name;
|
||||
private String nachname;
|
||||
private int kundennummer;
|
||||
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() {
|
||||
return nachname;
|
||||
}
|
||||
|
@ -22,27 +26,40 @@ abstract class Benutzer {
|
|||
return name;
|
||||
}
|
||||
|
||||
public Date getDate() {
|
||||
public Date getDate() {
|
||||
return date;
|
||||
}
|
||||
|
||||
public int getKundennummer() {
|
||||
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 Admin extends Benutzer {
|
||||
Admin(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);
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
|
20
Main.java
20
Main.java
|
@ -1,2 +1,22 @@
|
|||
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();
|
||||
}
|
||||
}
|
||||
|
|
159
Medien.java
159
Medien.java
|
@ -1,17 +1,27 @@
|
|||
public abstract class Medien {
|
||||
// Eigenschaften der Medien-Klasse
|
||||
// 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 String autor;
|
||||
protected int id;
|
||||
protected boolean verlängerung; // Standardwert für alle Medien
|
||||
protected int frist; // Diese Variable wird in den Unterklassen gesetzt
|
||||
protected int frist; // Standard-Ausleihfrist in Wochen
|
||||
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
|
||||
public Medien(String name, String autor, int id) {
|
||||
public Medien(String name, int id, int frist, int maxVerlängerungen) {
|
||||
this.name = name;
|
||||
this.autor = autor;
|
||||
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
|
||||
|
@ -19,66 +29,133 @@ public abstract class Medien {
|
|||
return name;
|
||||
}
|
||||
|
||||
public String getAutor() {
|
||||
return autor;
|
||||
}
|
||||
|
||||
public int getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public boolean isVerlängerung() {
|
||||
return verlängerung;
|
||||
// Implementierung der Ausleihbar-Methoden
|
||||
@Override
|
||||
public int getMaxVerlängerungen() {
|
||||
return maxVerlängerungen;
|
||||
}
|
||||
|
||||
// Setter für verlängerung, falls benötigt
|
||||
public void setVerlängerung(boolean verlängerung) {
|
||||
this.verlängerung = verlängerung;
|
||||
@Override
|
||||
public boolean kannVerlängern() {
|
||||
return aktuelleVerlängerungen < maxVerlängerungen;
|
||||
}
|
||||
|
||||
// Getter für frist
|
||||
public int getFrist() {
|
||||
return frist;
|
||||
@Override
|
||||
public boolean verlängern() {
|
||||
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 {
|
||||
// Spezifische frist für Bücher
|
||||
public Book(String name, String autor, int id) {
|
||||
super(name, autor, id);
|
||||
this.frist = 4; // frist für Book ist 4
|
||||
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 {
|
||||
// Spezifische frist für DVDs
|
||||
public Dvds(String name, String autor, int id) {
|
||||
super(name, autor, id);
|
||||
this.frist = 1; // frist für Dvds ist 1
|
||||
private String regisseur;
|
||||
|
||||
public Dvds(String name, String regisseur, int id) {
|
||||
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 {
|
||||
// Spezifische frist für CDs
|
||||
public Cds(String name, String autor, int id) {
|
||||
super(name, autor, id);
|
||||
this.frist = 2; // frist für Cds ist 2
|
||||
public Cds(String name, int id) {
|
||||
super(name, id, 2, 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 {
|
||||
// Spezifische frist für Brettspiele
|
||||
public Brettspiel(String name, String autor, int id) {
|
||||
super(name, autor, id);
|
||||
this.frist = 2; // frist für Brettspiel ist 2
|
||||
public Brettspiel(String name, int id) {
|
||||
super(name, id, 2, 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 {
|
||||
// Spezifische frist für Videospiele
|
||||
public Videospiel(String name, String autor, int id) {
|
||||
super(name, autor, id);
|
||||
this.frist = 3; // frist für Videospiel ist 3
|
||||
private String entwickler;
|
||||
|
||||
public Videospiel(String name, String entwickler, int id) {
|
||||
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 + ")";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,2 +1,100 @@
|
|||
import javax.crypto.spec.PSource;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue