Файл Employee.txt содержит сведения о сотрудниках двух типов сотрудников, ежемесячно оплачиваемых и ежечасных выплатах. Файл содержит имя, фамилию, пол, ранг, тип и базовую зарплату в случае ежемесячно оплачиваемого сотрудника или почасовую ставку и количество отработанных часов в случае почасового работника. Образец файла приведен ниже:Чтение данных из текстового файла для вычисления и записи данных в другом текстовом файле
John Smiths M менеджер ежемесячный 45000,00
Сунил Bates M старший ежечасно 700,00 45
Eva Leung F офицерского ежемесячно 30500,00
Я должен написать программу который будет смотреть на каждого сотрудника и рассчитать бонус в процентах от базовой зарплаты. Для почасово оплачиваемого работника базовая зарплата берется как почасовая ставка, умноженная на количество отработанных часов в течение месяца. Если ранг является «офицером», бонусная ставка составляет 20%, а если звание выше или выше, бонус составляет 15%. Программа должна записать в новый файл TotalSalary.txt полную информацию о каждом сотруднике, а именно, имя, фамилию, пол и общую заработную плату (то есть с бонусом).
Вот как я работал его:
сотрудников Запись данных в классе текстовых файлов
public class files_qu1 {
public static Formatter writein;
private static Scanner sc;
public static void main(String[] args) {
// TODO Auto-generated method stub
try{
writein= new Formatter("Employees.txt");
}
catch(SecurityException se){
System.out.println("You do have access to this file");
System.exit(1);
}
catch(FileNotFoundException fnfe){
System.out.println("Error in creating file");
System.exit(1);
}
Scanner sc= new Scanner(System.in);
String fname, lname, gender, rank, type;
double salary, t_sal, hours=0.0;
int num;
System.out.println("Enter num of employees");
num= sc.nextInt();
for(int i=0; i<num; i++){
System.out.println("First name: ");
fname=sc.next();
System.out.println("Last name: ");
lname=sc.next();
System.out.println("Gender: ");
gender=sc.next();
System.out.println("Rank: ");
rank=sc.next();
System.out.println("Type: ");
type=sc.next();
System.out.println("Salary: ");
salary=sc.nextDouble();
if(type.equals("hourly")){
System.out.println("Hours worked: ");
hours=sc.nextInt();
}
writein.format(" %s %s %s %s %s %.2f %.2f\n",fname, lname, gender, rank, type, salary, hours);
}
sc.close();
if(writein!=null){
writein.close();
}
}
}
Чтение и вычислительные данные из текстового файла сотрудников к тексту TotalSalary класс файлов
public class files_qu1read {
private static Formatter writeToFile;
private static Scanner sc;
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
sc= new Scanner(new File("C:/Users/Diksha/workspace/Java_Sem1/Employees.txt"));
}
catch
(FileNotFoundException fnfe){
System.out.println("Error Creating File");
System.exit(1);
}
String fname = null, lname, gender, rank, type;
double salary, t_sal = 0, hours;
while(sc.hasNext()){
fname=sc.next();
lname=sc.next();
gender=sc.next();
rank=sc.next();
type=sc.next();
salary=sc.nextDouble();
hours=sc.nextDouble();
if(type.equals("hourly")){
t_sal= salary*hours;
}
if(type.equals("monthly")&&rank.equals("officer")){
t_sal= salary*1.2;
}
if(type.equals("monthly")&&(rank.equals("senior")||rank.equals("manager"))){
t_sal= salary*1.15;
}
try{
writeToFile = new Formatter("TotalSalary.txt");
}
catch (SecurityException se) {
System.out.println("You do have access to this file");
System.exit(1);
}
catch (FileNotFoundException fnfe) {
System.out.println("Error Creating File");
System.exit(1);
}
writeToFile.format("First name: %s Last name: %s Gender: %s Total Salary: %.2f",fname,lname, gender, t_sal);
}
sc.close();
if(writeToFile!=null){
writeToFile.close();
}
}
}
В принципе, все работает отлично, что программа умеет писать в текстовый файл Employees, но когда дело доходит до чтения и записи данных в файл TotalSalary, записывается только имя последнего сотрудника, которое я написал в файле Employees в файл TotalSalary, а также его общую зарплату.
То есть, если файл Employees.txt имеет такие данные, как:
Райли Фокс е менеджер ежемесячно 45000,00 0,00
Эмили Рот е офицер ежечасно 10000,00 8,00
В TotalSalary.txt, то данные показываются только для этого последнего сотрудника, который:
имя: Emily Фамилия: Roth Пол: F Общая зарплата: 80000,00
Я никогда не использовал 'Formatter', чтобы писать материал, но, вероятно, [этот ответ] (http://stackoverflow.com/a/4526103/1094430) может вам помочь. – StepTNT
@StepTNT Спасибо большое! – Tia