Anpassen der Logik, die Berechnung des Preises ist wirklich grauenhaft, wenn man es richtig machen möchte

main
dustineversmann 2024-10-07 23:36:50 +02:00
parent b1aca00ebd
commit 07a48dba0d
3 changed files with 190 additions and 43 deletions

View File

@ -1,50 +1,46 @@
package de.deversmann; package de.deversmann;
import java.util.Calendar;
import java.util.Date;
public class Auto { public class Auto {
public Auto(String kennzeichen) { public Auto(String kennzeichen) {
this.kennzeichen = kennzeichen; this.kennzeichen = kennzeichen;
this.einfahrtZeit = new Date(); this.einfahrtZeit = einfahrtZeit;
this.bezahlt = false; this.bezahlt = bezahlt;
this.ausfahrtZeit = new Date(); this.ausfahrtZeit = ausfahrtZeit;
this.bezahlZeit = new Date(); this.eAuto = iseAuto();
} }
private Calendar calendar = Calendar.getInstance();
private final String kennzeichen; private final String kennzeichen;
private Date einfahrtZeit; private String einfahrtZeit;
private Date bezahlZeit;
private Date ausfahrtZeit; private String ausfahrtZeit;
private boolean bezahlt; private boolean bezahlt;
private boolean eAuto;
public String getKennzeichen() { public String getKennzeichen() {
return kennzeichen; return kennzeichen;
} }
public Date getEinfahrtZeit() { public void setEinfahrtZeit(String einfahrtZeit) {
this.einfahrtZeit = einfahrtZeit;
}
public String getEinfahrtZeit() {
return einfahrtZeit; 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; return ausfahrtZeit;
} }
public void setAusfahrtZeit(Date ausfahrtZeit) { public void setAusfahrtZeit(String ausfahrtZeit) {
this.ausfahrtZeit = ausfahrtZeit; this.ausfahrtZeit = ausfahrtZeit;
} }
@ -55,4 +51,12 @@ public class Auto {
public void setBezahlt(boolean bezahlt) { public void setBezahlt(boolean bezahlt) {
this.bezahlt = bezahlt; this.bezahlt = bezahlt;
} }
public boolean iseAuto() {
return eAuto = kennzeichen.endsWith("E");
}
} }

View File

@ -1,20 +1,87 @@
package de.deversmann; package de.deversmann;
import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Date; import java.time.Duration;
import java.time.LocalTime;
import java.util.*;
//TIP To <b>Run</b> code, press <shortcut actionId="Run"/> or
// click the <icon src="AllIcons.Actions.Execute"/> icon in the gutter.
public class Main { public class Main {
public static void main(String[] args) { public static void main(String[] args) throws ParseException {
Parkhaus parkhaus = new Parkhaus(); Parkhaus parkhaus = new Parkhaus();
Auto auto1 = new Auto("D-DL-2023"); HashMap<String, Auto> autos = new HashMap<>();
System.out.println(parkhaus.isGeöffnet()); boolean schleife = true;
System.out.println(auto1.getEinfahrtZeit()); Scanner scanner = new Scanner(System.in);
var sdf = new SimpleDateFormat("dd.MM.yyyy, HH:mm");
System.out.println(sdf.format(new Date()));
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;
}
}
}
} }
} }

View File

@ -4,17 +4,19 @@ package de.deversmann;
import java.text.ParseException; import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.time.Duration; import java.time.Duration;
import java.util.ArrayList; import java.util.*;
import java.util.Collections;
import java.util.Date;
public class Parkhaus { public class Parkhaus {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd.MM.yyyy, HH:mm"); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd.MM.yyyy, HH:mm");
Scanner scanner = new Scanner(System.in);
private boolean geöffnet; private boolean geöffnet;
private int anzahlParkplätze; private int anzahlParkplätze;
private final double ANGEFANGENE_STUNDE_PREIS = 1.00;
private int parkdauer; 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 int belegteParkplätze;
private double kosten; private double kosten;
@ -74,23 +76,97 @@ public class Parkhaus {
} }
public ArrayList berechneParkdauer(String einfahrtZeit, String ausfahrZeit){ public ArrayList berechneParkdauer(String einfahrtZeit, String ausfahrZeit) {
String dauer = "";
ArrayList parkdauer = new ArrayList(); ArrayList parkdauer = new ArrayList();
simpleDateFormat.setLenient(false);
try { try {
Date einfahrtZeitDate = simpleDateFormat.parse(einfahrtZeit); Date einfahrtZeitDate = simpleDateFormat.parse(einfahrtZeit);
Date ausfahrZeitDate = simpleDateFormat.parse(ausfahrZeit); 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 days = duration.toDays();
long hours = duration.toHours() % 24; long hours = duration.toHours() % 24;
long minutes = duration.toMinutes() % 60; 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) { } 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; 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<String, Auto> 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<String, Auto> 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;
}
} }