From e90a074ea5e4ca6d671d7ecce6fd5437048b54be Mon Sep 17 00:00:00 2001 From: elarturo Date: Tue, 8 Oct 2024 09:24:00 +0200 Subject: [PATCH] parkgebuehrenBerechnen Methode erstellt, ohne HashMap --- Parkhaus/src/Parkhaus.java | 308 +++++++++++++++++++++++++++++++++++++ 1 file changed, 308 insertions(+) create mode 100644 Parkhaus/src/Parkhaus.java diff --git a/Parkhaus/src/Parkhaus.java b/Parkhaus/src/Parkhaus.java new file mode 100644 index 0000000..482c3aa --- /dev/null +++ b/Parkhaus/src/Parkhaus.java @@ -0,0 +1,308 @@ + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; +import java.util.Scanner; + +public class Parkhaus { + +// Variablen deklarieren + static Scanner scanner = new Scanner(System.in); + static int Gebuehren = 0; + static Map geparkteAutos = new HashMap<>(); + static int maximalePlaetze = 180; + static String kennzeichenEingabe; + + public static void parkgebuehrenBerechnen(Date d1, Date d2, String kennzeichenEingabe) { + + if (d1.getTime() > d2.getTime()) { + System.out.println("Die Ausfahrtszeit, kann nicht vor der Einfahrtszeit liegen! "); + return; + } + +// Variablen deklarieren + Gebuehren = 0; + int GebuehrenNacht = 0; + int GebuehrenTag = 0; + +// Sekunden ausrechnen zwischen Einfahrtszeit und Ausfahrtszeit + long secDiff = (d2.getTime() - d1.getTime()) / 1000; + +// Sekunden in Minuten umrechnen + long minuten = secDiff / 60; + + if (minuten <= 15) { + System.out.println("Die Parkgebühr ist kostenlos :)"); + System.out.println(); + return; + } + +// ersten 15 Minuten kostenlos + minuten -= 15; + +// Minuten in Stunden umrechnen + long gesamtStunden = minuten / 60; + +// Einfahrtsstunde + int startStunde = d1.getHours(); + +// Schleife iteriert die gesamtStunden entlang + for (int i = 0; i <= gesamtStunden; i++) { + +// aktuelleStunde herausfinden + int aktuelleStunde = (startStunde + i) % 24; + +// Nachtgebühren ausrechnen + if (aktuelleStunde >= 20 || aktuelleStunde < 6) { + GebuehrenNacht += 1; + + if (GebuehrenNacht > 5) { + Gebuehren += 5; + GebuehrenNacht = 0; + + } + +// Taggebühren ausrechnen + } else { + + GebuehrenTag += 1; + if ((GebuehrenTag) >= 15) { + Gebuehren += 15; + GebuehrenTag = 0; + } + + } + + } +// Taggebühren + Nachtgebühren zusammenrechnen + Gebuehren += (GebuehrenTag + GebuehrenNacht); + +// Falls E-Auto dann 20% Rabatt + if (kennzeichenEingabe.endsWith("E")) { + + Gebuehren *= 0.8; + + } + + System.out.println("Die Parkgebühr beträgt: " + Gebuehren + " Euro."); + + } + + public static void einfahrtParkhaus() throws ParseException { + +// Prüfen ob Parkhaus voll + if (geparkteAutos.size() >= maximalePlaetze) { + System.out.println("Tut uns Leid, das Parkhaus ist leider voll :"); + return; + } + + System.out.print("Geben Sie das Kennzeichen ein: "); + String kennzeichenEingabe = scanner.nextLine(); + +// Falls Kennzeichen eingegeben, dann Wert in FahrzeugInfo speichern + if (geparkteAutos.containsKey(kennzeichenEingabe)) { + FahrzeugInfo info = geparkteAutos.get(kennzeichenEingabe); + + if (info.schulden > 0) { + System.out.println("Dieses Auto hat noch Schulden von " + info.schulden + " Euros!"); + } + } + + System.out.print("Geben Sie ihre Einfahrtszeit ein (im Format: dd.MM.yyyy, HH:mm): "); + String einfahrtZeit = scanner.nextLine(); + +// SimpleDateFormat um einen gewünschten String zu parsen + SimpleDateFormat zeit = new SimpleDateFormat("dd.MM.yyyy, HH:mm"); + +// Falls keine Eingabe, dann wird aktuelle Zeit genommen + if (einfahrtZeit.isEmpty()) { + + einfahrtZeit = zeit.format(new Date()); + + } + +// String in Date parsen + Date d1 = zeit.parse(einfahrtZeit); + +// alle relevanten Infos, in das Auto Objekt speichern + geparkteAutos.put(kennzeichenEingabe, new FahrzeugInfo(d1, false, 0)); + + System.out.println("Einfahrtszeits des Autos: " + d1); + System.out.println(); + + } + + public static void Zahlung() throws ParseException { + + System.out.println(); + + System.out.print("Bitte geben Sie das Kennzeichen ein: "); + String kennzeichenEingabe = scanner.nextLine(); + +// prüfen ob Kennzeichen, im Parkhau existiert + if (!(geparkteAutos.containsKey(kennzeichenEingabe))) { + System.out.println("Das Kennzeichen existiert leider nicht in unserem Parkhaus."); + return; + } + +// Informationen des gesuchten Autos + FahrzeugInfo info = geparkteAutos.get(kennzeichenEingabe); + + System.out.print("Bitte geben Sie ihre Ausfahrtszeit ein: "); + String ausfahrtZeit = scanner.nextLine(); + + SimpleDateFormat zeit = new SimpleDateFormat("dd.MM.yyyy, HH:mm"); + + if (ausfahrtZeit.isEmpty()) { + + ausfahrtZeit = zeit.format(new Date()); + + } + + Date d2 = zeit.parse(ausfahrtZeit); + +// Parkgebühren berechnen mit den Informationen des FahrzeugObjekts + parkgebuehrenBerechnen(info.d1, d2, kennzeichenEingabe); + if (Gebuehren == 0) { + return; + } + + System.out.println("Bitte zahlen Sie den Betrag von " + Gebuehren + " Euro."); + System.out.println("Geben Sie ihre Kreditkartennummer ein: "); + String VISA = scanner.nextLine(); + +// Prüfen ob Zahlung gültig ist + if (zahlungsÜberprüfung(VISA) == true) { + System.out.println("Zahlung hat funktioniert"); + info.hatBezahlt = true; + + } + +// Falls Zahlung fehlgeschlagen, Schulden addieren + else { + System.out.println("Zahlung hat nicht funktioniert"); + info.schulden += Gebuehren; + } + } + + public static void ausfahrtParkhaus() throws ParseException { + System.out.println(); + + System.out.print("Bitte geben Sie das Kennzeichen ein: "); + String kennzeichenEingabe = scanner.nextLine(); + +// prüfen ob Kennzeichen existiert + if (!geparkteAutos.containsKey(kennzeichenEingabe)) { + System.out.println("Das Kennzeichen existiert nicht in unserem Parkhaus."); + return; + } + +// Informationen des gesuchten Autos + FahrzeugInfo info = geparkteAutos.get(kennzeichenEingabe); + + System.out.print("Bitte geben Sie ihre Ausfahrtszeit ein (im Format: dd.MM.yyyy, HH:mm): "); + String ausfahrtZeit = scanner.nextLine(); + SimpleDateFormat zeit = new SimpleDateFormat("dd.MM.yyyy, HH:mm"); + + if (ausfahrtZeit.isEmpty()) { + ausfahrtZeit = zeit.format(new Date()); + } + + // Prüfen ob Auto gezahlt hat + if (!info.hatBezahlt) { + System.out.println("Achtung: Das Fahrzeug hat nicht bezahlt und fährt nun aus."); + + } else { + System.out.println("Das Fahrzeug hat bereits bezahlt."); + } + + // Fahrzeug aus der Liste der geparkten Autos entfernen, auch ohne Zahlung + geparkteAutos.remove(kennzeichenEingabe); + + System.out.println("Fahrzeug mit Kennzeichen " + kennzeichenEingabe + " hat das Parkhaus verlassen."); + System.out.println(); + } + + public static boolean zahlungsÜberprüfung(String VISA) { + +// Variablen deklarieren + int zähler = VISA.length(); + int summe = 0; + + // 15,14,13,12,11... jede Zahl der Kreditkartennummer + for (int i = zähler - 1; i >= 0; i--) { + + // gibt jedes 2te vorletzte zurück + int n = Integer.parseInt(VISA.substring(i, i + 1)); + +// jede zweite Ziffer von rechts wird verdoppelt + if ((zähler - i) % 2 == 0) { + +// Ziffer wird verdoppelt + n *= 2; + +// Falls Ziffer größer als 9, wird Ziffer -9 gerechnet + if (n > 9) { + n -= 9; + } + } + + summe += n; + + } +// Prüfen ob durch 10 teilbar, eine der Hauptbedingungen + return (summe % 10 == 0); + } + + public static void ParkhausVerwaltung(FahrzeugInfo Info) { + System.out.println("Verfügbare Plätze im Parkhaus: " + (maximalePlaetze - geparkteAutos.size())); + System.out.println("Aktuelle Kennzeichen im Parkhaus: "); + +// + for (String Autos : geparkteAutos.keySet()) { + System.out.println(Autos); + + } + System.out.println(); + + } + + public static void main(String[] args) throws ParseException { + + while (true) { + System.out.println("1. Einfahrt ins Parkhaus"); + System.out.println("2. Zahlung der Parkgebühren"); + System.out.println("3. Ausfahrt"); + System.out.println("4. Parkhaus Verwaltung"); + System.out.println("5. Verlassen"); + int auswahl = scanner.nextInt(); + scanner.nextLine(); + + switch (auswahl) { + + case 1: + einfahrtParkhaus(); + break; + + case 2: + Zahlung(); + break; + + case 3: + ausfahrtParkhaus(); + break; + + case 4: + ParkhausVerwaltung(null); + break; + + case 5: + System.exit(0); + } + } + + } + +}