From 4c49d28d0d374f80a1f70763a9830a4b54e8b7f2 Mon Sep 17 00:00:00 2001 From: Hymmel Date: Thu, 11 Dec 2025 13:27:04 +0100 Subject: [PATCH] sdajdska --- pom.xml | 21 ++ src/main/java/de/antco/projekt/ConsoleUi.java | 294 +++++++++++------- 2 files changed, 208 insertions(+), 107 deletions(-) diff --git a/pom.xml b/pom.xml index ec71f5f..e8604b5 100644 --- a/pom.xml +++ b/pom.xml @@ -91,6 +91,27 @@ + + org.apache.maven.plugins + maven-javadoc-plugin + 3.6.3 + + /usr/lib/jvm/java-21-openjdk-amd64/bin/javadoc + + + + attach-javadocs + + javadoc + + + + + + org.apache.maven.plugins + maven-site-plugin + 3.12.1 + diff --git a/src/main/java/de/antco/projekt/ConsoleUi.java b/src/main/java/de/antco/projekt/ConsoleUi.java index 00f9bf7..095608f 100644 --- a/src/main/java/de/antco/projekt/ConsoleUi.java +++ b/src/main/java/de/antco/projekt/ConsoleUi.java @@ -7,25 +7,16 @@ import de.antco.projekt.model.WorkOrderDetails; import de.antco.projekt.model.WorkOrderItem; import de.antco.projekt.service.WorkshopService; -import java.io.InputStream; -import java.io.PrintStream; import java.sql.SQLException; import java.util.*; public class ConsoleUi { private final WorkshopService service; - private final Scanner scanner; - private final PrintStream out; + private final Scanner scanner = new Scanner(System.in); public ConsoleUi(WorkshopService service) { - this(service, System.in, System.out); - } - - public ConsoleUi(WorkshopService service, InputStream in, PrintStream out) { this.service = service; - this.scanner = new Scanner(in); - this.out = out; } public void start() { @@ -33,7 +24,6 @@ public class ConsoleUi { while (running) { showMenu(); - if (!scanner.hasNextLine()) break; String choice = scanner.nextLine().trim(); try { @@ -45,176 +35,276 @@ public class ConsoleUi { case "5" -> createWorkOrder(); case "6" -> showWorkOrders(); case "0" -> running = false; - default -> out.println("Ungültige Eingabe."); + default -> System.out.println("Ungültige Eingabe."); } } catch (SQLException e) { - out.println("Ein Fehler ist aufgetreten: " + e.getMessage()); + System.out.println("Ein Fehler ist aufgetreten: " + e.getMessage()); } } - out.println("Programm beendet."); + System.out.println("Programm beendet."); } private void showMenu() { - out.println("\n=== Werkstatt Menü ==="); - out.println("1) Kunde anlegen"); - out.println("2) Kunden anzeigen"); - out.println("3) Fahrzeug anlegen"); - out.println("4) Fahrzeuge einer Person anzeigen"); - out.println("5) Werkstattvorgang anlegen"); - out.println("6) Vorgänge anzeigen"); - out.println("0) Beenden"); - out.print("Auswahl: "); + System.out.println("\n=== Werkstatt Menü ==="); + System.out.println("1) Kunde anlegen"); + System.out.println("2) Kunden anzeigen"); + System.out.println("3) Fahrzeug anlegen"); + System.out.println("4) Fahrzeuge einer Person anzeigen"); + System.out.println("5) Werkstattvorgang anlegen"); + System.out.println("6) Vorgänge anzeigen"); + System.out.println("0) Beenden"); + System.out.print("Auswahl: "); } - // ---------------- Eingabe-Hilfen ---------------- + // ---------------- INPUT HELPERS ---------------- - private int readInt(String text) { + private int readPositiveInt(String text) { while (true) { - out.print(text); - if (!scanner.hasNextLine()) return 0; - String input = scanner.nextLine(); + System.out.print(text); + String input = scanner.nextLine().trim(); try { - return Integer.parseInt(input.trim()); + int value = Integer.parseInt(input); + if (value > 0) { + return value; + } + System.out.println("Bitte eine Zahl größer 0 eingeben."); } catch (NumberFormatException e) { - out.println("Bitte eine gültige Zahl eingeben."); + System.out.println("Bitte eine gültige Zahl eingeben."); + } + } + } + private String readEmail(String text) { + while (true) { + System.out.print(text); + String input = scanner.nextLine().trim(); + + // einfache Validierung: enthält '@' und mindestens einen Punkt nach dem '@' + if (input.matches("^[\\w._%+-]+@[\\w.-]+\\.[a-zA-Z]{2,}$")) { + return input; + } else { + System.out.println("Bitte eine gültige Email-Adresse eingeben."); + } + } + } + + private String readAddress(String text) { + while (true) { + System.out.print(text); + String input = scanner.nextLine().trim(); + + // einfache Validierung: mindestens 5 Zeichen, darf Buchstaben, Zahlen, Leerzeichen und Komma enthalten + if (input.length() >= 5 && input.matches("[\\w\\d\\s,.-]+")) { + return input; + } else { + System.out.println("Bitte eine gültige Adresse eingeben (mindestens 5 Zeichen)."); } } } private String readNonEmpty(String text) { while (true) { - out.print(text); - if (!scanner.hasNextLine()) return ""; + System.out.print(text); String value = scanner.nextLine().trim(); if (!value.isEmpty()) { return value; } - out.println("Eingabe darf nicht leer sein."); + System.out.println("Eingabe darf nicht leer sein."); } } - private String readValidName(String text) { + private String readValidName(String label) { while (true) { - String name = readNonEmpty(text); - if (name.isEmpty()) return ""; + String name = readNonEmpty(label); - if (name.matches("[a-zA-ZäöüÄÖÜß ]+")) { - return name; + if (name.length() < 2) { + System.out.println("Der Name muss mindestens 2 Zeichen haben."); + continue; } - out.println("Der Name darf nur Buchstaben enthalten."); + if (!name.matches("[a-zA-ZäöüÄÖÜß ]+")) { + System.out.println("Der Name darf nur Buchstaben enthalten."); + continue; + } + + return name.trim(); } } private String readPhoneNumber(String text) { while (true) { - out.print(text); - if (!scanner.hasNextLine()) return ""; + System.out.print(text); String phone = scanner.nextLine().trim(); - if (phone.matches("\\d+")) { - return phone; + if (!phone.matches("\\d+")) { + System.out.println("Telefonnummer darf nur Zahlen enthalten."); + continue; } - out.println("Telefonnummer darf nur Zahlen enthalten."); + if (phone.length() < 8) { + System.out.println("Telefonnummer muss mindestens 8 Stellen haben."); + continue; + } + + if (phone.length() > 15) { + System.out.println("Telefonnummer darf maximal 15 Stellen haben."); + continue; + } + + return phone; + } + } + + private String readValidCarText(String label) { + while (true) { + System.out.print(label); + String value = scanner.nextLine().trim(); + + if (value.length() < 2) { + System.out.println("Eingabe muss mindestens 2 Zeichen haben."); + continue; + } + + if (!value.matches("[a-zA-Z0-9äöüÄÖÜß ]+")) { + System.out.println("Nur Buchstaben, Zahlen und Leerzeichen erlaubt."); + continue; + } + + return value; + } + } + + private String readLicensePlate(String text) { + while (true) { + System.out.print(text); + String plate = scanner.nextLine().trim().toUpperCase(); + + if (plate.length() < 5) { + System.out.println("Kennzeichen muss mindestens 5 Zeichen haben."); + continue; + } + + if (!plate.matches("[A-Z0-9\\-]+")) { + System.out.println("Nur Großbuchstaben, Zahlen und Bindestriche erlaubt."); + continue; + } + + return plate; + } + } + + private String readNote() { + while (true) { + System.out.print("Notiz: "); + String note = scanner.nextLine().trim(); + + if (note.length() > 200) { + System.out.println("Notiz darf maximal 200 Zeichen haben."); + continue; + } + + return note; + } + } + + private int readQuantity(String text) { + while (true) { + System.out.print(text); + String input = scanner.nextLine().trim(); + + try { + int qty = Integer.parseInt(input); + if (qty > 0 && qty <= 99) { + return qty; + } + System.out.println("Menge muss zwischen 1 und 99 liegen."); + } catch (NumberFormatException e) { + System.out.println("Bitte eine gültige Zahl eingeben."); + } } } - // ---------------- Personen ---------------- private void addPerson() throws SQLException { String name = readValidName("Name: "); String phone = readPhoneNumber("Telefonnummer: "); - String email = readNonEmpty("Email: "); - String address = readNonEmpty("Adresse: "); + String email = readEmail("Email: "); + String address = readAddress("Adresse: "); - if (name.isEmpty() || phone.isEmpty() || email.isEmpty() || address.isEmpty()) return; - - Person person = service.createPerson(name, phone, email, address); - out.println("Kunde gespeichert (ID: " + person.getId() + ")"); + Person person = service.createPerson(name, phone,email,address); + System.out.println("Kunde gespeichert (ID: " + person.getId() + ")"); } private void showPersons() throws SQLException { List persons = service.listPersons(); if (persons.isEmpty()) { - out.println("Keine Kunden vorhanden."); + System.out.println("Keine Kunden vorhanden."); return; } - out.println("\n--- Kundenliste ---"); - persons.forEach(p -> out.println(p)); + System.out.println("\n--- Kundenliste ---"); + persons.forEach(System.out::println); } - // ---------------- Fahrzeuge ---------------- - private void addVehicle() throws SQLException { - int personId = readInt("Personen-ID: "); - if (personId == 0) return; + int personId = readPositiveInt("Personen-ID: "); Person person = service.findPerson(personId); if (person == null) { - out.println("Person wurde nicht gefunden."); + System.out.println("Person wurde nicht gefunden."); return; } - String brand = readNonEmpty("Hersteller: "); - String model = readNonEmpty("Modell: "); - String plate = readNonEmpty("Kennzeichen: "); - - if (brand.isEmpty() || model.isEmpty() || plate.isEmpty()) return; + String brand = readValidCarText("Hersteller: "); + String model = readValidCarText("Modell: "); + String plate = readLicensePlate("Kennzeichen: "); Vehicle vehicle = service.createVehicle(personId, brand, model, plate); - out.println("Fahrzeug angelegt (ID: " + vehicle.getId() + ")"); + System.out.println("Fahrzeug gespeichert (ID: " + vehicle.getId() + ")"); } private void showVehiclesOfPerson() throws SQLException { - int personId = readInt("Personen-ID: "); - if (personId == 0) return; + int personId = readPositiveInt("Personen-ID: "); Person person = service.findPerson(personId); if (person == null) { - out.println("Person nicht gefunden."); + System.out.println("Person nicht gefunden."); return; } List vehicles = service.listVehicles(personId); - out.println("Fahrzeuge von " + person.getName() + ":"); + System.out.println("Fahrzeuge von " + person.getName() + ":"); if (vehicles.isEmpty()) { - out.println("Keine Fahrzeuge vorhanden."); + System.out.println("Keine Fahrzeuge vorhanden."); } else { - vehicles.forEach(v -> out.println(v)); + vehicles.forEach(System.out::println); } } - // ---------------- Werkstattvorgänge ---------------- - private void createWorkOrder() throws SQLException { - int vehicleId = readInt("Fahrzeug-ID: "); - if (vehicleId == 0) return; + int vehicleId = readPositiveInt("Fahrzeug-ID: "); Vehicle vehicle = service.findVehicle(vehicleId); if (vehicle == null) { - out.println("Fahrzeug nicht gefunden."); + System.out.println("Fahrzeug nicht gefunden."); return; } - String note = readNonEmpty("Notiz: "); + String note = readNote(); List catalog = service.listServiceItems(); Map selectedItems = new LinkedHashMap<>(); while (true) { - out.println("\n--- Service-Katalog ---"); - catalog.forEach(item -> out.println(item)); + System.out.println("\n--- Service-Katalog ---"); + catalog.forEach(System.out::println); - out.print("Service-ID (leer = fertig): "); - if (!scanner.hasNextLine()) break; + System.out.print("Service-ID (leer = fertig): "); String input = scanner.nextLine().trim(); if (input.isEmpty()) { @@ -225,64 +315,54 @@ public class ConsoleUi { try { serviceId = Integer.parseInt(input); } catch (NumberFormatException e) { - out.println("Bitte eine gültige ID eingeben."); + System.out.println("Bitte eine gültige ID eingeben."); continue; } - int finalServiceId = serviceId; - ServiceItem item = catalog.stream() - .filter(s -> s.getId() == finalServiceId) - .findFirst() - .orElse(null); - - if (item == null) { - out.println("Service nicht gefunden."); - continue; - } - - int qty = readInt("Menge: "); - if (qty <= 0) { - out.println("Menge muss größer als 0 sein."); + boolean exists = catalog.stream().anyMatch(s -> s.getId() == serviceId); + if (!exists) { + System.out.println("Service nicht gefunden."); continue; } + int qty = readQuantity("Menge: "); selectedItems.merge(serviceId, qty, Integer::sum); } if (selectedItems.isEmpty()) { - out.println("Keine Positionen ausgewählt."); + System.out.println("Keine Positionen ausgewählt."); return; } int orderId = service.createWorkOrder(vehicleId, note, selectedItems); - out.println("Vorgang wurde angelegt (ID: " + orderId + ")"); + System.out.println("Vorgang wurde angelegt (ID: " + orderId + ")"); } private void showWorkOrders() throws SQLException { List orders = service.listWorkOrders(); if (orders.isEmpty()) { - out.println("Keine Vorgänge vorhanden."); + System.out.println("Keine Vorgänge vorhanden."); return; } for (WorkOrderDetails order : orders) { - out.println("\n--- Vorgang " + order.getOrderId() + " ---"); - out.println("Kunde: " + order.getPersonName()); - out.println("Fahrzeug: " + order.getVehicleText()); - out.println("Datum: " + order.getCreatedAt()); + System.out.println("\n--- Vorgang " + order.getOrderId() + " ---"); + System.out.println("Kunde: " + order.getPersonName()); + System.out.println("Fahrzeug: " + order.getVehicleText()); + System.out.println("Datum: " + order.getCreatedAt()); if (order.getNote() != null && !order.getNote().isBlank()) { - out.println("Notiz: " + order.getNote()); + System.out.println("Notiz: " + order.getNote()); } for (WorkOrderItem item : order.getItems()) { - out.println(" - " + item.getServiceItem().getTitle() + + System.out.println(" - " + item.getServiceItem().getTitle() + " x" + item.getQuantity() + " = " + item.getTotalPrice() + " €"); } - out.println("Gesamtsumme: " + order.getTotal() + " €"); + System.out.println("Gesamtsumme: " + order.getTotal() + " €"); } } -} \ No newline at end of file +}