Gruppe J: Kundenverwaltung hinzugefuegt

master
Christian Khazanovych 2026-06-24 16:10:16 +02:00
commit bbddb2db18
13 changed files with 507 additions and 0 deletions

4
.vscode/settings.json vendored 100644
View File

@ -0,0 +1,4 @@
{
"java.project.sourcePaths": ["src/main/java"],
"java.project.outputPath": "out"
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,74 @@
package kundenverwaltung;
import java.util.ArrayList;
import java.util.List;
public class Kunde {
private String kundenId;
private String name;
private String strasse;
private String plz;
private String ort;
private String steuerNummer;
private String email;
private String telefon;
private List<String> 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<String> 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);
}
}

View File

@ -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());
}
}
}

View File

@ -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<Kunde> 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<Kunde> 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<Kunde> sucheNachName(String suchbegriff) {
List<Kunde> 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<String> 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());
}
}
}

View File

@ -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<Kunde> alleKunden() {
return repository.alleKunden();
}
// Sucht Kunden nach Name (F-09)
public List<Kunde> 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);
}
}
}
}

View File

@ -0,0 +1,6 @@
package kundenverwaltung;
public enum KundenStatus {
AKTIV,
ARCHIVIERT
}

View File

@ -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<Kunde> 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<Kunde> 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);
}
}