Compare commits

..

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

17 changed files with 179 additions and 479 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

@ -36,6 +36,5 @@
<attribute name="maven.pomderived" value="true"/> <attribute name="maven.pomderived" value="true"/>
</attributes> </attributes>
</classpathentry> </classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>
<classpathentry kind="output" path="target/classes"/> <classpathentry kind="output" path="target/classes"/>
</classpath> </classpath>

View File

@ -79,26 +79,18 @@
</plugins> </plugins>
</build> </build>
<dependencies> <dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.1</version>
<scope>test</scope>
<exclusions>
<exclusion>
<artifactId>hamcrest-core</artifactId>
<groupId>org.hamcrest</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency> <dependency>
<groupId>org.junit.jupiter</groupId> <groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId> <artifactId>junit-jupiter-api</artifactId>
<version>5.9.3</version> <version>5.8.1</version>
<scope>test</scope> <scope>test</scope>
<exclusions> <exclusions>
<exclusion> <exclusion>
<artifactId>junit-platform-engine</artifactId> <artifactId>opentest4j</artifactId>
<groupId>org.opentest4j</groupId>
</exclusion>
<exclusion>
<artifactId>junit-platform-commons</artifactId>
<groupId>org.junit.platform</groupId> <groupId>org.junit.platform</groupId>
</exclusion> </exclusion>
<exclusion> <exclusion>
@ -109,13 +101,13 @@
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.junit.jupiter</groupId> <groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId> <artifactId>junit-jupiter-engine</artifactId>
<version>5.9.3</version> <version>5.8.1</version>
<scope>test</scope> <scope>test</scope>
<exclusions> <exclusions>
<exclusion> <exclusion>
<artifactId>opentest4j</artifactId> <artifactId>junit-platform-engine</artifactId>
<groupId>org.opentest4j</groupId> <groupId>org.junit.platform</groupId>
</exclusion> </exclusion>
<exclusion> <exclusion>
<artifactId>apiguardian-api</artifactId> <artifactId>apiguardian-api</artifactId>
@ -123,18 +115,6 @@
</exclusion> </exclusion>
</exclusions> </exclusions>
</dependency> </dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-commons</artifactId>
<version>1.9.3</version>
<scope>test</scope>
<exclusions>
<exclusion>
<artifactId>apiguardian-api</artifactId>
<groupId>org.apiguardian</groupId>
</exclusion>
</exclusions>
</dependency>
</dependencies> </dependencies>
<properties> <properties>
<maven.compiler.target>21</maven.compiler.target> <maven.compiler.target>21</maven.compiler.target>

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

@ -5,9 +5,7 @@ public class Auto {
private String name; private String name;
private double co2AusstossProKm; private double co2AusstossProKm;
public Auto(String name, double co2AusstossProKm) { public Auto(String name, double co2AusstossProKm) {
this.name = name; this.name = name;
this.co2AusstossProKm = co2AusstossProKm; this.co2AusstossProKm = co2AusstossProKm;
} }
@ -27,5 +25,5 @@ public class Auto {
public void setCO2AusstossProKm(double co2AusstossProKm) { public void setCO2AusstossProKm(double co2AusstossProKm) {
this.co2AusstossProKm = co2AusstossProKm; this.co2AusstossProKm = co2AusstossProKm;
} }
} }

View File

