Nicht ganz richtige Implementierung für KurztripEmpfehlung Klasse

WetterService
danai 2024-06-17 11:29:33 +02:00
parent 04669ca008
commit a17d823f7b
3 changed files with 208 additions and 26 deletions

View File

@ -2,4 +2,58 @@ package domain;
public class Reiseplanung { public class Reiseplanung {
private Ort standort;
private Ort zielort;
private double entfernung;
private double dauerPKW;
private double dauerFahrrad;
private double co2AusstoßPKW;
public Reiseplanung(Ort standort, Ort zielort, double durchschnittsgeschwindigkeitPKW,
double durchschnittsgeschwindigkeitFahrrad, double co2AusstossProKmPKW) {
this.standort = standort;
this.zielort = zielort;
this.entfernung = berechneEntfernung(standort, zielort);
this.dauerPKW = entfernung / durchschnittsgeschwindigkeitPKW;
this.dauerFahrrad = entfernung / durchschnittsgeschwindigkeitFahrrad;
this.co2AusstoßPKW = entfernung * co2AusstossProKmPKW;
}
public double berechneEntfernung(Ort standort, Ort zielort) {
double b1 = Math.toRadians(standort.getBreitengrad());
double b2 = Math.toRadians(zielort.getBreitengrad());
double l1 = Math.toRadians(standort.getLängengrad());
double l2 = Math.toRadians(zielort.getLängengrad());
return 6378.388 * Math.acos(Math.sin(b1) * Math.sin(b2) + Math.cos(b1) * Math.cos(b2) * Math.cos(l2 - l1));
}
public double getEntfernung() {
return entfernung;
}
public String berechneReiseDauer(double durchschnittsgeschwindigkeit) {
double dauer = entfernung / durchschnittsgeschwindigkeit;
return String.format("Die Reise dauert ca. %.2f Stunden.", dauer);
}
public double berechneCO2Ausstoss() {
return co2AusstoßPKW;
}
public double getDauerPKW() {
return dauerPKW;
}
public double getDauerFahrrad() {
return dauerFahrrad;
}
} }

View File

@ -1,5 +1,65 @@
package fassade; package fassade;
import java.util.List;
import domain.KurztripEmpfehlung;
import domain.Ort;
import domain.Reiseplanung;
import domain.User;
public class ReiseFassade { public class ReiseFassade {
private Reiseplanung reiseplanung;
private KurztripEmpfehlung kurztripEmpfehlung;
public ReiseFassade() {
this.kurztripEmpfehlung = new KurztripEmpfehlung();
}
/*public Reiseplanung planeReise(Ort startort, Ort zielort) {
Reiseplanung reiseplanung = new Reiseplanung(startort, zielort);
reiseplanung.berechneEntfernung();
reiseplanung.berechneReisedauerPKW();
reiseplanung.berechneReisedauerFahrrad();
reiseplanung.berechneCo2Ausstoss();
return reiseplanung;
}*/
public void setHeimatortFromUser(User user) {
kurztripEmpfehlung.setHeimatort(user.getHeimatstandort());
}
public double berechneEntfernung() {
return reiseplanung.getEntfernung();
}
public String berechneReiseDauerPKW() {
return reiseplanung.berechneReiseDauer(reiseplanung.getDauerPKW());
}
public String berechneReiseDauerFahrrad() {
return reiseplanung.berechneReiseDauer(reiseplanung.getDauerFahrrad());
}
public double berechneCO2AusstossPKW() {
return reiseplanung.berechneCO2Ausstoss();
}
public List<Ort> zufallsorteFahrrad(int maxEntfernung) {
return kurztripEmpfehlung.zufallsorteFahrrad(maxEntfernung);
}
public List<Ort> zufallsortePKW(int minEntfernung) {
return kurztripEmpfehlung.zufallsortePKW(minEntfernung);
}
} }

View File

