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

View File

@ -7,6 +7,7 @@ import java.text.SimpleDateFormat;
import java.util.Date;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
class JTest_berechneParkgebuehren {
@ -18,8 +19,38 @@ class JTest_berechneParkgebuehren {
parkhaus = new Parkhaus();
sdf = new SimpleDateFormat("dd.MM.yyyy, HH:mm");
}
@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 {
String kennzeichen = "MA-SH 4077";
String einfahrt = "01.10.2024, 14:30";
@ -32,26 +63,33 @@ class JTest_berechneParkgebuehren {
// 16 Minuten => True
einfahrt = "01.10.2024, 14:30";
ausfahrt = "01.10.2024, 14:46";
parkhaus.einfahren(kennzeichen, einfahrt);
assertEquals(1,parkhaus.berechneParkgebuehren(kennzeichen, ausfahrt));
// 1 Stunde => True
einfahrt = "01.10.2024, 14:30";
ausfahrt = "01.10.2024, 15:30";
parkhaus.einfahren(kennzeichen, einfahrt);
assertEquals(1, parkhaus.berechneParkgebuehren(kennzeichen, ausfahrt));
// 2 Stunden => True
einfahrt = "01.10.2024, 14:00";
ausfahrt = "01.10.2024, 16:00";
parkhaus.einfahren(kennzeichen, einfahrt);
assertEquals(2, parkhaus.berechneParkgebuehren(kennzeichen, ausfahrt));
// Zwischen 20 bis 6 Uhr => True
// Zwischen 20 bis 6 Uhr => True
einfahrt = "01.10.2024, 22:00";
ausfahrt = "02.10.2024, 04:00";
parkhaus.einfahren(kennzeichen, einfahrt);
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 {
var sdf = new SimpleDateFormat("dd.MM.yyyy, HH:mm");
Date d1 = sdf.parse("01.10.2024, 14:00");
Date d2 = sdf.parse("01.10.2024, 15:30");
System.out.println( d1.getHours());
new TextUI();
}
}

View File

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