@ -43,7 +43,7 @@ public class KurztripEmpfehlung {
return gefilterteOrte; return gefilterteOrte;
} }
return zufallsorteAuswaehlen(gefilterteOrte, 3); return zufallsorteAuswaehlen(gefilterteOrte, Math.min(3, gefilterteOrte.size()));
} }
@ -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) {
@ -91,20 +91,27 @@ public class KurztripEmpfehlung {
} }
public double berechneEntfernung(Ort standort, Ort zielort) { 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());
double b1 = Math.toRadians(standort.getBreitengrad()); double deltaL = l2 - l1;
double b2 = Math.toRadians(zielort.getBreitengrad()); double cosDeltaL = Math.cos(deltaL);
double l1 = Math.toRadians(standort.getLängengrad()); double acosArgument = Math.sin(b1) * Math.sin(b2) + Math.cos(b1) * Math.cos(b2) * cosDeltaL;
double l2 = Math.toRadians(zielort.getLängengrad());
double entfernung = (6378.388 acosArgument = Math.max(-1.0, Math.min(1.0, acosArgument));
* Math.acos(Math.sin(b1) * Math.sin(b2) + Math.cos(b1) * Math.cos(b2) * Math.cos(l2 - l1))) * 1.25;
return entfernung; 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<>();

View File

@ -1,33 +1,41 @@
package domain; package domain;
import java.io.IOException; import java.io.IOException;
public class Ort { public class Ort {
private int plz; private String plz;
private String name; private String OrtName;
public double breitengrad;
public double längengrad; public Ort(String plz, String name) {
public Ort(int plz, String name) {
this.plz = plz;
this.name = name;
}
public Ort(int plz, String name, double breitengrad, double längengrad) {
this.plz = plz; this.plz = plz;
this.name = name; this.OrtName = name;
this.breitengrad = breitengrad; }
this.längengrad = längengrad;
public String getPLZ() {
return plz;
}
public void setPLZ(String plz) {
this.plz = plz;
}
public String getOrtName() {
return OrtName;
}
public void setName(String name) {
this.OrtName = name;
}
@Override
public String toString() {
return OrtName + " (" + plz + ")";
} }
public String getAktuellesWetter() { public String getAktuellesWetter() {
try { try {
return WetterService.getAktuellesWetter(name); return WetterService.getAktuellesWetter(OrtName);
} catch (IOException | InterruptedException e) { } catch (IOException | InterruptedException e) {
e.printStackTrace(); e.printStackTrace();
return "Fehler beim Abrufen des aktuellen Wetters"; return "Fehler beim Abrufen des aktuellen Wetters";
@ -35,30 +43,11 @@ public class Ort {
} }
public String getWettervorhersage() { public String getWettervorhersage() {
try { try {
return WetterService.getWettervorhersage(name); return WetterService.getWettervorhersage(OrtName);
} catch (IOException | InterruptedException e) { } catch (IOException | InterruptedException e) {
e.printStackTrace(); e.printStackTrace();
return "Fehler beim Abrufen der Wettervorhersage"; return "Fehler beim Abrufen der Wettervorhersage";
} }
}
public String getName() {
return name;
}
public int getPLZ() {
return plz;
}
public double getBreitengrad() {
return breitengrad;
}
public double getLängengrad() {
return längengrad;
} }
} }

View File

@ -1,7 +1,5 @@
package domain; package domain;
import java.lang.Math;
public class Reiseplanung { public class Reiseplanung {
private Ort standort; private Ort standort;
@ -11,49 +9,40 @@ public class Reiseplanung {
private double dauerFahrrad; private double dauerFahrrad;
private double co2AusstoßPKW; private double co2AusstoßPKW;
public Reiseplanung(User user, Ort zielort) { public Reiseplanung(Ort standort, Ort zielort, double durchschnittsgeschwindigkeitPKW,
this.standort = user.getHeimatstandort(); double durchschnittsgeschwindigkeitFahrrad, double co2AusstossProKmPKW) {
this.standort = standort;
this.zielort = zielort; this.zielort = zielort;
this.entfernung = berechneEntfernung(standort, zielort); this.entfernung = berechneEntfernung(standort, zielort);
this.dauerPKW = berechneDauer(user.getDurchschnittsgeschwindigkeitPKW()); this.dauerPKW = entfernung / durchschnittsgeschwindigkeitPKW;
this.dauerFahrrad = berechneDauer(user.getDurchschnittsgeschwindigkeitFahrrad()); this.dauerFahrrad = entfernung / durchschnittsgeschwindigkeitFahrrad;
this.co2AusstoßPKW = berechneCO2Ausstoß(user.getAuto()); this.co2AusstoßPKW = entfernung * co2AusstossProKmPKW;
} }
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 return 6378.388 * Math.acos(Math.sin(b1) * Math.sin(b2) + Math.cos(b1) * Math.cos(b2) * Math.cos(l2 - l1));
* Math.acos(Math.sin(b1) * Math.sin(b2) + Math.cos(b1) * Math.cos(b2) * Math.cos(l2 - l1))) * 1.25; }
public double getEntfernung() {
return entfernung; return entfernung;
} }
// berechnet die ungefähre Dauer zum gewählten Ort
public double berechneDauer(double geschwindigkeit) {
return entfernung / geschwindigkeit; public String berechneReiseDauer(double durchschnittsgeschwindigkeit) {
double dauer = entfernung / durchschnittsgeschwindigkeit;
return String.format("Die Reise dauert ca. %.2f Stunden.", dauer);
} }
// berechnet ungefähren CO2 Ausstoß des Autos für eine Strecke public double berechneCO2Ausstoss() {
public double berechneCO2Ausstoß(Auto auto) { return co2AusstoßPKW;
return entfernung * auto.getCO2AusstossProKm();
}
public double getEntfernung() {
return Math.round(entfernung*100.0)/100.0;
}
@Override
public String toString() {
return String.format(
"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 double getDauerPKW() { public double getDauerPKW() {
@ -63,8 +52,8 @@ public class Reiseplanung {
public double getDauerFahrrad() { public double getDauerFahrrad() {
return dauerFahrrad; return dauerFahrrad;
} }
public double getCO2Ausstoß() {
return co2AusstoßPKW;
}
} }

View File

@ -12,7 +12,7 @@ public class User {
private String username; private String username;
private String hashedPassword; private String hashedPassword;
private Ort heimatstandort; private Ort heimatstandort;
public Auto auto; private Auto auto;
private double durchschnittsgeschwindigkeitPKW; private double durchschnittsgeschwindigkeitPKW;
private double durchschnittsgeschwindigkeitFahrrad; private double durchschnittsgeschwindigkeitFahrrad;
@ -83,7 +83,7 @@ public class User {
try (PrintWriter writer = new PrintWriter(new FileWriter("users.txt", true))) { try (PrintWriter writer = new PrintWriter(new FileWriter("users.txt", true))) {
writer.println(username + "," + hashedPassword + "," + heimatstandort.getPLZ() + "," writer.println(username + "," + hashedPassword + "," + heimatstandort.getPLZ() + ","
+ heimatstandort.getName() + "," + auto.getName() + "," + auto.getCO2AusstossProKm() + "," + heimatstandort.getOrtName() + "," + auto.getName() + "," + auto.getCO2AusstossProKm() + ","
+ durchschnittsgeschwindigkeitPKW + "," + durchschnittsgeschwindigkeitFahrrad); + durchschnittsgeschwindigkeitPKW + "," + durchschnittsgeschwindigkeitFahrrad);
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
@ -92,30 +92,28 @@ 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) {
String[] parts = line.split(","); String[] parts = line.split(",");
if (parts[0].equals(username) && parts[1].equals(hashedPassword)) { if (parts[0].equals(username) && parts[1].equals(hashedPassword)) {
int plz = Integer.parseInt(parts[2]); this.heimatstandort = new Ort(parts[2], parts[3]);
this.heimatstandort = new Ort(plz, parts[3]); this.auto = new Auto(parts[4], Double.parseDouble(parts[5]));
this.auto = new Auto(parts[4], Double.parseDouble(parts[5])); this.durchschnittsgeschwindigkeitPKW = Double.parseDouble(parts[6]);
this.durchschnittsgeschwindigkeitPKW = Double.parseDouble(parts[6]); this.durchschnittsgeschwindigkeitFahrrad = Double.parseDouble(parts[7]);
this.durchschnittsgeschwindigkeitFahrrad = Double.parseDouble(parts[7]); return true;
return true; }
} }
} } catch (IOException e) {
} catch (IOException e) { e.printStackTrace();
e.printStackTrace(); }
} return false;
return false;
} }
public String zeigeWetterHeimatstandort() { public String zeigeWetterHeimatstandort() {
try { try {
return WetterService.getAktuellesWetter(heimatstandort.getName()); return WetterService.getAktuellesWetter(heimatstandort.getOrtName());
} catch (IOException | InterruptedException e) { } catch (IOException | InterruptedException e) {
return "Fehler beim Abrufen des Wetters: " + e.getMessage(); return "Fehler beim Abrufen des Wetters: " + e.getMessage();
} }
@ -123,7 +121,7 @@ public class User {
public String zeigeWettervorhersageHeimatstandort() { public String zeigeWettervorhersageHeimatstandort() {
try { try {
return WetterService.getWettervorhersage(heimatstandort.getName()); return WetterService.getWettervorhersage(heimatstandort.getOrtName());
} catch (IOException | InterruptedException e) { } catch (IOException | InterruptedException e) {
return "Fehler beim Abrufen der Wettervorhersage: " + e.getMessage(); return "Fehler beim Abrufen der Wettervorhersage: " + e.getMessage();
} }

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

@ -1,169 +1,65 @@
package fassade; package fassade;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import domain.KurztripEmpfehlung;
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.Set;
import domain.KurztripEmpfehlung;
public class ReiseFassade { public class ReiseFassade {
private Reiseplanung reiseplanung; private Reiseplanung reiseplanung;
private KurztripEmpfehlung kurztripEmpfehlung; private KurztripEmpfehlung kurztripEmpfehlung;
User user;
List<Ort> alleOrte;
public ReiseFassade(User user) { public ReiseFassade() {
this.kurztripEmpfehlung = new KurztripEmpfehlung(); this.kurztripEmpfehlung = new KurztripEmpfehlung();
alleOrte = ladeAlleOrte();
}
public void setHeimatortFromUser(User user) {
Ort heimatort = user.getHeimatstandort();
this.kurztripEmpfehlung.setHeimatort(heimatort);
}
public List<Ort> ladeAlleOrte() {
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;
}
public Ort[] sucheOrt(String suchbegriff) {
Set<Ort> trefferSet = new HashSet<>();
if (suchbegriff.equalsIgnoreCase("alle")) {
trefferSet.addAll(alleOrte);
} else {
for (Ort o : alleOrte) {
if (o.getName().contains(suchbegriff) && trefferSet.size() < 8) {
trefferSet.add(o);
}
}
}
return trefferSet.toArray(new Ort[0]);
} }
public String anzeigeTrefferliste(Ort[] trefferliste) {
StringBuilder ausgabe = new StringBuilder();
int i = 1;
for (Ort o : trefferliste) { /*public Reiseplanung planeReise(Ort startort, Ort zielort) {
double entfernung = new Reiseplanung(user, o).getEntfernung(); Reiseplanung reiseplanung = new Reiseplanung(startort, zielort);
ausgabe.append(i).append(". ").append(o.getName()).append(" (Entfernung: ") reiseplanung.berechneEntfernung();
.append(entfernung).append(" km)\n"); reiseplanung.berechneReisedauerPKW();
String wettervorhersage = getWettervorhersage(o.getName()); reiseplanung.berechneReisedauerFahrrad();
ausgabe.append(wettervorhersage).append("\n"); reiseplanung.berechneCo2Ausstoss();
i++; return reiseplanung;
} }*/
return ausgabe.toString();
public void setHeimatortFromUser(User user) {
kurztripEmpfehlung.setHeimatort(user.getHeimatstandort());
} }
public String ortAnzeige(int index, Ort[] trefferliste) {
String anzeige = " ";
anzeige = trefferliste[index - 1].getName() + " " + trefferliste[index - 1].getPLZ() + " "
+ trefferliste[index - 1].getWettervorhersage();
return anzeige;
}
public String getReiseplanung(User user, Ort ziel) {
reiseplanung = new Reiseplanung(user, ziel);
return reiseplanung.toString();
}
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();
} }
public String berechneReiseDauerPKW() { public String berechneReiseDauerPKW() {
double dauer = reiseplanung.berechneDauer(reiseplanung.getDauerPKW()); return reiseplanung.berechneReiseDauer(reiseplanung.getDauerPKW());
return String.format("Die Reise dauert ca. %.2f Stunden.", dauer);
} }
public String berechneReiseDauerFahrrad() { public String berechneReiseDauerFahrrad() {
double dauer = reiseplanung.berechneDauer(reiseplanung.getDauerFahrrad()); return reiseplanung.berechneReiseDauer(reiseplanung.getDauerFahrrad());
return String.format("Die Reise dauert ca. %.2f Stunden.", dauer);
} }
public double berechneCO2AusstossPKW() { public double berechneCO2AusstossPKW() {
return reiseplanung.getCO2Ausstoß(); return reiseplanung.berechneCO2Ausstoss();
} }
public List<Ort> zufallsorteFahrrad(int maxEntfernung) { public List<Ort> zufallsorteFahrrad(int maxEntfernung) {
return kurztripEmpfehlung.zufallsorteFahrrad(maxEntfernung); return kurztripEmpfehlung.zufallsorteFahrrad(maxEntfernung);
} }
public List<Ort> zufallsortePKW(int minEntfernung) { public List<Ort> zufallsortePKW(int minEntfernung) {
return kurztripEmpfehlung.zufallsortePKW(minEntfernung); return kurztripEmpfehlung.zufallsortePKW(minEntfernung);
} }
} }

View File

@ -6,8 +6,7 @@ import domain.Auto;
public class UserFassade { public class UserFassade {
public User registrieren(String username, String password, String 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) {
Ort heimatstandort = new Ort(plz, ortName); Ort heimatstandort = new Ort(plz, ortName);
@ -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,7 +3,6 @@ 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.Reiseplanung;
import domain.User; import domain.User;
@ -19,7 +18,7 @@ public class UserInterface {
public UserInterface() { public UserInterface() {
this.reiseFacade = new ReiseFassade(user); 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();
@ -30,7 +29,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");
@ -124,151 +122,89 @@ public class UserInterface {
reiseFacade.setHeimatortFromUser(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().getName() + ": " + 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:(");
} }
} }
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();
/*
// Search for the location * List<Ort> treffer = reiseFacade.sucheOrt(ortName); if (treffer.isEmpty()) {
Ort[] treffer = reiseFacade.sucheOrt(ortName); * System.out.println("Keine Treffer gefunden."); } else {
* System.out.println("Trefferliste:"); for (Ort ort : treffer) {
if (treffer.length == 0) { * System.out.println(ort.getOrtName() + " (PLZ: " + ort.getPLZ() + ")"); String
System.out.println("Keine Treffer gefunden."); * wetter = user.zeigeWettervorhersageHeimatstandort();
} else { * System.out.println("Aktuelles Wetter in " +
System.out.println("Trefferliste:"); * user.getHeimatstandort().getOrtName() + ": " + wetter); } }
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("Geben Sie 'beenden' ein, um zu beenden");
String input = scanner.nextLine();
if (input.equalsIgnoreCase("beenden")) {
return;
}
try {
int eingabe = Integer.parseInt(input);
if (eingabe < 1 || eingabe > treffer.length) {
System.out.println("Ungültige Auswahl. Bitte versuchen Sie es erneut.");
} else {
System.out.println(reiseFacade.ortAnzeige(eingabe, treffer));
}
} 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 die Ziel-PLZ ein: "); System.out.print("Geben Sie Ihre Start-PLZ ein: ");
int zielPlz = Integer.parseInt(scanner.nextLine()); int startPlz = Integer.parseInt(scanner.nextLine());
System.out.print("Geben Sie den Zielort ein: "); System.out.print("Geben Sie Ihren Startort ein: ");
String zielOrtName = scanner.nextLine(); String startOrtName = scanner.nextLine();
Ort startort = new Ort(startPlz, startOrtName);
// Lade alle Orte, um den Ort mit den GPS-Koordinaten zu erhalten System.out.print("Geben Sie die Ziel-PLZ ein: ");
List<Ort> alleOrte = reiseFacade.ladeAlleOrte(); int zielPlz = Integer.parseInt(scanner.nextLine());
Ort zielort = null; System.out.print("Geben Sie den Zielort ein: ");
for (Ort ort : alleOrte) { String zielOrtName = scanner.nextLine();
if (ort.getPLZ() == zielPlz && ort.getName().equalsIgnoreCase(zielOrtName)) { Ort zielort = new Ort(zielPlz, zielOrtName);
zielort = ort;
break;
}
}
if (zielort != null) { /*
System.out.println(reiseFacade.getReiseplanung(user, zielort)); * Reiseplanung reise = reiseFacade.planeReise(startort, zielort);
} else { * System.out.println("Reiseplanung:"); System.out.println("Entfernung: " +
System.out.println("Der Zielort wurde nicht gefunden."); * 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) {
System.out.println("Empfehlung basiert auf Heimatort: " + user.getHeimatstandort().getName()); System.out.println("Empfehlung basiert auf Heimatort: " + user.getHeimatstandort().getOrtName());
reiseFacade.setHeimatortFromUser(user); reiseFacade.setHeimatortFromUser(user);
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(100);
//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.getOrtName() + " (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.getOrtName() + " (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

@ -0,0 +1,4 @@
public class UserTest {
}

View File

@ -1,80 +0,0 @@
package domain;
import static org.junit.Assert.assertEquals;
import org.junit.Before;
import org.junit.Test;
public class ReiseplanungTest {
private Auto auto;
private Ort startOrt;
private Ort zielOrt;
private User user;
private Reiseplanung reiseplanung;
@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
public void testBerechneEntfernung() {
double result = reiseplanung.berechneEntfernung(startOrt, zielOrt);
// This value needs to be verified and adjusted if necessary
assertEquals(14.2125, result, 0.1);
}
@Test
public void testBerechneDauer() {
double entfernung = 136.5;
double geschwindigkeit = 70; // Durchschnittsgeschwindigkeit in km/h
double result = reiseplanung.berechneDauer(geschwindigkeit);
assertEquals(1.95, result, 0.01);
}
@Test
public void testBerechneCO2Ausstoß() {
double entfernung = 73.8;
double result = reiseplanung.berechneCO2Ausstoß(auto);
assertEquals(12368.88, result, 0.01);
}
@Test
public void testGetEntfernung() {
assertEquals(14.2125, reiseplanung.getEntfernung(), 0.1);
}
@Test
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 +0,0 @@
max,5994471abb01112afcc18159f6cc74b4f511b99806da59b3caf5a9c173cacfc5,10115,Berlin,VW,120.0,60.0,20.0
lisa,0ffe1abd1a08215353c233d6e009613e95eec4253832a761af28ff37ac5a150c,80331,Münnchen,auto,120.0,60.0,30.0
anna,9b8769a4a742959a2d0298c36fb70623f2dfacda8436237df08d8dfd5b37374c,76131,Karlsruhe,auto1,110.0,60.0,20.0
mike,20f3765880a5c269b747e1e906054a4b4a3a991259f1e16b5dde4742cec2319a,68159,Mannheim,auti2,130.0,50.0,20.0
sven,e0bc60c82713f64ef8a57c0c40d02ce24fd0141d5cc3086259c19b1e62a62bea,69115,Heidelberg,auto3,120.0,60.0,30.0