Hallo zusammen ich habe dieses Aufgabe beim Azubi betrieb gehabt und ich möchte gerne eure meinung haben um die beste Antwort zu schreiben
also Aufgabe steht auf den Folgendes:-
also Aufgabe steht auf den Folgendes:-
Aufgabe: Ich habe drei Dateien hochgeladen, die ihr bitte in Java auslest und anschließend so miteinander verbindet, dass jede Person aus der Datei "Namen.txt" die korrekte Berufsbezeichnung aus "Berufe.txt" und Adresse aus "Adressen.txt" zugewiesen bekommt. Diese gebt ihr bitte auf der Kommandozeile entsprechend aus. Annahme: Zu jedem Datensatz in jeder Datei existiert in den anderen Dateien ein zugehöriger Datensatz |
Erweiterung der Aufgabe: Entgegen der Annahme aus der Aufgabe, dürfen auch Datensätze z.B. ohne Namen oder ohne Adresse oder ohne Beruf existieren. Erweitere dein Programm dahingehend, dass es diese "Probleme" abfängt. |
Anpassung der Aufgabe nach dem ersten Review der Ergebnisse: Userstory Als Benutzer wünsche ich mir, dass ich aus den gegebenen Dateien "Namen.txt", "Berufe.txt" und "Adressen.txt" eine Liste aller Namen mit - über die ID zugewiesenen Berufen und Adressen - in einem Excel-kompatiblen Format auf der Kommandozeile ausgegeben bekomme. Akzeptanzkritieren AT01: Kann der Benutzer die Pfade und Namen der Dateien angeben? AT02: Kann der Benutzer die Daten aus der Kommandzeile nach Excel übertragen? AT03: Berücksichtigt Excel die Felder? AT04: Enthält die Ausgabe auf der Kommandozeile die Kopfdaten? Die Akzeptanzkriterien dienen zum Abgleich der Anforderung gegen Bedingungen. Die Aktzeptanzkriterien müssen immer so gefragt werden, dass sie mit "Ja" beantwortet werden können. |
- ich habe Erstens einen Person Classe erstellt
Code:
public class Personal {
//Creating Adress inner Class
public class Adr {
int Id , Plz;
String Ort , Strasse;
public Adr (int id, String str , int plz , String city){
this.Id=id;
this.Strasse=str;
this.Plz=plz;
this.Ort=city;
}
}
int ID;
String Name , VorName , Beruf;
Adr adresse ;
// Create Constructor + functions ( Person , Job , Address )
// Assigning via ID
public Personal (int id ){
this.ID = id;
}
//Assigning via (ID,Name,Vorname) (( File Name ))// Overloading
public Personal (int id , String name , String vorname){
this.ID = id;
this.Name = name;
this.VorName = vorname;
}
public int getID(){
return ID;
}
public void setBeruf(String beruf) {
this.Beruf = beruf;
}
public void setAdresse(Adr adresse){
this.adresse = adresse;
}
// public String Person(){
// return Name+","+VorName+","+Beruf+","+adresse;
// }
}
- Auflisten und verbienden
Code:
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.lang.reflect.Array;
import java.util.*;
/*
Roadmap
formatting the code in a clear "input - computing - output" fashion for clarity
implementing try-catch instead of throwing exceptions
learning about try - catch and exceptions
changing methods to receive the scanned file instead of the people list
adding a way to give a specific path and name for the files
saving the header for further outputs
asking ulf about specifications regarding an output to excel and implementing that
*/
public class MainClass {
static String[] namenHeader;
static String[] berufeHeader;
static String[] adressenHeader;
public static void main (String[] args){
ArrayList<Person> personenliste = getPeople(scannerFromString(args[0])); //Creates list of people based on the list of names
addBerufe(personenliste, scannerFromString(args[1])); //adds jobs to the people with the corresponding ID.
// If ID doesn't correspond to a person, a person will be created and the job will be assigned
addAdresse(personenliste, scannerFromString(args[2]));//see addBerufe method.
//Liste der Personen wird nach ID sortiert und Ausgabe wird erzeugt
personenliste.sort(Comparator.comparing(Person::getId));
//allows User to export files in a csv file
createCSV(personenliste,args[3]);
Scanner print = scannerFromString(args[3]);
while(print.hasNextLine()) System.out.println(print.nextLine());
}
private static void addAdresse(ArrayList<Person> personenliste, Scanner addressScanner){
/*Adressen werden ausgelesen, anhand der ID der entsprechenden
Person zugeordnet und hinzugefügt. Falls noch nicht vorhanden
wird eine neue Person angelegt.*/
adressenHeader = addressScanner.nextLine().split(";");
while (addressScanner.hasNextLine()) {
String[] adressenStringSplit = addressScanner.nextLine().split(";");
Address address = new Address(
Integer.parseInt(adressenStringSplit[0]),
adressenStringSplit[1],
Integer.parseInt(adressenStringSplit[2]),
adressenStringSplit[3]);
int i = 0;
while(personenliste.get(i).getId() != Integer.parseInt(adressenStringSplit[0])){
i++;
if( i >= personenliste.size()){
personenliste.add(new Person(
Integer.parseInt(adressenStringSplit[0])));
break;
}
}
personenliste.get(i).setAdresse(address);
}
}
private static void addBerufe(ArrayList<Person> personenliste, Scanner berufeScanner){
/*Berufe werden ausgelesen, anhand der ID der entsprechenden
Person zugeordnet und hinzugefügt. Falls noch nicht vorhanden
wird eine neue Person angelegt.*/
berufeHeader = berufeScanner.nextLine().split(";");
while(berufeScanner.hasNextLine()){
String[] berufeStringSplit = berufeScanner.nextLine().split(";");
int i = 0;
while(personenliste.get(i).getId() != Integer.parseInt(berufeStringSplit[0])){
i++;
if( i >= personenliste.size()){
personenliste.add(new Person(
Integer.parseInt(berufeStringSplit[0])));
break;
}
}
personenliste.get(i).setBeruf(berufeStringSplit[1]);
}
}
private static ArrayList<Person> getPeople(Scanner namenScanner){
//Personen werden mit Namen und ID erzeugt
namenHeader = namenScanner.nextLine().split(";");
ArrayList<Person> personenliste = new ArrayList<>();
while (namenScanner.hasNextLine()){
String[] namenStringSplit = namenScanner.nextLine().split(";");
personenliste.add(new Person(
Integer.parseInt(namenStringSplit[0]),
namenStringSplit[2],
namenStringSplit[1]));
}
return personenliste;
}
private static void createCSV(ArrayList<Person> personenliste, String path){
try {
File outputFile = new File(path);
outputFile.createNewFile();
FileWriter writer = new FileWriter(outputFile);
writer.write(namenHeader[0] + "," + namenHeader[1] + "," + namenHeader[2] + "," +
berufeHeader[1] + "," + adressenHeader[1] + "," + adressenHeader[2] + "," +
adressenHeader[3] + "\n");
for (Person person: personenliste){
writer.write(person.id + ",");
if (person.name != null) writer.write(person.vorname + "," + person.name + ",");
else writer.write(",,");
if (person.beruf != null) writer.write(person.beruf + ",");
else writer.write(",");
if (person.adresse != null) writer.write(person.adresse.strasse + ","
+ person.adresse.plz + "," + person.adresse.ort);
else writer.write(",,,");
writer.write("\n");
writer.flush();
}
writer.close();
}catch(IOException e){
System.out.println("Can't create new file.");
}
}
private static Scanner scannerFromString(String path) {
try {
File file = new File(path);
return new Scanner(file);
} catch (FileNotFoundException e) {
System.out.println("File not found.");
return null;
}
} //Gets the Scanner from the path
}