package lwz;
import java.util.*;
public class Employment {
public static void main(String[] args) throws java.util.InputMismatchException{
// 创建EmpManage对象
EmpManage em = new EmpManage();
Scanner sr = new Scanner(System.in);
// 作出一个菜单
while (true) {
System.out.println("公司职员薪水管理系统");
System.out.println("1、录入新员工");
System.out.println("2、根据工号查询信息");
System.out.println("3、查询所有员工信息");
System.out.println("4、通过工号修改员工薪水");
System.out.println("5、删除员工信息");
System.out.println("6、按薪水高低排序");
System.out.println("7、计算平均工资及最高(低)工资");
System.out.println("0、退出系统");
System.out.print("请输入对应的数字进行操作:");
int sel = sr.nextInt();
switch (sel) {
case 1:
System.out.println("请录入新员工的信息");
try {
System.out.print("工号(输入-1返回到上一级菜单中):");
String empNo = sr.next();
if (empNo.equals("-1")) {
break;
}
System.out.print("姓名:");
String name = sr.next();
System.out.print("工资:");
float sal = sr.nextFloat();
// 构建emp对象
Emp emp = new Emp(empNo, name, sal);
// 将empNo,name,sal的值传给构造函数Emp
em.addEmp(emp);
System.out.println("创建新员工" + name + "成功!");
} catch (InputMismatchException e) {
System.out.println("请输入正确格式的工号、姓名和工资" + "\n工号必须为字符串形式"
+ "\n姓名必须为字符串形式" + "\n工资必须为数字类型");
}
break;
case 2:
System.out.println("请录入员工工号:");
String empNo1 = sr.next();
em.showInfo(empNo1);
break;
case 3:
System.out.println("公司所有员工信息如下:");
em.AllInfo();
break;
case 4:
System.out.println("请输入工号:");
String empNo2 = sr.next();
System.out.println("将工资修改为:");
float newSal = sr.nextFloat();
em.updateSal(empNo2, newSal);
break;
case 5:
System.out.println("请输入要删除人员的工号:");
String empNo3 = sr.next();
em.delEmp(empNo3);
break;
case 6:
System.out.println("已按薪资高低进行排序如下:");
em.SortSal();
break;
case 7:
System.out.println("显示平均工资及最高、最低工资人员信息如下:");
em.Average();
break;
case 0:
System.out.println("已正常退出!");
System.exit(0);
break;
default:
System.out.println("输入错误,请重新输入!");
}
}
}
}
// 创建员工管理类
class EmpManage {
private ArrayList al = new ArrayList();
// 加入员工
public void addEmp(Emp emp) {// 传入员工信息
al.add(emp);
}
// 根据员工工号显示员工的相关信息
public void showInfo(String empNo) {// 将工号传入showInfo方法中
// 遍历整个ArrayList
for (int i = 0; i < al.size(); i++) {
// 取出Emp对象
Emp emp = al.get(i);
// 比较编号
if (emp.getEmpNo().equals(empNo)) {// 由于empNo类型为String,所以要使用equals进行内容比较,不可以使用==地址比较
System.out.println("找到该员工,他的信息是:");
System.out.println("工号:" + empNo + "\t姓号:" + emp.getName()
+ "\t薪水:" + emp.getSal());
}
}
System.out.println("工号不存在或者无此人,无法进行相关操作!");
}
// 显示所有员工信息
public void AllInfo() {
for (int i = 0; i < al.size() - 1; i++) {// ArrayList集合类的al大小,控制循环
for (int j = 1; j < al.size() - i; j++) {// 将al中的值进行循环比较
Emp emp1 = (Emp) al.get(j - 1);
Emp emp2 = (Emp) al.get(j);
// 使用compareTo方法进行Sting类型值比较
if (emp1.getEmpNo().compareTo(emp2.getEmpNo()) > 0) {
al.set(j, emp1);// 交换值并重写入al中
al.set(j - 1, emp2);// 交换值并重写入al中
}
}
}
for (Emp emp : al) {
System.out.println("工号:" + emp.getEmpNo() + "\t姓名:" + emp.getName()
+ "\t工资:" + emp.getSal());
}
}
// 修改员工的薪水
public void updateSal(String empNo, float newSal) {
// 遍历整个ArrayList
for (int i = 0; i < al.size(); i++) {
// 取出Emp对象
Emp emp = (Emp) al.get(i);
if (emp.getEmpNo().equals(empNo)) {
// 修改新水
emp.setSal(newSal);// setSal会将修改的薪水传和ArrayList中
System.out.println("已将" + emp.getName() + "调整为:" + newSal);
}
}
System.out.println("工号不存在或无此人,无法进行相应操作!");
}
// 员工离职删除指定员工
public void delEmp(String empNo) {
// 遍历整个ArrayList
for (int i = 0; i < al.size(); i++) {
// 取出Emp对象
Emp emp = (Emp) al.get(i);
if (emp.getEmpNo().equals(empNo)) {
// 按工号删除
al.remove(i);// 也可以使用al.remove(emp);
System.out.println("已将" + emp.getName() + "信息清除!");
}
}
}
// 按薪水高低排序
public void SortSal() {
for (int i = 0; i < al.size() - 1; i++) {// ArrayList集合类的al大小,控制循环
for (int j = 1; j < al.size() - i; j++) {// 将al中的值进行循环比较
Emp emp1 = (Emp) al.get(j - 1);
Emp emp2 = (Emp) al.get(j);
if (emp1.getSal() < emp2.getSal()) {// 比较sal的值大小
al.set(j, emp1);// 交换值并重写入al中
al.set(j - 1, emp2);// 交换值并重写入al中
}
}
}
for (Emp emp : al) {
System.out.println("工号:" + emp.getEmpNo() + "\t姓名:" + emp.getName()
+ "\t工资:" + emp.getSal());
}
}
// 计算平均工资并找出最高工资和最低工资的员工
public void Average() {
float sum = 0f, ave = 0f;
// 遍历整个ArrayList
for (int k = 0; k < al.size(); k++) {
// 取出Emp对象
Emp emp = (Emp) al.get(k);
sum = emp.getSal() + sum;
}
ave = sum / al.size();
System.out.println("共有员工" + al.size() + "人\t总工资为:" + sum + "\t平均工资为:"
+ ave);
// 找出最高工资与最低式资
for (int i = 0; i < al.size() - 1; i++) {// ArrayList集合类的al大小,控制循环
for (int j = 1; j < al.size() - i; j++) {// 将al中的值进行循环比较
Emp emp1 = (Emp) al.get(j - 1);
Emp emp2 = (Emp) al.get(j);
if (emp1.getSal() < emp2.getSal()) {// 比较sal的值大小
al.set(j, emp1);// 交换值并重写入al中
al.set(j - 1, emp2);// 交换值并重写入al中
}
}
}
for (int i = 0; i < al.size(); i++) {
if (i == 0) {
Emp emp = (Emp) al.get(i);
System.out.println("工资最高的人员是:" + emp.getName() + "\t薪水是:"
+ emp.getSal());
} else if (i == al.size() - 1) {
Emp emp = (Emp) al.get(i);
System.out.println("工资最低的人员是:" + emp.getName() + "\t薪水是:"
+ emp.getSal());
}
}
}
}
// 创建员工类
class Emp {
// 定义成员变量工号、姓名、薪水
public String empNo;
public String name;
public float sal;
// 创建构造函数,初始化成员变量
public Emp(String empNo, String name, float sal) {
this.empNo = empNo;
this.name = name;
this.sal = sal;
}
// 使用set、get方法进行数据传递
public String getEmpNo() {
return empNo;
}
public void setEmpNo(String empNo) {
this.empNo = empNo;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public float getSal() {
return sal;
}
public void setSal(float sal) {
this.sal = sal;
}
}