diff --git a/Main.java b/Main.java index 6c09c1f..470f602 100644 --- a/Main.java +++ b/Main.java @@ -1,37 +1,42 @@ -import java.util.Scanner; -import java.util.regex.Pattern; -import java.util.regex.Matcher; -import java.time.LocalDateTime; +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); - Parkhaus parkhaus = new Parkhaus(); - String kennzeichenRegex = "^[A-ZÄÖÜ]{1,3}-[A-Z]{1,2} \\d{1,4}E?$"; // Regex für deutsches Kennzeichen mit optionalem 'E' - Pattern kennzeichenPattern = Pattern.compile(kennzeichenRegex); + 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!"); + 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(); + String auswahl = scanner.nextLine(); // Liest die Auswahl des Benutzers switch (auswahl) { - case "1": + 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(); + 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; + 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."); @@ -40,40 +45,45 @@ public class Main { } break; - case "2": + case "2": // Fall für die Ausfahrt eines Fahrzeugs System.out.println("Geben Sie Ihr Kennzeichen ein:"); - String kennzeichenAus = scanner.nextLine(); - float parkgebuehren = parkhaus.ausfahrt(kennzeichenAus); + 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(); + 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."); - parkhaus.addFahrzeugMitSchulden(new Pkw(kennzeichenAus, LocalDateTime.now())); // Fahrzeug mit Schulden markieren + // Markiert das Fahrzeug als schuldig, wenn die Kreditkartennummer ungültig ist + parkhaus.addFahrzeugMitSchulden(new Pkw(kennzeichenAus, LocalDateTime.now())); } } break; - case "3": + case "3": // Fall für die Anzeige der geparkten Fahrzeuge System.out.println("Aktuell geparkte Fahrzeuge:"); - for (Pkw auto : parkhaus.getFahrzeugListe()) { + 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": + case "4": // Fall für das Beenden des Programms System.out.println("Programm wird beendet. Auf Wiedersehen!"); - scanner.close(); - return; + scanner.close(); // Schließt den Scanner + return; // Beendet das Programm - default: + default: // Fall für ungültige Eingaben System.out.println("Ungültige Auswahl. Bitte versuchen Sie es erneut."); } } diff --git a/Parkhaus.java b/Parkhaus.java index 78d1297..bd9983b 100644 --- a/Parkhaus.java +++ b/Parkhaus.java @@ -1,53 +1,59 @@ -import java.util.ArrayList; -import java.time.LocalDateTime; +import java.util.ArrayList; // Importiert die ArrayList-Klasse für die Verwaltung von Fahrzeuglisten +import java.time.LocalDateTime; // Importiert die LocalDateTime-Klasse für Zeitstempel class Parkhaus { private int aktuelleAutoAnzahl = 0; // Zählt die aktuelle Anzahl der Autos im Parkhaus - private static final int MAX_PLATZANZAHL = 180; // Maximale Anzahl an Plätzen im Parkhaus + private static final int MAX_PLATZANZAHL = 180; // Maximale Anzahl an Parkplätzen im Parkhaus private ArrayList fahrzeugListe = new ArrayList<>(); // Liste der Fahrzeuge im Parkhaus private ArrayList fahrzeugSchulden = new ArrayList<>(); // Liste der Fahrzeuge mit Schulden // Fahrzeug einfahren public boolean einfahrt(String kennzeichen) { + // Überprüft, ob noch Platz im Parkhaus ist if (aktuelleAutoAnzahl < MAX_PLATZANZAHL) { + // Erstellt ein neues Pkw-Objekt mit dem gegebenen Kennzeichen und der aktuellen Zeit Pkw neuesAuto = new Pkw(kennzeichen, LocalDateTime.now()); - fahrzeugListe.add(neuesAuto); - aktuelleAutoAnzahl++; + fahrzeugListe.add(neuesAuto); // Fügt das neue Fahrzeug zur Liste hinzu + aktuelleAutoAnzahl++; // Erhöht die Anzahl der aktuellen Autos return true; // Erfolgreich eingetragen } else { - return false; // Parkhaus voll + return false; // Parkhaus ist voll } } // Fahrzeug ausfahren public float ausfahrt(String kennzeichen) { + // Durchläuft die Liste der geparkten Fahrzeuge for (Pkw auto : fahrzeugListe) { + // Überprüft, ob das Kennzeichen mit dem gesuchten Kennzeichen übereinstimmt if (auto.getKennzeichen().equals(kennzeichen)) { + // Berechnet die Parkgebühren basierend auf der Eingangszeit und der aktuellen Zeit float parkgebuehren = ParkgebuehrenBerechnung.berechneGebuehren(auto.getEinfahrzeit(), LocalDateTime.now(), auto.getKennzeichen()); - fahrzeugListe.remove(auto); - aktuelleAutoAnzahl--; - return parkgebuehren; // Gebühren zurückgeben + fahrzeugListe.remove(auto); // Entfernt das Fahrzeug aus der Liste + aktuelleAutoAnzahl--; // Verringert die Anzahl der aktuellen Autos + return parkgebuehren; // Gibt die berechneten Parkgebühren zurück } } return -1; // Fahrzeug nicht gefunden } - // Aktuelle Anzahl der Fahrzeuge + // Gibt die aktuelle Anzahl der Fahrzeuge im Parkhaus zurück public int getAktuelleAutoAnzahl() { return aktuelleAutoAnzahl; } - // Liste der geparkten Fahrzeuge + // Gibt die Liste der geparkten Fahrzeuge zurück public ArrayList getFahrzeugListe() { return fahrzeugListe; } - // Schuldenverwaltung + // Fügt ein Fahrzeug zur Liste der Fahrzeuge mit Schulden hinzu public void addFahrzeugMitSchulden(Pkw auto) { - fahrzeugSchulden.add(auto); + fahrzeugSchulden.add(auto); // Fügt das Fahrzeug zur Schuldenliste hinzu } + // Gibt die Liste der Fahrzeuge mit Schulden zurück public ArrayList getFahrzeugSchulden() { - return fahrzeugSchulden; + return fahrzeugSchulden; // Gibt die Liste der Fahrzeuge mit Schulden zurück } } diff --git a/Pkw.java b/Pkw.java index 0240afb..eada77f 100644 --- a/Pkw.java +++ b/Pkw.java @@ -1,19 +1,22 @@ -import java.time.LocalDateTime; +import java.time.LocalDateTime; // Importiert die LocalDateTime-Klasse für Zeitstempel // Pkw-Klasse zur Speicherung von Kennzeichen und Einfahrzeit class Pkw { - private String kennzeichen; - private LocalDateTime einfahrzeit; + private String kennzeichen; // Das Kennzeichen des Fahrzeugs + private LocalDateTime einfahrzeit; // Die Zeit, zu der das Fahrzeug in das Parkhaus eingefahren ist + // Konstruktor der Pkw-Klasse, der Kennzeichen und Einfahrzeit initialisiert public Pkw(String kennzeichen, LocalDateTime einfahrzeit) { - this.kennzeichen = kennzeichen; - this.einfahrzeit = einfahrzeit; + this.kennzeichen = kennzeichen; // Setzt das Kennzeichen + this.einfahrzeit = einfahrzeit; // Setzt die Einfahrzeit } + // Gibt das Kennzeichen des Fahrzeugs zurück public String getKennzeichen() { return kennzeichen; } + // Gibt die Einfahrzeit des Fahrzeugs zurück public LocalDateTime getEinfahrzeit() { return einfahrzeit; } diff --git a/Zahlungsabwicklung.java b/Zahlungsabwicklung.java index 33d79ab..b5178da 100644 --- a/Zahlungsabwicklung.java +++ b/Zahlungsabwicklung.java @@ -1,35 +1,41 @@ -import java.util.regex.Matcher; -import java.util.regex.Pattern; +import java.util.regex.Matcher; // Importiert die Matcher-Klasse für reguläre Ausdrücke +import java.util.regex.Pattern; // Importiert die Pattern-Klasse für reguläre Ausdrücke class Zahlungsabwicklung { - private static final String KREDITKARTEN_REGEX = "^\\d{16}$"; // Regex für eine 16-stellige Kreditkartennummer - private static final Pattern KREDITKARTEN_PATTERN = Pattern.compile(KREDITKARTEN_REGEX); + // Regex für eine 16-stellige Kreditkartennummer + private static final String KREDITKARTEN_REGEX = "^\\d{16}$"; + private static final Pattern KREDITKARTEN_PATTERN = Pattern.compile(KREDITKARTEN_REGEX); // Kompiliert den Regex zu einem Pattern // Kreditkartenvalidierung public static boolean validiereKreditkarte(String kreditkartennummer) { + // Überprüft, ob die Kreditkartennummer dem Pattern entspricht und die Prüfziffer gültig ist Matcher matcher = KREDITKARTEN_PATTERN.matcher(kreditkartennummer); return matcher.matches() && validierePruefziffer(kreditkartennummer); } // Validierung der Prüfziffer für eine 16-stellige Kreditkartennummer (Luhn-Algorithmus) private static boolean validierePruefziffer(String kartennummer) { - int summe = 0; - boolean verdoppeln = false; + int summe = 0; // Summe zur Berechnung der Prüfziffer + boolean verdoppeln = false; // Flag, das angibt, ob die nächste Ziffer verdoppelt werden soll + // Iteriert über die Ziffern der Kreditkartennummer von hinten nach vorne for (int i = kartennummer.length() - 1; i >= 0; i--) { - int ziffer = Character.getNumericValue(kartennummer.charAt(i)); + int ziffer = Character.getNumericValue(kartennummer.charAt(i)); // Holt die Ziffer als Integer + // Verdoppelt die Ziffer, wenn das Flag gesetzt ist if (verdoppeln) { - ziffer *= 2; + ziffer *= 2; // Verdoppelt die Ziffer + // Wenn die verdoppelte Ziffer größer als 9 ist, wird 9 subtrahiert if (ziffer > 9) { ziffer -= 9; } } - summe += ziffer; - verdoppeln = !verdoppeln; + summe += ziffer; // Fügt die Ziffer zur Gesamtsumme hinzu + verdoppeln = !verdoppeln; // Wechselt den Zustand des Verdoppelns } + // Gibt true zurück, wenn die Summe durch 10 teilbar ist (gültige Prüfziffer) return (summe % 10) == 0; } }