集合初步完成下面的功能需求
做公司职员薪水管理系统,完成以下功能
1,当有新员工时,将加入该管理系统
2,根据员工号,显示该员工信息
3,可以显示所有员工的信息
4,可以修改员工的薪水
5,当员工离职时,从该系统中删除该员工
6,可以将员工按薪水高低排序(思考)
7,统计员工的平均工资,最高和最低工资
第一步:既然是员工管理系统,我们就先来写一个员工类Employee.java
/** * @author Hercules* @version 创建时间:2020年1月10日 下午2:56:52 * 员工类*/
public class Employee {private int eNo; //员工号private String name; //员工名字private double salary; //员工薪水//而后是两个构造函数一个无参的一个带参的public Employee() {super(); //这里有一个super()是因为java所有的类都继承自Object类}public Employee(int eNo, String name, double salary) {super();this.eNo = eNo;this.name = name;this.salary = salary;}//添加get set方法public int geteNo() {return eNo;}public void seteNo(int eNo) {this.eNo = eNo;}public String getName() {return name;}public void setName(String name) {this.name = name;}public double getSalary() {return salary;}public void setSalary(double salary) {this.salary = salary;}/*重写这个类的toString方法,我在上面提到过java所有的类* 都继承自Object这个类,而toString方法正是这个类中的方法,* 所以所有的类都有toString方法,在我们需要把该类转换为String* 类型的时候会调用这个方法,例如在我们调用System.out.println();* 的时候,输出该类的时候会调用这个方法。当然这只是其中一例* 还有更多的例子。* * */public String toString() {return String.format("Employee [eNo=" + eNo + ", name=" + name + ", salary=%6.2f]", salary);}
}
有了员工类当然一定要有管理员工的类:Manager.java
/** * @author Hercules* @version 创建时间:2020年1月10日 下午3:11:50 * 管理员工的类*/import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;public class Manager {//存放所有员工的集合private List<Employee> employees = new ArrayList<Employee>();/*这里要着重分析一下,首先我们用的是ArrayList存储员工,这个东西是有序的可以重复的,所以为保证员工号的唯一性,* 这里用一个静态的变量来记录员工号。* */private static int no = 0; //不知道大家学过数据库没有,这里就是自增长类型的员工号了。//添加员工public void addEmployee(Employee employee) {no++; //每添加一个no就自增一次employee.seteNo(no);employees.add(employee); //调用ArrayList的add方法}//根据员工号查找员工public Employee showEmployee(int no) {Employee e = null;for(Employee employee: employees) {if(employee.geteNo() == no) {e = employee;break;}}return e;}//显示所有员工信息public void showAllEmployee() {for(Employee employee:employees) {//这里我们直接调用toString方法就可以直接打印相关信息System.out.println(employee.toString());}}//修改员工薪水public void updateEmployeeSalary(int no,double salary) {Employee e = showEmployee(no);if(e == null) {System.out.println("查无此人,无法修改薪水");return;}else {Scanner scanner = new Scanner(System.in);System.out.println("此人现在的薪水为"+e.getSalary());System.out.println("请输入您想要修改的数值");double newSalary = scanner.nextDouble();e.setSalary(newSalary);}}//员工离职撤出系统public void remove(int no) {Employee e = showEmployee(no);if(e == null) {System.out.println("查无此人");return;}employees.remove(e);}//员工从高到低排序,自己也可以反过来从低到高排序public void sort() {for(int i = 0;i < employees.size()-1;i++) {//循环轮次for(int j = 0;j < employees.size()-1-i;j++) { //循环比较次数if(employees.get(j).getSalary() < employees.get(j+1).getSalary()) {//冒泡排序Employee e = employees.get(j);employees.set(j, employees.get(j+1));employees.set(j+1, e);}}}}//查找工资最高的人,既然上面已经有排序函数,则下面就可很方便的得出条件public Employee getMaxSalary() {sort();return employees.get(0);}//工资最低的人,returnpublic Employee getMinSalary() {sort();return employees.get(employees.size() - 1);}//平均工资public void avg() {double z = 0;for(Employee employee:employees) {z += employee.getSalary();}double a = z/employees.size();System.out.println("平均工资为"+a);}
}
接下来我们再来写一个测试类:Test.java
/** * @author Hercules* @version 创建时间:2020年1月10日 下午4:09:07 * 类说明 */
public class Test {public static void main(String[] args) {Manager manager = new Manager();for(int i = 0;i<10;i++) {Employee employee = new Employee(i,"张三"+i,Math.random()*10000);manager.addEmployee(employee);}manager.showAllEmployee();System.out.println("上面为排序前");//排序展示manager.sort();manager.showAllEmployee();//返回最大的工资的人System.out.println("最高工资的人的数据为");System.out.println(manager.getMaxSalary().toString());}
}
好了这是一个用list完成的员工管理系统,我下面的博客还会用Map再完成一次,到时候又会有很多新的东西。