Verbesserungen + Kommentare
parent
9ba279690c
commit
9376a096e0
|
@ -46,6 +46,7 @@ public class Main {
|
||||||
|
|
||||||
case 5:
|
case 5:
|
||||||
System.out.println("Programm beendet.");
|
System.out.println("Programm beendet.");
|
||||||
|
scanner.close();
|
||||||
return;
|
return;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -9,6 +9,7 @@ public class PKW {
|
||||||
private Date einfahrt;
|
private Date einfahrt;
|
||||||
double gebuehrenkonto;
|
double gebuehrenkonto;
|
||||||
|
|
||||||
|
|
||||||
public PKW(String kennzeichen) {
|
public PKW(String kennzeichen) {
|
||||||
this.kennzeichen = kennzeichen;
|
this.kennzeichen = kennzeichen;
|
||||||
this.einfahrt = new Date();
|
this.einfahrt = new Date();
|
||||||
|
@ -19,9 +20,6 @@ public class PKW {
|
||||||
return kennzeichen;
|
return kennzeichen;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setKennzeichen(String kennzeichen) {
|
|
||||||
this.kennzeichen = kennzeichen;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Date getEinfahrt() {
|
public Date getEinfahrt() {
|
||||||
return einfahrt;
|
return einfahrt;
|
||||||
|
|
|
@ -1,46 +1,43 @@
|
||||||
package QualifierTeil2;
|
package QualifierTeil2;
|
||||||
|
|
||||||
import java.text.ParseException;
|
|
||||||
import java.text.SimpleDateFormat;
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
public class Parkhaus {
|
public class Parkhaus {
|
||||||
private List<PKW> parkendePkws;
|
private List<PKW> parkendePkws;
|
||||||
int kapazitaet;
|
int kapazitaetVerfuegbar;
|
||||||
int belegt;
|
int belegt;
|
||||||
|
int maxKapazitaet;
|
||||||
|
|
||||||
public Parkhaus() {
|
public Parkhaus() {
|
||||||
this.parkendePkws = new ArrayList<>();
|
this.parkendePkws = new ArrayList<>();
|
||||||
this.kapazitaet = randomAnzahlParkplätze();
|
this.maxKapazitaet = randomAnzahlParkplätze();
|
||||||
|
this.kapazitaetVerfuegbar = maxKapazitaet;
|
||||||
this.belegt = 0;
|
this.belegt = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<PKW> getParkendePkws() {
|
|
||||||
return parkendePkws;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Methode zum Einfahren eines PKWs
|
// Methode zum Einfahren eines PKWs
|
||||||
public void einfahren(String kennzeichen) {
|
public void einfahren(String kennzeichen) {
|
||||||
PKW existierenderPKW = null;
|
PKW existierenderPKW = null;
|
||||||
|
|
||||||
// Überprüfen, ob das Auto mit demselben Kennzeichen bereits existiert (Schulden hat)
|
// Überprüfen, ob das Auto mit demselben Kennzeichen bereits existiert
|
||||||
for (PKW pkw : parkendePkws) {
|
for (PKW pkw : parkendePkws) {
|
||||||
if (pkw.getKennzeichen().equals(kennzeichen)) {
|
if (pkw.getKennzeichen().equals(kennzeichen)) {
|
||||||
existierenderPKW = pkw;
|
existierenderPKW = pkw;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Falls angegebenen PKW sich schon im Parkhaus befindet oder schonmal da war und Schulden hat
|
||||||
if (existierenderPKW != null) {
|
if (existierenderPKW != null) {
|
||||||
System.out.println("Der PKW mit dem Kennzeichen " + kennzeichen + " hat noch Schulden von " + existierenderPKW.getGebuehrenkonto() + " Cent.");
|
System.out.println("Der PKW mit dem Kennzeichen " + kennzeichen + " hat noch Schulden in Höhe von " + existierenderPKW.getGebuehrenkonto() + " Cent.");
|
||||||
this.kapazitaet--;
|
|
||||||
this.belegt++;
|
|
||||||
} else {
|
} else {
|
||||||
// Neuen PKW erstellen und Schulden übernehmen, falls vorhanden
|
// Neuen PKW erstellen und Schulden übernehmen, falls vorhanden
|
||||||
PKW neuerPKW = new PKW(kennzeichen);
|
PKW neuerPKW = new PKW(kennzeichen);
|
||||||
double schulden = sucheSchulden(kennzeichen); // Funktion, die die alten Schulden findet (falls vorhanden)
|
double schulden = sucheSchulden(kennzeichen); // Funktion, die die alten Schulden findet (falls vorhanden)
|
||||||
neuerPKW.setGebuehrenkonto(schulden); // Vorherige Schulden hinzufügen
|
neuerPKW.setGebuehrenkonto(schulden); // Vorherige Schulden hinzufügen
|
||||||
parkendePkws.add(neuerPKW);
|
parkendePkws.add(neuerPKW);
|
||||||
this.kapazitaet--;
|
this.kapazitaetVerfuegbar--;
|
||||||
this.belegt++;
|
this.belegt++;
|
||||||
System.out.println("Neuer PKW mit Kennzeichen " + kennzeichen + " eingefahren. Schulden: " + schulden + " Cent.");
|
System.out.println("Neuer PKW mit Kennzeichen " + kennzeichen + " eingefahren. Schulden: " + schulden + " Cent.");
|
||||||
}
|
}
|
||||||
|
@ -51,7 +48,9 @@ public class Parkhaus {
|
||||||
|
|
||||||
// Methode zum Ausfahren eines PKWs anhand des Kennzeichens
|
// Methode zum Ausfahren eines PKWs anhand des Kennzeichens
|
||||||
public void ausfahren(String kennzeichen) {
|
public void ausfahren(String kennzeichen) {
|
||||||
PKW zuEntfernen = null;
|
PKW zuEntfernen = null; //PKW, der rausfahren will
|
||||||
|
|
||||||
|
// Überprüfen, ob das Auto mit demselben Kennzeichen bereits existiert und setze das als zuEntfernen
|
||||||
for (PKW pkw : parkendePkws) {
|
for (PKW pkw : parkendePkws) {
|
||||||
if (pkw.getKennzeichen().equals(kennzeichen)) {
|
if (pkw.getKennzeichen().equals(kennzeichen)) {
|
||||||
zuEntfernen = pkw;
|
zuEntfernen = pkw;
|
||||||
|
@ -59,6 +58,7 @@ public class Parkhaus {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Falls Auto zum Entfernen gibt
|
||||||
if (zuEntfernen != null) {
|
if (zuEntfernen != null) {
|
||||||
// Berechnung der Gebühren
|
// Berechnung der Gebühren
|
||||||
double gebuehren = berechneGebuehren(kennzeichen, new Date()); // Nimmt die aktuelle Zeit an
|
double gebuehren = berechneGebuehren(kennzeichen, new Date()); // Nimmt die aktuelle Zeit an
|
||||||
|
@ -66,9 +66,10 @@ public class Parkhaus {
|
||||||
// Gebührenkonto aktualisieren
|
// Gebührenkonto aktualisieren
|
||||||
zuEntfernen.setGebuehrenkonto(gebuehren); // Schulden für unbezahlte Gebühren hinzufügen
|
zuEntfernen.setGebuehrenkonto(gebuehren); // Schulden für unbezahlte Gebühren hinzufügen
|
||||||
|
|
||||||
|
// Falls Gebühren vorhanden sind
|
||||||
if (gebuehren > 0) {
|
if (gebuehren > 0) {
|
||||||
|
|
||||||
Date ausfahrt = new Date();
|
Date ausfahrt = new Date(); //aktuelle Zeit für Ausfahrt
|
||||||
System.out.println("Parkdauer in Minuten: " + berechneParkdauer(kennzeichen, ausfahrt));
|
System.out.println("Parkdauer in Minuten: " + berechneParkdauer(kennzeichen, ausfahrt));
|
||||||
System.out.println("Parkgebühren in Cent: " + zuEntfernen.getGebuehrenkonto());
|
System.out.println("Parkgebühren in Cent: " + zuEntfernen.getGebuehrenkonto());
|
||||||
|
|
||||||
|
@ -96,9 +97,8 @@ public class Parkhaus {
|
||||||
System.out.println("PKW mit Kennzeichen " + kennzeichen + " darf gebührenfrei ausfahren.");
|
System.out.println("PKW mit Kennzeichen " + kennzeichen + " darf gebührenfrei ausfahren.");
|
||||||
}
|
}
|
||||||
|
|
||||||
// PKW aus der Liste entfernen und Kapazität aktualisieren
|
// PKW aus der Liste nicht entfernen und Kapazität aktualisieren
|
||||||
//parkendePkws.remove(zuEntfernen);
|
this.kapazitaetVerfuegbar++;
|
||||||
this.kapazitaet++;
|
|
||||||
this.belegt--;
|
this.belegt--;
|
||||||
System.out.println("PKW mit Kennzeichen " + kennzeichen + " hat die Ausfahrt durchgeführt.\n");
|
System.out.println("PKW mit Kennzeichen " + kennzeichen + " hat die Ausfahrt durchgeführt.\n");
|
||||||
|
|
||||||
|
@ -111,6 +111,7 @@ public class Parkhaus {
|
||||||
public long berechneParkdauer(String kennzeichen, Date ausfahrt) {
|
public long berechneParkdauer(String kennzeichen, Date ausfahrt) {
|
||||||
long minDiff = 0;
|
long minDiff = 0;
|
||||||
|
|
||||||
|
// Berechnung der parkdauer des PKWs anhand des Kennzeichens
|
||||||
for (PKW pkw : parkendePkws) {
|
for (PKW pkw : parkendePkws) {
|
||||||
if (pkw.getKennzeichen().equals(kennzeichen)) {
|
if (pkw.getKennzeichen().equals(kennzeichen)) {
|
||||||
minDiff = (ausfahrt.getTime() - pkw.getEinfahrt().getTime()) / 60000;
|
minDiff = (ausfahrt.getTime() - pkw.getEinfahrt().getTime()) / 60000;
|
||||||
|
@ -119,21 +120,18 @@ public class Parkhaus {
|
||||||
return minDiff;
|
return minDiff;
|
||||||
|
|
||||||
//Debugging mit selbst ausgewählten Zeiten
|
//Debugging mit selbst ausgewählten Zeiten
|
||||||
/*var sdf = new SimpleDateFormat("dd.MM.yyyy, HH:mm");
|
|
||||||
|
|
||||||
Date d1 = null;
|
/*SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy, HH:mm");
|
||||||
|
Date einfahrtszeit = null;
|
||||||
try {
|
try {
|
||||||
d1 = sdf.parse("01.10.2024, 20:00");
|
// 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) {
|
} catch (ParseException e) {
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
Date d2 = null;
|
|
||||||
try {
|
minDiff = (ausfahrt.getTime() - einfahrtszeit.getTime()) / 60000;
|
||||||
d2 = sdf.parse("02.10.2024, 02:00");
|
|
||||||
} catch (ParseException e) {
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
long minDiff = (d2.getTime() - d1.getTime()) / 60000;
|
|
||||||
|
|
||||||
return minDiff;*/
|
return minDiff;*/
|
||||||
}
|
}
|
||||||
|
@ -180,6 +178,8 @@ public class Parkhaus {
|
||||||
if (kreditkartenNummer.length() != 16 || !kreditkartenNummer.startsWith("4")) {
|
if (kreditkartenNummer.length() != 16 || !kreditkartenNummer.startsWith("4")) {
|
||||||
return false; // Ungültige Karte
|
return false; // Ungültige Karte
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Luhn-Algorithmus
|
||||||
int sum = 0;
|
int sum = 0;
|
||||||
boolean alternate = false;
|
boolean alternate = false;
|
||||||
for (int i = kreditkartenNummer.length() - 1; i >= 0; i--) {
|
for (int i = kreditkartenNummer.length() - 1; i >= 0; i--) {
|
||||||
|
@ -198,13 +198,14 @@ public class Parkhaus {
|
||||||
|
|
||||||
//-------------------------------Hilfsmethoden-------------------------------------------
|
//-------------------------------Hilfsmethoden-------------------------------------------
|
||||||
|
|
||||||
|
// Methode zum Generieren einer zufälligen Zahl für die Anzahl der Parkplätze
|
||||||
private static int randomAnzahlParkplätze() {
|
private static int randomAnzahlParkplätze() {
|
||||||
return (int) (Math.random() * 200) + 1;
|
return (int) (Math.random() * 200) + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Methode zum Durchsuchen der Liste nach alten Schulden
|
||||||
private double sucheSchulden(String kennzeichen) {
|
private double sucheSchulden(String kennzeichen) {
|
||||||
// Durchsuche die Liste nach alten Schulden
|
|
||||||
// Beispiel: Wenn der PKW schon einmal ausgefahren ist, seine Schulden zurückgeben
|
// Beispiel: Wenn der PKW schon einmal ausgefahren ist, seine Schulden zurückgeben
|
||||||
for (PKW pkw : parkendePkws) {
|
for (PKW pkw : parkendePkws) {
|
||||||
if (pkw.getKennzeichen().equals(kennzeichen)) {
|
if (pkw.getKennzeichen().equals(kennzeichen)) {
|
||||||
|
@ -217,15 +218,27 @@ public class Parkhaus {
|
||||||
|
|
||||||
// Methode zum Prüfen, ob das Parkhaus voll ist
|
// Methode zum Prüfen, ob das Parkhaus voll ist
|
||||||
public boolean istVoll() {
|
public boolean istVoll() {
|
||||||
return parkendePkws.size() >= kapazitaet;
|
return parkendePkws.size() >= this.maxKapazitaet;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 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) {
|
private double berechneNachttarif(String kennzeichen, double gebuehr, Date ausfahrt) {
|
||||||
Calendar cal = Calendar.getInstance();
|
Calendar cal = Calendar.getInstance();
|
||||||
cal.setTime(ausfahrt);
|
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);
|
||||||
|
}*/
|
||||||
|
|
||||||
// Bestimme die Einfahrtszeit des Fahrzeugs
|
// Bestimme die Einfahrtszeit des Fahrzeugs
|
||||||
Date einfahrt = findeEinfahrtZeit(kennzeichen); // Methode zum Finden der Einfahrtszeit
|
Date einfahrt = findeEinfahrtZeit(kennzeichen); // =einfahrt für Debugging // Methode zum Finden der Einfahrtszeit
|
||||||
Calendar einfahrtsCal = Calendar.getInstance();
|
Calendar einfahrtsCal = Calendar.getInstance();
|
||||||
einfahrtsCal.setTime(einfahrt);
|
einfahrtsCal.setTime(einfahrt);
|
||||||
|
|
||||||
|
@ -242,10 +255,10 @@ public class Parkhaus {
|
||||||
// Erhöhe die Zeit um eine Stunde, um jede Stunde zu prüfen
|
// Erhöhe die Zeit um eine Stunde, um jede Stunde zu prüfen
|
||||||
einfahrtsCal.add(Calendar.HOUR_OF_DAY, 1);
|
einfahrtsCal.add(Calendar.HOUR_OF_DAY, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
return gebuehr;
|
return gebuehr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Methode zum Finden der Einfahrtszeit des PKWs nach Kennzeichen
|
||||||
private Date findeEinfahrtZeit(String kennzeichen) {
|
private Date findeEinfahrtZeit(String kennzeichen) {
|
||||||
for (PKW pkw : parkendePkws) {
|
for (PKW pkw : parkendePkws) {
|
||||||
if (pkw.getKennzeichen().equals(kennzeichen)) {
|
if (pkw.getKennzeichen().equals(kennzeichen)) {
|
||||||
|
@ -256,7 +269,7 @@ public class Parkhaus {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Methode zum Generieren eines zufälligen Kennzeichens
|
||||||
public String generiereKennzeichen() {
|
public String generiereKennzeichen() {
|
||||||
Random random = new Random();
|
Random random = new Random();
|
||||||
|
|
||||||
|
|
|
@ -12,6 +12,13 @@ public class UI {
|
||||||
// Methode für die Einfahrt eines PKWs
|
// Methode für die Einfahrt eines PKWs
|
||||||
public void einfahrtPKW() {
|
public void einfahrtPKW() {
|
||||||
|
|
||||||
|
// Überprüfen, ob das Parkhaus voll ist
|
||||||
|
if (parkhaus1.istVoll()) {
|
||||||
|
System.out.println("Das Parkhaus ist voll. Keine weiteren Einfahrten möglich.");
|
||||||
|
return; // Methode beenden, wenn keine Parkplätze mehr verfügbar sind
|
||||||
|
}
|
||||||
|
|
||||||
|
// Eingabe von Kennzeichen; wenn leer, Kennzeichen wird automatisch generiert
|
||||||
System.out.println("Bitte geben Sie das Kennzeichen ein (leer lassen, um ein Kennzeichen zu generieren):");
|
System.out.println("Bitte geben Sie das Kennzeichen ein (leer lassen, um ein Kennzeichen zu generieren):");
|
||||||
String kennzeichen = scan.nextLine();
|
String kennzeichen = scan.nextLine();
|
||||||
if (kennzeichen.isEmpty()) {
|
if (kennzeichen.isEmpty()) {
|
||||||
|
@ -19,10 +26,14 @@ public class UI {
|
||||||
System.out.println("Generiertes Kennzeichen: " + kennzeichen);
|
System.out.println("Generiertes Kennzeichen: " + kennzeichen);
|
||||||
}
|
}
|
||||||
|
|
||||||
System.out.println("Aktuell verfügbare Parkplätze: " + parkhaus1.kapazitaet);
|
System.out.println("Aktuell verfügbare Parkplätze: " + parkhaus1.kapazitaetVerfuegbar);
|
||||||
parkhaus1.einfahren(kennzeichen);
|
|
||||||
System.out.println("weitere verfügbare Parkplätze: " + parkhaus1.kapazitaet);
|
|
||||||
|
|
||||||
|
// Methodenaufruf vom Parkhaus für die Einfahrt
|
||||||
|
parkhaus1.einfahren(kennzeichen);
|
||||||
|
|
||||||
|
System.out.println("weitere verfügbare Parkplätze: " + parkhaus1.kapazitaetVerfuegbar);
|
||||||
|
|
||||||
|
// Ausgabe aktuelle Zeit als Einfahrtszeit
|
||||||
var einfahrt = new SimpleDateFormat("dd.MM.yyyy, HH:mm");
|
var einfahrt = new SimpleDateFormat("dd.MM.yyyy, HH:mm");
|
||||||
System.out.println("Einfahrt: " + einfahrt.format(new Date()));
|
System.out.println("Einfahrt: " + einfahrt.format(new Date()));
|
||||||
|
|
||||||
|
@ -33,36 +44,38 @@ public class UI {
|
||||||
|
|
||||||
// Methode für die Einfahrt von mehreren PKWs
|
// Methode für die Einfahrt von mehreren PKWs
|
||||||
public void mehrereEinfahrten() {
|
public void mehrereEinfahrten() {
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
if (parkhaus1.istVoll()) {
|
if (parkhaus1.istVoll()) {
|
||||||
System.out.println("Das Parkhaus ist voll. Keine weiteren Einfahrten möglich.");
|
System.out.println("Das Parkhaus ist voll. Keine weiteren Einfahrten möglich.");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// PKW einfahren
|
||||||
|
einfahrtPKW();
|
||||||
|
|
||||||
|
// Frage, ob der Benutzer weitere PKWs einfahren lassen möchte
|
||||||
System.out.println("Möchten Sie einen weiteren PKW einfahren lassen? (j/n)");
|
System.out.println("Möchten Sie einen weiteren PKW einfahren lassen? (j/n)");
|
||||||
String weiter = scan.nextLine();
|
String weiter = scan.nextLine();
|
||||||
|
|
||||||
|
// Wenn der Benutzer "n" eingibt, wird die Schleife beendet
|
||||||
if (!weiter.equalsIgnoreCase("j")) {
|
if (!weiter.equalsIgnoreCase("j")) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// PKW einfahren
|
|
||||||
einfahrtPKW();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Methode zum Anzeigen der verfügbaren Plätze
|
// Methode zum Anzeigen der verfügbaren Plätze
|
||||||
public void zeigeVerfügbarePlätze() {
|
public void zeigeVerfügbarePlätze() {
|
||||||
System.out.println("Verfügbare Plätze: " + parkhaus1.kapazitaet);
|
System.out.println("Verfügbare Plätze: " + parkhaus1.kapazitaetVerfuegbar);
|
||||||
System.out.println(" ");
|
System.out.println(" ");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Methode für die Ausfahrt und Bezahlung
|
// Methode für die Ausfahrt und Bezahlung
|
||||||
public void ausfahrtPKW() {
|
public void ausfahrtPKW() {
|
||||||
|
|
||||||
System.out.println("Geben Sie das Kennzeichen des ausfahrenden PKWs ein: ");
|
System.out.println("Geben Sie das Kennzeichen des ausfahrenden PKWs ein: ");
|
||||||
String kennzeichen = scan.nextLine().toUpperCase();
|
String kennzeichen = scan.nextLine().toUpperCase();
|
||||||
|
|
||||||
|
//Methodenaufruf vom Parkhaus für die Ausfahrt
|
||||||
parkhaus1.ausfahren(kennzeichen);
|
parkhaus1.ausfahren(kennzeichen);
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue