From bbddb2db183ab0116388296ad45d3a55f2947844 Mon Sep 17 00:00:00 2001 From: Christian Khazanovych <3028363@stud.th-mannheim.de> Date: Wed, 24 Jun 2026 16:10:16 +0200 Subject: [PATCH] Gruppe J: Kundenverwaltung hinzugefuegt --- .vscode/settings.json | 4 + out/kundenverwaltung/Kunde.class | Bin 0 -> 3437 bytes out/kundenverwaltung/KundenIdGenerator.class | Bin 0 -> 2689 bytes out/kundenverwaltung/KundenRepository.class | Bin 0 -> 6694 bytes out/kundenverwaltung/KundenServiceImpl.class | Bin 0 -> 4858 bytes out/kundenverwaltung/KundenStatus.class | Bin 0 -> 1027 bytes out/kundenverwaltung/Main.class | Bin 0 -> 6608 bytes src/main/java/kundenverwaltung/Kunde.java | 74 +++++++++ .../kundenverwaltung/KundenIdGenerator.java | 43 +++++ .../kundenverwaltung/KundenRepository.java | 109 ++++++++++++ .../kundenverwaltung/KundenServiceImpl.java | 114 +++++++++++++ .../java/kundenverwaltung/KundenStatus.java | 6 + src/main/java/kundenverwaltung/Main.java | 157 ++++++++++++++++++ 13 files changed, 507 insertions(+) create mode 100644 .vscode/settings.json create mode 100644 out/kundenverwaltung/Kunde.class create mode 100644 out/kundenverwaltung/KundenIdGenerator.class create mode 100644 out/kundenverwaltung/KundenRepository.class create mode 100644 out/kundenverwaltung/KundenServiceImpl.class create mode 100644 out/kundenverwaltung/KundenStatus.class create mode 100644 out/kundenverwaltung/Main.class create mode 100644 src/main/java/kundenverwaltung/Kunde.java create mode 100644 src/main/java/kundenverwaltung/KundenIdGenerator.java create mode 100644 src/main/java/kundenverwaltung/KundenRepository.java create mode 100644 src/main/java/kundenverwaltung/KundenServiceImpl.java create mode 100644 src/main/java/kundenverwaltung/KundenStatus.java create mode 100644 src/main/java/kundenverwaltung/Main.java 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/out/kundenverwaltung/Kunde.class b/out/kundenverwaltung/Kunde.class new file mode 100644 index 0000000000000000000000000000000000000000..7f86715f39789064acbd86deb25f4fca281fc7a4 GIT binary patch literal 3437 zcmc&#TUQfj6y1}1!Uz!+i6UTx7zPpX(yD+~#0wQKHHZyr+kp&mBuren=+gFI^sT?a zhqkM!y{z^z4_*Bw{R>^ItNVNtAPy7z*oVwHbMozd&UbF}$3MUP4&WL}Q3N#fZPcBD z<-D*eFU?Y|?i43)i6M%RhU7Ezg*jO=X}r7o%v!5yh`GlX3L1JBcmB@RDz;Oc)(~>c zO-nr0SY?=AJS}s@#1ktZ!KT^zWc5FEg4Tp7v5fSZ(j;N~*>4>@7Q5|tt zJEkMyYNI;3T_H@oaSi)abyec8R4V2x$$kO``o+gd9o^`O;}lLuF-4#6 zO{ohH6i37O%fU z@mRH<7iP&W*le5YR;eJ(#k{N}FpJAku$XO~?6#_ok3d}1uFkQ)H#F>F2dr(}HlMeA zb``CfngmCBeSdarckK!1p*yPK6V%A;_I!jd_oVGbxhtLDqyBDh{unLS-2NBr($)y{ z@@39D1-)DD+vgy&%h;j&=OL)va3{@R&F%18E}_X<)=iMH|Q%saOM9<5w8@x8Ugs<9kdtaP~Xp=>tAb zbIpMMLi7};uWtI`p$y^Bo8TL| z4?@zFW^nS{i(`C_aEXpG=nNj3P9`=GKeZe<;!D%n}lrQ+E zFL=ZYp7I4R_<}QD@M&N0$G+gK7ktJSd<%;#Xi}B+wwmDfdQW&s&iazv!CjwbIqLomc2S_r&%@%S6im8t(h^40?Gkbl{OKAUrvLo?$P~ z#ST2OLxg9^pC|3*neM0CZaF__E8 qC^ETxQmonBPgvg>gKqVixxvrOO@5GWs4(0eJiEO+pV3_a8~*|$P)?)( literal 0 HcmV?d00001 diff --git a/out/kundenverwaltung/KundenIdGenerator.class b/out/kundenverwaltung/KundenIdGenerator.class new file mode 100644 index 0000000000000000000000000000000000000000..2bfce1ec361bad2b0deeb71047782ac04af87aae GIT binary patch literal 2689 zcmai0TUQfT7~K;n6T?shM5R?5QIrHB*0#19FVzT|8pIkdRcrN-9LSh36K5s}z2ARA zSNqzRzW7kPTAJlr_6PJwb#-4}eMhs3W3bxLmV} z(pr_yV^Q&H)^h5)Z^#y}N=rJzvmG6s8g@Svt0GkqTrjivP!>E5MrLO2#_Z&+`%~H6 zq=x?7){?yEnAUPyLr=!GTu)fuyr|S<6uUI+D+*7f0@(WnyJmUPnef)=P!FFpXju(i z=S<7=E@YMY26`!@D@6<2?-ntxKlJ z!!>Xg%uttHGhL4vJr(k3MF@l4G;VoMC+;YK^9C;9qK23wMKR#2VYIEUHY%x9TrzMO z2Uxjmh830HD+b$cN<*|N99J@H8V1{llwkQ@!v{Lp1Wj$1UuU_k7`Toci(EPmcLy0` z25z$7JhGHxB^|{LMjiG;ylh*nqPWG%^Ww`=wTcygEFE4>#Mzn-UoJ{BesUs)o4BRp z!-lM_ZVluy%Ob2Qq>8lz^?4oa)gUe0pPiXpD@Z?S)S=1>VV?w~H`oa8-GC{K&3-?UMDLa%C^=y;%Eq_r4?N8J}|o=mB-xYT%3xm`3+K#{Fh zpkSW7VmcgXwqr_`%dNI4ez9D3aNcN`*5FhzEU6}5R;snMZrB7m%x(2PQ-gB@GR8T~{p2ejXp3 zNiLYIeJi5Oab^{Sw_tju#mq&RRUAGZo>w($(>8qY0WJ+J&d%d!9?%bZc44mJGDOVIE=~OnL;b;T3f8N%xnGYk6T)za z5K&(aA;PcRrNSHUk9IsqqK=8&7;oOLOBpEb;LJ~3B7Vr^09b}NVsceL+qqu{+ zw0+E#{6t&SF{gy)Cq&5iCjv(J@_hfjkS{Oy>ktc@0R*Z@+DmmjT=)$Giuu?EtY>%x zFo35%{{%k^8vOT?12BR<4ypu>ljSJRA?fqp8vus9$I;u$u|kf$WL2Ys2v+f!*C+wL T;O|R(%_sF8^bNkl4;cC%n+3jf literal 0 HcmV?d00001 diff --git a/out/kundenverwaltung/KundenRepository.class b/out/kundenverwaltung/KundenRepository.class new file mode 100644 index 0000000000000000000000000000000000000000..cfb54217826d196dbc13cc51ece9345b4aa73880 GIT binary patch literal 6694 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 LvqZBv2ciD}c)8R2 literal 0 HcmV?d00001 diff --git a/out/kundenverwaltung/KundenServiceImpl.class b/out/kundenverwaltung/KundenServiceImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..6292ee631420fad2357c1a5327edccb57eac550b GIT binary patch literal 4858 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 belegReferenzen; + private KundenStatus status; + + public Kunde(String kundenId, String name, String strasse, String plz, + String ort, String steuerNummer, String email, String telefon) { + this.kundenId = kundenId; + this.name = name; + this.strasse = strasse; + this.plz = plz; + this.ort = ort; + this.steuerNummer = steuerNummer; + this.email = email; + this.telefon = telefon; + this.belegReferenzen = new ArrayList<>(); + this.status = KundenStatus.AKTIV; + } + + // Validierung aller Pflichtfelder (F-03) + public boolean validiereFelder() { + return name != null && !name.isBlank() && + strasse != null && !strasse.isBlank() && + plz != null && !plz.isBlank() && + ort != null && !ort.isBlank() && + steuerNummer != null && !steuerNummer.isBlank() && + email != null && !email.isBlank() && + telefon != null && !telefon.isBlank(); + } + + // Getter + public String getKundenId() { return kundenId; } + public String getName() { return name; } + public String getStrasse() { return strasse; } + public String getPlz() { return plz; } + public String getOrt() { return ort; } + public String getSteuerNummer() { return steuerNummer; } + public String getEmail() { return email; } + public String getTelefon() { return telefon; } + public List getBelegReferenzen() { return belegReferenzen; } + public KundenStatus getStatus() { return status; } + + // Setter + public void setName(String name) { this.name = name; } + public void setStrasse(String strasse) { this.strasse = strasse; } + public void setPlz(String plz) { this.plz = plz; } + public void setOrt(String ort) { this.ort = ort; } + public void setSteuerNummer(String nr) { this.steuerNummer = nr; } + public void setEmail(String email) { this.email = email; } + public void setTelefon(String telefon) { this.telefon = telefon; } + public void setStatus(KundenStatus status) { this.status = status; } + + public void belegHinzufuegen(String belegnummer) { + belegReferenzen.add(belegnummer); + } + + @Override + public String toString() { + return String.format("[%s] %s, %s %s, %s | %s | %s", + kundenId, name, plz, ort, strasse, email, telefon); + } +} \ No newline at end of file diff --git a/src/main/java/kundenverwaltung/KundenIdGenerator.java b/src/main/java/kundenverwaltung/KundenIdGenerator.java new file mode 100644 index 0000000..9ed70b5 --- /dev/null +++ b/src/main/java/kundenverwaltung/KundenIdGenerator.java @@ -0,0 +1,43 @@ +package kundenverwaltung; + +import java.io.*; +import java.nio.file.*; + +public class KundenIdGenerator { + + private static final String COUNTER_FILE = "data/kunden_counter.txt"; + private int counter; + + public KundenIdGenerator() { + this.counter = ladeCounter(); + } + + // Gibt die nächste lückenlose Kundennummer zurück (F-02) + public String naechsteKundenId() { + counter++; + speichereCounter(); + return String.format("K-%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()); + } + } +} diff --git a/src/main/java/kundenverwaltung/KundenRepository.java b/src/main/java/kundenverwaltung/KundenRepository.java new file mode 100644 index 0000000..a3a97b9 --- /dev/null +++ b/src/main/java/kundenverwaltung/KundenRepository.java @@ -0,0 +1,109 @@ +package kundenverwaltung; + +import java.io.*; +import java.nio.file.*; +import java.util.*; + +public class KundenRepository { + + private static final String DATA_FILE = "data/kunden.csv"; + private List kunden; + + public KundenRepository() throws IOException { + this.kunden = new ArrayList<>(); + Files.createDirectories(Path.of("data")); + laden(); + } + + // Speichert einen neuen Kunden (F-04) + public void speichern(Kunde kunde) { + kunden.add(kunde); + speichereAlle(); + } + + // Aktualisiert einen bestehenden Kunden (F-07) + public void aktualisieren(Kunde kunde) { + speichereAlle(); + } + + // Löscht einen Kunden anhand der ID (F-11) + public void loeschen(String kundenId) { + kunden.removeIf(k -> k.getKundenId().equals(kundenId)); + speichereAlle(); + } + + // Gibt alle Kunden zurück (F-08) + public List alleKunden() { + return new ArrayList<>(kunden); + } + + // Sucht einen Kunden anhand der ID (F-10) + public Kunde findeNachId(String kundenId) { + return kunden.stream() + .filter(k -> k.getKundenId().equals(kundenId)) + .findFirst() + .orElse(null); + } + + // Sucht Kunden anhand des Namens (F-09) + public List sucheNachName(String suchbegriff) { + List ergebnis = new ArrayList<>(); + for (Kunde k : kunden) { + if (k.getName().toLowerCase().contains(suchbegriff.toLowerCase())) { + ergebnis.add(k); + } + } + return ergebnis; + } + + // Speichert alle Kunden als CSV-Datei (NF-SEC-01) + private void speichereAlle() { + try { + StringBuilder sb = new StringBuilder(); + for (Kunde k : kunden) { + sb.append(k.getKundenId()).append(";") + .append(k.getName()).append(";") + .append(k.getStrasse()).append(";") + .append(k.getPlz()).append(";") + .append(k.getOrt()).append(";") + .append(k.getSteuerNummer()).append(";") + .append(k.getEmail()).append(";") + .append(k.getTelefon()).append(";") + .append(String.join(",", k.getBelegReferenzen())).append(";") + .append(k.getStatus().name()).append("\n"); + } + Files.writeString(Path.of(DATA_FILE), sb.toString()); + } catch (IOException e) { + System.err.println("Fehler beim Speichern: " + e.getMessage()); + } + } + + // Lädt alle Kunden aus der CSV-Datei beim Start (NF-SEC-01) + 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 < 10) continue; + + Kunde k = new Kunde( + teile[0], teile[1], teile[2], teile[3], + teile[4], teile[5], teile[6], teile[7] + ); + if (!teile[8].isBlank()) { + for (String beleg : teile[8].split(",")) { + k.belegHinzufuegen(beleg); + } + } + k.setStatus(KundenStatus.valueOf(teile[9])); + kunden.add(k); + } + } catch (IOException e) { + System.err.println("Fehler beim Laden: " + e.getMessage()); + } + } +} diff --git a/src/main/java/kundenverwaltung/KundenServiceImpl.java b/src/main/java/kundenverwaltung/KundenServiceImpl.java new file mode 100644 index 0000000..accefde --- /dev/null +++ b/src/main/java/kundenverwaltung/KundenServiceImpl.java @@ -0,0 +1,114 @@ +package kundenverwaltung; + +import java.io.IOException; +import java.util.List; + +public class KundenServiceImpl { + + private final KundenRepository repository; + private final KundenIdGenerator idGenerator; + + public KundenServiceImpl() throws IOException { + this.repository = new KundenRepository(); + this.idGenerator = new KundenIdGenerator(); + } + + // Legt einen neuen Kunden an (F-01, F-02, F-03, F-04) + public Kunde kundeAnlegen(String name, String strasse, String plz, String ort, + String steuerNummer, String email, String telefon) { + Kunde kunde = new Kunde("TEMP", name, strasse, plz, ort, steuerNummer, email, telefon); + + // Pflichtfeldprüfung (F-03) + if (!kunde.validiereFelder()) { + System.out.println("Fehler: Alle Pflichtfelder müssen ausgefüllt sein."); + return null; + } + + // ID vergeben (F-02) + String id = idGenerator.naechsteKundenId(); + Kunde neuerKunde = new Kunde(id, name, strasse, plz, ort, steuerNummer, email, telefon); + repository.speichern(neuerKunde); + System.out.println("Kunde erfolgreich angelegt: " + neuerKunde); + return neuerKunde; + } + + // Bearbeitet einen bestehenden Kunden (F-05, F-06, F-07) + public boolean kundeBearbeiten(String kundenId, String name, String strasse, String plz, + String ort, String steuerNummer, String email, String telefon) { + Kunde kunde = repository.findeNachId(kundenId); + if (kunde == null) { + System.out.println("Fehler: Kunde mit ID " + kundenId + " nicht gefunden."); + return false; + } + + kunde.setName(name); + kunde.setStrasse(strasse); + kunde.setPlz(plz); + kunde.setOrt(ort); + kunde.setSteuerNummer(steuerNummer); + kunde.setEmail(email); + kunde.setTelefon(telefon); + + // Pflichtfeldprüfung nach Änderung (F-06) + if (!kunde.validiereFelder()) { + System.out.println("Fehler: Alle Pflichtfelder müssen ausgefüllt sein."); + return false; + } + + repository.aktualisieren(kunde); + System.out.println("Kunde erfolgreich aktualisiert: " + kunde); + return true; + } + + // Löscht einen Kunden mit Integritätsprüfung (F-11, F-12, GR-04) + public boolean kundeLoschen(String kundenId) { + Kunde kunde = repository.findeNachId(kundenId); + if (kunde == null) { + System.out.println("Fehler: Kunde mit ID " + kundenId + " nicht gefunden."); + return false; + } + + // Referenzielle Integrität prüfen (GR-04) + if (!kunde.getBelegReferenzen().isEmpty()) { + System.out.println("Fehler: Kunde kann nicht gelöscht werden, da er in " + + kunde.getBelegReferenzen().size() + " Beleg(en) referenziert wird."); + return false; + } + + repository.loeschen(kundenId); + System.out.println("Kunde " + kundenId + " erfolgreich gelöscht."); + return true; + } + + // Gibt alle Kunden zurück (F-08) + public List alleKunden() { + return repository.alleKunden(); + } + + // Sucht Kunden nach Name (F-09) + public List sucheNachName(String suchbegriff) { + return repository.sucheNachName(suchbegriff); + } + + // Gibt einen Kunden anhand der ID zurück (F-10) + public Kunde findeKunde(String kundenId) { + return repository.findeNachId(kundenId); + } + + // Zeigt die Transaktionshistorie eines Kunden (F-13) + public void zeigeTransaktionshistorie(String kundenId) { + Kunde kunde = repository.findeNachId(kundenId); + if (kunde == null) { + System.out.println("Kunde nicht gefunden."); + return; + } + System.out.println("Transaktionshistorie für " + kunde.getName() + ":"); + if (kunde.getBelegReferenzen().isEmpty()) { + System.out.println(" Keine Belege vorhanden."); + } else { + for (String beleg : kunde.getBelegReferenzen()) { + System.out.println(" - " + beleg); + } + } + } +} diff --git a/src/main/java/kundenverwaltung/KundenStatus.java b/src/main/java/kundenverwaltung/KundenStatus.java new file mode 100644 index 0000000..ea37869 --- /dev/null +++ b/src/main/java/kundenverwaltung/KundenStatus.java @@ -0,0 +1,6 @@ +package kundenverwaltung; + +public enum KundenStatus { + AKTIV, + ARCHIVIERT +} diff --git a/src/main/java/kundenverwaltung/Main.java b/src/main/java/kundenverwaltung/Main.java new file mode 100644 index 0000000..f12d93b --- /dev/null +++ b/src/main/java/kundenverwaltung/Main.java @@ -0,0 +1,157 @@ +package kundenverwaltung; + +import java.io.IOException; +import java.util.List; +import java.util.Scanner; + +public class Main { + + private static KundenServiceImpl service; + private static Scanner scanner = new Scanner(System.in); + + public static void main(String[] args) { + try { + service = new KundenServiceImpl(); + System.out.println("==========================================="); + System.out.println(" Kundenverwaltung - Gruppe J - Team 3"); + System.out.println("==========================================="); + menueSchleife(); + } catch (IOException e) { + System.err.println("Fehler beim Starten: " + e.getMessage()); + } + } + + private static void menueSchleife() { + 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("0. Beenden"); + System.out.print("Auswahl: "); + + String eingabe = scanner.nextLine().trim(); + + switch (eingabe) { + 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."); + } + } + } + + private static void kundeAnlegen() { + System.out.println("\n--- KUNDE ANLEGEN ---"); + System.out.print("Name / Firmenname: "); + String name = scanner.nextLine(); + System.out.print("Strasse und Hausnummer: "); + String strasse = scanner.nextLine(); + System.out.print("PLZ: "); + String plz = scanner.nextLine(); + System.out.print("Ort: "); + String ort = scanner.nextLine(); + System.out.print("Steuernummer / USt-IdNr.: "); + String steuerNummer = scanner.nextLine(); + System.out.print("E-Mail: "); + String email = scanner.nextLine(); + System.out.print("Telefon: "); + String telefon = scanner.nextLine(); + + service.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); + } + 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); + } + } + + private static void kundeBearbeiten() { + System.out.println("\n--- KUNDE BEARBEITEN ---"); + System.out.print("Kunden-ID eingeben: "); + String id = scanner.nextLine(); + Kunde kunde = service.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(); + if (name.isBlank()) name = kunde.getName(); + + System.out.print("Strasse [" + kunde.getStrasse() + "]: "); + String strasse = scanner.nextLine(); + if (strasse.isBlank()) strasse = kunde.getStrasse(); + + System.out.print("PLZ [" + kunde.getPlz() + "]: "); + String plz = scanner.nextLine(); + if (plz.isBlank()) plz = kunde.getPlz(); + + System.out.print("Ort [" + kunde.getOrt() + "]: "); + String ort = scanner.nextLine(); + if (ort.isBlank()) ort = kunde.getOrt(); + + System.out.print("Steuernummer [" + kunde.getSteuerNummer() + "]: "); + String steuerNummer = scanner.nextLine(); + if (steuerNummer.isBlank()) steuerNummer = kunde.getSteuerNummer(); + + System.out.print("E-Mail [" + kunde.getEmail() + "]: "); + String email = scanner.nextLine(); + if (email.isBlank()) email = kunde.getEmail(); + + System.out.print("Telefon [" + kunde.getTelefon() + "]: "); + String telefon = scanner.nextLine(); + if (telefon.isBlank()) telefon = kunde.getTelefon(); + + service.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); + } + + private static void transaktionshistorie() { + System.out.println("\n--- TRANSAKTIONSHISTORIE ---"); + System.out.print("Kunden-ID eingeben: "); + String id = scanner.nextLine(); + service.zeigeTransaktionshistorie(id); + } +} \ No newline at end of file