Methoden wurden deklariert und ausgearbeitet

main
gozde 2024-10-07 18:55:24 +02:00
parent 50ef4e4405
commit 09bbe61ad3
1 changed files with 229 additions and 0 deletions

View File

@ -0,0 +1,229 @@
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Random;
import java.util.Scanner;
public class ParkhausSystem {
private String[] kennzeichenArray; // Array zur Speicherung der Kennzeichen
private Date[] parkzeitArray; // Array zur Speicherung der Parkzeiten
private int maxPlatz = 180; // Maximale Anzahl der Parkplätze
private int aktuellerPlatz = 0; // Aktuell belegte Plätze
private HashMap<String, Double> schuldenMap; // Map zur Speicherung der Schulden
Scanner scanner = new Scanner(System.in);
SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy, HH:mm"); //Z.101
public static void main(String[] args) {
ParkhausSystem parkhausSystem = new ParkhausSystem(); // objekt erstellung
parkhausSystem.showMenu();
}
public ParkhausSystem() {
kennzeichenArray = new String[maxPlatz]; // Array für Kennzeichen
parkzeitArray = new Date[maxPlatz]; // Array für Parkzeiten
schuldenMap = new HashMap<>(); // die Map für Schulden
}
public void showMenu() { //Benutzeroberfläche
while (true) {
System.out.println("Hauptmenü:");
System.out.println("1. Einfahrt");
System.out.println("2. Ausfahrt");
System.out.println("3. Zahlung");
System.out.println("4. Beenden");
System.out.println("Aktuell verfügbare Plätze: " + (maxPlatz - aktuellerPlatz));
System.out.print("Bitte Auswahl treffen: ");
int auswahl = scanner.nextInt();
scanner.nextLine(); // Zeilenumbruch konsumieren
switch (auswahl) { // Auswahl des benutzers an die switch-Anwesoung übergeben
case 1:
einfahrt();
break;
case 2:
ausfahrt();
break;
case 3:
zahlung();
break;
case 4:
System.out.println("Programm beendet.");
return; // Beende die Methode und somit das Programm
default:
System.out.println("Ungültige Auswahl.");
}
}
}
public void einfahrt() {
if (aktuellerPlatz < maxPlatz) {
System.out.println("Bitte geben Sie Ihr Kennzeichen ein (oder leer lassen für zufällig generiert):");
String kennzeichen = scanner.nextLine().toUpperCase().trim(); // toUpperCase - Konvertierung der Eing in Großbuch. unabhängig vom bennutzer
// trim - um versehentlich eingegebene Leerzeichen zu entfernen und so sicherzustellen, dass nur der eigentliche Inhalt der Benutzereingabe verarbeitet wird
// Zufälliges Kennzeichen generieren, wenn Benutzer kein Kennzeichen eingibt
if (kennzeichen.isEmpty()) { // Prüft, ob die Eingabe des Kennzeichens leer ist
kennzeichen = generiereKennzeichen();
} else {
// Validierung des Kennzeichens
if (!istKennzeichenGueltig(kennzeichen)) { //Methode überprüft, ob das Kennzeichen dem geforderten Format entspricht.
System.out.println("Ungültiges Kennzeichen. Bitte überprüfen Sie das Format.");
return;
}
}
// Überprüfen, ob das Fahrzeug Schulden hat
if (schuldenMap.containsKey(kennzeichen)) { //prüft, ob das Fahrzeugkennzeichen in der schuldenMap vorhanden
System.out.println("Achtung: Das Fahrzeug mit Kennzeichen " + kennzeichen + " hat noch offene Schulden in Höhe von "
+ schuldenMap.get(kennzeichen) + " Euro. Diese werden zur neuen Rechnung hinzugefügt.");
}
// Aktueller Zeitstempel
System.out.print(
"Bitte geben Sie die Parkzeit ein (Format: dd.MM.yyyy, HH:mm) oder leer lassen für aktuelle Zeit: ");
String zeitEingabe = scanner.nextLine();
//Überprüfung der Eingabe
Date parkzeit; //parkzeit als Date objekt festgelegt
try {
if (zeitEingabe.isEmpty()) {
parkzeit = new Date(); // setzt die Parkzeit des Fahrzeugs auf den aktuellen Zeitstempel,
} else {
parkzeit = sdf.parse(zeitEingabe); //Wenn der Benutzer eine gültige Zeit im richtigen Format eingegeben hat, wird die Eingabe mithilfe von SimpleDateFormat.parse()Z.17 in ein Date-Objekt umgewandelt.
}
} catch (ParseException e) { // stellt sicher, dass das Programm nicht abstürzt, wenn ein Fehler beim Parsen(String in ein Datum Date) eines Datums auftritt.
System.out.println("Ungültiges Zeitformat. Verwenden Sie das Format dd.MM.yyyy, HH:mm.");
return; //Prozess wird abgebrochen
}
// Speichere das Kennzeichen und die Parkzeit im Array
kennzeichenArray[aktuellerPlatz] = kennzeichen;
parkzeitArray[aktuellerPlatz] = parkzeit;
aktuellerPlatz++; // Erhöhe den belegten Platz
System.out.println(
"Fahrzeug mit Kennzeichen " + kennzeichen + " eingeparkt um " + sdf.format(parkzeit) + ".");
} else {
System.out.println("Das Parkhaus ist voll.");
}
}
public void ausfahrt() {
System.out.print("Bitte geben Sie das Kennzeichen zur Ausfahrt ein: ");
String kennzeichen = scanner.nextLine().toUpperCase().trim();
// Suche das Kennzeichen im Array
for (int i = 0; i < aktuellerPlatz; i++) {
if (kennzeichenArray[i] != null && kennzeichenArray[i].equals(kennzeichen)) {
// Berechnung der Parkdauer
Date parkzeit = parkzeitArray[i];
Date ausfahrtszeit = new Date(); // Aktuelle Zeit
long secDiff = (ausfahrtszeit.getTime() - parkzeit.getTime()) / 1000; // Zeitdifferenz in Sekunden
long stunden = secDiff / 3600;
System.out.println("Fahrzeug mit Kennzeichen " + kennzeichen + " hat das Parkhaus verlassen.");
System.out.println("Parkdauer: " + stunden + " Stunden.");
double gebuehren = berechneGebuehren(parkzeit, ausfahrtszeit);
System.out.println("Die Parkgebühren betragen: " + gebuehren + " Euro.");
// Prüfen, ob die Zahlung erfolgt ist
if (!schuldenMap.containsKey(kennzeichen)) {
System.out.println("Das Fahrzeug hat nicht bezahlt. Schulden werden gespeichert.");
schuldenMap.put(kennzeichen, gebuehren);
} else {
System.out.println("Das Fahrzeug hat offene Schulden von " + schuldenMap.get(kennzeichen) + " Euro.");
}
// Wenn das Kennzeichen gefunden wird, setze den Platz auf null
kennzeichenArray[i] = null;
parkzeitArray[i] = null; // Setze die Parkzeit auf null
aktuellerPlatz--; // Optional: Reduziere den aktuellen Platz um 1
return;
}
}
System.out.println("Fahrzeug mit Kennzeichen " + kennzeichen + " nicht gefunden.");
}
public void zahlung() {
System.out.print("Bitte geben Sie das Kennzeichen zur Zahlung ein: ");
String kennzeichen = scanner.nextLine().toUpperCase().trim();
// Suche das Kennzeichen im Array
for (int i = 0; i < aktuellerPlatz; i++) {
if (kennzeichenArray[i] != null && kennzeichenArray[i].equals(kennzeichen)) {
// Berechne die Gebühren
Date parkzeit = parkzeitArray[i];
Date ausfahrtszeit = new Date(); // Aktuelle Zeit als Ausfahrtszeit
double gebuehren = berechneGebuehren(parkzeit, ausfahrtszeit);
// Hinzufügen der vorherigen Schulden zur neuen Gebühr, falls vorhanden
if (schuldenMap.containsKey(kennzeichen)) {
double offeneSchulden = schuldenMap.get(kennzeichen);
System.out.println("Offene Schulden von " + offeneSchulden + " Euro werden zur Gebühr hinzugefügt.");
gebuehren += offeneSchulden;
schuldenMap.remove(kennzeichen); // Schulden löschen, da sie bezahlt werden
}
System.out.printf("Das Fahrzeug mit Kennzeichen %s hat %,.2f Euro zu zahlen.%n", kennzeichen, gebuehren);
// Abfrage, ob es sich um ein E-Auto handelt
System.out.print("Ist das Fahrzeug ein E-Auto? (ja/nein): ");
String istEAuto = scanner.nextLine().trim().toLowerCase();
boolean eAuto = istEAuto.equals("ja");
// Rabatt für E-Auto anwenden
if (eAuto) {
gebuehren *= 0.8; // 20 % Rabatt
System.out.printf("20%% Rabatt für E-Autos angewendet. Neue Gebühr: %,.2f Euro.%n", gebuehren);
}
// Hier Kreditkartenzahlung verarbeiten
if (kreditkartenZahlung(gebuehren)) {
System.out.println("Zahlung erfolgreich. Vielen Dank!");
} else {
System.out.println("Zahlung fehlgeschlagen. Bitte versuchen Sie es erneut.");
}
return; // Zahlung bearbeitet, frühzeitig zurückkehren
}
}
System.out.println("Fahrzeug mit Kennzeichen " + kennzeichen + " nicht gefunden.");
}
public boolean kreditkartenZahlung(double betrag) {
// Hier kann die Implementierung der Kreditkarten-Zahlung erfolgen
System.out.printf("Bitte bezahlen Sie %,.2f Euro mit Ihrer Kreditkarte.%n", betrag);
return true; // Simuliere eine erfolgreiche Zahlung
}
public double berechneGebuehren(Date parkzeit, Date ausfahrtszeit) {
long diffInHours = (ausfahrtszeit.getTime() - parkzeit.getTime()) / (1000 * 60 * 60);
double gebuehren = diffInHours * 2.0; // Beispiel: 2 Euro pro Stunde
return gebuehren;
}
// Einfache Methode zur Generierung eines zufälligen Kennzeichens
public String generiereKennzeichen() {
String[] buchstaben = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L"};
Random rand = new Random();
String kennzeichen = buchstaben[rand.nextInt(buchstaben.length)] +
buchstaben[rand.nextInt(buchstaben.length)] +
buchstaben[rand.nextInt(buchstaben.length)] + "-" +
(rand.nextInt(900) + 100); // Zahl zwischen 100 und 999
return kennzeichen;
}
// Einfache Methode zur Validierung eines Kennzeichens (Format: AAA-123)
public boolean istKennzeichenGueltig(String kennzeichen) {
return kennzeichen.matches( "[A-Z]{2,3}-[A-Z]{2,3} \\d{3,4}(E)?");
}
}