@ -1,17 +1,24 @@
package ui; package ui;
import java.util.List;
import java.util.Scanner; import java.util.Scanner;
import domain.Ort;
import domain.Reiseplanung;
import domain.User; import domain.User;
import fassade.ReiseFassade;
import fassade.UserFassade; import fassade.UserFassade;
public class UserInterface { public class UserInterface {
private UserFassade userFacade; private UserFassade userFacade;
private ReiseFassade reiseFacade;
private User user;
private Scanner scanner; private Scanner scanner;
public UserInterface() { public UserInterface() {
this.reiseFacade = new ReiseFassade();
this.userFacade = new UserFassade(); this.userFacade = new UserFassade();
this.scanner = new Scanner(System.in); this.scanner = new Scanner(System.in);
start(); start();
@ -37,20 +44,28 @@ public class UserInterface {
switch (option) { switch (option) {
case 1: case 1:
registrieren(); registrieren();
System.out.println("\n================================================================================"); System.out
.println("\n================================================================================");
break; break;
case 2: case 2:
einloggen(); einloggen();
System.out.println("\n================================================================================"); System.out
.println("\n================================================================================");
break; break;
case 3: case 3:
sucheOrt(); sucheOrt();
System.out
.println("\n================================================================================");
break; break;
case 4: case 4:
planeReise(); planeReise();
System.out
.println("\n================================================================================");
break; break;
case 5: case 5:
kurztripEmpfehlen(); kurztripEmpfehlen();
System.out
.println("\n================================================================================");
break; break;
case 6: case 6:
System.out.println("Auf Wiedersehen!"); System.out.println("Auf Wiedersehen!");
@ -68,7 +83,7 @@ public class UserInterface {
System.out.print("Geben Sie ein Passwort ein: "); System.out.print("Geben Sie ein Passwort ein: ");
String password = scanner.nextLine(); String password = scanner.nextLine();
System.out.print("Geben Sie Ihre Heimat-PLZ ein: "); System.out.print("Geben Sie Ihre Heimat-PLZ ein: ");
String plz = scanner.nextLine(); int plz = Integer.parseInt(scanner.nextLine());
System.out.print("Geben Sie Ihren Heimatort ein: "); System.out.print("Geben Sie Ihren Heimatort ein: ");
String ortName = scanner.nextLine(); String ortName = scanner.nextLine();
System.out.print("Geben Sie den Namen Ihres Autos ein: "); System.out.print("Geben Sie den Namen Ihres Autos ein: ");
@ -82,7 +97,17 @@ public class UserInterface {
userFacade.registrieren(username, password, plz, ortName, autoName, co2Ausstoss, userFacade.registrieren(username, password, plz, ortName, autoName, co2Ausstoss,
durchschnittsgeschwindigkeitPKW, durchschnittsgeschwindigkeitFahrrad); durchschnittsgeschwindigkeitPKW, durchschnittsgeschwindigkeitFahrrad);
System.out.println("\nRegistrierung erfolgreich! Willkommen, " + username + "!");
User user = userFacade.einloggen(username, password); // Fügen Sie dies hinzu, um den Benutzer nach der
// Registrierung automatisch einzuloggen
if (user != null) {
this.user = user;
reiseFacade.setHeimatortFromUser(user);
System.out.println("\nRegistrierung und automatischer Login erfolgreich! Willkommen, " + username + "!");
} else {
System.out.println("\nRegistrierung erfolgreich, aber automatischer Login fehlgeschlagen.");
}
} }
private void einloggen() { private void einloggen() {
@ -93,11 +118,11 @@ public class UserInterface {
User user = userFacade.einloggen(username, password); User user = userFacade.einloggen(username, password);
if (user != null) { if (user != null) {
this.user = user;
reiseFacade.setHeimatortFromUser(user);
System.out.println("\nLogin erfolgreich! Willkommen zurück, " + user.getUsername() + "!"); System.out.println("\nLogin erfolgreich! Willkommen zurück, " + user.getUsername() + "!");
String wetter = user.zeigeWetterHeimatstandort(); String wetter = user.zeigeWetterHeimatstandort();
System.out.println("Aktuelles Wetter in " + user.getHeimatstandort().getOrtName() + ": " + wetter); System.out.println("Aktuelles Wetter in " + user.getHeimatstandort().getOrtName() + ": " + wetter);
} else { } else {
System.out.println("\nBenutzername oder Passwort ist falsch:("); System.out.println("\nBenutzername oder Passwort ist falsch:(");
} }
@ -105,37 +130,80 @@ public class UserInterface {
private void sucheOrt() { private void sucheOrt() {
System.out.print("Geben Sie den Namen des Ortes ein: "); System.out.print("Geben Sie den Namen des Ortes ein: ");
String ortName = scanner.nextLine();
// die Ortssuche und Wetteranzeige für die nächsten drei Tage /*
* List<Ort> treffer = reiseFacade.sucheOrt(ortName); if (treffer.isEmpty()) {
* System.out.println("Keine Treffer gefunden."); } else {
* System.out.println("Trefferliste:"); for (Ort ort : treffer) {
* System.out.println(ort.getOrtName() + " (PLZ: " + ort.getPLZ() + ")"); String
* wetter = user.zeigeWettervorhersageHeimatstandort();
* System.out.println("Aktuelles Wetter in " +
* user.getHeimatstandort().getOrtName() + ": " + wetter); } }
*/
} }
private void planeReise() { private void planeReise() {
System.out.print("Geben Sie Ihre Start-PLZ ein: "); System.out.print("Geben Sie Ihre Start-PLZ ein: ");
String startPLZ = scanner.nextLine(); int startPlz = Integer.parseInt(scanner.nextLine());
System.out.print("Geben Sie Ihren Startort ein: "); System.out.print("Geben Sie Ihren Startort ein: ");
String startOrtName = scanner.nextLine(); String startOrtName = scanner.nextLine();
System.out.print("Geben Sie Ihre Ziel-PLZ ein: "); Ort startort = new Ort(startPlz, startOrtName);
String zielPLZ = scanner.nextLine(); System.out.print("Geben Sie die Ziel-PLZ ein: ");
System.out.print("Geben Sie Ihren Zielort ein: "); int zielPlz = Integer.parseInt(scanner.nextLine());
System.out.print("Geben Sie den Zielort ein: ");
String zielOrtName = scanner.nextLine(); String zielOrtName = scanner.nextLine();
// die Reiseplanung basierend auf den Eingaben Ort zielort = new Ort(zielPlz, zielOrtName);
/*
* Reiseplanung reise = reiseFacade.planeReise(startort, zielort);
* System.out.println("Reiseplanung:"); System.out.println("Entfernung: " +
* reise.getEntfernung() + " km"); System.out.println("Reisedauer PKW: " +
* reise.getDauerPKW() + " Stunden"); System.out.println("Reisedauer Fahrrad: "
* + reise.getDauerFahrrad() + " Stunden");
* System.out.println("CO2-Ausstoß PKW: " + reise.berechneCO2Ausstoss() + " g");
*/
} }
private void kurztripEmpfehlen() { private void kurztripEmpfehlen() {
System.out.println("Empfohlener Kurztrip:"); if (user != null && user.getHeimatstandort() != null) {
// die Empfehlung eines Kurztrips System.out.println("Empfehlung basiert auf Heimatort: " + user.getHeimatstandort().getOrtName());
reiseFacade.setHeimatortFromUser(user);
System.out.print("Wählen Sie ein Transportmittel (Fahrrad/Auto): ");
String transportmittel = scanner.nextLine().trim().toLowerCase();
switch (transportmittel) {
case "fahrrad":
List<Ort> fahrradOrte = reiseFacade.zufallsorteFahrrad(100);
if (fahrradOrte.isEmpty()) {
System.out.println("Keine Orte innerhalb von 100 km gefunden.");
} else {
System.out.println("Folgende Orte wurden für einen Fahrrad-Kurztrip empfohlen:");
for (Ort ort : fahrradOrte) {
System.out.println("- " + ort.getOrtName() + " (PLZ: " + ort.getPLZ() + ")");
}
}
break;
case "auto":
List<Ort> autoOrte = reiseFacade.zufallsortePKW(150);
if (autoOrte.isEmpty()) {
System.out.println("Keine Orte mindestens 150 km entfernt gefunden.");
} else {
System.out.println("Folgende Orte wurden für einen Auto-Kurztrip empfohlen:");
for (Ort ort : autoOrte) {
System.out.println("- " + ort.getOrtName() + " (PLZ: " + ort.getPLZ() + ")");
}
}
break;
default:
System.out.println("Ungültige Option. Bitte wählen Sie entweder 'Fahrrad' oder 'Auto'.");
break;
}
} else {
System.out.println("Bitte zuerst einloggen und Heimatort angeben!");
}
} }
public static void main(String[] args) { public static void main(String[] args) {
new UserInterface(); new UserInterface();