Dateien nach "/" hochladen
parent
cd834cb8ee
commit
5e27a34936
|
@ -0,0 +1,81 @@
|
||||||
|
import java.util.Scanner;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
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);
|
||||||
|
|
||||||
|
System.out.println("Willkommen im Parkhaus!");
|
||||||
|
|
||||||
|
while (true) {
|
||||||
|
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();
|
||||||
|
|
||||||
|
switch (auswahl) {
|
||||||
|
case "1":
|
||||||
|
System.out.println("Geben Sie das Kennzeichen des Autos ein (z.B. MA-SH 4077):");
|
||||||
|
String kennzeichen = scanner.nextLine();
|
||||||
|
|
||||||
|
Matcher kennzeichenMatcher = kennzeichenPattern.matcher(kennzeichen);
|
||||||
|
if (!kennzeichenMatcher.matches()) {
|
||||||
|
System.out.println("Ungültiges Kennzeichenformat. Bitte versuchen Sie es erneut.");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean erfolgreich = parkhaus.einfahrt(kennzeichen);
|
||||||
|
if (erfolgreich) {
|
||||||
|
System.out.println("Fahrzeug erfolgreich eingetragen.");
|
||||||
|
} else {
|
||||||
|
System.out.println("Das Parkhaus ist voll. Einfahrt nicht möglich.");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "2":
|
||||||
|
System.out.println("Geben Sie Ihr Kennzeichen ein:");
|
||||||
|
String kennzeichenAus = scanner.nextLine();
|
||||||
|
float parkgebuehren = parkhaus.ausfahrt(kennzeichenAus);
|
||||||
|
|
||||||
|
if (parkgebuehren == -1) {
|
||||||
|
System.out.println("Fahrzeug nicht im Parkhaus gefunden.");
|
||||||
|
} else {
|
||||||
|
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();
|
||||||
|
|
||||||
|
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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "3":
|
||||||
|
System.out.println("Aktuell geparkte Fahrzeuge:");
|
||||||
|
for (Pkw auto : parkhaus.getFahrzeugListe()) {
|
||||||
|
System.out.println("Kennzeichen: " + auto.getKennzeichen() + ", Eingefahren am: " + auto.getEinfahrzeit());
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "4":
|
||||||
|
System.out.println("Programm wird beendet. Auf Wiedersehen!");
|
||||||
|
scanner.close();
|
||||||
|
return;
|
||||||
|
|
||||||
|
default:
|
||||||
|
System.out.println("Ungültige Auswahl. Bitte versuchen Sie es erneut.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,25 @@
|
||||||
|
import java.time.Duration;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
class ParkgebuehrenBerechnung {
|
||||||
|
|
||||||
|
// Methode zur Berechnung der Parkgebühren
|
||||||
|
public static float berechneGebuehren(LocalDateTime einfahrzeit, LocalDateTime ausfahrzeit, String kennzeichen) {
|
||||||
|
Duration parkdauer = Duration.between(einfahrzeit, ausfahrzeit);
|
||||||
|
long minuten = parkdauer.toMinutes();
|
||||||
|
|
||||||
|
// Berechnung der Gebühren
|
||||||
|
if (minuten <= 15) {
|
||||||
|
return 0; // Erste 15 Minuten sind kostenlos
|
||||||
|
}
|
||||||
|
|
||||||
|
long stunden = (minuten - 15) / 60 + 1; // Jede angefangene Stunde kostet 1 Euro
|
||||||
|
float kosten = Math.min(stunden, 15); // Maximal 15 Euro pro Tag
|
||||||
|
|
||||||
|
if (kennzeichen.endsWith("E")) {
|
||||||
|
kosten *= 0.8; // 20% Rabatt für E-Autos
|
||||||
|
}
|
||||||
|
|
||||||
|
return kosten;
|
||||||
|
}
|
||||||
|
}
|
202
Parkhaus.java
202
Parkhaus.java
|
@ -1,177 +1,53 @@
|
||||||
import java.time.LocalDateTime;
|
|
||||||
import java.time.Duration;
|
|
||||||
import java.time.format.DateTimeFormatter;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Scanner;
|
import java.time.LocalDateTime;
|
||||||
import java.util.regex.Pattern;
|
|
||||||
import java.util.regex.Matcher;
|
|
||||||
|
|
||||||
public class Main {
|
class Parkhaus {
|
||||||
static 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
|
||||||
static final int MAX_PLATZANZAHL = 180; // Maximale Anzahl an Plätzen im Parkhaus
|
private static final int MAX_PLATZANZAHL = 180; // Maximale Anzahl an Plätzen im Parkhaus
|
||||||
static ArrayList<Pkw> fahrzeugListe = new ArrayList<>(); // Liste der Fahrzeuge im Parkhaus
|
private ArrayList<Pkw> fahrzeugListe = new ArrayList<>(); // Liste der Fahrzeuge im Parkhaus
|
||||||
static ArrayList<Pkw> fahrzeugSchulden = new ArrayList<>(); // Liste der Fahrzeuge mit Schulden
|
private ArrayList<Pkw> fahrzeugSchulden = new ArrayList<>(); // Liste der Fahrzeuge mit Schulden
|
||||||
|
|
||||||
public static void Parkhaus(String[] args) {
|
// Fahrzeug einfahren
|
||||||
Scanner scanner = new Scanner(System.in);
|
public boolean einfahrt(String kennzeichen) {
|
||||||
String kennzeichenRegex = "^[A-ZÄÖÜ]{1,3}-[A-Z]{1,2} \\d{1,4}E?$"; // Regex für deutsches Kennzeichen mit optionalem 'E'
|
if (aktuelleAutoAnzahl < MAX_PLATZANZAHL) {
|
||||||
Pattern kennzeichenPattern = Pattern.compile(kennzeichenRegex);
|
Pkw neuesAuto = new Pkw(kennzeichen, LocalDateTime.now());
|
||||||
String kreditkartenRegex = "^\\d{16}$"; // Regex für eine 16-stellige Kreditkartennummer
|
fahrzeugListe.add(neuesAuto);
|
||||||
Pattern kreditkartenPattern = Pattern.compile(kreditkartenRegex);
|
aktuelleAutoAnzahl++;
|
||||||
|
return true; // Erfolgreich eingetragen
|
||||||
|
} else {
|
||||||
|
return false; // Parkhaus voll
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm");
|
// Fahrzeug ausfahren
|
||||||
|
public float ausfahrt(String kennzeichen) {
|
||||||
System.out.println("Willkommen im Parkhaus!");
|
for (Pkw auto : fahrzeugListe) {
|
||||||
|
if (auto.getKennzeichen().equals(kennzeichen)) {
|
||||||
while (true) {
|
float parkgebuehren = ParkgebuehrenBerechnung.berechneGebuehren(auto.getEinfahrzeit(), LocalDateTime.now(), auto.getKennzeichen());
|
||||||
System.out.println("\nWählen Sie eine Option:");
|
fahrzeugListe.remove(auto);
|
||||||
System.out.println("1: Einfahrt");
|
aktuelleAutoAnzahl--;
|
||||||
System.out.println("2: Ausfahrt");
|
return parkgebuehren; // Gebühren zurückgeben
|
||||||
System.out.println("3: Liste der geparkten Fahrzeuge");
|
|
||||||
System.out.println("4: Programm beenden");
|
|
||||||
|
|
||||||
String auswahl = scanner.nextLine();
|
|
||||||
|
|
||||||
switch (auswahl) {
|
|
||||||
case "1":
|
|
||||||
if (aktuelleAutoAnzahl < MAX_PLATZANZAHL) {
|
|
||||||
LocalDateTime einfahrzeit = LocalDateTime.now(); // Standardmäßig aktuelle Zeit
|
|
||||||
System.out.println("Geben Sie das Kennzeichen des Autos ein (z.B. MA-SH 4077):");
|
|
||||||
String kennzeichen = scanner.nextLine();
|
|
||||||
|
|
||||||
Matcher kennzeichenMatcher = kennzeichenPattern.matcher(kennzeichen);
|
|
||||||
if (!kennzeichenMatcher.matches()) {
|
|
||||||
System.out.println("Ungültiges Kennzeichenformat. Bitte versuchen Sie es erneut.");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Schuldenprüfung
|
|
||||||
boolean hatSchulden = fahrzeugSchulden.stream().anyMatch(p -> p.kennzeichen.equals(kennzeichen));
|
|
||||||
if (hatSchulden) {
|
|
||||||
System.out.println("Achtung: Dieses Fahrzeug hat noch unbezahlte Schulden.");
|
|
||||||
}
|
|
||||||
|
|
||||||
Pkw neuesAuto = new Pkw(kennzeichen, einfahrzeit);
|
|
||||||
fahrzeugListe.add(neuesAuto);
|
|
||||||
aktuelleAutoAnzahl++;
|
|
||||||
System.out.println("Fahrzeug erfolgreich eingetragen.");
|
|
||||||
} else {
|
|
||||||
System.out.println("Das Parkhaus ist voll. Einfahrt nicht möglich.");
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case "2":
|
|
||||||
System.out.println("Geben Sie Ihr Kennzeichen ein:");
|
|
||||||
String kennzeichenAus = scanner.nextLine();
|
|
||||||
Pkw gefundenesAuto = null;
|
|
||||||
|
|
||||||
for (Pkw auto : fahrzeugListe) {
|
|
||||||
if (auto.kennzeichen.equals(kennzeichenAus)) {
|
|
||||||
gefundenesAuto = auto;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (gefundenesAuto != null) {
|
|
||||||
System.out.println("Geben Sie das aktuelle Datum und die Uhrzeit ein (dd.MM.yyyy HH:mm), oder drücken Sie Enter für die aktuelle Zeit:");
|
|
||||||
String ausfahrzeitInput = scanner.nextLine();
|
|
||||||
LocalDateTime ausfahrzeit = ausfahrzeitInput.isEmpty() ? LocalDateTime.now() : LocalDateTime.parse(ausfahrzeitInput, formatter);
|
|
||||||
|
|
||||||
float parkgebuehren = berechneParkgebuehren(gefundenesAuto.einfahrzeit, ausfahrzeit, gefundenesAuto.kennzeichen);
|
|
||||||
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();
|
|
||||||
Matcher kreditkartenMatcher = kreditkartenPattern.matcher(kreditkartennummer);
|
|
||||||
|
|
||||||
if (kreditkartenMatcher.matches() && validierePruefziffer(kreditkartennummer)) {
|
|
||||||
System.out.println("Bezahlung erfolgreich. Vielen Dank!");
|
|
||||||
fahrzeugListe.remove(gefundenesAuto);
|
|
||||||
aktuelleAutoAnzahl--;
|
|
||||||
} else {
|
|
||||||
System.out.println("Ungültige Kreditkartennummer. Das Fahrzeug kann ohne Bezahlung ausfahren.");
|
|
||||||
fahrzeugListe.remove(gefundenesAuto);
|
|
||||||
fahrzeugSchulden.add(gefundenesAuto); // Fahrzeug mit Schulden markieren
|
|
||||||
aktuelleAutoAnzahl--;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
System.out.println("Fahrzeug nicht im Parkhaus gefunden.");
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case "3":
|
|
||||||
System.out.println("Aktuell geparkte Fahrzeuge:");
|
|
||||||
for (Pkw auto : fahrzeugListe) {
|
|
||||||
System.out.println("Kennzeichen: " + auto.kennzeichen + ", Eingefahren am: " + auto.einfahrzeit.format(formatter));
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case "4":
|
|
||||||
System.out.println("Programm wird beendet. Auf Wiedersehen!");
|
|
||||||
scanner.close();
|
|
||||||
return;
|
|
||||||
|
|
||||||
default:
|
|
||||||
System.out.println("Ungültige Auswahl. Bitte versuchen Sie es erneut.");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return -1; // Fahrzeug nicht gefunden
|
||||||
}
|
}
|
||||||
|
|
||||||
// Methode zur Berechnung der Parkgebühren
|
// Aktuelle Anzahl der Fahrzeuge
|
||||||
static float berechneParkgebuehren(LocalDateTime einfahrzeit, LocalDateTime ausfahrzeit, String kennzeichen) {
|
public int getAktuelleAutoAnzahl() {
|
||||||
Duration parkdauer = Duration.between(einfahrzeit, ausfahrzeit);
|
return aktuelleAutoAnzahl;
|
||||||
long minuten = parkdauer.toMinutes();
|
|
||||||
|
|
||||||
// Berechnung der Gebühren
|
|
||||||
if (minuten <= 15) {
|
|
||||||
return 0; // Erste 15 Minuten sind kostenlos
|
|
||||||
}
|
|
||||||
|
|
||||||
boolean istNachttarif = einfahrzeit.getHour() >= 20 || ausfahrzeit.getHour() < 6;
|
|
||||||
if (istNachttarif) {
|
|
||||||
return 5; // Nachttarif maximal 5 Euro
|
|
||||||
}
|
|
||||||
|
|
||||||
long stunden = (minuten - 15) / 60 + 1; // Jede angefangene Stunde kostet 1 Euro
|
|
||||||
float kosten = Math.min(stunden, 15); // Maximal 15 Euro pro Tag
|
|
||||||
|
|
||||||
if (kennzeichen.endsWith("E")) {
|
|
||||||
kosten *= 0.8; // 20% Rabatt für E-Autos
|
|
||||||
}
|
|
||||||
|
|
||||||
return kosten;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Validierung der Prüfziffer für eine 16-stellige Kreditkartennummer (Luhn-Algorithmus)
|
// Liste der geparkten Fahrzeuge
|
||||||
static boolean validierePruefziffer(String kartennummer) {
|
public ArrayList<Pkw> getFahrzeugListe() {
|
||||||
int summe = 0;
|
return fahrzeugListe;
|
||||||
boolean verdoppeln = false;
|
}
|
||||||
|
|
||||||
for (int i = kartennummer.length() - 1; i >= 0; i--) {
|
// Schuldenverwaltung
|
||||||
int ziffer = Character.getNumericValue(kartennummer.charAt(i));
|
public void addFahrzeugMitSchulden(Pkw auto) {
|
||||||
|
fahrzeugSchulden.add(auto);
|
||||||
|
}
|
||||||
|
|
||||||
if (verdoppeln) {
|
public ArrayList<Pkw> getFahrzeugSchulden() {
|
||||||
ziffer *= 2;
|
return fahrzeugSchulden;
|
||||||
if (ziffer > 9) {
|
|
||||||
ziffer -= 9;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
summe += ziffer;
|
|
||||||
verdoppeln = !verdoppeln;
|
|
||||||
}
|
|
||||||
|
|
||||||
return (summe % 10) == 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Pkw Klasse zur Speicherung von Kennzeichen und Einfahrzeit
|
|
||||||
class Pkw {
|
|
||||||
String kennzeichen;
|
|
||||||
LocalDateTime einfahrzeit;
|
|
||||||
|
|
||||||
Pkw(String kennzeichen, LocalDateTime einfahrzeit) {
|
|
||||||
this.kennzeichen = kennzeichen;
|
|
||||||
this.einfahrzeit = einfahrzeit;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
// Pkw-Klasse zur Speicherung von Kennzeichen und Einfahrzeit
|
||||||
|
class Pkw {
|
||||||
|
private String kennzeichen;
|
||||||
|
private LocalDateTime einfahrzeit;
|
||||||
|
|
||||||
|
public Pkw(String kennzeichen, LocalDateTime einfahrzeit) {
|
||||||
|
this.kennzeichen = kennzeichen;
|
||||||
|
this.einfahrzeit = einfahrzeit;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getKennzeichen() {
|
||||||
|
return kennzeichen;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LocalDateTime getEinfahrzeit() {
|
||||||
|
return einfahrzeit;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,35 @@
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
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);
|
||||||
|
|
||||||
|
// Kreditkartenvalidierung
|
||||||
|
public static boolean validiereKreditkarte(String kreditkartennummer) {
|
||||||
|
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;
|
||||||
|
|
||||||
|
for (int i = kartennummer.length() - 1; i >= 0; i--) {
|
||||||
|
int ziffer = Character.getNumericValue(kartennummer.charAt(i));
|
||||||
|
|
||||||
|
if (verdoppeln) {
|
||||||
|
ziffer *= 2;
|
||||||
|
if (ziffer > 9) {
|
||||||
|
ziffer -= 9;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
summe += ziffer;
|
||||||
|
verdoppeln = !verdoppeln;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (summe % 10) == 0;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue