Dateien nach "/" hochladen

main
Zabih Mansuri 2024-10-08 14:58:40 +02:00
parent cd834cb8ee
commit 5e27a34936
5 changed files with 200 additions and 163 deletions

81
Main.java 100644
View File

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

View File

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

View File

@ -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'
Pattern kennzeichenPattern = Pattern.compile(kennzeichenRegex);
String kreditkartenRegex = "^\\d{16}$"; // Regex für eine 16-stellige Kreditkartennummer
Pattern kreditkartenPattern = Pattern.compile(kreditkartenRegex);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm");
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":
if (aktuelleAutoAnzahl < MAX_PLATZANZAHL) { if (aktuelleAutoAnzahl < MAX_PLATZANZAHL) {
LocalDateTime einfahrzeit = LocalDateTime.now(); // Standardmäßig aktuelle Zeit Pkw neuesAuto = new Pkw(kennzeichen, LocalDateTime.now());
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); fahrzeugListe.add(neuesAuto);
aktuelleAutoAnzahl++; aktuelleAutoAnzahl++;
System.out.println("Fahrzeug erfolgreich eingetragen."); return true; // Erfolgreich eingetragen
} else { } else {
System.out.println("Das Parkhaus ist voll. Einfahrt nicht möglich."); return false; // Parkhaus voll
}
} }
break;
case "2":
System.out.println("Geben Sie Ihr Kennzeichen ein:");
String kennzeichenAus = scanner.nextLine();
Pkw gefundenesAuto = null;
// Fahrzeug ausfahren
public float ausfahrt(String kennzeichen) {
for (Pkw auto : fahrzeugListe) { for (Pkw auto : fahrzeugListe) {
if (auto.kennzeichen.equals(kennzeichenAus)) { if (auto.getKennzeichen().equals(kennzeichen)) {
gefundenesAuto = auto; float parkgebuehren = ParkgebuehrenBerechnung.berechneGebuehren(auto.getEinfahrzeit(), LocalDateTime.now(), auto.getKennzeichen());
break; fahrzeugListe.remove(auto);
}
}
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--; aktuelleAutoAnzahl--;
} else { return parkgebuehren; // Gebühren zurückgeben
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; // Liste der geparkten Fahrzeuge
if (istNachttarif) { public ArrayList<Pkw> getFahrzeugListe() {
return 5; // Nachttarif maximal 5 Euro return fahrzeugListe;
} }
long stunden = (minuten - 15) / 60 + 1; // Jede angefangene Stunde kostet 1 Euro // Schuldenverwaltung
float kosten = Math.min(stunden, 15); // Maximal 15 Euro pro Tag public void addFahrzeugMitSchulden(Pkw auto) {
fahrzeugSchulden.add(auto);
if (kennzeichen.endsWith("E")) {
kosten *= 0.8; // 20% Rabatt für E-Autos
} }
return kosten; public ArrayList<Pkw> getFahrzeugSchulden() {
} return fahrzeugSchulden;
// Validierung der Prüfziffer für eine 16-stellige Kreditkartennummer (Luhn-Algorithmus)
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;
}
}
// 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;
} }
} }

20
Pkw.java 100644
View File

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

View File

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