berechneParkgebuehren methode mit E-Autos und Testfällen für normale

Autos und E-Autos
main
3009594 2024-10-04 21:28:11 +02:00
parent 8be136b83a
commit 1a3a3b7730
4 changed files with 98 additions and 60 deletions

View File

@ -17,12 +17,12 @@ public class Fahrzeug {
private Date einfahrt; private Date einfahrt;
private Date ausfahrt; private Date ausfahrt;
private boolean bezahlt; private boolean bezahlt;
private int betrag; private double betrag;
Fahrzeug() { Fahrzeug() {
this.kennzeichen = kennzeichenzufaelliggenerieren.kennzeichengenerieren(); this.kennzeichen = kennzeichenzufaelliggenerieren.kennzeichengenerieren();
this.einfahrt = new Date(); this.einfahrt = new Date();
this.betrag = 0; this.betrag = 0.0;
this.bezahlt = false; this.bezahlt = false;
} }
@ -30,7 +30,7 @@ public class Fahrzeug {
Fahrzeug(String kennzeichen, Date einfahrt) { Fahrzeug(String kennzeichen, Date einfahrt) {
this.kennzeichen = kennzeichen; this.kennzeichen = kennzeichen;
this.einfahrt = einfahrt; this.einfahrt = einfahrt;
this.betrag = 0; this.betrag = 0.0;
this.bezahlt = false; this.bezahlt = false;
} }
@ -64,11 +64,11 @@ public class Fahrzeug {
this.bezahlt = bezahlt; this.bezahlt = bezahlt;
} }
public int getBetrag() { public double getBetrag() {
return betrag; return betrag;
} }
public void setBetrag(int betrag) { public void setBetrag(double betrag) {
this.betrag = betrag; this.betrag = betrag;
} }

View File

@ -7,6 +7,7 @@ import java.text.SimpleDateFormat;
import java.util.Date; import java.util.Date;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
class JTest_berechneParkgebuehren { class JTest_berechneParkgebuehren {
@ -20,6 +21,36 @@ class JTest_berechneParkgebuehren {
} }
@Test @Test
public void test_EautoBetrag() throws ParseException, AutoNichtGefundenException {
String kennzeichen = "MA-SH 4077E";
String einfahrt = "01.10.2024, 14:30";
String ausfahrt = "01.10.2024, 14:45";
parkhaus.einfahren(kennzeichen, einfahrt);
// 15 Minuten => True
assertEquals(0,parkhaus.berechneParkgebuehren(kennzeichen, ausfahrt));
// 16 Minuten => True
einfahrt = "01.10.2024, 14:30";
ausfahrt = "01.10.2024, 14:50";
parkhaus.einfahren(kennzeichen, einfahrt);
assertEquals(0.8,parkhaus.berechneParkgebuehren(kennzeichen, ausfahrt));
// 2 Stunde => True
einfahrt = "01.10.2024, 14:00";
ausfahrt = "01.10.2024, 16:00";
parkhaus.einfahren(kennzeichen, einfahrt);
assertEquals(1.6, parkhaus.berechneParkgebuehren(kennzeichen, ausfahrt));
// Zwischen 20 bis 6 Uhr => True
einfahrt = "01.10.2024, 22:00";
ausfahrt = "02.10.2024, 04:00";
parkhaus.einfahren(kennzeichen, einfahrt);
assertEquals(4, parkhaus.berechneParkgebuehren(kennzeichen, ausfahrt));
}
@Disabled
public void test_berechneParkgebuehren() throws ParseException, AutoNichtGefundenException { public void test_berechneParkgebuehren() throws ParseException, AutoNichtGefundenException {
String kennzeichen = "MA-SH 4077"; String kennzeichen = "MA-SH 4077";
String einfahrt = "01.10.2024, 14:30"; String einfahrt = "01.10.2024, 14:30";
@ -32,26 +63,33 @@ class JTest_berechneParkgebuehren {
// 16 Minuten => True // 16 Minuten => True
einfahrt = "01.10.2024, 14:30"; einfahrt = "01.10.2024, 14:30";
ausfahrt = "01.10.2024, 14:46"; ausfahrt = "01.10.2024, 14:46";
parkhaus.einfahren(kennzeichen, einfahrt);
assertEquals(1,parkhaus.berechneParkgebuehren(kennzeichen, ausfahrt)); assertEquals(1,parkhaus.berechneParkgebuehren(kennzeichen, ausfahrt));
// 1 Stunde => True // 1 Stunde => True
einfahrt = "01.10.2024, 14:30"; einfahrt = "01.10.2024, 14:30";
ausfahrt = "01.10.2024, 15:30"; ausfahrt = "01.10.2024, 15:30";
parkhaus.einfahren(kennzeichen, einfahrt);
assertEquals(1, parkhaus.berechneParkgebuehren(kennzeichen, ausfahrt)); assertEquals(1, parkhaus.berechneParkgebuehren(kennzeichen, ausfahrt));
// 2 Stunden => True // 2 Stunden => True
einfahrt = "01.10.2024, 14:00"; einfahrt = "01.10.2024, 14:00";
ausfahrt = "01.10.2024, 16:00"; ausfahrt = "01.10.2024, 16:00";
parkhaus.einfahren(kennzeichen, einfahrt);
assertEquals(2, parkhaus.berechneParkgebuehren(kennzeichen, ausfahrt)); assertEquals(2, parkhaus.berechneParkgebuehren(kennzeichen, ausfahrt));
// Zwischen 20 bis 6 Uhr => True // Zwischen 20 bis 6 Uhr => True
einfahrt = "01.10.2024, 22:00"; einfahrt = "01.10.2024, 22:00";
ausfahrt = "02.10.2024, 04:00"; ausfahrt = "02.10.2024, 04:00";
parkhaus.einfahren(kennzeichen, einfahrt);
assertEquals(5, parkhaus.berechneParkgebuehren(kennzeichen, ausfahrt)); assertEquals(5, parkhaus.berechneParkgebuehren(kennzeichen, ausfahrt));
// 24 Stunden
einfahrt = "01.10.2024, 14:00";
ausfahrt = "02.10.2024, 14:00";
parkhaus.einfahren(kennzeichen, einfahrt);
assertEquals(15, parkhaus.berechneParkgebuehren(kennzeichen, ausfahrt));
} }

View File

@ -7,12 +7,7 @@ public class Main {
public static void main(String[] args) throws ParseException, AutoNichtGefundenException { public static void main(String[] args) throws ParseException, AutoNichtGefundenException {
var sdf = new SimpleDateFormat("dd.MM.yyyy, HH:mm"); new TextUI();
Date d1 = sdf.parse("01.10.2024, 14:00");
Date d2 = sdf.parse("01.10.2024, 15:30");
System.out.println( d1.getHours());
} }
} }

View File

@ -45,58 +45,63 @@ public class Parkhaus {
public int berechneParkgebuehren(String kennzeichen, String ausfahrtzeit) throws AutoNichtGefundenException, ParseException { public double berechneParkgebuehren(String kennzeichen, String ausfahrtzeit)
if (kennzeichen.isEmpty()) { throws AutoNichtGefundenException, ParseException {
throw new AutoNichtGefundenException("Sie müssen bitte das Kennzeichen Ihres Autos eingeben."); if (kennzeichen.isEmpty())
} throw new AutoNichtGefundenException("Sie müssen bitte das Kennzeichen Ihres Autos eingeben.");
Fahrzeug fahrzeug = findeFahrzeug(kennzeichen); boolean isEauto = false;
Date einfahrt = fahrzeug.getEinfahrt(); if (kennzeichen.endsWith("E"))
Date ausfahrt; isEauto = true;
if (ausfahrtzeit.isEmpty()) { Fahrzeug fahrzeug = findeFahrzeug(kennzeichen);
String aktuelleZeitString = sdf.format(new Date()); Date einfahrt = fahrzeug.getEinfahrt();
ausfahrt = sdf.parse(aktuelleZeitString); Date ausfahrt;
} else {
ausfahrt = sdf.parse(ausfahrtzeit);
}
double inMinuten = (ausfahrt.getTime() - einfahrt.getTime()) / 1000.0 / 60.0; if (ausfahrtzeit.isEmpty()) {
int inStunden = (int) Math.ceil(inMinuten / 60.0); String aktuelleZeitString = sdf.format(new Date());
int maxNachtBetrag = 5; ausfahrt = sdf.parse(aktuelleZeitString);
int maxTagBetrag = 15; } else
int betrag = 0; ausfahrt = sdf.parse(ausfahrtzeit);
// Erstellung von Calendar-Objekten für Einfahrt und Ausfahrt double inMinuten = (ausfahrt.getTime() - einfahrt.getTime()) / 1000.0 / 60.0;
Calendar calEinfahrt = Calendar.getInstance(); int inStunden = (int) Math.ceil(inMinuten / 60.0);
calEinfahrt.setTime(einfahrt); int maxNachtBetrag = 5;
int maxTagBetrag = 15;
double betrag = 0;
Calendar calAusfahrt = Calendar.getInstance(); // Erstellung von Calendar-Objekten für Einfahrt und Ausfahrt
calAusfahrt.setTime(ausfahrt); Calendar calEinfahrt = Calendar.getInstance();
calEinfahrt.setTime(einfahrt);
int einfahrtStunde = calEinfahrt.get(Calendar.HOUR_OF_DAY); Calendar calAusfahrt = Calendar.getInstance();
int ausfahrtStunde = calAusfahrt.get(Calendar.HOUR_OF_DAY); calAusfahrt.setTime(ausfahrt);
if (inMinuten <= 15) int einfahrtStunde = calEinfahrt.get(Calendar.HOUR_OF_DAY);
betrag = 0; int ausfahrtStunde = calAusfahrt.get(Calendar.HOUR_OF_DAY);
else if ((einfahrtStunde < 6 || einfahrtStunde >= 20) || (ausfahrtStunde < 6 || ausfahrtStunde >= 20)) { if (inMinuten <= 15)
betrag = (inStunden <= maxNachtBetrag) ? inStunden : maxNachtBetrag; betrag = 0;
System.out.println(betrag);
}
else if ((einfahrtStunde < 6 || einfahrtStunde >= 20) || (ausfahrtStunde < 6 || ausfahrtStunde >= 20))
betrag = (inStunden <= maxNachtBetrag) ? inStunden : maxNachtBetrag;
else { else {
betrag = inStunden; betrag = inStunden;
if (betrag > maxTagBetrag) { if (betrag > maxTagBetrag) {
betrag = maxTagBetrag; betrag = maxTagBetrag;
} }
} }
if (isEauto)
betrag -= rabattFuerEauto(betrag);
fahrzeug.setBetrag(betrag); fahrzeug.setBetrag(betrag);
return fahrzeug.getBetrag(); return fahrzeug.getBetrag();
} }
private double rabattFuerEauto(double betrag) {
return betrag * 0.2;
}
private Fahrzeug findeFahrzeug(String kennzeichen) throws AutoNichtGefundenException { private Fahrzeug findeFahrzeug(String kennzeichen) throws AutoNichtGefundenException {