Verbesserungen
parent
176f7ea3f4
commit
ce1659df06
|
@ -32,7 +32,7 @@ public class Parkhaus {
|
|||
|
||||
// Falls angegebenen PKW sich schon im Parkhaus befindet oder schonmal da war und Schulden hat
|
||||
if (existierenderPKW != null) {
|
||||
System.out.println("Der PKW mit dem Kennzeichen " + kennzeichen + " hat noch Schulden in Höhe von " + existierenderPKW.getGebuehrenkonto() + " Cent.");
|
||||
System.out.println("Der PKW mit dem Kennzeichen " + kennzeichen + " hat noch Schulden in Höhe von " + (existierenderPKW.getGebuehrenkonto() /100) + " Euro.");
|
||||
this.kapazitaetVerfuegbar--;
|
||||
this.belegt++;
|
||||
} else {
|
||||
|
@ -45,7 +45,6 @@ public class Parkhaus {
|
|||
this.belegt++;
|
||||
System.out.println("Neuer PKW mit Kennzeichen " + kennzeichen + " eingefahren. Schulden: " + schulden + " Cent.");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -98,8 +97,12 @@ public class Parkhaus {
|
|||
// Falls Gebühren vorhanden sind
|
||||
if (gesamtGebuehren > 0) {
|
||||
|
||||
System.out.println("Parkdauer in Minuten: " + berechneParkdauer(kennzeichen, ausfahrtZeit));
|
||||
System.out.println("Parkgebühren in Cent: " + zuEntfernen.getGebuehrenkonto());
|
||||
// Umwandlung von Minuten in Stunden und Minuten
|
||||
long parkdauerMinuten = berechneParkdauer(kennzeichen,ausfahrtZeit);
|
||||
long parkdauerStunden = parkdauerMinuten / 60;
|
||||
long parkdauerVerbleibendeMinuten = parkdauerMinuten % 60;
|
||||
System.out.println("Parkdauer: " + parkdauerStunden + " Stunden und " + parkdauerVerbleibendeMinuten + " Minuten.");
|
||||
System.out.println("Parkgebühren: " + (zuEntfernen.getGebuehrenkonto() / 100.0) + " Euro");
|
||||
|
||||
// Kreditkartenvalidierung vor Ausfahrt
|
||||
|
||||
|
@ -115,7 +118,7 @@ public class Parkhaus {
|
|||
System.out.println("PKW mit Kennzeichen " + kennzeichen + " hat die Gebühren bezahlt und darf rausfahren.\n");
|
||||
} else {
|
||||
System.out.println("Ungültige Kreditkartennummer. Zahlung fehlgeschlagen.");
|
||||
System.out.println("Offenes Gebührenkonto: " + zuEntfernen.getGebuehrenkonto());
|
||||
System.out.println("Offenes Gebührenkonto: " + (zuEntfernen.getGebuehrenkonto() / 100.0) + " Euro");
|
||||
}
|
||||
} else {
|
||||
// Gebührenfrei (unter 15 Minuten oder andere Ausnahme)
|
||||
|
@ -135,7 +138,6 @@ public class Parkhaus {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
public long berechneParkdauer(String kennzeichen, Date ausfahrt) {
|
||||
long minDiff = 0;
|
||||
|
||||
|
@ -146,11 +148,10 @@ public class Parkhaus {
|
|||
|
||||
|
||||
// Parkdauer in Minuten berechnen (Differenz zwischen Ausfahrt und Einfahrt)
|
||||
minDiff = ((ausfahrt.getTime() - einfahrt.getTime())+1) / 60000;
|
||||
minDiff = ((ausfahrt.getTime() - einfahrt.getTime())) / 60000;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return minDiff;
|
||||
}
|
||||
|
||||
|
@ -160,23 +161,18 @@ public class Parkhaus {
|
|||
|
||||
// Falls die Parkdauer 15 Minuten oder weniger beträgt, ist das Parken kostenlos
|
||||
if (parkdauer <= 15) {
|
||||
parkdauer = 0;
|
||||
gebuehr = 0;
|
||||
return 0; //Parken ist kostenlos
|
||||
}
|
||||
|
||||
// Parkdauer nach den 15 Minuten
|
||||
long parkdauerOhneFreiminuten = parkdauer - 15;
|
||||
|
||||
// Tageslimit: Maximal 15 Euro pro Tag
|
||||
if (parkdauerOhneFreiminuten == 1440) {
|
||||
gebuehr = 1500;
|
||||
parkdauerOhneFreiminuten = 0;
|
||||
}
|
||||
|
||||
// 1 Euro pro angefangene Stunde
|
||||
if (parkdauerOhneFreiminuten > 0 && parkdauerOhneFreiminuten < 1440) {
|
||||
// Gebühren für die restliche Zeit unter 24 Stunden, wenn vorhanden
|
||||
if (parkdauerOhneFreiminuten > 0) {
|
||||
// Berechnung der Gebühren für die restlichen Minuten nach den vollen Tagen
|
||||
while (parkdauerOhneFreiminuten > 0) {
|
||||
gebuehr += 100;
|
||||
gebuehr += 100; // 1 Euro pro angefangene Stunde
|
||||
parkdauerOhneFreiminuten -= 60;
|
||||
}
|
||||
}
|
||||
|
@ -184,6 +180,11 @@ public class Parkhaus {
|
|||
// Maximale Gebühren in der Nacht von 20 Uhr bis 6 Uhr
|
||||
gebuehr = berechneNachttarif(kennzeichen, gebuehr, ausfahrt);
|
||||
|
||||
// Hier wird die Gebühr auf maximal 15 Euro (1500 Cent) für den Tag gedeckelt
|
||||
if (gebuehr > 1500) {
|
||||
gebuehr = 1500; // Maximal 15 Euro pro Tag
|
||||
}
|
||||
|
||||
// Prüfe, ob es sich um ein E-Auto handelt (Kennzeichen endet mit "E")
|
||||
if (kennzeichen.endsWith("E")) {
|
||||
gebuehr *= 0.8; // 20% Rabatt für E-Autos
|
||||
|
@ -241,41 +242,53 @@ public class Parkhaus {
|
|||
|
||||
// Methode zur Berechnung der Sonderregel für in der Nacht von 20 Uhr bis 6 Uhr
|
||||
private double berechneNachttarif(String kennzeichen, double gebuehr, Date ausfahrt) {
|
||||
Calendar cal = Calendar.getInstance();
|
||||
cal.setTime(ausfahrt);
|
||||
|
||||
//Debugging
|
||||
/*SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy, HH:mm");
|
||||
Date einfahrtszeit = null;
|
||||
try {
|
||||
// Beispiel für manuelle Eingabe, kann angepasst werden
|
||||
einfahrtszeit = sdf.parse("01.10.2024, 20:00");
|
||||
ausfahrt = sdf.parse("02.10.2024, 02:00");
|
||||
} catch (ParseException e) {
|
||||
throw new RuntimeException(e);
|
||||
}*/
|
||||
Calendar calAusfahrt = Calendar.getInstance();
|
||||
calAusfahrt.setTime(ausfahrt);
|
||||
|
||||
// Bestimme die Einfahrtszeit des Fahrzeugs
|
||||
Date einfahrt = findeEinfahrtZeit(kennzeichen); // Methode zum Finden der Einfahrtszeit
|
||||
Calendar einfahrtsCal = Calendar.getInstance();
|
||||
einfahrtsCal.setTime(einfahrt);
|
||||
Date einfahrt = findeEinfahrtZeit(kennzeichen); // Methode zum Finden der Einfahrtszeit
|
||||
Calendar calEinfahrt = Calendar.getInstance();
|
||||
calEinfahrt.setTime(einfahrt);
|
||||
|
||||
// Prüfe, ob sich ein Teil der Parkdauer im Zeitraum von 20:00 bis 6:00 Uhr befindet
|
||||
while (einfahrtsCal.before(cal)) {
|
||||
int stunde = einfahrtsCal.get(Calendar.HOUR_OF_DAY);
|
||||
if (stunde >= 20 || stunde < 6) {
|
||||
// Die Gebühren für jede angefangene Stunde in diesem Zeitraum dürfen maximal 5 Euro sein
|
||||
if (gebuehr > 500) {
|
||||
gebuehr = 500; // Maximal 5 Euro während der Nachtzeit
|
||||
}
|
||||
// Definiere die Nachtgrenzen: 20:00 Uhr bis 6:00 Uhr
|
||||
Calendar startNacht = Calendar.getInstance();
|
||||
startNacht.setTime(einfahrt);
|
||||
startNacht.set(Calendar.HOUR_OF_DAY, 20); // Nacht beginnt um 20:00 Uhr
|
||||
startNacht.set(Calendar.MINUTE, 0);
|
||||
|
||||
Calendar endeNacht = Calendar.getInstance();
|
||||
endeNacht.setTime(einfahrt);
|
||||
endeNacht.set(Calendar.HOUR_OF_DAY, 6); // Nacht endet um 06:00 Uhr
|
||||
endeNacht.add(Calendar.DATE, 1); // Geht auf den nächsten Tag*/
|
||||
|
||||
/*// Schritt 1: Berechne Gebühren bis 20 Uhr
|
||||
while (calEinfahrt.before(startNacht) && calEinfahrt.before(calAusfahrt)) {
|
||||
// Jede angefangene Stunde bis 20:00 Uhr kostet 1 Euro
|
||||
gebuehr += 100;
|
||||
calEinfahrt.add(Calendar.HOUR_OF_DAY, 1); // Erhöhe um eine Stunde
|
||||
}*/
|
||||
|
||||
// Schritt 2: Berechne Gebühren in der Nachtzeit
|
||||
double nachtGebuehr = 0;
|
||||
if (calAusfahrt.after(startNacht)) {
|
||||
// Die Parkzeit überschreitet 20:00 Uhr und geht in die Nachtzeit
|
||||
while (calEinfahrt.before(calAusfahrt) && (calEinfahrt.get(Calendar.HOUR_OF_DAY) >= 20 || calEinfahrt.get(Calendar.HOUR_OF_DAY) < 6)) {
|
||||
nachtGebuehr += 100; // Jede Stunde in der Nacht kostet auch 1 Euro
|
||||
calEinfahrt.add(Calendar.HOUR_OF_DAY, 1);
|
||||
}
|
||||
|
||||
// Erhöhe die Zeit um eine Stunde, um jede Stunde zu prüfen
|
||||
einfahrtsCal.add(Calendar.HOUR_OF_DAY, 1);
|
||||
}
|
||||
return gebuehr;
|
||||
|
||||
// Schritt 3: Deckele die Nachttarif-Gebühr auf maximal 5 Euro
|
||||
if (nachtGebuehr > 500) {
|
||||
nachtGebuehr = 500; // Maximal 5 Euro für die gesamte Nachtzeit
|
||||
}
|
||||
|
||||
// Addiere die Nachtgebühren zu den normalen Stunden
|
||||
return gebuehr + nachtGebuehr;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Methode zum Finden der Einfahrtszeit des PKWs nach Kennzeichen
|
||||
private Date findeEinfahrtZeit(String kennzeichen) {
|
||||
for (PKW pkw : parkendePkws) {
|
||||
|
|
|
@ -1,2 +0,0 @@
|
|||
Gültige VISA-Nummer:
|
||||
4539148803436467
|
|
@ -0,0 +1,7 @@
|
|||
Testdaten:
|
||||
|
||||
Einfahrtszeit: 08.10.2024, 13:00
|
||||
Ausfahrtszeit: 09.10.2024, 13:00, 09.10.2024, 04:00
|
||||
|
||||
Gültige VISA-Nummer:
|
||||
4539148803436467
|
Loading…
Reference in New Issue