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,50 +11,65 @@ 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;
} }
// berechnet die ungefähre Dauer zum gewählten Ort //berechnet die ungefähre Dauer zum gewählten Ort
public double berechneDauer(double geschwindigkeit) { public double berechneDauer(double geschwindigkeit) {
return entfernung / geschwindigkeit; return entfernung/geschwindigkeit;
} }
// 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 KurztripEmpfehlung kurztripEmpfehlung; private Reiseplanung reiseplanung;
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")) {
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]);
}
//gibt alle Orte zurück
if(suchbegriff.equals("alle"))
trefferliste = alleOrte;
else
//läuft über set orte
for(Ort o : alleOrte) {
//fügt ort zur Trefferliste hinzu wenn der Suchbegriff im Namen ist und weniger als 8 Orte bereits drauf stehen
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]);
}
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) { ausgabe = ausgabe + i + o.getName() + " Entfernung: " + new Reiseplanung(user, o).getEntfernung() + "\n";
double entfernung = new Reiseplanung(user, o).getEntfernung(); i++;
ausgabe.append(i).append(". ").append(o.getName()).append(" (Entfernung: ") }
.append(entfernung).append(" km)\n"); return ausgabe;
String wettervorhersage = getWettervorhersage(o.getName()); }
ausgabe.append(wettervorhersage).append("\n");
i++;
}
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,12 +151,13 @@ public class ReiseFassade {
return reiseplanung.getCO2Ausstoß(); return reiseplanung.getCO2Ausstoß();
} }
public List<Ort> zufallsorteFahrrad(int maxEntfernung) {
return kurztripEmpfehlung.zufallsorteFahrrad(maxEntfernung);
}
public List<Ort> zufallsortePKW(int minEntfernung) { public List<Ort> zufallsorteFahrrad(int maxEntfernung) {
return kurztripEmpfehlung.zufallsortePKW(minEntfernung); return kurztripEmpfehlung.zufallsorteFahrrad(maxEntfernung);
} }
public List<Ort> zufallsortePKW(int minEntfernung) {
return kurztripEmpfehlung.zufallsortePKW(minEntfernung);
}
} }

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 System.out.println("Wählen Sie einen Ort aus: ");
Ort[] treffer = reiseFacade.sucheOrt(ortName); System.out.println("Geben Sie ´beenden` ein, um zu beenden");
String input = scanner.nextLine();
if (treffer.length == 0) { if(input == "beenden") {
System.out.println("Keine Treffer gefunden."); return;
} else { }
System.out.println("Trefferliste:"); int eingabe = Integer.parseInt(input);
for (int i = 0; i < treffer.length; i++) { reiseFacade.ortAnzeige(eingabe, trefferliste);
Reiseplanung reiseplanung = new Reiseplanung(user, treffer[i]); /*
System.out.println((i + 1) + ". " + treffer[i].getName() + " (PLZ: " + treffer[i].getPLZ() + * List<Ort> treffer = reiseFacade.sucheOrt(ortName); if (treffer.isEmpty()) {
"), Entfernung: " + reiseplanung.getEntfernung() + " km"); * System.out.println("Keine Treffer gefunden."); } else {
* System.out.println("Trefferliste:"); for (Ort ort : treffer) {
String wettervorhersage = reiseFacade.getWettervorhersage(treffer[i].getName()); * System.out.println(ort.getOrtName() + " (PLZ: " + ort.getPLZ() + ")"); String
System.out.println(wettervorhersage); * wetter = user.zeigeWettervorhersageHeimatstandort();
} * System.out.println("Aktuelles Wetter in " +
* user.getHeimatstandort().getOrtName() + ": " + wetter); } }
// 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() {
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();
// 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));
} else {
System.out.println("Der Zielort wurde nicht gefunden.");
}
} }
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: ");
int zielPlz = Integer.parseInt(scanner.nextLine());
System.out.print("Geben Sie den Zielort ein: ");
String zielOrtName = scanner.nextLine();
Ort zielort = new Ort(zielPlz, zielOrtName);
System.out.println(reiseFacade.getReiseplanung(user, zielort));
/*
* 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
assertEquals(14.2125, result, 0.1);
}
@Test double result = reise.berechneEntfernung(ort, ziel);
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 assertEquals(14.2125, result, 0.0);
public void testBerechneCO2Ausstoß() { }
double entfernung = 73.8;
double result = reiseplanung.berechneCO2Ausstoß(auto);
assertEquals(12368.88, result, 0.01);
}
@Test @Test
public void testGetEntfernung() { public void testBerechneDauer() {
assertEquals(14.2125, reiseplanung.getEntfernung(), 0.1); double entfernung = 136.5;
} double geschwindigkeit = 70;
@Test double result = reise.berechneDauer(entfernung, geschwindigkeit);
public void testGetDauerPKW() {
double geschwindigkeit = user.getDurchschnittsgeschwindigkeitPKW();
double erwarteteDauer = 14.2125 / geschwindigkeit;
assertEquals(erwarteteDauer, reiseplanung.getDauerPKW(), 0.1);
}
@Test assertEquals(1.95, result, 0.0);
public void testGetDauerFahrrad() { }
double geschwindigkeit = user.getDurchschnittsgeschwindigkeitFahrrad();
double erwarteteDauer = 14.2125 / geschwindigkeit;
assertEquals(erwarteteDauer, reiseplanung.getDauerFahrrad(), 0.1);
}
@Test public void testBerechneCO2Ausstoß() {
public void testGetCO2Ausstoß() { double entfernung = 73.8;
double erwarteterCO2Ausstoß = 14.2125 * auto.getCO2AusstossProKm();
assertEquals(erwarteterCO2Ausstoß, reiseplanung.getCO2Ausstoß(), 0.1);
}
@Test double result = reise.berechneCO2Ausstoß(entfernung, auto);
public void testToString() {
String expected = "Von " + startOrt.getName() + " Nach " + zielOrt.getName() + assertEquals(12368.88, result, 0.0);
"\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