kommentare hinzügefügt

main
Zabih Mansuri 2024-10-08 15:19:51 +02:00
parent 5e27a34936
commit 1b2a45699a
4 changed files with 78 additions and 53 deletions

View File

@ -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.");
}
}

View File

@ -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<Pkw> fahrzeugListe = new ArrayList<>(); // Liste der Fahrzeuge im Parkhaus
private ArrayList<Pkw> 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<Pkw> 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<Pkw> getFahrzeugSchulden() {
return fahrzeugSchulden;
return fahrzeugSchulden; // Gibt die Liste der Fahrzeuge mit Schulden zurück
}
}

View File

@ -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;
}

View File

@ -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;
}
}