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.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.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
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
|
// 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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue