diff --git a/TravelBuddyApp/src/main/java/domain/Reiseplanung.java b/TravelBuddyApp/src/main/java/domain/Reiseplanung.java index 24a95b9..256cff9 100644 --- a/TravelBuddyApp/src/main/java/domain/Reiseplanung.java +++ b/TravelBuddyApp/src/main/java/domain/Reiseplanung.java @@ -2,4 +2,58 @@ package domain; 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; + } + + + + } diff --git a/TravelBuddyApp/src/main/java/fassade/ReiseFassade.java b/TravelBuddyApp/src/main/java/fassade/ReiseFassade.java index 3b00e6e..6850cdb 100644 --- a/TravelBuddyApp/src/main/java/fassade/ReiseFassade.java +++ b/TravelBuddyApp/src/main/java/fassade/ReiseFassade.java @@ -1,5 +1,65 @@ package fassade; + +import java.util.List; + +import domain.KurztripEmpfehlung; +import domain.Ort; +import domain.Reiseplanung; +import domain.User; + + 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 zufallsorteFahrrad(int maxEntfernung) { + return kurztripEmpfehlung.zufallsorteFahrrad(maxEntfernung); + } + + public List zufallsortePKW(int minEntfernung) { + return kurztripEmpfehlung.zufallsortePKW(minEntfernung); + } + + } diff --git a/TravelBuddyApp/src/main/java/ui/UserInterface.java b/TravelBuddyApp/src/main/java/ui/UserInterface.java index 1b0e921..768b759 100644 --- a/TravelBuddyApp/src/main/java/ui/UserInterface.java +++ b/TravelBuddyApp/src/main/java/ui/UserInterface.java @@ -1,17 +1,24 @@ package ui; +import java.util.List; import java.util.Scanner; +import domain.Ort; +import domain.Reiseplanung; import domain.User; +import fassade.ReiseFassade; import fassade.UserFassade; public class UserInterface { private UserFassade userFacade; + private ReiseFassade reiseFacade; + private User user; private Scanner scanner; public UserInterface() { + this.reiseFacade = new ReiseFassade(); this.userFacade = new UserFassade(); this.scanner = new Scanner(System.in); start(); @@ -37,20 +44,28 @@ public class UserInterface { switch (option) { case 1: registrieren(); - System.out.println("\n================================================================================"); + System.out + .println("\n================================================================================"); break; case 2: einloggen(); - System.out.println("\n================================================================================"); + System.out + .println("\n================================================================================"); break; case 3: sucheOrt(); + System.out + .println("\n================================================================================"); break; case 4: planeReise(); + System.out + .println("\n================================================================================"); break; case 5: kurztripEmpfehlen(); + System.out + .println("\n================================================================================"); break; case 6: System.out.println("Auf Wiedersehen!"); @@ -68,7 +83,7 @@ public class UserInterface { System.out.print("Geben Sie ein Passwort ein: "); String password = scanner.nextLine(); 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: "); String ortName = scanner.nextLine(); 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, 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() { @@ -93,11 +118,11 @@ public class UserInterface { User user = userFacade.einloggen(username, password); if (user != null) { + this.user = user; + reiseFacade.setHeimatortFromUser(user); System.out.println("\nLogin erfolgreich! Willkommen zurück, " + user.getUsername() + "!"); String wetter = user.zeigeWetterHeimatstandort(); System.out.println("Aktuelles Wetter in " + user.getHeimatstandort().getOrtName() + ": " + wetter); - - } else { System.out.println("\nBenutzername oder Passwort ist falsch:("); } @@ -105,38 +130,81 @@ public class UserInterface { private void sucheOrt() { System.out.print("Geben Sie den Namen des Ortes ein: "); - - // die Ortssuche und Wetteranzeige für die nächsten drei Tage + String ortName = scanner.nextLine(); + /* + * List 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() { 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: "); String startOrtName = scanner.nextLine(); - System.out.print("Geben Sie Ihre Ziel-PLZ ein: "); - String zielPLZ = scanner.nextLine(); - System.out.print("Geben Sie Ihren Zielort ein: "); + Ort startort = new Ort(startPlz, startOrtName); + System.out.print("Geben Sie die Ziel-PLZ ein: "); + int zielPlz = Integer.parseInt(scanner.nextLine()); + System.out.print("Geben Sie den Zielort ein: "); 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() { - System.out.println("Empfohlener Kurztrip:"); - // die Empfehlung eines Kurztrips + if (user != null && user.getHeimatstandort() != null) { + 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 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 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) { new UserInterface();