From 028b8bbd92687888ea022481b13cc7bbbd620764 Mon Sep 17 00:00:00 2001 From: Arthur Kovis <3013016@stud.hs-mannheim.de> Date: Tue, 8 Oct 2024 12:38:46 +0200 Subject: [PATCH] =?UTF-8?q?FertigCode/Parkhaus.Java=20hinzugef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FertigCode/Parkhaus.Java | 348 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 348 insertions(+) create mode 100644 FertigCode/Parkhaus.Java diff --git a/FertigCode/Parkhaus.Java b/FertigCode/Parkhaus.Java new file mode 100644 index 0000000..0ae61af --- /dev/null +++ b/FertigCode/Parkhaus.Java @@ -0,0 +1,348 @@ +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +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 double 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; + } + + // Sekunden zwischen Einfahrtszeit und Ausfahrtszeit berechnen + long secDiff = (d2.getTime() - d1.getTime()) / 1000; + + // Sekunden in Minuten umrechnen + long minuten = secDiff / 60; + + // ersten 15 Minuten kostenfrei + 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 + // +59 damit angefangene Stunden auch zählen, d.h 61 Minuten = 2 Stunden + long gesamtStunden = (minuten + 59) / 60; + + // calEin = Einfahrtszeit + // getInstance setzt das Calendar Objekt auf die aktuelle Zeit + Calendar calEinfahrtsZeit = Calendar.getInstance(); + calEinfahrtsZeit.setTime(d1); + + // calAus = Ausfahrtszeit + Calendar calAusfahrtsZeit = Calendar.getInstance(); + calAusfahrtsZeit.setTime(d2); + + // Gebühren deklarieren + double gebuehrenTag = 0; + double gebuehrenNacht = 0; + + // Berechnung der Gebühren solange Einfahrszeit vor der Ausfahrtszeit liegt + while (calEinfahrtsZeit.before(calAusfahrtsZeit) || calEinfahrtsZeit.equals(calAusfahrtsZeit)) { + + // aktuelleStunde ist gleich die Stunde der Einfahrtszeit + int aktuelleStunde = calEinfahrtsZeit.get(Calendar.HOUR_OF_DAY); + + // Gebühren für die aktuelle Stunde berechnen (20:00-06:00) + if (aktuelleStunde >= 20 || aktuelleStunde < 6) { + + // Nachtgebühren + gebuehrenNacht += 1; + } else { + + // Taggebühren + gebuehrenTag += 1; + } + + // Wenn die aktuelle Stunde 6:00 ist, dann Tag abschließen + if (aktuelleStunde == 6) { + + // Maximal 5 Euro für Nachtgebühren + if (gebuehrenNacht > 5) { + gebuehrenNacht = 5; + } + + // Maximal 15 Euro für Taggebühren + if (gebuehrenTag > 15) { + gebuehrenTag = 15; + } + + // Gesamtgebühren für diesen Tag hinzufügen + Gebuehren += gebuehrenTag + gebuehrenNacht; + + // Gebühren zurücksetzen für den nächsten Tag + gebuehrenTag = 0; + gebuehrenNacht = 0; + } + + // Zur nächsten Stunde der Einfahrt (solange bis Einfahrtszeit größer + // Ausfahrtszeit ist) + calEinfahrtsZeit.add(Calendar.HOUR_OF_DAY, 1); + } + + // Nach der Schleife die Gebühren für den letzten Tag berechnen + if (gebuehrenNacht > 5) { + gebuehrenNacht = 5; // Maximal 5 Euro für Nachtgebühren + } + + if (gebuehrenTag > 15) { + gebuehrenTag = 15; // Maximal 15 Euro für Taggebühren + } + + // Letzte Gebühren hinzufügen + Gebuehren += gebuehrenTag + gebuehrenNacht; + + // Wenn E-Auto, dann 20% Rabatt + if (kennzeichenEingabe.endsWith("E")) { + Gebuehren *= 0.8; + } + + // Ausgabe der Parkgebühr + System.out.println(); + System.out.printf("Die Parkgebühr beträgt: %.2f Euro.", Gebuehren); + System.out.println(); + } + + 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 Parkhaus 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(); + +// Klasse die es ermöglicht Datum oder Zeit in ein Date Format zu parsen + SimpleDateFormat zeit = new SimpleDateFormat("dd.MM.yyyy, HH:mm"); + + if (ausfahrtZeit.isEmpty()) { + +// new Date = aktuelle Zeit + 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.printf("Bitte zahlen Sie den Betrag von %.2f Euro.", Gebuehren); + System.out.println(); + System.out.print("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"); + System.out.println(); + info.hatBezahlt = true; + + } + +// Falls Zahlung fehlgeschlagen, Schulden addieren + else { + System.out.println("Zahlung hat nicht funktioniert"); + System.out.println(); + 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(); + +// definiert wie Datum und Uhrzeit dargestellt werden + 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 am " + ausfahrtZeit + + " 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... rückwärts der Kreditkartennummer entlang + 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: "); + +// keySet gibt ein Set der Schlüssel(Kennzeichen) zurück + 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); + } + } + + } + +}