题目情景描述:
公司财务发工资时,记录了当时发工资的资料Employee.txt
1.定义公司员工类Employee,属性有:工号,姓名,性别,工资(double类型),进行属性的隐藏和封装,重写toString.2.将D:/Employee.txt文件用程序复制到项目根目录;
3.读取项目根目录下的文件Employee.txt内容存入ArrayList<Employee>
4.以工号为键,员工姓名为值存入HashMap<String,String>中.再遍历输出Map集合中的内容;
5.当公司记录该信息的职员将信息交给经理,经理进行审查时,发现有一些信息录入错误,需要在集合中进行数据修改:
① 将陈璐璐改为:张路路且工资改为:7500.0元
② 程曦原本是位女士
③工号中所有的”2”都应改为”7”;输出修改后的ArrayList<Employee>
6.将修改后的职工信息按工资从高到低排序,工资相同的按工号从小到大排序.
7.判断项目根目录下是否有”result”文件夹,如果没有,则用程序新建文件夹”result”,并将
修改并排序后的信息写出到”result”文件夹的Employee-new.txt文件中,格式与Employee.txt相同
一、新建一个Employee的类
//1.定义公司员工类Employee,属性有:工号,姓名,性别,工资(double类型),进行属性的隐藏和封装,重写toString.(5分)
import java.util.Comparator;
public class Employee implements Comparable<Employee>{
private String id;
private String name;
private String sex;
private double salary;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
@Override
public String toString() {
return "Employee [id=" + id + ", name=" + name + ", sex=" + sex + ", salary=" + salary + "]";
}
public int compareTo(Employee e)
{
/*if (this.getSalary()>e.getSalary()) {
return -1;
}
if (this.getSalary()<e.getSalary()) {
return 1;
}else {
return this.getId().compareTo(e.getId());
}
*/
int num=(int)(e.getSalary())-(int)(this.getSalary());
return num==0?this.getId().compareTo(e.getId()):num;
}
}
二、n1类中主函数处理
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.ListIterator;
import java.util.Map.Entry;
import java.util.Set;
import java.util.TreeSet;
import java.util.*;
import javax.swing.text.html.HTMLDocument.Iterator;
public class n1{
public static void main(String[] args)throws Exception {
//将D:/Employee.txt文件用程序复制到项目根目录;(5分)
FileInputStream file = new FileInputStream("D://Employee.txt");
FileOutputStream files = new FileOutputStream("Employee.txt");
String s=null;
byte[] b=new byte[1024];
int len=0;
while ((len=file.read(b))!=-1) {
files.write(b, 0, len);
}
files.close();
//3.读取项目根目录下的文件Employee.txt内容存入ArrayList<Employee>(5分)
ArrayList<Employee> arr = new ArrayList<>();
FileInputStream file1 = new FileInputStream("Employee.txt");
//BufferedReader buf = new BufferedReader(new InputStreamReader(file1,"utf-8"));
BufferedReader buf = new BufferedReader(new InputStreamReader(file1));
while ((s=buf.readLine())!=null) {
Employee e=new Employee();
String []s1=s.split(",");
//System.out.println("啊哈哈1");
for (int i = 0; i < s1.length; i++) {
//System.out.println("啊哈哈2");
String[] s2=s1[i].split(":");
//System.out.println(s2[0]+s2[1]+"嘿嘿");
if ("工号".equals(s2[0])) {
//System.out.println("啊哈哈5");
e.setId(s2[1]);
}else if("姓名".equals(s2[0])) {
e.setName(s2[1]);
}else if("性别".equals(s2[0])){
e.setSex(s2[1]);
}else {
e.setSalary(Double.parseDouble(s2[1].substring(0, s2[1].length()-1)));
}
}
// System.out.println("啊哈哈4");
arr.add(e);
}
//4.以工号为键,员工姓名为值存入HashMap<String,String>中.再遍历输出Map集合中的内容;(5分)
HashMap<String, String>has= new HashMap<>();
for (Employee employee : arr) {
has.put(employee.getId(), employee.getName());
}
Set<Map.Entry<String,String>> se= has.entrySet();
for (Entry<String, String> entry : se) {
System.out.println(entry.getKey()+","+entry.getValue());
}
//5.当公司记录该信息的职员将信息交给经理,经理进行审查时,发现有一些信息录入错误,需要在集合中进行数据修改:
// ① 将陈璐璐改为:张路路且工资改为:7500.0元
// ② 程曦原本是位女士
// ③工号中所有的”2”都应改为”7”;输出修改后的ArrayList<Employee>(8分)
ListIterator<Employee> l=arr.listIterator();
//Employee emp=new Employee();
while (l.hasNext()) {
Employee em = l.next();
if ("陈璐璐".equals(em.getName())) {
//l.set(e);et("张璐璐");
em.setName("张璐璐");
em.setSalary(7500.0);
}
if ("程曦".equals(em.getName())) {
em.setSex("女");
}
if (em.getId().contains("2")) {
em.setId(em.getId().replace("2", "7"));
}
//System.out.println("嘿嘿");
//System.out.println(l.next());
System.out.println("嘿嘿"+em.toString()+"嘿嘿");
//System.out.println("嘿嘿");
}
//System.out.println("嘿嘿");
//System.out.print(l);
//System.out.println("嘿嘿");
//6.将修改后的职工信息按工资从高到低排序,工资相同的按工号从小到大排序.(7分)
TreeSet<Employee> tree = new TreeSet<>();
for (Employee employee : arr) {
tree.add(employee);
}
for (Employee employee : tree) {
System.out.println(employee);
}
// 7.判断项目根目录下是否有”result”文件夹,如果没有,则用程序新建文件夹”result”,并将
// 修改并排序后的信息写出到”result”文件夹的Employee-new.txt文件中,格式与Employee.txt相同(5分)
File f= new File("result");
if (!(f.exists())) {
f.mkdir();
}
String s1=f.getAbsolutePath();
System.out.println(s1);
FileWriter file2 =new FileWriter(s1+"\\Employee-new.txt");
BufferedWriter buf1 = new BufferedWriter(file2);
for (Employee employee : tree) {
buf1.write("工号:"+employee.getId());
buf1.write("姓名:"+employee.getName());
buf1.write("性别:"+employee.getSex());
buf1.write("薪水:"+employee.getSalary()+"元");
buf1.newLine();
}
buf1.close();
}
}
附:Employee.txt文件
工号:J18020,姓名:周杰伦,性别:男,工资:8800.0元
工号:J18085,姓名:金秀贤,性别:男,工资:7500.0元
工号:J18504,姓名:陈璐璐,性别:女,工资:7340.0元
工号:J18009,姓名:岳云鹏,性别:男,工资:8000.0元
工号:J18775,姓名:张翠花,性别:女,工资:7500.0元
工号:J18325,姓名:刘静,性别:女,工资:10500.0元
工号:J18560,姓名:程曦,性别:男,工资:11000.0元
工号:J18802,姓名:AngleBaby,性别:女,工资:8500.0元