import java.util.Scanner; // Importiert die Scanner-Klasse für die Benutzereingabe import java.util.regex.Pattern; // Importiert die Pattern-Klasse für reguläre Ausdrücke import java.util.regex.Matcher; // Importiert die Matcher-Klasse für das Matching von regulären Ausdrücken import java.time.LocalDateTime; // Importiert die LocalDateTime-Klasse für Zeitstempel public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); // Initialisiert einen Scanner für die Eingabe Parkhaus parkhaus = new Parkhaus(); // Erstellt ein neues Parkhaus-Objekt // Regex für deutsches Kennzeichen mit optionalem 'E' String kennzeichenRegex = "^[A-ZÄÖÜ]{1,3}-[A-Z]{1,2} \\d{1,4}E?$"; Pattern kennzeichenPattern = Pattern.compile(kennzeichenRegex); // Kompiliert den Regex zu einem Pattern System.out.println("Willkommen im Parkhaus!"); // Begrüßungsnachricht // Endlosschleife für die Menüauswahl while (true) { // Anzeige der Menüoptionen System.out.println("\nWählen Sie eine Option:"); System.out.println("1: Einfahrt"); System.out.println("2: Ausfahrt"); System.out.println("3: Liste der geparkten Fahrzeuge"); System.out.println("4: Programm beenden"); String auswahl = scanner.nextLine(); // Liest die Auswahl des Benutzers switch (auswahl) { case "1": // Fall für die Einfahrt eines Fahrzeugs System.out.println("Geben Sie das Kennzeichen des Autos ein (z.B. MA-SH 4077):"); String kennzeichen = scanner.nextLine(); // Liest das Kennzeichen // Prüft, ob das Kennzeichen dem definierten Regex entspricht Matcher kennzeichenMatcher = kennzeichenPattern.matcher(kennzeichen); if (!kennzeichenMatcher.matches()) { System.out.println("Ungültiges Kennzeichenformat. Bitte versuchen Sie es erneut."); break; // Wenn das Format ungültig ist, wird die Schleife erneut durchlaufen } // Versuch, das Fahrzeug im Parkhaus einzuparken boolean erfolgreich = parkhaus.einfahrt(kennzeichen); if (erfolgreich) { System.out.println("Fahrzeug erfolgreich eingetragen."); } else { System.out.println("Das Parkhaus ist voll. Einfahrt nicht möglich."); } break; case "2": // Fall für die Ausfahrt eines Fahrzeugs System.out.println("Geben Sie Ihr Kennzeichen ein:"); String kennzeichenAus = scanner.nextLine(); // Liest das Kennzeichen für die Ausfahrt float parkgebuehren = parkhaus.ausfahrt(kennzeichenAus); // Berechnet die Parkgebühren // Überprüft, ob das Fahrzeug im Parkhaus gefunden wurde if (parkgebuehren == -1) { System.out.println("Fahrzeug nicht im Parkhaus gefunden."); } else { // Gibt die Parkgebühren aus und fordert zur Zahlung auf System.out.println("Die Parkgebühren betragen: " + parkgebuehren + " Euro"); System.out.println("Bitte geben Sie Ihre 16-stellige Kreditkartennummer zur Bezahlung ein:"); String kreditkartennummer = scanner.nextLine(); // Liest die Kreditkartennummer // Validiert die Kreditkartennummer if (Zahlungsabwicklung.validiereKreditkarte(kreditkartennummer)) { System.out.println("Bezahlung erfolgreich. Vielen Dank!"); } else { System.out.println("Ungültige Kreditkartennummer. Fahrzeug wird als schuldig markiert."); // Markiert das Fahrzeug als schuldig, wenn die Kreditkartennummer ungültig ist parkhaus.addFahrzeugMitSchulden(new Pkw(kennzeichenAus, LocalDateTime.now())); } } break; case "3": // Fall für die Anzeige der geparkten Fahrzeuge System.out.println("Aktuell geparkte Fahrzeuge:"); for (Pkw auto : parkhaus.getFahrzeugListe()) { // Iteriert über die Liste der geparkten Fahrzeuge // Gibt Kennzeichen und Eingangszeit jedes Fahrzeugs aus System.out.println("Kennzeichen: " + auto.getKennzeichen() + ", Eingefahren am: " + auto.getEinfahrzeit()); } break; case "4": // Fall für das Beenden des Programms System.out.println("Programm wird beendet. Auf Wiedersehen!"); scanner.close(); // Schließt den Scanner return; // Beendet das Programm default: // Fall für ungültige Eingaben System.out.println("Ungültige Auswahl. Bitte versuchen Sie es erneut."); } } } }