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