kommentare hinzügefügt
parent
5e27a34936
commit
1b2a45699a
58
Main.java
58
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.");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
13
Pkw.java
13
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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue