berechneParkgebuehren methode mit E-Autos und Testfällen für normale
Autos und E-Autosmain
parent
8be136b83a
commit
1a3a3b7730
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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 {
|
||||||
|
@ -18,8 +19,38 @@ class JTest_berechneParkgebuehren {
|
||||||
parkhaus = new Parkhaus();
|
parkhaus = new Parkhaus();
|
||||||
sdf = new SimpleDateFormat("dd.MM.yyyy, HH:mm");
|
sdf = new SimpleDateFormat("dd.MM.yyyy, HH:mm");
|
||||||
}
|
}
|
||||||
|
|
||||||
@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));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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.");
|
||||||
|
|
||||||
|
boolean isEauto = false;
|
||||||
|
if (kennzeichen.endsWith("E"))
|
||||||
|
isEauto = true;
|
||||||
|
|
||||||
|
Fahrzeug fahrzeug = findeFahrzeug(kennzeichen);
|
||||||
|
Date einfahrt = fahrzeug.getEinfahrt();
|
||||||
|
Date ausfahrt;
|
||||||
|
|
||||||
Fahrzeug fahrzeug = findeFahrzeug(kennzeichen);
|
if (ausfahrtzeit.isEmpty()) {
|
||||||
Date einfahrt = fahrzeug.getEinfahrt();
|
String aktuelleZeitString = sdf.format(new Date());
|
||||||
Date ausfahrt;
|
ausfahrt = sdf.parse(aktuelleZeitString);
|
||||||
|
} else
|
||||||
|
ausfahrt = sdf.parse(ausfahrtzeit);
|
||||||
|
|
||||||
if (ausfahrtzeit.isEmpty()) {
|
double inMinuten = (ausfahrt.getTime() - einfahrt.getTime()) / 1000.0 / 60.0;
|
||||||
String aktuelleZeitString = sdf.format(new Date());
|
int inStunden = (int) Math.ceil(inMinuten / 60.0);
|
||||||
ausfahrt = sdf.parse(aktuelleZeitString);
|
int maxNachtBetrag = 5;
|
||||||
} else {
|
int maxTagBetrag = 15;
|
||||||
ausfahrt = sdf.parse(ausfahrtzeit);
|
double betrag = 0;
|
||||||
}
|
|
||||||
|
|
||||||
double inMinuten = (ausfahrt.getTime() - einfahrt.getTime()) / 1000.0 / 60.0;
|
// Erstellung von Calendar-Objekten für Einfahrt und Ausfahrt
|
||||||
int inStunden = (int) Math.ceil(inMinuten / 60.0);
|
Calendar calEinfahrt = Calendar.getInstance();
|
||||||
int maxNachtBetrag = 5;
|
calEinfahrt.setTime(einfahrt);
|
||||||
int maxTagBetrag = 15;
|
|
||||||
int betrag = 0;
|
|
||||||
|
|
||||||
// Erstellung von Calendar-Objekten für Einfahrt und Ausfahrt
|
Calendar calAusfahrt = Calendar.getInstance();
|
||||||
Calendar calEinfahrt = Calendar.getInstance();
|
calAusfahrt.setTime(ausfahrt);
|
||||||
calEinfahrt.setTime(einfahrt);
|
|
||||||
|
|
||||||
Calendar calAusfahrt = Calendar.getInstance();
|
int einfahrtStunde = calEinfahrt.get(Calendar.HOUR_OF_DAY);
|
||||||
calAusfahrt.setTime(ausfahrt);
|
int ausfahrtStunde = calAusfahrt.get(Calendar.HOUR_OF_DAY);
|
||||||
|
|
||||||
int einfahrtStunde = calEinfahrt.get(Calendar.HOUR_OF_DAY);
|
if (inMinuten <= 15)
|
||||||
int ausfahrtStunde = calAusfahrt.get(Calendar.HOUR_OF_DAY);
|
betrag = 0;
|
||||||
|
|
||||||
if (inMinuten <= 15)
|
else if ((einfahrtStunde < 6 || einfahrtStunde >= 20) || (ausfahrtStunde < 6 || ausfahrtStunde >= 20))
|
||||||
betrag = 0;
|
betrag = (inStunden <= maxNachtBetrag) ? inStunden : maxNachtBetrag;
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fahrzeug.setBetrag(betrag);
|
else {
|
||||||
return fahrzeug.getBetrag();
|
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 {
|
private Fahrzeug findeFahrzeug(String kennzeichen) throws AutoNichtGefundenException {
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue