Parkhaus.Java
parent
628a9f6594
commit
b11dd5c9c3
|
@ -0,0 +1,295 @@
|
|||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Scanner;
|
||||
|
||||
public class Parkhaus {
|
||||
|
||||
// Variablen deklarieren
|
||||
static Scanner scanner = new Scanner(System.in);
|
||||
static int Gebuehren = 0;
|
||||
static Map<String, FahrzeugInfo> geparkteAutos = new HashMap<>();
|
||||
static int maximalePlaetze = 180;
|
||||
static String kennzeichenEingabe;
|
||||
|
||||
public static void parkgebuehrenBerechnen(Date d1, Date d2, String kennzeichenEingabe) {
|
||||
|
||||
if (d1.getTime() > d2.getTime()) {
|
||||
System.out.println("Die Ausfahrtszeit, kann nicht vor der Einfahrtszeit liegen! ");
|
||||
return;
|
||||
}
|
||||
|
||||
// Variablen deklarieren
|
||||
Gebuehren = 0;
|
||||
int GebuehrenNacht = 0;
|
||||
int GebuehrenTag = 0;
|
||||
|
||||
// Sekunden ausrechnen zwischen Einfahrtszeit und Ausfahrtszeit
|
||||
long secDiff = (d2.getTime() - d1.getTime()) / 1000;
|
||||
|
||||
// Sekunden in Minuten umrechnen
|
||||
long minuten = secDiff / 60;
|
||||
|
||||
if (minuten <= 15) {
|
||||
System.out.println("Die Parkgebühr ist kostenlos :)");
|
||||
System.out.println();
|
||||
return;
|
||||
}
|
||||
|
||||
// ersten 15 Minuten kostenlos
|
||||
minuten -= 15;
|
||||
|
||||
// Minuten in Stunden umrechnen
|
||||
long gesamtStunden = minuten / 60;
|
||||
|
||||
// Einfahrtsstunde
|
||||
int startStunde = d1.getHours();
|
||||
|
||||
// Schleife iteriert die gesamtStunden entlang
|
||||
for (int i = 0; i <= gesamtStunden; i++) {
|
||||
|
||||
// aktuelleStunde herausfinden
|
||||
int aktuelleStunde = (startStunde + i) % 24;
|
||||
|
||||
// Nachtgebühren ausrechnen
|
||||
if (aktuelleStunde >= 20 || aktuelleStunde < 6) {
|
||||
GebuehrenNacht += 1;
|
||||
|
||||
if (GebuehrenNacht > 5) {
|
||||
Gebuehren += 5;
|
||||
GebuehrenNacht = 0;
|
||||
|
||||
}
|
||||
|
||||
// Taggebühren ausrechnen
|
||||
} else {
|
||||
|
||||
GebuehrenTag += 1;
|
||||
if ((GebuehrenTag) >= 15) {
|
||||
Gebuehren += 15;
|
||||
GebuehrenTag = 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
// Taggebühren + Nachtgebühren zusammenrechnen
|
||||
Gebuehren += (GebuehrenTag + GebuehrenNacht);
|
||||
|
||||
// Falls E-Auto dann 20% Rabatt
|
||||
if (kennzeichenEingabe.endsWith("E")) {
|
||||
|
||||
Gebuehren *= 0.8;
|
||||
|
||||
}
|
||||
|
||||
System.out.println("Die Parkgebühr beträgt: " + Gebuehren + " Euro.");
|
||||
|
||||
}
|
||||
|
||||
public static void einfahrtParkhaus() throws ParseException {
|
||||
|
||||
// Prüfen ob Parkhaus voll
|
||||
if (geparkteAutos.size() >= maximalePlaetze) {
|
||||
System.out.println("Tut uns Leid, das Parkhaus ist leider voll :");
|
||||
return;
|
||||
}
|
||||
|
||||
System.out.print("Geben Sie das Kennzeichen ein: ");
|
||||
String kennzeichenEingabe = scanner.nextLine();
|
||||
|
||||
// Falls Kennzeichen eingegeben, dann Wert in FahrzeugInfo speichern
|
||||
if (geparkteAutos.containsKey(kennzeichenEingabe)) {
|
||||
FahrzeugInfo info = geparkteAutos.get(kennzeichenEingabe);
|
||||
|
||||
if (info.schulden > 0) {
|
||||
System.out.println("Dieses Auto hat noch Schulden von " + info.schulden + " Euros!");
|
||||
}
|
||||
}
|
||||
|
||||
System.out.print("Geben Sie ihre Einfahrtszeit ein (im Format: dd.MM.yyyy, HH:mm): ");
|
||||
String einfahrtZeit = scanner.nextLine();
|
||||
|
||||
// SimpleDateFormat um einen gewünschten String zu parsen
|
||||
SimpleDateFormat zeit = new SimpleDateFormat("dd.MM.yyyy, HH:mm");
|
||||
|
||||
// Falls keine Eingabe, dann wird aktuelle Zeit genommen
|
||||
if (einfahrtZeit.isEmpty()) {
|
||||
|
||||
einfahrtZeit = zeit.format(new Date());
|
||||
|
||||
}
|
||||
|
||||
// String in Date parsen
|
||||
Date d1 = zeit.parse(einfahrtZeit);
|
||||
|
||||
// alle relevanten Infos, in das Auto Objekt speichern
|
||||
geparkteAutos.put(kennzeichenEingabe, new FahrzeugInfo(d1, false, 0));
|
||||
|
||||
System.out.println("Einfahrtszeits des Autos: " + d1);
|
||||
System.out.println();
|
||||
|
||||
}
|
||||
|
||||
public static void Zahlung() throws ParseException {
|
||||
|
||||
System.out.println();
|
||||
|
||||
System.out.print("Bitte geben Sie das Kennzeichen ein: ");
|
||||
String kennzeichenEingabe = scanner.nextLine();
|
||||
|
||||
// prüfen ob Kennzeichen, im Parkhau existiert
|
||||
if (!(geparkteAutos.containsKey(kennzeichenEingabe))) {
|
||||
System.out.println("Das Kennzeichen existiert leider nicht in unserem Parkhaus.");
|
||||
return;
|
||||
}
|
||||
|
||||
// Informationen des gesuchten Autos
|
||||
FahrzeugInfo info = geparkteAutos.get(kennzeichenEingabe);
|
||||
|
||||
System.out.print("Bitte geben Sie ihre Ausfahrtszeit ein: ");
|
||||
String ausfahrtZeit = scanner.nextLine();
|
||||
|
||||
SimpleDateFormat zeit = new SimpleDateFormat("dd.MM.yyyy, HH:mm");
|
||||
|
||||
if (ausfahrtZeit.isEmpty()) {
|
||||
|
||||
ausfahrtZeit = zeit.format(new Date());
|
||||
|
||||
}
|
||||
|
||||
Date d2 = zeit.parse(ausfahrtZeit);
|
||||
|
||||
// Parkgebühren berechnen mit den Informationen des FahrzeugObjekts
|
||||
parkgebuehrenBerechnen(info.d1, d2, kennzeichenEingabe);
|
||||
if (Gebuehren == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
System.out.println("Bitte zahlen Sie den Betrag von " + Gebuehren + " Euro.");
|
||||
System.out.println("Geben Sie ihre Kreditkartennummer ein: ");
|
||||
String VISA = scanner.nextLine();
|
||||
|
||||
// Prüfen ob Zahlung gültig ist
|
||||
if (zahlungsÜberprüfung(VISA) == true) {
|
||||
System.out.println("Zahlung hat funktioniert");
|
||||
info.hatBezahlt = true;
|
||||
|
||||
}
|
||||
|
||||
// Falls Zahlung fehlgeschlagen, Schulden addieren
|
||||
else {
|
||||
System.out.println("Zahlung hat nicht funktioniert");
|
||||
info.schulden += Gebuehren;
|
||||
}
|
||||
}
|
||||
|
||||
public static void ausfahrtParkhaus() throws ParseException {
|
||||
System.out.println();
|
||||
|
||||
System.out.print("Bitte geben Sie das Kennzeichen ein: ");
|
||||
String kennzeichenEingabe = scanner.nextLine();
|
||||
|
||||
// prüfen ob Kennzeichen existiert
|
||||
if (!geparkteAutos.containsKey(kennzeichenEingabe)) {
|
||||
System.out.println("Das Kennzeichen existiert nicht in unserem Parkhaus.");
|
||||
return;
|
||||
}
|
||||
|
||||
// Informationen des gesuchten Autos
|
||||
FahrzeugInfo info = geparkteAutos.get(kennzeichenEingabe);
|
||||
|
||||
System.out.print("Bitte geben Sie ihre Ausfahrtszeit ein (im Format: dd.MM.yyyy, HH:mm): ");
|
||||
String ausfahrtZeit = scanner.nextLine();
|
||||
SimpleDateFormat zeit = new SimpleDateFormat("dd.MM.yyyy, HH:mm");
|
||||
|
||||
if (ausfahrtZeit.isEmpty()) {
|
||||
ausfahrtZeit = zeit.format(new Date());
|
||||
}
|
||||
|
||||
// Prüfen ob Auto gezahlt hat
|
||||
if (!info.hatBezahlt) {
|
||||
System.out.println("Achtung: Das Fahrzeug hat nicht bezahlt und fährt nun aus.");
|
||||
|
||||
} else {
|
||||
System.out.println("Das Fahrzeug hat bereits bezahlt.");
|
||||
}
|
||||
|
||||
// Fahrzeug aus der Liste der geparkten Autos entfernen, auch ohne Zahlung
|
||||
geparkteAutos.remove(kennzeichenEingabe);
|
||||
|
||||
System.out.println("Fahrzeug mit Kennzeichen " + kennzeichenEingabe + " hat das Parkhaus verlassen.");
|
||||
System.out.println();
|
||||
}
|
||||
|
||||
public static boolean zahlungsÜberprüfung(String VISA) {
|
||||
|
||||
// Variablen deklarieren
|
||||
int zähler = VISA.length();
|
||||
int summe = 0;
|
||||
|
||||
// 15,14,13,12,11... jede Zahl der Kreditkartennummer
|
||||
for (int i = zähler - 1; i >= 0; i--) {
|
||||
|
||||
// gibt jedes 2te vorletzte zurück
|
||||
int n = Integer.parseInt(VISA.substring(i, i + 1));
|
||||
|
||||
// jede zweite Ziffer von rechts wird verdoppelt
|
||||
if ((zähler - i) % 2 == 0) {
|
||||
|
||||
// Ziffer wird verdoppelt
|
||||
n *= 2;
|
||||
|
||||
// Falls Ziffer größer als 9, wird Ziffer -9 gerechnet
|
||||
if (n > 9) {
|
||||
n -= 9;
|
||||
}
|
||||
}
|
||||
|
||||
summe += n;
|
||||
|
||||
}
|
||||
// Prüfen ob durch 10 teilbar, eine der Hauptbedingungen
|
||||
return (summe % 10 == 0);
|
||||
}
|
||||
|
||||
|
||||
public static void main(String[] args) throws ParseException {
|
||||
|
||||
while (true) {
|
||||
System.out.println("1. Einfahrt ins Parkhaus");
|
||||
System.out.println("2. Zahlung der Parkgebühren");
|
||||
System.out.println("3. Ausfahrt");
|
||||
System.out.println("4. Parkhaus Verwaltung");
|
||||
System.out.println("5. Verlassen");
|
||||
int auswahl = scanner.nextInt();
|
||||
scanner.nextLine();
|
||||
|
||||
switch (auswahl) {
|
||||
|
||||
case 1:
|
||||
einfahrtParkhaus();
|
||||
break;
|
||||
|
||||
case 2:
|
||||
Zahlung();
|
||||
break;
|
||||
|
||||
case 3:
|
||||
ausfahrtParkhaus();
|
||||
break;
|
||||
|
||||
case 4:
|
||||
ParkhausVerwaltung(null);
|
||||
break;
|
||||
|
||||
case 5:
|
||||
System.exit(0);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue