From b71ee884490bc303a3ee29363de251e57cd5d45f Mon Sep 17 00:00:00 2001 From: Antonio Date: Thu, 11 Dec 2025 10:32:58 +0100 Subject: [PATCH] lol --- .idea/.gitignore | 3 + .idea/compiler.xml | 13 + .idea/encodings.xml | 7 + .idea/jarRepositories.xml | 20 ++ .idea/misc.xml | 12 + .idea/vcs.xml | 6 + src/main/java/de/antco/projekt/ConsoleUi.java | 263 +++++++++++------- .../de/antco/projekt/Exporters/IExporter.java | 4 + .../de/antco/projekt/Importers/IImporter.java | 4 + .../de/antco/projekt/loggers/ILogger.java | 5 + .../classes/de/antco/projekt/ConsoleUi.class | Bin 10090 -> 10090 bytes .../antco/projekt/Exporters/IExporter.class | Bin 0 -> 126 bytes .../antco/projekt/Importers/IImporter.class | Bin 0 -> 126 bytes .../de/antco/projekt/loggers/ILogger.class | Bin 0 -> 140 bytes 14 files changed, 238 insertions(+), 99 deletions(-) create mode 100644 .idea/.gitignore create mode 100644 .idea/compiler.xml create mode 100644 .idea/encodings.xml create mode 100644 .idea/jarRepositories.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/vcs.xml create mode 100644 src/main/java/de/antco/projekt/Exporters/IExporter.java create mode 100644 src/main/java/de/antco/projekt/Importers/IImporter.java create mode 100644 src/main/java/de/antco/projekt/loggers/ILogger.java create mode 100644 target/classes/de/antco/projekt/Exporters/IExporter.class create mode 100644 target/classes/de/antco/projekt/Importers/IImporter.class create mode 100644 target/classes/de/antco/projekt/loggers/ILogger.class diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..494318c --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..aa00ffa --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..712ab9d --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..90fdf05 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/main/java/de/antco/projekt/ConsoleUi.java b/src/main/java/de/antco/projekt/ConsoleUi.java index 9e19e3a..255d4f1 100644 --- a/src/main/java/de/antco/projekt/ConsoleUi.java +++ b/src/main/java/de/antco/projekt/ConsoleUi.java @@ -8,12 +8,10 @@ import de.antco.projekt.model.WorkOrderItem; import de.antco.projekt.service.WorkshopService; import java.sql.SQLException; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.Scanner; +import java.util.*; public class ConsoleUi { + private final WorkshopService service; private final Scanner scanner = new Scanner(System.in); @@ -23,168 +21,235 @@ public class ConsoleUi { public void start() { boolean running = true; + while (running) { - printMenu(); - String input = scanner.nextLine(); + showMenu(); + String choice = scanner.nextLine().trim(); + try { - switch (input) { + switch (choice) { case "1" -> addPerson(); - case "2" -> listPersons(); + case "2" -> showPersons(); case "3" -> addVehicle(); - case "4" -> listVehiclesOfPerson(); + case "4" -> showVehiclesOfPerson(); case "5" -> createWorkOrder(); - case "6" -> listWorkOrders(); + case "6" -> showWorkOrders(); case "0" -> running = false; - default -> System.out.println("Unbekannte Auswahl"); + default -> System.out.println("Ungültige Eingabe."); } } catch (SQLException e) { - System.out.println("Fehler: " + e.getMessage()); + System.out.println("Ein Fehler ist aufgetreten: " + e.getMessage()); } } - System.out.println("Bis dann"); + + System.out.println("Programm beendet."); } - private void printMenu() { - System.out.println(); - System.out.println("==== Werkstatt Menü ===="); + private void showMenu() { + 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"); + 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) Ende"); + System.out.println("0) Beenden"); System.out.print("Auswahl: "); } - private void addPerson() throws SQLException { - System.out.print("Name: "); - String name = scanner.nextLine(); - System.out.print("Telefon: "); - String phone = scanner.nextLine(); - Person person = service.createPerson(name, phone); - System.out.println("Kunde gespeichert mit ID " + person.getId()); + private int readInt(String text) { + while (true) { + System.out.print(text); + String input = scanner.nextLine(); + + try { + return Integer.parseInt(input.trim()); + } catch (NumberFormatException e) { + System.out.println("Bitte eine gültige Zahl eingeben."); + } + } } - private void listPersons() throws SQLException { + private String readNonEmpty(String text) { + while (true) { + System.out.print(text); + String value = scanner.nextLine().trim(); + + if (!value.isEmpty()) { + return value; + } + + System.out.println("Eingabe darf nicht leer sein."); + } + } + + private String readValidName(String text) { + while (true) { + String name = readNonEmpty(text); + + if (name.matches("[a-zA-ZäöüÄÖÜß ]+")) { + return name; + } + + System.out.println("Der Name darf nur Buchstaben enthalten."); + } + } + + private String readPhoneNumber(String text) { + while (true) { + System.out.print(text); + String phone = scanner.nextLine().trim(); + + if (phone.matches("\\d+")) { + return phone; + } + + System.out.println("Telefonnummer darf nur Zahlen enthalten."); + } + } + + private void addPerson() throws SQLException { + String name = readValidName("Name: "); + String phone = readPhoneNumber("Telefonnummer: "); + + Person person = service.createPerson(name, phone); + System.out.println("Kunde gespeichert (ID: " + person.getId() + ")"); + } + + private void showPersons() throws SQLException { List persons = service.listPersons(); + if (persons.isEmpty()) { - System.out.println("Keine Personen da"); + System.out.println("Keine Kunden vorhanden."); return; } - persons.forEach(p -> System.out.println(p.toString())); + + System.out.println("\n--- Kundenliste ---"); + persons.forEach(System.out::println); } private void addVehicle() throws SQLException { - System.out.print("Personen ID: "); - int personId = parseInt(scanner.nextLine()); - Person owner = service.findPerson(personId); - if (owner == null) { - System.out.println("Person nicht gefunden"); + int personId = readInt("Personen-ID: "); + Person person = service.findPerson(personId); + + if (person == null) { + System.out.println("Person wurde nicht gefunden."); return; } - System.out.print("Hersteller: "); - String brand = scanner.nextLine(); - System.out.print("Modell: "); - String model = scanner.nextLine(); - System.out.print("Kennzeichen: "); - String plate = scanner.nextLine(); + + String brand = readNonEmpty("Hersteller: "); + String model = readNonEmpty("Modell: "); + String plate = readNonEmpty("Kennzeichen: "); + Vehicle vehicle = service.createVehicle(personId, brand, model, plate); - System.out.println("Fahrzeug gespeichert mit ID " + vehicle.getId()); + System.out.println("Fahrzeug angelegt (ID: " + vehicle.getId() + ")"); } - private void listVehiclesOfPerson() throws SQLException { - System.out.print("Personen ID: "); - int personId = parseInt(scanner.nextLine()); - Person owner = service.findPerson(personId); - if (owner == null) { - System.out.println("Person nicht gefunden"); + private void showVehiclesOfPerson() throws SQLException { + int personId = readInt("Personen-ID: "); + Person person = service.findPerson(personId); + + if (person == null) { + System.out.println("Person nicht gefunden."); return; } + List vehicles = service.listVehicles(personId); - System.out.println("Fahrzeuge von " + owner.getName() + ":"); + + System.out.println("Fahrzeuge von " + person.getName() + ":"); if (vehicles.isEmpty()) { - System.out.println("Keine Einträge"); - return; + System.out.println("Keine Fahrzeuge vorhanden."); + } else { + vehicles.forEach(System.out::println); } - vehicles.forEach(v -> System.out.println(v.toString())); } private void createWorkOrder() throws SQLException { - System.out.print("Fahrzeug ID: "); - int vehicleId = parseInt(scanner.nextLine()); + int vehicleId = readInt("Fahrzeug-ID: "); Vehicle vehicle = service.findVehicle(vehicleId); + if (vehicle == null) { - System.out.println("Fahrzeug nicht gefunden"); + System.out.println("Fahrzeug nicht gefunden."); return; } - System.out.print("Notiz: "); - String note = scanner.nextLine(); + + String note = readNonEmpty("Notiz: "); + List catalog = service.listServiceItems(); - Map selected = new LinkedHashMap<>(); - boolean adding = true; - while (adding) { - showCatalog(catalog); - System.out.print("Service ID (leer = fertig): "); - String input = scanner.nextLine(); - if (input.isBlank()) { - adding = false; - } else { - int serviceId = parseInt(input); - ServiceItem item = catalog.stream().filter(s -> s.getId() == serviceId).findFirst().orElse(null); - if (item == null) { - System.out.println("Service gibt es nicht"); - continue; - } - System.out.print("Menge: "); - int qty = parseInt(scanner.nextLine()); - if (qty <= 0) { - System.out.println("Menge muss > 0 sein"); - continue; - } - selected.put(serviceId, selected.getOrDefault(serviceId, 0) + qty); + Map selectedItems = new LinkedHashMap<>(); + + while (true) { + System.out.println("\n--- Service-Katalog ---"); + catalog.forEach(System.out::println); + + System.out.print("Service-ID (leer = fertig): "); + String input = scanner.nextLine().trim(); + + if (input.isEmpty()) { + break; } + + int serviceId; + try { + serviceId = Integer.parseInt(input); + } catch (NumberFormatException e) { + System.out.println("Bitte eine gültige ID eingeben."); + continue; + } + + ServiceItem item = catalog.stream() + .filter(s -> s.getId() == serviceId) + .findFirst() + .orElse(null); + + if (item == null) { + System.out.println("Service nicht gefunden."); + continue; + } + + int qty = readInt("Menge: "); + if (qty <= 0) { + System.out.println("Menge muss größer als 0 sein."); + continue; + } + + selectedItems.merge(serviceId, qty, Integer::sum); } - if (selected.isEmpty()) { - System.out.println("Keine Positionen gespeichert"); + + if (selectedItems.isEmpty()) { + System.out.println("Keine Positionen ausgewählt."); return; } - int orderId = service.createWorkOrder(vehicleId, note, selected); - System.out.println("Vorgang angelegt mit ID " + orderId); + + int orderId = service.createWorkOrder(vehicleId, note, selectedItems); + System.out.println("Vorgang wurde angelegt (ID: " + orderId + ")"); } - private void showCatalog(List items) { - System.out.println("Katalog:"); - items.forEach(item -> System.out.println(item.toString())); - } - - private void listWorkOrders() throws SQLException { + private void showWorkOrders() throws SQLException { List orders = service.listWorkOrders(); + if (orders.isEmpty()) { - System.out.println("Keine Vorgänge gespeichert"); + System.out.println("Keine Vorgänge vorhanden."); return; } + for (WorkOrderDetails order : orders) { - System.out.println("--- Vorgang " + order.getOrderId() + " ---"); + 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()) { System.out.println("Notiz: " + order.getNote()); } + for (WorkOrderItem item : order.getItems()) { - System.out.println(" * " + item.getServiceItem().getTitle() + " x" + item.getQuantity() + + System.out.println(" - " + item.getServiceItem().getTitle() + + " x" + item.getQuantity() + " = " + item.getTotalPrice() + " €"); } - System.out.println("Summe: " + order.getTotal() + " €"); - } - } - private int parseInt(String input) { - try { - return Integer.parseInt(input.trim()); - } catch (NumberFormatException e) { - return -1; + System.out.println("Gesamtsumme: " + order.getTotal() + " €"); } } -} +} \ No newline at end of file diff --git a/src/main/java/de/antco/projekt/Exporters/IExporter.java b/src/main/java/de/antco/projekt/Exporters/IExporter.java new file mode 100644 index 0000000..3352ea5 --- /dev/null +++ b/src/main/java/de/antco/projekt/Exporters/IExporter.java @@ -0,0 +1,4 @@ +package de.antco.projekt.Exporters; + +public interface IExporter { +} diff --git a/src/main/java/de/antco/projekt/Importers/IImporter.java b/src/main/java/de/antco/projekt/Importers/IImporter.java new file mode 100644 index 0000000..72bfb19 --- /dev/null +++ b/src/main/java/de/antco/projekt/Importers/IImporter.java @@ -0,0 +1,4 @@ +package de.antco.projekt.Importers; + +public interface IImporter { +} diff --git a/src/main/java/de/antco/projekt/loggers/ILogger.java b/src/main/java/de/antco/projekt/loggers/ILogger.java new file mode 100644 index 0000000..b30e02d --- /dev/null +++ b/src/main/java/de/antco/projekt/loggers/ILogger.java @@ -0,0 +1,5 @@ +package de.antco.projekt.loggers; + +public interface ILogger { + void Log(); +} diff --git a/target/classes/de/antco/projekt/ConsoleUi.class b/target/classes/de/antco/projekt/ConsoleUi.class index b1bd97c0bafa5e52d80fb966308fa32e3956c34d..fce8c121e71ecf6029d42678224acc754e60e1dd 100644 GIT binary patch delta 50 zcmaFm_sVaBu?VBVWEnBd$+05RYzB-B8XBIH6~xpgFA-5@0dkcm%Zo`)p2xwl`He`O F5CCbj4Uhl; delta 50 zcmaFm_sVaBu?VB_WEnBd$+05RY(|U>8XBIH6~xpgFA-5@F=S*=o-8jWIe8uj$L2R8 GbwU7Yf(@1c diff --git a/target/classes/de/antco/projekt/Exporters/IExporter.class b/target/classes/de/antco/projekt/Exporters/IExporter.class new file mode 100644 index 0000000000000000000000000000000000000000..06482d172eb73885ee2017295ed4520c30812e0c GIT binary patch literal 126 zcmX^0Z`VEs1_oOOc6J6PMh2CXRQ<%flH`2-f};Ga)a(*{*NTGtqLS32Vtr2-lbwNu zkwG9Uu`E$PCowNw-#;lUHMxY5fh#z_v?w{%Ei)&Tk%14cTo0s@jgf(off;BM2rx3R J0!bzYHUOL^A!Psn literal 0 HcmV?d00001 diff --git a/target/classes/de/antco/projekt/Importers/IImporter.class b/target/classes/de/antco/projekt/Importers/IImporter.class new file mode 100644 index 0000000000000000000000000000000000000000..12168a7963e7f93dadb6eca4af7206b456599c2d GIT binary patch literal 126 zcmX^0Z`VEs1_oOOc6J6PMh2CXRQ<%flH`2-f};Ga)a(*{&)kCiqLS32Vtr2-lbwNu zkwG9Uu`E$PCowNw-#;lUHMxY5fh#z_v?w{%Ei)&Tk%14cTo0s@jgf(off;BM2rx3R J0!bzYHUO51Ay5DS literal 0 HcmV?d00001 diff --git a/target/classes/de/antco/projekt/loggers/ILogger.class b/target/classes/de/antco/projekt/loggers/ILogger.class new file mode 100644 index 0000000000000000000000000000000000000000..bcf652980762e103c87021a1363bf6f8ab2f5e8c GIT binary patch literal 140 zcmX^0Z`VEs1_oOOPId++Mh1nHRQ<%flH`2-f};Ga)a(-doc#3k)S_a2PaiOYoq>gs zK_Dx!EKxrvF)v-;KPf9UxrC8{87K`TH8jH*8MuP;ON)|I-7<4h85ww>8udVW*ccgr Yih%YpFfanmVP#+gu^8BaBohM%0P3b7d;kCd literal 0 HcmV?d00001