diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..98f2563 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,4 @@ +{ + "java.project.sourcePaths": ["src/main/java"], + "java.project.outputPath": "out" +} \ No newline at end of file diff --git a/data/kunden.csv b/data/kunden.csv new file mode 100644 index 0000000..ce05721 --- /dev/null +++ b/data/kunden.csv @@ -0,0 +1,5 @@ +K-000002;Ref GmbH;Str. 1;68163;Mannheim;DE111111111;ref@ref.de;0621-111111;;AKTIV +K-000003;Muster GmbH;Hauptstr. 1;68163;Mannheim;DE123456789;info@muster.de;0621-123456;;AKTIV +K-000004;Edit GmbH;Str. 1;68163;Mannheim;DE333333333;neu@edit.de;0621-333333;;AKTIV +K-000006;Test AG;Teststr. 1;68163;Mannheim;DE987654321;test@test.de;0621-654321;;AKTIV +K-000007;Muster GmbH;Hauptstr. 1;68163;Mannheim;DE123456789;info@muster.de;0621-123456;;AKTIV diff --git a/data/kunden_counter.txt b/data/kunden_counter.txt new file mode 100644 index 0000000..c793025 --- /dev/null +++ b/data/kunden_counter.txt @@ -0,0 +1 @@ +7 \ No newline at end of file diff --git a/data/produkt_counter.txt b/data/produkt_counter.txt new file mode 100644 index 0000000..56a6051 --- /dev/null +++ b/data/produkt_counter.txt @@ -0,0 +1 @@ +1 \ No newline at end of file diff --git a/data/produkte.csv b/data/produkte.csv new file mode 100644 index 0000000..e69de29 diff --git a/lib/junit.jar b/lib/junit.jar new file mode 100644 index 0000000..7b39ab9 Binary files /dev/null and b/lib/junit.jar differ diff --git a/out/bestandsmanagement/Produkt.class b/out/bestandsmanagement/Produkt.class new file mode 100644 index 0000000..2e6f22c Binary files /dev/null and b/out/bestandsmanagement/Produkt.class differ diff --git a/out/bestandsmanagement/ProduktIdGenerator.class b/out/bestandsmanagement/ProduktIdGenerator.class new file mode 100644 index 0000000..fce887c Binary files /dev/null and b/out/bestandsmanagement/ProduktIdGenerator.class differ diff --git a/out/bestandsmanagement/ProduktRepository.class b/out/bestandsmanagement/ProduktRepository.class new file mode 100644 index 0000000..d0a8ed4 Binary files /dev/null and b/out/bestandsmanagement/ProduktRepository.class differ diff --git a/out/bestandsmanagement/ProduktServiceImpl.class b/out/bestandsmanagement/ProduktServiceImpl.class new file mode 100644 index 0000000..f211c27 Binary files /dev/null and b/out/bestandsmanagement/ProduktServiceImpl.class differ diff --git a/out/kundenverwaltung/Kunde.class b/out/kundenverwaltung/Kunde.class new file mode 100644 index 0000000..dcd8e12 Binary files /dev/null and b/out/kundenverwaltung/Kunde.class differ diff --git a/out/kundenverwaltung/KundenIdGenerator.class b/out/kundenverwaltung/KundenIdGenerator.class new file mode 100644 index 0000000..dbd4864 Binary files /dev/null and b/out/kundenverwaltung/KundenIdGenerator.class differ diff --git a/out/kundenverwaltung/KundenRepository.class b/out/kundenverwaltung/KundenRepository.class new file mode 100644 index 0000000..a8cf253 Binary files /dev/null and b/out/kundenverwaltung/KundenRepository.class differ diff --git a/out/kundenverwaltung/KundenServiceImpl.class b/out/kundenverwaltung/KundenServiceImpl.class new file mode 100644 index 0000000..9f2fa93 Binary files /dev/null and b/out/kundenverwaltung/KundenServiceImpl.class differ diff --git a/out/kundenverwaltung/KundenStatus.class b/out/kundenverwaltung/KundenStatus.class new file mode 100644 index 0000000..6e8c0b6 Binary files /dev/null and b/out/kundenverwaltung/KundenStatus.class differ diff --git a/out/kundenverwaltung/KundenVerwaltungTest.class b/out/kundenverwaltung/KundenVerwaltungTest.class new file mode 100644 index 0000000..fb09a80 Binary files /dev/null and b/out/kundenverwaltung/KundenVerwaltungTest.class differ diff --git a/out/kundenverwaltung/Main.class b/out/kundenverwaltung/Main.class new file mode 100644 index 0000000..9266de6 Binary files /dev/null and b/out/kundenverwaltung/Main.class differ diff --git a/src/main/java/bestandsmanagement/Produkt.java b/src/main/java/bestandsmanagement/Produkt.java new file mode 100644 index 0000000..eb8c675 --- /dev/null +++ b/src/main/java/bestandsmanagement/Produkt.java @@ -0,0 +1,71 @@ +package bestandsmanagement; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; + +public class Produkt { + private String produktId; + private String bezeichnung; + private BigDecimal nettoEinzelpreis; + private BigDecimal mehrwertsteuersatz; + private int bestand; + private String beschreibung; + private List belegReferenzen; + private boolean verfuegbar; + + public Produkt(String produktId, String bezeichnung, BigDecimal nettoEinzelpreis, + BigDecimal mehrwertsteuersatz, int bestand, String beschreibung) { + this.produktId = produktId; + this.bezeichnung = bezeichnung; + this.nettoEinzelpreis = nettoEinzelpreis; + this.mehrwertsteuersatz = mehrwertsteuersatz; + this.bestand = bestand; + this.beschreibung = beschreibung; + this.belegReferenzen = new ArrayList<>(); + this.verfuegbar = bestand > 0; + } + + // Validierung (F-09) + public boolean validiereFelder() { + return bezeichnung != null && !bezeichnung.isBlank() && + nettoEinzelpreis != null && nettoEinzelpreis.compareTo(BigDecimal.ZERO) >= 0 && + mehrwertsteuersatz != null && mehrwertsteuersatz.compareTo(BigDecimal.ZERO) >= 0 && + bestand >= 0; + } + + // Getter + public String getProduktId() { return produktId; } + public String getBezeichnung() { return bezeichnung; } + public BigDecimal getNettoEinzelpreis() { return nettoEinzelpreis; } + public BigDecimal getMehrwertsteuersatz(){ return mehrwertsteuersatz; } + public int getBestand() { return bestand; } + public String getBeschreibung() { return beschreibung; } + public List getBelegReferenzen() { return belegReferenzen; } + public boolean isVerfuegbar() { return verfuegbar; } + + // Setter + public void setBezeichnung(String bezeichnung) { this.bezeichnung = bezeichnung; } + public void setNettoEinzelpreis(BigDecimal preis) { this.nettoEinzelpreis = preis; } + public void setMehrwertsteuersatz(BigDecimal mwst) { this.mehrwertsteuersatz = mwst; } + public void setBeschreibung(String beschreibung) { this.beschreibung = beschreibung; } + + public void setBestand(int bestand) { + this.bestand = bestand; + this.verfuegbar = bestand > 0; // F-08 + } + + public void belegHinzufuegen(String belegnummer) { + belegReferenzen.add(belegnummer); + } + + @Override + public String toString() { + return String.format("[%s] %s | Preis: %.2f EUR | MwSt: %.0f%% | Bestand: %d | %s", + produktId, bezeichnung, + nettoEinzelpreis, + mehrwertsteuersatz.multiply(new BigDecimal("100")), + bestand, + verfuegbar ? "VERFUEGBAR" : "NICHT VERFUEGBAR"); + } +} \ No newline at end of file diff --git a/src/main/java/bestandsmanagement/ProduktIdGenerator.java b/src/main/java/bestandsmanagement/ProduktIdGenerator.java new file mode 100644 index 0000000..d7f9979 --- /dev/null +++ b/src/main/java/bestandsmanagement/ProduktIdGenerator.java @@ -0,0 +1,43 @@ +package bestandsmanagement; + +import java.io.*; +import java.nio.file.*; + +public class ProduktIdGenerator { + + private static final String COUNTER_FILE = "data/produkt_counter.txt"; + private int counter; + + public ProduktIdGenerator() { + this.counter = ladeCounter(); + } + + // Gibt die nächste lückenlose Produktnummer zurück + public String naechsteProduktId() { + counter++; + speichereCounter(); + return String.format("P-%06d", counter); + } + + private int ladeCounter() { + try { + Path path = Path.of(COUNTER_FILE); + if (Files.exists(path)) { + String inhalt = Files.readString(path).trim(); + return Integer.parseInt(inhalt); + } + } catch (IOException e) { + System.err.println("Counter konnte nicht geladen werden, starte bei 0."); + } + return 0; + } + + private void speichereCounter() { + try { + Files.createDirectories(Path.of("data")); + Files.writeString(Path.of(COUNTER_FILE), String.valueOf(counter)); + } catch (IOException e) { + System.err.println("Counter konnte nicht gespeichert werden: " + e.getMessage()); + } + } +} \ No newline at end of file diff --git a/src/main/java/bestandsmanagement/ProduktRepository.java b/src/main/java/bestandsmanagement/ProduktRepository.java new file mode 100644 index 0000000..cf36c5f --- /dev/null +++ b/src/main/java/bestandsmanagement/ProduktRepository.java @@ -0,0 +1,102 @@ +package bestandsmanagement; + +import java.io.*; +import java.math.BigDecimal; +import java.nio.file.*; +import java.util.*; + +public class ProduktRepository { + + private static final String DATA_FILE = "data/produkte.csv"; + private List produkte; + + public ProduktRepository() throws IOException { + this.produkte = new ArrayList<>(); + Files.createDirectories(Path.of("data")); + laden(); + } + + public void speichern(Produkt produkt) { + produkte.add(produkt); + speichereAlle(); + } + + public void aktualisieren(Produkt produkt) { + speichereAlle(); + } + + public void loeschen(String produktId) { + produkte.removeIf(p -> p.getProduktId().equals(produktId)); + speichereAlle(); + } + + public List alleProdukte() { + return new ArrayList<>(produkte); + } + + public Produkt findeNachId(String produktId) { + return produkte.stream() + .filter(p -> p.getProduktId().equals(produktId)) + .findFirst() + .orElse(null); + } + + public List sucheNachBezeichnung(String suchbegriff) { + List ergebnis = new ArrayList<>(); + for (Produkt p : produkte) { + if (p.getBezeichnung().toLowerCase().contains(suchbegriff.toLowerCase())) { + ergebnis.add(p); + } + } + return ergebnis; + } + + private void speichereAlle() { + try { + StringBuilder sb = new StringBuilder(); + for (Produkt p : produkte) { + sb.append(p.getProduktId()).append(";") + .append(p.getBezeichnung()).append(";") + .append(p.getNettoEinzelpreis()).append(";") + .append(p.getMehrwertsteuersatz()).append(";") + .append(p.getBestand()).append(";") + .append(p.getBeschreibung() != null ? p.getBeschreibung() : "").append(";") + .append(String.join(",", p.getBelegReferenzen())).append("\n"); + } + Files.writeString(Path.of(DATA_FILE), sb.toString()); + } catch (IOException e) { + System.err.println("Fehler beim Speichern: " + e.getMessage()); + } + } + + private void laden() { + try { + Path path = Path.of(DATA_FILE); + if (!Files.exists(path)) return; + + List zeilen = Files.readAllLines(path); + for (String zeile : zeilen) { + if (zeile.isBlank()) continue; + String[] teile = zeile.split(";", -1); + if (teile.length < 7) continue; + + Produkt p = new Produkt( + teile[0], + teile[1], + new BigDecimal(teile[2]), + new BigDecimal(teile[3]), + Integer.parseInt(teile[4]), + teile[5].isBlank() ? null : teile[5] + ); + if (!teile[6].isBlank()) { + for (String beleg : teile[6].split(",")) { + p.belegHinzufuegen(beleg); + } + } + produkte.add(p); + } + } catch (IOException e) { + System.err.println("Fehler beim Laden: " + e.getMessage()); + } + } +} \ No newline at end of file diff --git a/src/main/java/bestandsmanagement/ProduktServiceImpl.java b/src/main/java/bestandsmanagement/ProduktServiceImpl.java new file mode 100644 index 0000000..b41b492 --- /dev/null +++ b/src/main/java/bestandsmanagement/ProduktServiceImpl.java @@ -0,0 +1,107 @@ +package bestandsmanagement; + +import java.io.IOException; +import java.math.BigDecimal; +import java.util.List; + +public class ProduktServiceImpl { + + private final ProduktRepository repository; + private final ProduktIdGenerator idGenerator; + + public ProduktServiceImpl() throws IOException { + this.repository = new ProduktRepository(); + this.idGenerator = new ProduktIdGenerator(); + } + + // Legt einen neuen Artikel an (F-01, F-02, F-05) + public Produkt produktAnlegen(String bezeichnung, BigDecimal nettoEinzelpreis, + BigDecimal mehrwertsteuersatz, int bestand, String beschreibung) { + // Negativer Bestand wird abgelehnt (F-09) + if (bestand < 0) { + System.out.println("Fehler: Negativer Lagerbestand ist nicht erlaubt."); + return null; + } + + Produkt produkt = new Produkt("TEMP", bezeichnung, nettoEinzelpreis, + mehrwertsteuersatz, bestand, beschreibung); + + if (!produkt.validiereFelder()) { + System.out.println("Fehler: Alle Pflichtfelder muessen ausgefuellt sein."); + return null; + } + + String id = idGenerator.naechsteProduktId(); + Produkt neuesProdukt = new Produkt(id, bezeichnung, nettoEinzelpreis, + mehrwertsteuersatz, bestand, beschreibung); + repository.speichern(neuesProdukt); + System.out.println("Artikel erfolgreich angelegt: " + neuesProdukt); + return neuesProdukt; + } + + // Bearbeitet einen bestehenden Artikel (F-03, F-04) + public boolean produktBearbeiten(String produktId, String bezeichnung, + BigDecimal nettoEinzelpreis, BigDecimal mehrwertsteuersatz, + int bestand, String beschreibung) { + Produkt produkt = repository.findeNachId(produktId); + if (produkt == null) { + System.out.println("Fehler: Artikel mit ID " + produktId + " nicht gefunden."); + return false; + } + + // Negativer Bestand wird abgelehnt (F-09) + if (bestand < 0) { + System.out.println("Fehler: Negativer Lagerbestand ist nicht erlaubt."); + return false; + } + + produkt.setBezeichnung(bezeichnung); + produkt.setNettoEinzelpreis(nettoEinzelpreis); + produkt.setMehrwertsteuersatz(mehrwertsteuersatz); + produkt.setBestand(bestand); + produkt.setBeschreibung(beschreibung); + + if (!produkt.validiereFelder()) { + System.out.println("Fehler: Alle Pflichtfelder muessen ausgefuellt sein."); + return false; + } + + repository.aktualisieren(produkt); + System.out.println("Artikel erfolgreich aktualisiert: " + produkt); + return true; + } + + // Löscht einen Artikel mit Integritätsprüfung (F-10, F-11) + public boolean produktLoeschen(String produktId) { + Produkt produkt = repository.findeNachId(produktId); + if (produkt == null) { + System.out.println("Fehler: Artikel mit ID " + produktId + " nicht gefunden."); + return false; + } + + if (!produkt.getBelegReferenzen().isEmpty()) { + System.out.println("Fehler: Artikel kann nicht geloescht werden, da er in " + + produkt.getBelegReferenzen().size() + " Beleg(en) referenziert wird."); + return false; + } + + repository.loeschen(produktId); + System.out.println("Artikel " + produktId + " erfolgreich geloescht."); + return true; + } + + // Gibt alle Artikel zurück (F-06) + public List alleProdukte() { + return repository.alleProdukte(); + } + + // Sucht Artikel nach Bezeichnung oder ID (F-07) + public List sucheNachBezeichnung(String suchbegriff) { + return repository.sucheNachBezeichnung(suchbegriff); + } + + // Gibt einen Artikel anhand der ID zurück + public Produkt findeProdukt(String produktId) { + return repository.findeNachId(produktId); + } +} \ No newline at end of file diff --git a/src/main/java/kundenverwaltung/Main.java b/src/main/java/kundenverwaltung/Main.java index f12d93b..8eee9b2 100644 --- a/src/main/java/kundenverwaltung/Main.java +++ b/src/main/java/kundenverwaltung/Main.java @@ -1,52 +1,76 @@ package kundenverwaltung; +import bestandsmanagement.Produkt; +import bestandsmanagement.ProduktServiceImpl; + import java.io.IOException; +import java.math.BigDecimal; import java.util.List; import java.util.Scanner; public class Main { - private static KundenServiceImpl service; + private static KundenServiceImpl kundenService; + private static ProduktServiceImpl produktService; private static Scanner scanner = new Scanner(System.in); public static void main(String[] args) { try { - service = new KundenServiceImpl(); + kundenService = new KundenServiceImpl(); + produktService = new ProduktServiceImpl(); System.out.println("==========================================="); - System.out.println(" Kundenverwaltung - Gruppe J - Team 3"); + System.out.println(" Fakturierungsanwendung - Team 3"); System.out.println("==========================================="); - menueSchleife(); + hauptmenue(); } catch (IOException e) { System.err.println("Fehler beim Starten: " + e.getMessage()); } } - private static void menueSchleife() { + private static void hauptmenue() { while (true) { - System.out.println("\n--- HAUPTMENUE ---"); - System.out.println("1. Kunde anlegen"); - System.out.println("2. Alle Kunden anzeigen"); - System.out.println("3. Kunde suchen (nach Name)"); - System.out.println("4. Kunde bearbeiten"); - System.out.println("5. Kunde loeschen"); - System.out.println("6. Transaktionshistorie anzeigen"); + System.out.println("\n=== HAUPTMENUE ==="); + System.out.println("1. Kundenverwaltung"); + System.out.println("2. Bestandsmanagement"); System.out.println("0. Beenden"); System.out.print("Auswahl: "); String eingabe = scanner.nextLine().trim(); switch (eingabe) { + case "1" -> kundenmenue(); + case "2" -> produktmenue(); + case "0" -> { + System.out.println("Programm beendet."); + return; + } + default -> System.out.println("Ungueltige Eingabe."); + } + } + } + + // ─── KUNDENVERWALTUNG ─────────────────────────────────────────── + private static void kundenmenue() { + while (true) { + System.out.println("\n--- KUNDENVERWALTUNG ---"); + System.out.println("1. Kunde anlegen"); + System.out.println("2. Alle Kunden anzeigen"); + System.out.println("3. Kunde suchen"); + System.out.println("4. Kunde bearbeiten"); + System.out.println("5. Kunde loeschen"); + System.out.println("6. Transaktionshistorie"); + System.out.println("0. Zurueck"); + System.out.print("Auswahl: "); + + switch (scanner.nextLine().trim()) { case "1" -> kundeAnlegen(); case "2" -> alleKundenAnzeigen(); case "3" -> kundenSuchen(); case "4" -> kundeBearbeiten(); case "5" -> kundeLoschen(); case "6" -> transaktionshistorie(); - case "0" -> { - System.out.println("Programm beendet."); - return; - } - default -> System.out.println("Ungueltige Eingabe, bitte erneut versuchen."); + case "0" -> { return; } + default -> System.out.println("Ungueltige Eingabe."); } } } @@ -67,48 +91,32 @@ public class Main { String email = scanner.nextLine(); System.out.print("Telefon: "); String telefon = scanner.nextLine(); - - service.kundeAnlegen(name, strasse, plz, ort, steuerNummer, email, telefon); + kundenService.kundeAnlegen(name, strasse, plz, ort, steuerNummer, email, telefon); } private static void alleKundenAnzeigen() { System.out.println("\n--- ALLE KUNDEN ---"); - List kunden = service.alleKunden(); - if (kunden.isEmpty()) { - System.out.println("Keine Kunden vorhanden."); - return; - } - for (Kunde k : kunden) { - System.out.println(k); - } + List kunden = kundenService.alleKunden(); + if (kunden.isEmpty()) { System.out.println("Keine Kunden vorhanden."); return; } + kunden.forEach(System.out::println); System.out.println("Gesamt: " + kunden.size() + " Kunde(n)."); } private static void kundenSuchen() { System.out.println("\n--- KUNDE SUCHEN ---"); System.out.print("Suchbegriff (Name): "); - String suchbegriff = scanner.nextLine(); - List ergebnis = service.sucheNachName(suchbegriff); - if (ergebnis.isEmpty()) { - System.out.println("Keine Kunden gefunden."); - return; - } - for (Kunde k : ergebnis) { - System.out.println(k); - } + List ergebnis = kundenService.sucheNachName(scanner.nextLine()); + if (ergebnis.isEmpty()) { System.out.println("Keine Kunden gefunden."); return; } + ergebnis.forEach(System.out::println); } private static void kundeBearbeiten() { System.out.println("\n--- KUNDE BEARBEITEN ---"); - System.out.print("Kunden-ID eingeben: "); + System.out.print("Kunden-ID: "); String id = scanner.nextLine(); - Kunde kunde = service.findeKunde(id); - if (kunde == null) { - System.out.println("Kunde nicht gefunden."); - return; - } + Kunde kunde = kundenService.findeKunde(id); + if (kunde == null) { System.out.println("Kunde nicht gefunden."); return; } System.out.println("Aktuell: " + kunde); - System.out.println("Neue Werte eingeben (Enter = Feld uebernehmen):"); System.out.print("Name [" + kunde.getName() + "]: "); String name = scanner.nextLine(); @@ -138,20 +146,111 @@ public class Main { String telefon = scanner.nextLine(); if (telefon.isBlank()) telefon = kunde.getTelefon(); - service.kundeBearbeiten(id, name, strasse, plz, ort, steuerNummer, email, telefon); + kundenService.kundeBearbeiten(id, name, strasse, plz, ort, steuerNummer, email, telefon); } private static void kundeLoschen() { System.out.println("\n--- KUNDE LOESCHEN ---"); - System.out.print("Kunden-ID eingeben: "); - String id = scanner.nextLine(); - service.kundeLoschen(id); + System.out.print("Kunden-ID: "); + kundenService.kundeLoschen(scanner.nextLine()); } private static void transaktionshistorie() { System.out.println("\n--- TRANSAKTIONSHISTORIE ---"); - System.out.print("Kunden-ID eingeben: "); + System.out.print("Kunden-ID: "); + kundenService.zeigeTransaktionshistorie(scanner.nextLine()); + } + + // ─── BESTANDSMANAGEMENT ───────────────────────────────────────── + private static void produktmenue() { + while (true) { + System.out.println("\n--- BESTANDSMANAGEMENT ---"); + System.out.println("1. Artikel anlegen"); + System.out.println("2. Alle Artikel anzeigen"); + System.out.println("3. Artikel suchen"); + System.out.println("4. Artikel bearbeiten"); + System.out.println("5. Artikel loeschen"); + System.out.println("0. Zurueck"); + System.out.print("Auswahl: "); + + switch (scanner.nextLine().trim()) { + case "1" -> artikelAnlegen(); + case "2" -> alleArtikelAnzeigen(); + case "3" -> artikelSuchen(); + case "4" -> artikelBearbeiten(); + case "5" -> artikelLoeschen(); + case "0" -> { return; } + default -> System.out.println("Ungueltige Eingabe."); + } + } + } + + private static void artikelAnlegen() { + System.out.println("\n--- ARTIKEL ANLEGEN ---"); + System.out.print("Bezeichnung: "); + String bezeichnung = scanner.nextLine(); + System.out.print("Netto-Einzelpreis (z.B. 19.99): "); + BigDecimal preis = new BigDecimal(scanner.nextLine().replace(",", ".")); + System.out.print("Mehrwertsteuersatz (z.B. 0.19 fuer 19%): "); + BigDecimal mwst = new BigDecimal(scanner.nextLine().replace(",", ".")); + System.out.print("Lagerbestand: "); + int bestand = Integer.parseInt(scanner.nextLine().trim()); + System.out.print("Beschreibung (optional, Enter ueberspringen): "); + String beschreibung = scanner.nextLine(); + if (beschreibung.isBlank()) beschreibung = null; + produktService.produktAnlegen(bezeichnung, preis, mwst, bestand, beschreibung); + } + + private static void alleArtikelAnzeigen() { + System.out.println("\n--- ALLE ARTIKEL ---"); + List produkte = produktService.alleProdukte(); + if (produkte.isEmpty()) { System.out.println("Keine Artikel vorhanden."); return; } + produkte.forEach(System.out::println); + System.out.println("Gesamt: " + produkte.size() + " Artikel."); + } + + private static void artikelSuchen() { + System.out.println("\n--- ARTIKEL SUCHEN ---"); + System.out.print("Suchbegriff (Bezeichnung): "); + List ergebnis = produktService.sucheNachBezeichnung(scanner.nextLine()); + if (ergebnis.isEmpty()) { System.out.println("Keine Artikel gefunden."); return; } + ergebnis.forEach(System.out::println); + } + + private static void artikelBearbeiten() { + System.out.println("\n--- ARTIKEL BEARBEITEN ---"); + System.out.print("Artikel-ID: "); String id = scanner.nextLine(); - service.zeigeTransaktionshistorie(id); + Produkt produkt = produktService.findeProdukt(id); + if (produkt == null) { System.out.println("Artikel nicht gefunden."); return; } + System.out.println("Aktuell: " + produkt); + + System.out.print("Bezeichnung [" + produkt.getBezeichnung() + "]: "); + String bezeichnung = scanner.nextLine(); + if (bezeichnung.isBlank()) bezeichnung = produkt.getBezeichnung(); + + System.out.print("Netto-Einzelpreis [" + produkt.getNettoEinzelpreis() + "]: "); + String preisStr = scanner.nextLine(); + BigDecimal preis = preisStr.isBlank() ? produkt.getNettoEinzelpreis() : new BigDecimal(preisStr.replace(",", ".")); + + System.out.print("Mehrwertsteuersatz [" + produkt.getMehrwertsteuersatz() + "]: "); + String mwstStr = scanner.nextLine(); + BigDecimal mwst = mwstStr.isBlank() ? produkt.getMehrwertsteuersatz() : new BigDecimal(mwstStr.replace(",", ".")); + + System.out.print("Lagerbestand [" + produkt.getBestand() + "]: "); + String bestandStr = scanner.nextLine(); + int bestand = bestandStr.isBlank() ? produkt.getBestand() : Integer.parseInt(bestandStr.trim()); + + System.out.print("Beschreibung [" + produkt.getBeschreibung() + "]: "); + String beschreibung = scanner.nextLine(); + if (beschreibung.isBlank()) beschreibung = produkt.getBeschreibung(); + + produktService.produktBearbeiten(id, bezeichnung, preis, mwst, bestand, beschreibung); + } + + private static void artikelLoeschen() { + System.out.println("\n--- ARTIKEL LOESCHEN ---"); + System.out.print("Artikel-ID: "); + produktService.produktLoeschen(scanner.nextLine()); } } \ No newline at end of file