diff --git a/src/main/java/de/deversmann/Auto.java b/src/main/java/de/deversmann/Auto.java
index 4d4bcde..76b2005 100644
--- a/src/main/java/de/deversmann/Auto.java
+++ b/src/main/java/de/deversmann/Auto.java
@@ -1,50 +1,46 @@
package de.deversmann;
-import java.util.Calendar;
-import java.util.Date;
+
public class Auto {
+
public Auto(String kennzeichen) {
this.kennzeichen = kennzeichen;
- this.einfahrtZeit = new Date();
- this.bezahlt = false;
- this.ausfahrtZeit = new Date();
- this.bezahlZeit = new Date();
+ this.einfahrtZeit = einfahrtZeit;
+ this.bezahlt = bezahlt;
+ this.ausfahrtZeit = ausfahrtZeit;
+ this.eAuto = iseAuto();
}
- private Calendar calendar = Calendar.getInstance();
+
private final String kennzeichen;
- private Date einfahrtZeit;
- private Date bezahlZeit;
- private Date ausfahrtZeit;
+ private String einfahrtZeit;
+
+ private String ausfahrtZeit;
private boolean bezahlt;
+ private boolean eAuto;
public String getKennzeichen() {
return kennzeichen;
}
- public Date getEinfahrtZeit() {
+ public void setEinfahrtZeit(String einfahrtZeit) {
+ this.einfahrtZeit = einfahrtZeit;
+ }
+ public String getEinfahrtZeit() {
return einfahrtZeit;
}
- public void setEinfahrtZeit() {
- this.einfahrtZeit = calendar.getTime() ;
- }
- public Date getBezahlZeit() {
- return bezahlZeit;
- }
- public void setBezahlZeit(Date bezahlZeit) {
- this.bezahlZeit = bezahlZeit;
- }
- public Date getAusfahrtZeit() {
+
+ public String getAusfahrtZeit() {
return ausfahrtZeit;
}
- public void setAusfahrtZeit(Date ausfahrtZeit) {
+ public void setAusfahrtZeit(String ausfahrtZeit) {
this.ausfahrtZeit = ausfahrtZeit;
}
@@ -55,4 +51,12 @@ public class Auto {
public void setBezahlt(boolean bezahlt) {
this.bezahlt = bezahlt;
}
+
+ public boolean iseAuto() {
+
+ return eAuto = kennzeichen.endsWith("E");
+
+ }
+
+
}
diff --git a/src/main/java/de/deversmann/Main.java b/src/main/java/de/deversmann/Main.java
index 41b8e58..8daaf46 100644
--- a/src/main/java/de/deversmann/Main.java
+++ b/src/main/java/de/deversmann/Main.java
@@ -1,20 +1,87 @@
package de.deversmann;
+import java.text.ParseException;
import java.text.SimpleDateFormat;
-import java.util.Date;
+import java.time.Duration;
+import java.time.LocalTime;
+import java.util.*;
-//TIP To Run code, press or
-// click the icon in the gutter.
public class Main {
- public static void main(String[] args) {
-
+ public static void main(String[] args) throws ParseException {
Parkhaus parkhaus = new Parkhaus();
- Auto auto1 = new Auto("D-DL-2023");
- System.out.println(parkhaus.isGeöffnet());
- System.out.println(auto1.getEinfahrtZeit());
- var sdf = new SimpleDateFormat("dd.MM.yyyy, HH:mm");
- System.out.println(sdf.format(new Date()));
+ HashMap autos = new HashMap<>();
+ boolean schleife = true;
+ Scanner scanner = new Scanner(System.in);
+ var sdf = new SimpleDateFormat("dd.MM.yyyy, HH:mm");
+ sdf.setLenient(false);
+
+ Auto test = new Auto("123E");
+ test.setEinfahrtZeit("10.10.2000, 05:00");
+ test.setAusfahrtZeit("11.10.2000, 13:00");
+ System.out.println(parkhaus.berechnePreis(test));
+
+ while (schleife) {
+
+
+ System.out.println("Willkommen im Parkhaus Eversmann");
+
+ System.out.println("Bitte wählen Sie durch Eingabe der Zahl aus:");
+ System.out.println("1. Einfahrt");
+ System.out.println("2. Kosten prüfen");
+ System.out.println("3. Ausfahren");
+ System.out.println("4. Bezahlen und ausfahren");
+ System.out.println("5. Geparkte Autos anzeigen");
+ System.out.println("6. Beenden");
+ int auswahl = Integer.parseInt(scanner.nextLine());
+
+ if (auswahl == 1) {
+ System.out.println("Bitte geben Sie ihr Kennzeichen ein: Format (MA-DL 1234) oder (MA-DL 1234E)");
+ String kennzeichen = scanner.nextLine();
+ System.out.println("Bitte geben Sie ihre Einfahrtszeit ein: Format (dd.MM.yyyy, HH:mm) (12.12.2023, 10:12)");
+ String einfahrtsZeit = scanner.nextLine();
+ /*if (autos.containsKey(kennzeichen)) {
+
+ }*/
+ autos.put(kennzeichen, new Auto(kennzeichen));
+ autos.get(kennzeichen).setEinfahrtZeit(einfahrtsZeit);
+ } else if (auswahl == 2) {
+
+ Auto gewünschtesAuto = parkhaus.getAutoFromKennzeichen(autos);
+
+ System.out.println("Der Preis für das eingegebene Kennzeichen \n" + gewünschtesAuto.getKennzeichen() + "\n" + "ist " + parkhaus.berechnePreis(gewünschtesAuto) + "€");
+
+ } else if (auswahl == 3) {
+ parkhaus.ausfahren(autos);
+ System.out.println("Vielen Dank für Ihr Vertrauen");
+ } else if (auswahl == 4) {
+
+ Auto ausgefahrenensAuto = parkhaus.ausfahren(autos);
+ parkhaus.bezahlePreisFürKennzeichen(ausgefahrenensAuto);
+ }
+ else if (auswahl == 5) {
+
+ for (Auto auto : autos.values()) {
+ if (auto.getAusfahrtZeit().isBlank()){
+ System.out.println(auto);
+ }
+ }
+
+ }
+ else if (auswahl == 6) {
+ schleife = false;
+ System.out.println("Auf Wiedersehen");
+ }
+
+ if (schleife){
+ System.out.println("Weitermachen?");
+ String weiter = scanner.nextLine();
+ if (weiter.equals("")) {
+ schleife = false;
+ }
+ }
+
+ }
}
}
\ No newline at end of file
diff --git a/src/main/java/de/deversmann/Parkhaus.java b/src/main/java/de/deversmann/Parkhaus.java
index 3ddcee9..2e298d8 100644
--- a/src/main/java/de/deversmann/Parkhaus.java
+++ b/src/main/java/de/deversmann/Parkhaus.java
@@ -4,17 +4,19 @@ package de.deversmann;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.Duration;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Date;
+import java.util.*;
public class Parkhaus {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd.MM.yyyy, HH:mm");
+ Scanner scanner = new Scanner(System.in);
private boolean geöffnet;
private int anzahlParkplätze;
-
- private int parkdauer;
+ private final double ANGEFANGENE_STUNDE_PREIS = 1.00;
+ private final double TAGES_MAX_PREIS = 15.00;
+ private final double NACHT_MAX_PREIS = 5.00;
+ private final double E_AUTO_RABATT = 0.8;
+ private final int FREIE_MINUTEN = 15;
private int belegteParkplätze;
private double kosten;
@@ -74,23 +76,97 @@ public class Parkhaus {
}
- public ArrayList berechneParkdauer(String einfahrtZeit, String ausfahrZeit){
- String dauer = "";
+ public ArrayList berechneParkdauer(String einfahrtZeit, String ausfahrZeit) {
ArrayList parkdauer = new ArrayList();
+ simpleDateFormat.setLenient(false);
try {
Date einfahrtZeitDate = simpleDateFormat.parse(einfahrtZeit);
Date ausfahrZeitDate = simpleDateFormat.parse(ausfahrZeit);
- Duration duration = Duration.ofMillis(Math.abs(ausfahrZeitDate.getTime()-einfahrtZeitDate.getTime()));
+ Duration duration = Duration.ofMillis(Math.abs(ausfahrZeitDate.getTime() - einfahrtZeitDate.getTime()));
long days = duration.toDays();
long hours = duration.toHours() % 24;
long minutes = duration.toMinutes() % 60;
- dauer = "Parkdauer:" + days + " Tage " + hours + " Stunden " + minutes + " Minuten ";
- Collections.addAll(parkdauer,days,hours,minutes);
+
+ Collections.addAll(parkdauer, days, hours, minutes);
} catch (ParseException e) {
- System.out.println("Fehler beim Parsen der Daten"+ e.getMessage());
+ System.out.println("Fehler beim Parsen der Daten" + e.getMessage());
}
return parkdauer;
}
+
+ public double berechnePreis(Auto auto) throws ParseException {
+ double preis = 0;
+ simpleDateFormat.setLenient(false);
+ Date einfahrtZeitDate = simpleDateFormat.parse(auto.getEinfahrtZeit());
+ Date ausfahrtZeitDate = simpleDateFormat.parse(auto.getAusfahrtZeit());
+ int einfahrtStunde = einfahrtZeitDate.getHours();
+ int ausfahrtStunde = ausfahrtZeitDate.getHours();
+ long parkdauerInMinuten = (ausfahrtZeitDate.getTime() - einfahrtZeitDate.getTime()) / (60 * 1000);
+
+ if (parkdauerInMinuten < FREIE_MINUTEN) {
+ return 0;
+ }
+
+ long kostenpflichtigeMinuten = parkdauerInMinuten - FREIE_MINUTEN;
+ double kostenPflichtigeStunden = Math.ceil(kostenpflichtigeMinuten / 60);
+
+ long parkdauerInTagen = (long) Math.ceil(parkdauerInMinuten / (60.0 * 24));
+
+ if (parkdauerInTagen >= 1) {
+ long kostenpflichtigeGanzeTage = (long) Math.floor(kostenPflichtigeStunden / 24);
+ preis = kostenpflichtigeGanzeTage * TAGES_MAX_PREIS;
+ long übrigenStunden = (long) (kostenPflichtigeStunden - kostenpflichtigeGanzeTage * 24);
+ if (übrigenStunden <= 5) {
+ preis = preis + (übrigenStunden * ANGEFANGENE_STUNDE_PREIS);
+ } else if (einfahrtStunde >= 20) {
+ long stundenImAltenTag = (einfahrtStunde + übrigenStunden) - 24;
+ long stundenImNeuenTag = übrigenStunden - stundenImAltenTag;
+ if (stundenImNeuenTag <= 5) {
+ preis += 5;
+ } else {
+ preis += 5 + stundenImNeuenTag - 5;
+ }
+
+ } else if (einfahrtStunde <= 5) {
+ long angebrocheneStundenAusserhalbDerNacht = (long) 6 - einfahrtStunde;
+ long übrigeStundenAusserhalb = (long) Math.abs(einfahrtStunde - 6);
+ if (angebrocheneStundenAusserhalbDerNacht == 6) {
+ preis += 5;
+ } else {
+ preis += 5 + übrigeStundenAusserhalb;
+ }
+ }
+ }
+
+ if (auto.iseAuto()) {
+ preis = preis * E_AUTO_RABATT;
+ }
+
+
+ return preis;
+ }
+
+ public Auto getAutoFromKennzeichen(HashMap autos) {
+ System.out.println("Bitte gib dein Kennzeichen ein: Format (MA-DL 1234) oder (MA-DL 1234E)");
+ String kennzeichen = scanner.nextLine();
+ Auto gewünschtesAuto = autos.get(kennzeichen);
+ return gewünschtesAuto;
+ }
+
+ public Auto ausfahren(HashMap autos) {
+
+ Auto ausfahrendesAuto = getAutoFromKennzeichen(autos);
+ System.out.println("Bitte geben Sie ihre Ausfahrtzeit an: Format (dd.MM.yyyy, HH:mm)");
+ String ausfahrtZeit = scanner.nextLine();
+ ausfahrendesAuto.setAusfahrtZeit(ausfahrtZeit);
+ return ausfahrendesAuto;
+
+ }
+
+ public Auto bezahlePreisFürKennzeichen(Auto zuBezahlendesAuto) {
+ zuBezahlendesAuto.setBezahlt(true);
+ return zuBezahlendesAuto;
+ }
}