Gruppe J: Kundenverwaltung hinzugefuegt
commit
bbddb2db18
|
|
@ -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.
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
package kundenverwaltung;
|
||||
|
||||
public enum KundenStatus {
|
||||
AKTIV,
|
||||
ARCHIVIERT
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue