Compare commits

..

No commits in common. "main" and "testmerge" have entirely different histories.

14 changed files with 282 additions and 381 deletions

View File

@ -1,9 +1,2 @@
# TravelBuddyApp # TravelBuddyApp
( Caroline Ufer und Bohdana Illiuk )
Login-Namen:
1. max, 12345
2. lisa, 1111
3. anna, pass123
4. mike, 54321
5. sven, 112233

View File

@ -75,7 +75,7 @@
<transformer <transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass> <mainClass>
ui.UserInterface</mainClass> de.hs_mannheim.informatik.mvn.Main</mainClass>
</transformer> </transformer>
</transformers> </transformers>
</configuration> </configuration>

View File

@ -7,7 +7,6 @@ public class Auto {
public Auto(String name, double co2AusstossProKm) { public Auto(String name, double co2AusstossProKm) {
this.name = name; this.name = name;
this.co2AusstossProKm = co2AusstossProKm; this.co2AusstossProKm = co2AusstossProKm;
} }

View File

@ -1,19 +1,17 @@
package domain; package domain;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Random; import java.util.Random;
public class KurztripEmpfehlung { public class KurztripEmpfehlung {
User user;
private List<Ort> alleOrte; private List<Ort> alleOrte;
private Ort heimatort; private Ort heimatort;
public KurztripEmpfehlung() { public KurztripEmpfehlung(User user) {
this.alleOrte = ladeAlleOrte(); // this.alleOrte = ladeAlleOrte();
this.heimatort = null; this.heimatort = null;
} }
@ -32,7 +30,8 @@ public class KurztripEmpfehlung {
} }
for (Ort ort : alleOrte) { for (Ort ort : alleOrte) {
double entfernung = berechneEntfernung(heimatort, ort); Reiseplanung reise = new Reiseplanung(user, ort);
double entfernung = reise.berechneEntfernung(heimatort, ort);
if (entfernung <= maxEntfernung) { if (entfernung <= maxEntfernung) {
gefilterteOrte.add(ort); gefilterteOrte.add(ort);
} }
@ -43,7 +42,7 @@ public class KurztripEmpfehlung {
return gefilterteOrte; return gefilterteOrte;
} }
return zufallsorteAuswaehlen(gefilterteOrte, 3); return zufallsorteAuswaehlen(gefilterteOrte, Math.min(3, gefilterteOrte.size()));
} }
@ -57,7 +56,8 @@ public class KurztripEmpfehlung {
} }
for (Ort ort : alleOrte) { for (Ort ort : alleOrte) {
double entfernung = berechneEntfernung(heimatort, ort); Reiseplanung reise = new Reiseplanung(user, ort);
double entfernung = reise.berechneEntfernung(heimatort, ort);
if (entfernung >= minEntfernung) { if (entfernung >= minEntfernung) {
gefilterteOrte.add(ort); gefilterteOrte.add(ort);
} }
@ -68,7 +68,7 @@ public class KurztripEmpfehlung {
return gefilterteOrte; return gefilterteOrte;
} }
return zufallsorteAuswaehlen(gefilterteOrte, 3); return zufallsorteAuswaehlen(gefilterteOrte, Math.min(3, gefilterteOrte.size()));
} }
private List<Ort> zufallsorteAuswaehlen(List<Ort> orte, int anzahl) { private List<Ort> zufallsorteAuswaehlen(List<Ort> orte, int anzahl) {
@ -90,49 +90,55 @@ public class KurztripEmpfehlung {
return zufallsorte; return zufallsorte;
} }
public double berechneEntfernung(Ort standort, Ort zielort) { // public double berechneEntfernung(Ort standort, Ort zielort) {
// double b1 = Math.toRadians(standort.getBreitengrad());
double b1 = Math.toRadians(standort.getBreitengrad()); // double b2 = Math.toRadians(zielort.getBreitengrad());
double b2 = Math.toRadians(zielort.getBreitengrad()); // double l1 = Math.toRadians(standort.getLängengrad());
double l1 = Math.toRadians(standort.getLängengrad()); // double l2 = Math.toRadians(zielort.getLängengrad());
double l2 = Math.toRadians(zielort.getLängengrad()); //
// double deltaL = l2 - l1;
double entfernung = (6378.388 // double cosDeltaL = Math.cos(deltaL);
* Math.acos(Math.sin(b1) * Math.sin(b2) + Math.cos(b1) * Math.cos(b2) * Math.cos(l2 - l1))) * 1.25; // double acosArgument = Math.sin(b1) * Math.sin(b2) + Math.cos(b1) * Math.cos(b2) * cosDeltaL;
//
return entfernung; // acosArgument = Math.max(-1.0, Math.min(1.0, acosArgument));
} //
// double entfernung = 6378.388 * Math.acos(acosArgument);
//
// return entfernung;
// }
private List<Ort> ladeAlleOrte() { // private List<Ort> ladeAlleOrte() {
List<Ort> alleOrte = new ArrayList<>(); // List<Ort> alleOrte = new ArrayList<>();
//
// String csvFile = "src/main/resources/PLZ.csv";
// String line;
// try (BufferedReader br = new BufferedReader(new FileReader(csvFile))) {
// while ((line = br.readLine()) != null) {
// line = line.replaceAll("\\s+", "");
// String[] data = line.split(";");
// int plz = Integer.parseInt(data[0].replaceAll("\"", ""));
// String ortName = data[1].replaceAll("\"", "");
// double breitengrad = Double.parseDouble(data[2].replaceAll("\"", ""));
// double laengengrad = Double.parseDouble(data[3].replaceAll("\"", ""));
// Ort ort = new Ort(plz, ortName);
// ort.breitengrad = breitengrad;
// ort.längengrad = laengengrad;
// alleOrte.add(ort);
// }
// } catch (IOException e) {
// System.err.println("Fehler beim Lesen der Datei: " + e.getMessage());
// e.printStackTrace();
// } catch (NumberFormatException | ArrayIndexOutOfBoundsException e) {
// System.err.println("Fehlerhaftes Datenformat in der CSV-Datei: " + e.getMessage());
// e.printStackTrace();
// }
//
// return alleOrte;
// }
String csvFile = "src/main/resources/PLZ.csv"; public Ort getHeimatort() {
String line;
try (BufferedReader br = new BufferedReader(new FileReader(csvFile))) {
while ((line = br.readLine()) != null) {
line = line.replaceAll("\\s+", "");
String[] data = line.split(";");
int plz = Integer.parseInt(data[0].replaceAll("\"", ""));
String ortName = data[1].replaceAll("\"", "");
double breitengrad = Double.parseDouble(data[2].replaceAll("\"", ""));
double laengengrad = Double.parseDouble(data[3].replaceAll("\"", ""));
Ort ort = new Ort(plz, ortName, breitengrad, laengengrad);
alleOrte.add(ort);
}
} catch (IOException e) {
System.err.println("Fehler beim Lesen der Datei: " + e.getMessage());
e.printStackTrace();
} catch (NumberFormatException | ArrayIndexOutOfBoundsException e) {
System.err.println("Fehlerhaftes Datenformat in der CSV-Datei: " + e.getMessage());
e.printStackTrace();
}
return alleOrte;
}
public Object getHeimatort() {
return heimatort; return heimatort;
} }
} }

View File

@ -13,18 +13,10 @@ public class Ort {
public Ort(int plz, String name) { public Ort(int plz, String name) {
this.plz = plz; this.plz = plz;
this.name = name; this.name = name;
// this.breitengrad = breitengrad;
// this.längengrad = längengrad;
} }
public Ort(int plz, String name, double breitengrad, double längengrad) {
this.plz = plz;
this.name = name;
this.breitengrad = breitengrad;
this.längengrad = längengrad;
}
public String getAktuellesWetter() { public String getAktuellesWetter() {
try { try {
return WetterService.getAktuellesWetter(name); return WetterService.getAktuellesWetter(name);

View File

@ -1,7 +1,6 @@
package domain; package domain;
import java.lang.Math; import java.lang.Math;
public class Reiseplanung { public class Reiseplanung {
private Ort standort; private Ort standort;
@ -12,23 +11,25 @@ public class Reiseplanung {
private double co2AusstoßPKW; private double co2AusstoßPKW;
public Reiseplanung(User user, Ort zielort) { public Reiseplanung(User user, Ort zielort) {
this.standort = user.getHeimatstandort();
this.zielort = zielort; this.zielort = zielort;
this.entfernung = berechneEntfernung(standort, zielort);
this.dauerPKW = berechneDauer(user.getDurchschnittsgeschwindigkeitPKW()); Auto auto = user.getAuto();
this.dauerFahrrad = berechneDauer(user.getDurchschnittsgeschwindigkeitFahrrad()); standort = user.getHeimatstandort();
this.co2AusstoßPKW = berechneCO2Ausstoß(user.getAuto()); berechneEntfernung(this.standort, this.zielort);
dauerPKW = berechneDauer(user.getDurchschnittsgeschwindigkeitPKW());
dauerFahrrad = berechneDauer(user.getDurchschnittsgeschwindigkeitFahrrad());
berechneCO2Ausstoß(this.entfernung, auto);
} }
public double berechneEntfernung(Ort standort, Ort zielort) { public double berechneEntfernung(Ort standort, Ort zielort) {
double b1 = Math.toRadians(standort.getBreitengrad()); double b1 = Math.toRadians(standort.getBreitengrad());
double b2 = Math.toRadians(zielort.getBreitengrad()); double b2 = Math.toRadians(zielort.getBreitengrad());
double l1 = Math.toRadians(standort.getLängengrad()); double l1 = Math.toRadians(standort.getLängengrad());
double l2 = Math.toRadians(zielort.getLängengrad()); double l2 = Math.toRadians(zielort.getLängengrad());
entfernung = (6378.388 entfernung = (6378.388 * Math.acos(Math.sin(b1) * Math.sin(b2) + Math.cos(b1) * Math.cos(b2) * Math.cos(l2 - l1))) * 1.25;
* Math.acos(Math.sin(b1) * Math.sin(b2) + Math.cos(b1) * Math.cos(b2) * Math.cos(l2 - l1))) * 1.25;
return entfernung; return entfernung;
} }
@ -40,22 +41,35 @@ public class Reiseplanung {
} }
//berechnet ungefähren CO2 Ausstoß des Autos für eine Strecke //berechnet ungefähren CO2 Ausstoß des Autos für eine Strecke
public double berechneCO2Ausstoß(Auto auto) { public double berechneCO2Ausstoß(double entfernung, Auto auto) {
return entfernung * auto.getCO2AusstossProKm(); co2AusstoßPKW = entfernung * auto.getCO2AusstossProKm();
return co2AusstoßPKW;
} }
public double getEntfernung() { public double getEntfernung() {
return Math.round(entfernung*100.0)/100.0; return entfernung;
} }
@Override
public String toString() { public String toString() {
return String.format( return "Von " + standort + " Nach " + zielort + "\nEntfernung: " + entfernung + "\nReisedauer mit dem PKW: " + dauerPKW + "\nReiserdauer mit dem Fahrrad: " + dauerFahrrad + "\nCO2-Ausstoß durch PKW: " + co2AusstoßPKW;
"Von %s nach %s\nEntfernung: %.1f km\nReisedauer mit dem PKW: %.1f Stunden\nReisedauer mit dem Fahrrad: %.1f Stunden\nCO2-Ausstoß durch PKW: %.1f kg",
standort.getName(), zielort.getName(), entfernung, dauerPKW, dauerFahrrad, 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 String berechneReiseDauer(double durchschnittsgeschwindigkeit) {
// double dauer = entfernung / durchschnittsgeschwindigkeit;
// return String.format("Die Reise dauert ca. %.2f Stunden.", dauer);
// }
public double getDauerPKW() { public double getDauerPKW() {
return dauerPKW; return dauerPKW;
} }

View File

@ -92,7 +92,6 @@ public class User {
} }
public boolean einloggen() { public boolean einloggen() {
try (BufferedReader reader = new BufferedReader(new FileReader("users.txt"))) { try (BufferedReader reader = new BufferedReader(new FileReader("users.txt"))) {
String line; String line;
while ((line = reader.readLine()) != null) { while ((line = reader.readLine()) != null) {

View File

@ -13,7 +13,6 @@ import org.json.JSONObject;
public class WetterService { public class WetterService {
private static final String API_KEY = "fc01dfd47f80659f12512c295e80b201"; private static final String API_KEY = "fc01dfd47f80659f12512c295e80b201";
private static final HttpClient client = HttpClient.newHttpClient(); private static final HttpClient client = HttpClient.newHttpClient();

View File

@ -4,40 +4,28 @@ import java.io.BufferedReader;
import java.io.FileReader; import java.io.FileReader;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashSet;
import domain.Ort; import domain.Ort;
import domain.Reiseplanung; import domain.Reiseplanung;
import domain.User; import domain.User;
import domain.WetterService;
import java.util.List; import java.util.List;
import java.util.Set;
import domain.KurztripEmpfehlung; import domain.KurztripEmpfehlung;
public class ReiseFassade { public class ReiseFassade {
private Reiseplanung reiseplanung; private Reiseplanung reiseplanung;
private KurztripEmpfehlung kurztripEmpfehlung; private KurztripEmpfehlung kurztripEmpfehlung;
User user; User user;
List<Ort> alleOrte; List<Ort> alleOrte;
public ReiseFassade(User user) { public ReiseFassade(User user) {
this.kurztripEmpfehlung = new KurztripEmpfehlung();
alleOrte = ladeAlleOrte(); alleOrte = ladeAlleOrte();
// this.kurztripEmpfehlung = new KurztripEmpfehlung();
} }
public void setHeimatortFromUser(User user) {
Ort heimatort = user.getHeimatstandort();
this.kurztripEmpfehlung.setHeimatort(heimatort);
}
public List<Ort> ladeAlleOrte() { public List<Ort> ladeAlleOrte() {
List<Ort> alleOrte = new ArrayList<>(); List<Ort> alleOrte = new ArrayList<>();
@ -67,78 +55,83 @@ public class ReiseFassade {
return alleOrte; return alleOrte;
} }
// //lädt Datei aus rescources ein und speichert Orte in HashSet ab
// private void orteLaden() throws FileNotFoundException {
//
// //UserInterface.class.getClass().getResourceAsStream("resources/PLZ.csv");
// Scanner sc = new Scanner(new File("resources/PLZ.csv"));
//
// int zähler = 0;
// while (sc.hasNextLine()) {
// String ort = sc.nextLine();
//
// String[] spalten = ort.split(";");
//
// orte.add(new Ort(Integer.parseInt(spalten[0]), spalten[1], Double.parseDouble(spalten[2]), Double.parseDouble(spalten[3])));
//
// zähler++;
// }
//
// System.out.println(zähler + "Orte geladen.");
// }
//gibt Trefferliste passend zum Suchbegriff zurück
public Ort[] sucheOrt(String suchbegriff) { public Ort[] sucheOrt(String suchbegriff) {
Set<Ort> trefferSet = new HashSet<>(); List<Ort> trefferliste = new ArrayList<>();
// String ausgabe = " ";
if (suchbegriff.equalsIgnoreCase("alle")) { //gibt alle Orte zurück
trefferSet.addAll(alleOrte); if(suchbegriff.equals("alle"))
} else { trefferliste = alleOrte;
else
//läuft über set orte
for(Ort o : alleOrte) { for(Ort o : alleOrte) {
if (o.getName().contains(suchbegriff) && trefferSet.size() < 8) { //fügt ort zur Trefferliste hinzu wenn der Suchbegriff im Namen ist und weniger als 8 Orte bereits drauf stehen
trefferSet.add(o); if(o.getName().contains(suchbegriff) && trefferliste.size()<8)
trefferliste.add(o);
} }
//
// for(Ort o : trefferliste) {
// ausgabe = ausgabe + o.getName() + " Entfernung: " + new Reiseplanung(user, o).getEntfernung() + "\n";
// }
return trefferliste.toArray(new Ort[0]);
} }
}
return trefferSet.toArray(new Ort[0]);
}
public String anzeigeTrefferliste(Ort[] trefferliste) { public String anzeigeTrefferliste(Ort[] trefferliste) {
StringBuilder ausgabe = new StringBuilder(); String ausgabe = " ";
int i = 1; int i = 1;
for(Ort o : trefferliste) { for(Ort o : trefferliste) {
double entfernung = new Reiseplanung(user, o).getEntfernung(); ausgabe = ausgabe + i + o.getName() + " Entfernung: " + new Reiseplanung(user, o).getEntfernung() + "\n";
ausgabe.append(i).append(". ").append(o.getName()).append(" (Entfernung: ")
.append(entfernung).append(" km)\n");
String wettervorhersage = getWettervorhersage(o.getName());
ausgabe.append(wettervorhersage).append("\n");
i++; i++;
} }
return ausgabe;
return ausgabe.toString();
} }
public String ortAnzeige(int index, Ort[] trefferliste) { public String ortAnzeige(int index, Ort[] trefferliste) {
String anzeige = " "; String anzeige = " ";
anzeige = trefferliste[index - 1].getName() + " " + trefferliste[index - 1].getPLZ() + " " anzeige = trefferliste[index-1].getName() + trefferliste[index-1].getPLZ() + trefferliste[index-1].getWettervorhersage();
+ trefferliste[index - 1].getWettervorhersage();
return anzeige; return anzeige;
} }
/*public Reiseplanung planeReise(Ort startort, Ort zielort) {
Reiseplanung reiseplanung = new Reiseplanung(startort, zielort);
reiseplanung.berechneEntfernung();
reiseplanung.berechneReisedauerPKW();
reiseplanung.berechneReisedauerFahrrad();
reiseplanung.berechneCo2Ausstoss();
return reiseplanung;
}*/
public String getReiseplanung(User user, Ort ziel) { public String getReiseplanung(User user, Ort ziel) {
reiseplanung = new Reiseplanung(user, ziel); reiseplanung = new Reiseplanung(user, ziel);
return reiseplanung.toString(); return reiseplanung.toString();
} }
public void setHeimatortFromUser(User user) {
kurztripEmpfehlung.setHeimatort(user.getHeimatstandort());
public String getAktuellesWetter(String ortName) {
try {
return WetterService.getAktuellesWetter(ortName);
} catch (IOException | InterruptedException e) {
return "Fehler beim Abrufen des Wetters: " + e.getMessage();
}
} }
public String getWettervorhersage(String ortName) {
try {
return WetterService.getWettervorhersage(ortName);
} catch (IOException | InterruptedException e) {
return "Fehler beim Abrufen des Wetters: " + e.getMessage();
}
}
public double berechneEntfernung() { public double berechneEntfernung() {
return reiseplanung.getEntfernung(); return reiseplanung.getEntfernung();
@ -158,6 +151,7 @@ public class ReiseFassade {
return reiseplanung.getCO2Ausstoß(); return reiseplanung.getCO2Ausstoß();
} }
public List<Ort> zufallsorteFahrrad(int maxEntfernung) { public List<Ort> zufallsorteFahrrad(int maxEntfernung) {
return kurztripEmpfehlung.zufallsorteFahrrad(maxEntfernung); return kurztripEmpfehlung.zufallsorteFahrrad(maxEntfernung);
} }

View File

@ -6,7 +6,6 @@ import domain.Auto;
public class UserFassade { public class UserFassade {
public User registrieren(String username, String password, int plz, String ortName, String autoName, public User registrieren(String username, String password, int plz, String ortName, String autoName,
double co2AusstossProKm, double durchschnittsgeschwindigkeitPKW, double co2AusstossProKm, double durchschnittsgeschwindigkeitPKW,
double durchschnittsgeschwindigkeitFahrrad) { double durchschnittsgeschwindigkeitFahrrad) {
@ -19,7 +18,6 @@ public class UserFassade {
} }
public User einloggen(String username, String password) { public User einloggen(String username, String password) {
User user = new User(username, password, null, null, 0, 0); User user = new User(username, password, null, null, 0, 0);
if (user.einloggen()) { if (user.einloggen()) {
return user; return user;

View File

@ -3,9 +3,7 @@ package ui;
import java.util.List; import java.util.List;
import java.util.Scanner; import java.util.Scanner;
import domain.KurztripEmpfehlung;
import domain.Ort; import domain.Ort;
import domain.Reiseplanung;
import domain.User; import domain.User;
import fassade.ReiseFassade; import fassade.ReiseFassade;
import fassade.UserFassade; import fassade.UserFassade;
@ -30,7 +28,6 @@ public class UserInterface {
boolean exit = false; boolean exit = false;
System.out.println("\t\t\t Willkommen zur Travel-Buddy-App!"); System.out.println("\t\t\t Willkommen zur Travel-Buddy-App!");
System.out.println("\t\t\t --------------------------------"); System.out.println("\t\t\t --------------------------------");
while (!exit) { while (!exit) {
System.out.println("1. Registrieren"); System.out.println("1. Registrieren");
System.out.println("2. Einloggen"); System.out.println("2. Einloggen");
@ -130,85 +127,54 @@ 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(); String ortName = scanner.nextLine();
// reiseFacade.sucheOrt(ortName);
Ort[] trefferliste = reiseFacade.sucheOrt(ortName);
System.out.println(reiseFacade.anzeigeTrefferliste(trefferliste));
// Search for the location
Ort[] treffer = reiseFacade.sucheOrt(ortName);
if (treffer.length == 0) {
System.out.println("Keine Treffer gefunden.");
} else {
System.out.println("Trefferliste:");
for (int i = 0; i < treffer.length; i++) {
Reiseplanung reiseplanung = new Reiseplanung(user, treffer[i]);
System.out.println((i + 1) + ". " + treffer[i].getName() + " (PLZ: " + treffer[i].getPLZ() +
"), Entfernung: " + reiseplanung.getEntfernung() + " km");
String wettervorhersage = reiseFacade.getWettervorhersage(treffer[i].getName());
System.out.println(wettervorhersage);
}
// Display the current weather at the user's home location
String wetter = reiseFacade.getAktuellesWetter(user.getHeimatstandort().getName());
System.out.println("Aktuelles Wetter in " + user.getHeimatstandort().getName() + ": " + wetter);
// Choose a location from the list
System.out.println("Wählen Sie einen Ort aus: "); System.out.println("Wählen Sie einen Ort aus: ");
System.out.println("Geben Sie 'beenden' ein, um zu beenden"); System.out.println("Geben Sie ´beenden` ein, um zu beenden");
String input = scanner.nextLine(); String input = scanner.nextLine();
if(input == "beenden") {
if (input.equalsIgnoreCase("beenden")) {
return; return;
} }
try {
int eingabe = Integer.parseInt(input); int eingabe = Integer.parseInt(input);
if (eingabe < 1 || eingabe > treffer.length) { reiseFacade.ortAnzeige(eingabe, trefferliste);
System.out.println("Ungültige Auswahl. Bitte versuchen Sie es erneut."); /*
} else { * List<Ort> treffer = reiseFacade.sucheOrt(ortName); if (treffer.isEmpty()) {
System.out.println(reiseFacade.ortAnzeige(eingabe, treffer)); * 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); } }
*/
} }
} catch (NumberFormatException e) {
System.out.println("Ungültige Eingabe. Bitte geben Sie eine Zahl ein.");
}
}
}
private void planeReise() { private void planeReise() {
// System.out.print("Geben Sie Ihre Start-PLZ ein: ");
// int startPlz = Integer.parseInt(scanner.nextLine());
// System.out.print("Geben Sie Ihren Startort ein: ");
// String startOrtName = scanner.nextLine();
// Ort startort = new Ort(startPlz, startOrtName);
System.out.print("Geben Sie die Ziel-PLZ ein: "); System.out.print("Geben Sie die Ziel-PLZ ein: ");
int zielPlz = Integer.parseInt(scanner.nextLine()); int zielPlz = Integer.parseInt(scanner.nextLine());
System.out.print("Geben Sie den Zielort ein: "); System.out.print("Geben Sie den Zielort ein: ");
String zielOrtName = scanner.nextLine(); String zielOrtName = scanner.nextLine();
Ort zielort = new Ort(zielPlz, zielOrtName);
// Lade alle Orte, um den Ort mit den GPS-Koordinaten zu erhalten
List<Ort> alleOrte = reiseFacade.ladeAlleOrte();
Ort zielort = null;
for (Ort ort : alleOrte) {
if (ort.getPLZ() == zielPlz && ort.getName().equalsIgnoreCase(zielOrtName)) {
zielort = ort;
break;
}
}
if (zielort != null) {
System.out.println(reiseFacade.getReiseplanung(user, zielort)); System.out.println(reiseFacade.getReiseplanung(user, zielort));
} else { /*
System.out.println("Der Zielort wurde nicht gefunden."); * 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() {
if (user != null && user.getHeimatstandort() != null) { if (user != null && user.getHeimatstandort() != null) {
@ -219,56 +185,40 @@ public class UserInterface {
System.out.print("Wählen Sie ein Transportmittel (Fahrrad/Auto): "); System.out.print("Wählen Sie ein Transportmittel (Fahrrad/Auto): ");
String transportmittel = scanner.nextLine().trim().toLowerCase(); String transportmittel = scanner.nextLine().trim().toLowerCase();
List<Ort> empfohleneOrte = null;
switch (transportmittel) { switch (transportmittel) {
case "fahrrad": case "fahrrad":
empfohleneOrte = reiseFacade.zufallsorteFahrrad(10000); List<Ort> fahrradOrte = reiseFacade.zufallsorteFahrrad(10000);
//List<Ort> fahrradOrte = reiseFacade.zufallsorteFahrrad(10000); if (fahrradOrte.isEmpty()) {
/*if (fahrradOrte.isEmpty()) {
System.out.println("Keine Orte innerhalb von 100 km gefunden."); System.out.println("Keine Orte innerhalb von 100 km gefunden.");
} else { } else {
System.out.println("Folgende Orte wurden für einen Fahrrad-Kurztrip empfohlen:"); System.out.println("Folgende Orte wurden für einen Fahrrad-Kurztrip empfohlen:");
for (Ort ort : fahrradOrte) { for (Ort ort : fahrradOrte) {
System.out.println("- " + ort.getOrtName() + " (PLZ: " + ort.getPLZ() + ")"); System.out.println("- " + ort.getName() + " (PLZ: " + ort.getPLZ() + ")");
}
} }
}*/
break; break;
case "auto": case "auto":
empfohleneOrte = reiseFacade.zufallsortePKW(150); List<Ort> autoOrte = reiseFacade.zufallsortePKW(150);
//List<Ort> autoOrte = reiseFacade.zufallsortePKW(150); if (autoOrte.isEmpty()) {
/*if (autoOrte.isEmpty()) {
System.out.println("Keine Orte mindestens 150 km entfernt gefunden."); System.out.println("Keine Orte mindestens 150 km entfernt gefunden.");
} else { } else {
System.out.println("Folgende Orte wurden für einen Auto-Kurztrip empfohlen:"); System.out.println("Folgende Orte wurden für einen Auto-Kurztrip empfohlen:");
for (Ort ort : autoOrte) { for (Ort ort : autoOrte) {
System.out.println("- " + ort.getOrtName() + " (PLZ: " + ort.getPLZ() + ")"); System.out.println("- " + ort.getName() + " (PLZ: " + ort.getPLZ() + ")");
}
} }
}*/
break; break;
default: default:
System.out.println("Ungültige Option. Bitte wählen Sie entweder 'Fahrrad' oder 'Auto'."); System.out.println("Ungültige Option. Bitte wählen Sie entweder 'Fahrrad' oder 'Auto'.");
break; break;
} }
if (!empfohleneOrte.isEmpty()) {
System.out.println("Empfohlene Orte:");
KurztripEmpfehlung kurztripEmpfehlung = new KurztripEmpfehlung();
for (Ort ort : empfohleneOrte) {
double entfernung = kurztripEmpfehlung.berechneEntfernung(user.getHeimatstandort(), ort);
System.out.printf("- %s (PLZ: %d, Entfernung: %.1f km)%n", ort.getName(), ort.getPLZ(), entfernung);
}
} else {
System.out.println("Keine Orte gefunden.");
}
} else { } else {
System.out.println("Bitte zuerst einloggen und Heimatort angeben!"); 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();

View File

@ -1,80 +1,40 @@
package domain; package domain;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import org.junit.Before;
import org.junit.Test; import org.junit.Test;
public class ReiseplanungTest { public class ReiseplanungTest {
private Auto auto; Auto auto = new Auto("Brummi", 167.6);
private Ort startOrt; Ort ort = new Ort(1067, "Dresden", 13.7210676148814, 51.0600336463379);
private Ort zielOrt; User user = new User("Karl", "hallo", ort, auto, 30, 15);
private User user; Ort ziel = new Ort(1705, "Freital", 13.6382950999229, 50.9981963286759);
private Reiseplanung reiseplanung; Reiseplanung reise = new Reiseplanung(user,ziel);
@Before
public void setUp() {
auto = new Auto("Brummi", 167.6); // CO2-Ausstoß in g/km
startOrt = new Ort(1067, "Dresden", 13.7210676148814, 51.0600336463379);
user = new User("Karl", "hallo", startOrt, auto, 70, 15); // Durchschnittsgeschwindigkeit PKW und Fahrrad
zielOrt = new Ort(1705, "Freital", 13.6382950999229, 50.9981963286759);
reiseplanung = new Reiseplanung(user, zielOrt);
}
@Test @Test
public void testBerechneEntfernung() { public void testBerechneEntfernung() {
double result = reiseplanung.berechneEntfernung(startOrt, zielOrt);
// This value needs to be verified and adjusted if necessary double result = reise.berechneEntfernung(ort, ziel);
assertEquals(14.2125, result, 0.1);
assertEquals(14.2125, result, 0.0);
} }
@Test @Test
public void testBerechneDauer() { public void testBerechneDauer() {
double entfernung = 136.5; double entfernung = 136.5;
double geschwindigkeit = 70; // Durchschnittsgeschwindigkeit in km/h double geschwindigkeit = 70;
double result = reiseplanung.berechneDauer(geschwindigkeit);
assertEquals(1.95, result, 0.01); double result = reise.berechneDauer(entfernung, geschwindigkeit);
assertEquals(1.95, result, 0.0);
} }
@Test
public void testBerechneCO2Ausstoß() { public void testBerechneCO2Ausstoß() {
double entfernung = 73.8; double entfernung = 73.8;
double result = reiseplanung.berechneCO2Ausstoß(auto);
assertEquals(12368.88, result, 0.01);
}
@Test double result = reise.berechneCO2Ausstoß(entfernung, auto);
public void testGetEntfernung() {
assertEquals(14.2125, reiseplanung.getEntfernung(), 0.1);
}
@Test assertEquals(12368.88, result, 0.0);
public void testGetDauerPKW() {
double geschwindigkeit = user.getDurchschnittsgeschwindigkeitPKW();
double erwarteteDauer = 14.2125 / geschwindigkeit;
assertEquals(erwarteteDauer, reiseplanung.getDauerPKW(), 0.1);
}
@Test
public void testGetDauerFahrrad() {
double geschwindigkeit = user.getDurchschnittsgeschwindigkeitFahrrad();
double erwarteteDauer = 14.2125 / geschwindigkeit;
assertEquals(erwarteteDauer, reiseplanung.getDauerFahrrad(), 0.1);
}
@Test
public void testGetCO2Ausstoß() {
double erwarteterCO2Ausstoß = 14.2125 * auto.getCO2AusstossProKm();
assertEquals(erwarteterCO2Ausstoß, reiseplanung.getCO2Ausstoß(), 0.1);
}
@Test
public void testToString() {
String expected = "Von " + startOrt.getName() + " Nach " + zielOrt.getName() +
"\nEntfernung: " + reiseplanung.getEntfernung() +
"\nReisedauer mit dem PKW: " + reiseplanung.getDauerPKW() +
"\nReisedauer mit dem Fahrrad: " + reiseplanung.getDauerFahrrad() +
"\nCO2-Ausstoß durch PKW: " + reiseplanung.getCO2Ausstoß();
assertEquals(expected, reiseplanung.toString());
} }
} }

View File

@ -64,7 +64,7 @@ public class UserTest {
assertTrue(testUser.einloggen()); assertTrue(testUser.einloggen());
// Überprüfe, ob die Userdaten korrekt gesetzt wurden // Überprüfe, ob die Userdaten korrekt gesetzt wurden
assertEquals("Teststadt", testUser.getHeimatstandort().getName()); assertEquals("Teststadt", testUser.getHeimatstandort().getOrtName());
assertEquals("Testauto", testUser.getAuto().getName()); assertEquals("Testauto", testUser.getAuto().getName());
assertEquals(0.12, testUser.getAuto().getCO2AusstossProKm(), 0.001); // Delta für Genauigkeit assertEquals(0.12, testUser.getAuto().getCO2AusstossProKm(), 0.001); // Delta für Genauigkeit
assertEquals(80.0, testUser.getDurchschnittsgeschwindigkeitPKW(), 0.001); // Delta für Genauigkeit assertEquals(80.0, testUser.getDurchschnittsgeschwindigkeitPKW(), 0.001); // Delta für Genauigkeit

View File

@ -1,6 +1,3 @@
max,5994471abb01112afcc18159f6cc74b4f511b99806da59b3caf5a9c173cacfc5,10115,Berlin,VW,120.0,60.0,20.0 dana,a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3,67105,Schifferstadt,audi,123.0,60.0,30.0
lisa,0ffe1abd1a08215353c233d6e009613e95eec4253832a761af28ff37ac5a150c,80331,Münnchen,auto,120.0,60.0,30.0 max,a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3,555,berlin,audi,12.0,23.0,34.0
anna,9b8769a4a742959a2d0298c36fb70623f2dfacda8436237df08d8dfd5b37374c,76131,Karlsruhe,auto1,110.0,60.0,20.0 tina,a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3,1328,Dresden,audi,12.0,34.0,56.0
mike,20f3765880a5c269b747e1e906054a4b4a3a991259f1e16b5dde4742cec2319a,68159,Mannheim,auti2,130.0,50.0,20.0
sven,e0bc60c82713f64ef8a57c0c40d02ce24fd0141d5cc3086259c19b1e62a62bea,69115,Heidelberg,auto3,120.0,60.0,30.0