2016-05-29 5 views
0

Проблема: Наконец, должен быть четвертый класс, который содержит основной метод. Он должен читать информацию сотрудника из текстового файла. Каждая строка текстового файла будет представлять информацию для одного сотрудника в течение одного года. Ниже приведен пример того, как будет выглядеть текстовый файл:Есть ли ошибки в моем коде?

После считывания всех данных о сотрудниках на каждой из двух лет должен отображаться отчет. Каждая строка отчета должна содержать все исходные данные, предоставленные каждому сотруднику, вместе с годовой оклад этого работника за год. Для каждого из двух лет необходимо вычитать и отобразить среднее значение всех зарплат для всех сотрудников за этот год.

Вопрос: Существуют ли ошибки в моем коде? Или что я могу исправить?

Супер Класс

public class Employee { 

//Instance variables of super 
private String name; 
private double monthlySal; 
private double annualSalary; 

//Super constructor 
public Employee(String name, double monthlySal) { 
this.name = name;//Initialization 
this.monthlySal = monthlySal;//Initialization 
}//End of Constructor 


//Method for annualSalary 
public void annualSalary(double annualSalary){ 
    this.annualSalary = monthlySal * 12; 
    System.out.println("Annual Salary: " +annualSalary); 
}//End of Method 


//toString Method 
public String toString() { 
    return "Employee Name: " + name + "\n" + "monthly Salary: " +monthlySal; 
    }//End of toString Method 
}//End of Employee Method 

первый Подкласс

public class Salesman extends Employee { 
private String name; 
private double monthlySal; 
private double annualSales; 
private double commission; 
private double annualSalary;//Annual Salary 

//subclass Constructor 
    public Salesman(String name, double monthlySal, double annualSalary, double commission) { 
    super(name, monthlySal); 
    this.annualSales = annualSales; 
    this.commission = 0.2 * annualSales; 
}//End of Constructor 



//Overridden Method 
@Override 
public void annualSalary(double annualSalary){ 
this.annualSalary = commission + super.annualSalary; 

}//End of Override Method 

//Overriden toString Method 
@Override 
public String toString(){ 
    return "Employee Name: " + name + "\n" + "Monthly Salary: " + monthlySal + "\n" + "Annual Sales: " +annualSales; 
} 

} 

второй Подкласс

public class Executive extends Employee { 

private double stockPrice; 
private String name; 
private double monthlySal; 
private double annualSalary; 
private double bonus = 0; 


//Constructor 
public Executive(String name, double monthlySal, double annualSalary, double stockPrice) { 
    super(name, monthlySal); 
    this.stockPrice = stockPrice; 
    this.annualSalary = annualSalary; 

    if(stockPrice >= 50) { 
     bonus = 30000; 
    } else { 
     bonus = 0; 
    }//End of If Me 
}//End of Constructor 

//Override Method for annualSalary 
@Override 
public void annualSalary(double annualSalary){ 
    this.annualSalary = super.annualSalary + bonus; 
}//End of Override Method 

//toString Override Method 
@Override 
public String toString() { 
return "Employee Name: " + name + "\n" + "Monthly Salary: " + monthlySal + "\n" + "Current Stock Price: " +stockPrice; 
} 

} 

Text File - employee.txt

2014 Employee Clark, Sam 3000 
2014 Salesman Samson, Jones 4000 40000 
2014 Executive Brandon, Thurman 10000 70 
2015 Executive Brandon, Thurman 11000 70 
2015 Salesman Samson, Jones 4500 30000 
2015 Employee Clark, Sam 3500 


//4th Class 
import java.io.File; 
import java.FileNotFoundException; 

