package pr2parkhaus; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.Scanner; public class Parkhaus { private int anzahlParkplaetze; //Gesamtanzahl aller Parkplätze private Parkplatz[] plaetze; //Array von Parkplätzen private HashMap schuldenListe; // Schuldenliste der Autos Scanner in = new Scanner(System.in); // Konstruktor public Parkhaus(int anzahlParkplaetze) { this.anzahlParkplaetze = anzahlParkplaetze; this.plaetze = new Parkplatz[anzahlParkplaetze]; this.schuldenListe = new HashMap<>(); // Initialisiere die Schuldenliste for (int i = 0; i < anzahlParkplaetze; i++) { plaetze[i] = new Parkplatz(i + 1); } } public String nummernschildErkennen() { String nummernschild = in.nextLine(); return nummernschild; } public Date zeitErkennen() { SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy, HH:mm"); String eingabe = in.nextLine(); Date zeit = null; try { zeit = sdf.parse(eingabe); } catch (ParseException e) { e.printStackTrace(); } return zeit; } public int autoParken(String nummernschild, Date einfahrtszeit) { Auto auto = new Auto(nummernschild, einfahrtszeit); for (Parkplatz platz : plaetze) { if (!platz.isSlotFree()) { platz.allocateSlot(auto); //Fahrzeug auf dem Platz speichern return platz.getPlatzNummer(); //Nummer des Platzes zurückgeben } } return -1; //kein freier Parkplatz vorhanden } public double parkhausVerlassen(String nummernschild, Date ausfahrtszeit) { double gebuehrInCent = 0.0; long secDiff = 0; for (int i = 0; i < anzahlParkplaetze; i++) { Auto auto = plaetze[i].welchesAuto(); if (plaetze[i] != null && auto != null && auto.getNummernschild().equals(nummernschild)) { //Suche, wo das Auto steht plaetze[i].platzFreigeben(auto); Date einfahrtszeit = auto.getEinfahrtszeit(); Date d1 = einfahrtszeit; Date d2 = ausfahrtszeit; secDiff = ((d2.getTime() - d1.getTime()) / 1000) - 900; System.out.println("Ihre kostenpflichtige Parkdauer in Sekunden beträgt: " + secDiff); gebuehrInCent = berechneGebuehr(secDiff); // Rabatt für E-Autos if (auto.getNummernschild().charAt(auto.getNummernschild().length() - 1) == 'E') { gebuehrInCent = gebuehrInCent * 0.8; } // Schulden aus der Vergangenheit hinzufügen, falls vorhanden if (schuldenListe.containsKey(nummernschild)) { gebuehrInCent += schuldenListe.get(nummernschild); schuldenListe.remove(nummernschild); // Alte Schulden löschen, da sie verrechnet werden } return gebuehrInCent / 100; // Gebühr in Euro zurückgeben } } return -1; // Auto nicht gefunden } public double berechneGebuehr(long zuZahlendeZeit) { double gebuehr = 0; long angebrocheneStunden; angebrocheneStunden = zuZahlendeZeit / 3600; gebuehr = angebrocheneStunden * 100; // Umrechnen in Cent return gebuehr; } // Methode, um die Schulden eines bestimmten Fahrzeugs zu prüfen public double getSchulden(String nummernschild) { return schuldenListe.getOrDefault(nummernschild, 0.0); } // Merke Schulden, wenn nicht gezahlt wird public void merkeSchulden(String nummernschild, double schulden) { double aktuelleSchulden = schuldenListe.getOrDefault(nummernschild, 0.0); schuldenListe.put(nummernschild, aktuelleSchulden + schulden); System.out.println("Schulden von " + (schulden / 100) + " Euro wurden für das Auto " + nummernschild + " gespeichert."); } }