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.Scanner; // Importiert die Scanner-Klasse für die Benutzereingabe
import java.util.regex.Pattern; import java.util.regex.Pattern; // Importiert die Pattern-Klasse für reguläre Ausdrücke
import java.util.regex.Matcher; import java.util.regex.Matcher; // Importiert die Matcher-Klasse für das Matching von regulären Ausdrücken
import java.time.LocalDateTime; import java.time.LocalDateTime; // Importiert die LocalDateTime-Klasse für Zeitstempel
public class Main { public class Main {
public static void main(String[] args) { public static void main(String[] args) {
Scanner scanner = new Scanner(System.in); Scanner scanner = new Scanner(System.in); // Initialisiert einen Scanner für die Eingabe
Parkhaus parkhaus = new Parkhaus(); Parkhaus parkhaus = new Parkhaus(); // Erstellt ein neues Parkhaus-Objekt
String kennzeichenRegex = "^[A-ZÄÖÜ]{1,3}-[A-Z]{1,2} \\d{1,4}E?$"; // Regex für deutsches Kennzeichen mit optionalem 'E' // Regex für deutsches Kennzeichen mit optionalem 'E'
Pattern kennzeichenPattern = Pattern.compile(kennzeichenRegex); 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) { while (true) {
// Anzeige der Menüoptionen
System.out.println("\nWählen Sie eine Option:"); System.out.println("\nWählen Sie eine Option:");
System.out.println("1: Einfahrt"); System.out.println("1: Einfahrt");
System.out.println("2: Ausfahrt"); System.out.println("2: Ausfahrt");
System.out.println("3: Liste der geparkten Fahrzeuge"); System.out.println("3: Liste der geparkten Fahrzeuge");
System.out.println("4: Programm beenden"); System.out.println("4: Programm beenden");
String auswahl = scanner.nextLine(); String auswahl = scanner.nextLine(); // Liest die Auswahl des Benutzers
switch (auswahl) { 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):"); 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); Matcher kennzeichenMatcher = kennzeichenPattern.matcher(kennzeichen);
if (!kennzeichenMatcher.matches()) { if (!kennzeichenMatcher.matches()) {
System.out.println("Ungültiges Kennzeichenformat. Bitte versuchen Sie es erneut."); 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); boolean erfolgreich = parkhaus.einfahrt(kennzeichen);
if (erfolgreich) { if (erfolgreich) {
System.out.println("Fahrzeug erfolgreich eingetragen."); System.out.println("Fahrzeug erfolgreich eingetragen.");
@ -40,40 +45,45 @@ public class Main {
} }
break; break;
case "2": case "2": // Fall für die Ausfahrt eines Fahrzeugs
System.out.println("Geben Sie Ihr Kennzeichen ein:"); System.out.println("Geben Sie Ihr Kennzeichen ein:");
String kennzeichenAus = scanner.nextLine(); String kennzeichenAus = scanner.nextLine(); // Liest das Kennzeichen für die Ausfahrt
float parkgebuehren = parkhaus.ausfahrt(kennzeichenAus); float parkgebuehren = parkhaus.ausfahrt(kennzeichenAus); // Berechnet die Parkgebühren
// Überprüft, ob das Fahrzeug im Parkhaus gefunden wurde
if (parkgebuehren == -1) { if (parkgebuehren == -1) {
System.out.println("Fahrzeug nicht im Parkhaus gefunden."); System.out.println("Fahrzeug nicht im Parkhaus gefunden.");
} else { } else {
// Gibt die Parkgebühren aus und fordert zur Zahlung auf
System.out.println("Die Parkgebühren betragen: " + parkgebuehren + " Euro"); System.out.println("Die Parkgebühren betragen: " + parkgebuehren + " Euro");
System.out.println("Bitte geben Sie Ihre 16-stellige Kreditkartennummer zur Bezahlung ein:"); 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)) { if (Zahlungsabwicklung.validiereKreditkarte(kreditkartennummer)) {
System.out.println("Bezahlung erfolgreich. Vielen Dank!"); System.out.println("Bezahlung erfolgreich. Vielen Dank!");
} else { } else {
System.out.println("Ungültige Kreditkartennummer. Fahrzeug wird als schuldig markiert."); 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; break;
case "3": case "3": // Fall für die Anzeige der geparkten Fahrzeuge
System.out.println("Aktuell geparkte 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()); System.out.println("Kennzeichen: " + auto.getKennzeichen() + ", Eingefahren am: " + auto.getEinfahrzeit());
} }
break; break;
case "4": case "4": // Fall für das Beenden des Programms
System.out.println("Programm wird beendet. Auf Wiedersehen!"); System.out.println("Programm wird beendet. Auf Wiedersehen!");
scanner.close(); scanner.close(); // Schließt den Scanner
return; return; // Beendet das Programm
default: default: // Fall für ungültige Eingaben
System.out.println("Ungültige Auswahl. Bitte versuchen Sie es erneut."); System.out.println("Ungültige Auswahl. Bitte versuchen Sie es erneut.");
} }
} }

View File

@ -1,53 +1,59 @@
import java.util.ArrayList; import java.util.ArrayList; // Importiert die ArrayList-Klasse für die Verwaltung von Fahrzeuglisten
import java.time.LocalDateTime; import java.time.LocalDateTime; // Importiert die LocalDateTime-Klasse für Zeitstempel
class Parkhaus { class Parkhaus {
private int aktuelleAutoAnzahl = 0; // Zählt die aktuelle Anzahl der Autos im 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> fahrzeugListe = new ArrayList<>(); // Liste der Fahrzeuge im Parkhaus
private ArrayList<Pkw> fahrzeugSchulden = new ArrayList<>(); // Liste der Fahrzeuge mit Schulden private ArrayList<Pkw> fahrzeugSchulden = new ArrayList<>(); // Liste der Fahrzeuge mit Schulden
// Fahrzeug einfahren // Fahrzeug einfahren
public boolean einfahrt(String kennzeichen) { public boolean einfahrt(String kennzeichen) {
// Überprüft, ob noch Platz im Parkhaus ist
if (aktuelleAutoAnzahl < MAX_PLATZANZAHL) { if (aktuelleAutoAnzahl < MAX_PLATZANZAHL) {
// Erstellt ein neues Pkw-Objekt mit dem gegebenen Kennzeichen und der aktuellen Zeit
Pkw neuesAuto = new Pkw(kennzeichen, LocalDateTime.now()); Pkw neuesAuto = new Pkw(kennzeichen, LocalDateTime.now());
fahrzeugListe.add(neuesAuto); fahrzeugListe.add(neuesAuto); // Fügt das neue Fahrzeug zur Liste hinzu
aktuelleAutoAnzahl++; aktuelleAutoAnzahl++; // Erhöht die Anzahl der aktuellen Autos
return true; // Erfolgreich eingetragen return true; // Erfolgreich eingetragen
} else { } else {
return false; // Parkhaus voll return false; // Parkhaus ist voll
} }
} }
// Fahrzeug ausfahren // Fahrzeug ausfahren
public float ausfahrt(String kennzeichen) { public float ausfahrt(String kennzeichen) {
// Durchläuft die Liste der geparkten Fahrzeuge
for (Pkw auto : fahrzeugListe) { for (Pkw auto : fahrzeugListe) {
// Überprüft, ob das Kennzeichen mit dem gesuchten Kennzeichen übereinstimmt
if (auto.getKennzeichen().equals(kennzeichen)) { 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()); float parkgebuehren = ParkgebuehrenBerechnung.berechneGebuehren(auto.getEinfahrzeit(), LocalDateTime.now(), auto.getKennzeichen());
fahrzeugListe.remove(auto); fahrzeugListe.remove(auto); // Entfernt das Fahrzeug aus der Liste
aktuelleAutoAnzahl--; aktuelleAutoAnzahl--; // Verringert die Anzahl der aktuellen Autos
return parkgebuehren; // Gebühren zurückgeben return parkgebuehren; // Gibt die berechneten Parkgebühren zurück
} }
} }
return -1; // Fahrzeug nicht gefunden return -1; // Fahrzeug nicht gefunden
} }
// Aktuelle Anzahl der Fahrzeuge // Gibt die aktuelle Anzahl der Fahrzeuge im Parkhaus zurück
public int getAktuelleAutoAnzahl() { public int getAktuelleAutoAnzahl() {
return aktuelleAutoAnzahl; return aktuelleAutoAnzahl;
} }
// Liste der geparkten Fahrzeuge // Gibt die Liste der geparkten Fahrzeuge zurück
public ArrayList<Pkw> getFahrzeugListe() { public ArrayList<Pkw> getFahrzeugListe() {
return fahrzeugListe; return fahrzeugListe;
} }
// Schuldenverwaltung // Fügt ein Fahrzeug zur Liste der Fahrzeuge mit Schulden hinzu
public void addFahrzeugMitSchulden(Pkw auto) { 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() { 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 // Pkw-Klasse zur Speicherung von Kennzeichen und Einfahrzeit
class Pkw { class Pkw {
private String kennzeichen; private String kennzeichen; // Das Kennzeichen des Fahrzeugs
private LocalDateTime einfahrzeit; 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) { public Pkw(String kennzeichen, LocalDateTime einfahrzeit) {
this.kennzeichen = kennzeichen; this.kennzeichen = kennzeichen; // Setzt das Kennzeichen
this.einfahrzeit = einfahrzeit; this.einfahrzeit = einfahrzeit; // Setzt die Einfahrzeit
} }
// Gibt das Kennzeichen des Fahrzeugs zurück
public String getKennzeichen() { public String getKennzeichen() {
return kennzeichen; return kennzeichen;
} }
// Gibt die Einfahrzeit des Fahrzeugs zurück
public LocalDateTime getEinfahrzeit() { public LocalDateTime getEinfahrzeit() {
return einfahrzeit; return einfahrzeit;
} }

View File

@ -1,35 +1,41 @@
import java.util.regex.Matcher; import java.util.regex.Matcher; // Importiert die Matcher-Klasse für reguläre Ausdrücke
import java.util.regex.Pattern; import java.util.regex.Pattern; // Importiert die Pattern-Klasse für reguläre Ausdrücke
class Zahlungsabwicklung { class Zahlungsabwicklung {
private static final String KREDITKARTEN_REGEX = "^\\d{16}$"; // Regex für eine 16-stellige Kreditkartennummer // Regex für eine 16-stellige Kreditkartennummer
private static final Pattern KREDITKARTEN_PATTERN = Pattern.compile(KREDITKARTEN_REGEX); 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 // Kreditkartenvalidierung
public static boolean validiereKreditkarte(String kreditkartennummer) { 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); Matcher matcher = KREDITKARTEN_PATTERN.matcher(kreditkartennummer);
return matcher.matches() && validierePruefziffer(kreditkartennummer); return matcher.matches() && validierePruefziffer(kreditkartennummer);
} }
// Validierung der Prüfziffer für eine 16-stellige Kreditkartennummer (Luhn-Algorithmus) // Validierung der Prüfziffer für eine 16-stellige Kreditkartennummer (Luhn-Algorithmus)
private static boolean validierePruefziffer(String kartennummer) { private static boolean validierePruefziffer(String kartennummer) {
int summe = 0; int summe = 0; // Summe zur Berechnung der Prüfziffer
boolean verdoppeln = false; 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--) { 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) { if (verdoppeln) {
ziffer *= 2; ziffer *= 2; // Verdoppelt die Ziffer
// Wenn die verdoppelte Ziffer größer als 9 ist, wird 9 subtrahiert
if (ziffer > 9) { if (ziffer > 9) {
ziffer -= 9; ziffer -= 9;
} }
} }
summe += ziffer; summe += ziffer; // Fügt die Ziffer zur Gesamtsumme hinzu
verdoppeln = !verdoppeln; 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; return (summe % 10) == 0;
} }
} }