public class TestEmployee { 


//Start Main 
    public static void main(String[] args) { 

    private double yearOneAverSalary = 55000; 
    private double yearTwoAverSalary = 45000; 


    System.out.println("The average combined yearly salary for year 2014 employees is: " + yearOneAverSalary); 
    System.out.println("The average combined yearly salary for 2015 employees is: " +yearTwoAverSalary); 

} // Конец Главная

public static void readFile(File "src/employee.txt") throws IOException { 
    String line; 
    try(BufferedReader) br = Files.newBufferedReader(file.toPath()) { 
     while((line = br.readLine())1=null) { 
     System.out.println(line)//prints every line in file 
      }//End of While 
     }//End of Try 
    }//End of ReadFile 
+1

В чем проблема с кодом, в чем вопрос? –

+0

Вероятно, вы пропустили порог для комиссии в размере 20 000 долларов для продавца. – Spidey

ответ

0

я придумал метод, который читает отдельную строку и весь текстовый файл. Он делает это через каждую строку в txt-файле и разбивает ее на «», пробел. Тогда, потому что порядок значений один и тот же, я просто устанавливаю значения на основе того, где они были в строке.

Одна вещь, которую я бы рекомендовал взглянуть на конструкторы. Я не уверен, должно ли значение даты идти в класс Employee или нет.

// reads a file and returns a array of employees found in the file 
public Employee[] readEmployeeFile(String loc){ 
    BufferedReader read = new BufferedReader(new FileReader(loc)); // creating reader 
    ArrayList<Employee> people = new ArrayList<Employee>(); // arraylist to store values of employees 

    // read all the lines in the file 
    String line = ""; 
    while ((line=read.readLine())!=null){ 
     people.add(getEmployeeFromLine(line)); 
    } 

    // close the reader 
    read.close(); 

    // convert arraylist to array 
    Employee[] returnvalues = new Employee[people]; 
    for (int q = 0; q < returnvalues.length; q++){ 
     returnvalues[q] = people.get(q); 
    } 

    return people; 
} 

// reads each individual line for the file 
public Employee getEmployeeFromLine(String line){ 
    // format: date + job + name(contains 1 space) + monthly earnings + salesperson:annual sales | executive:stock price 

    Employee returnvalue = null; // this is what we will return 

    String[] values = line.split(" "); // the txt file seems to split up the values by a space so we split up the line by spaces 

    // get all the values from the line 
    Integer date = Integer.parseInt(values[0]); // date is the first value 
    String position = values[1]; 
    String name = value[2]+values[3]; // we need both because there is a space in between the last name and first 
    double monearns = Double.parseDouble(values[4]); 

    double lastvalue; 
    if (position.equals("Salesman") || position.equals("Executive")){ // only set the value if it exists otherwise we will get a index out of bounds exception 
     lastvalue = values[5]; 
    } 

    // you can structure the constructors how ever you would like - currently there is no value for date in the employee class 
    if (position.equals("Employee")){ 
     returnvalue = new Employee(name, monearns, date); 
    } 
    else if (position.equals("Salesman")){ 
     returnvalue = new Salesman(name, monearns, date, lastvalue); 
    } 
    else if (position.equals("Executive")){ 
     returnvalue = new Executive(name, monearns, date, lastvalue); 
    } 
    return returnvalue; 
} 

public static void main(String[] args){ 
    Employee[] employees = readEmployeeFile("file.txt"); // if the file location needs to be user input I recommend just using a scanner 

    // print out data 
} 

Прошу прощения за путаницу, все это будет в 4-м классе, который я подозреваю. Я также думал, что он упомянул, что вы должны распечатать данные, основанные на дате, поэтому я задавался вопросом, что вы собираетесь делать с этим значением.

+0

Что вы подразумеваете под значением даты? И где этот код действительно будет идти? Добавлю этот код в свой 4-й и последний класс или в другую область? Я также предполагаю, что в моем 4-м классе должен быть общедоступный статический основной метод.Как бы это сделать вместе с моим основным методом? –

+0

Я понимаю, что вы сейчас имеете в виду. Нет, я не предполагал иметь значение даты, но это не повредит. –

+0

Я добавил основной метод и внесли изменения в ответ – Arthur

0

Это метод, который я использовал для чтения файлов.

public static void readFile(File file) throws IOException { 
    String line; 
    try(BufferedReader br = Files.newBufferedReader(file.toPath())) { 
     while((line = br.readLine())!=null) { 
      System.out.println(line) // prints every line of your file in the console 

     } 
    } 
} 

Предположим, что employee.txt находится в той же папке, что и ваши классы java, и вы установили пакет.

Вызов его с этим, и вы будете прекрасно

readFile(new File("src/employee.txt")); 
+0

Удивительный! Спасибо за помощь Нико. Я попробую его –

+0

Как выглядит мой код? Вы видите какие-либо ошибки или что-то еще, что я мог бы сделать лучше? –

Смежные вопросы