package com.test3; import java.util.*; import java.io.*; /** * @author qingfeng * 重要思想:面向對象思想(添加員工管理類) * 功能:公司職員薪水管理系統 */ public class SalarySystem { public static void main(String[] args) throws IOException { ClerkManager cm = new ClerkManager();//創建員工管理類 InputStreamReader isr = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(isr); while(true) { //簡易菜單 System.out.println("公司職員薪水管理系統"); 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("---------------------------------------"); System.out.println("請選擇序號:"); String no = br.readLine(); if(no.equals("1")){ System.out.println("添加新員工:"); System.out.println("請輸入姓名:"); String name = br.readLine(); System.out.println("請輸入性別:"); String sex = br.readLine(); System.out.println("請輸入年齡:");//如何用InputStreamReader來輸入一個int型的數據 Scanner sc = new Scanner(System.in); int age = sc.nextInt(); System.out.println("請輸入工號:"); String clerkNo = br.readLine(); System.out.println("請輸入薪資:"); float salary = Float.parseFloat(br.readLine()); Clerk clerk = new Clerk(name, sex, age, clerkNo, salary);//創建員工對象並且調用構造方法初始化 cm.addClerk(clerk);//調用“添加新員工”方法 }else if(no.equals("2")){ System.out.println("請輸入員工號:"); String clerkNo = br.readLine();//接收輸入的工號 cm.showInfo(clerkNo); }else if(no.equals("3")){ System.out.println("顯示所有員工信息:"); cm.showAllInfo(); }else if(no.equals("4")){ System.out.println("修改員工的薪水:"); System.out.println("輸入員工工號:"); String clerkNo = br.readLine();//接收輸入的工號 System.out.println("修改員工薪資:"); String sal = br.readLine(); float salary = Float.parseFloat(sal); cm.modifySal(clerkNo, salary); }else if(no.equals("5")){ System.out.println("根據工號刪除該員工的信息:"); System.out.println("輸入員工工號:"); String clerkNo = br.readLine();//接收輸入的工號 cm.deleteInfo(clerkNo); }else if(no.equals("6")){ System.out.println("根據薪資由低到高排序"); cm.Qsort(0, cm.al.size()-1); cm.showAllInfo(); }else if(no.equals("7")){ System.out.println("統計員工的平均工資、最高工資和最低工資:"); cm.calSalary(); }else if(no.equals("8")){ System.exit(0); }else{ System.out.println("輸入不合法!"); } } } } //員工管理類(非常重要!面向對象) class ClerkManager { //成員屬性 ArrayList al = null; //構造方法:初始化 不斷創造新對象 public ClerkManager() { al = new ArrayList();//注意寫法!! } //成員方法 //添加新員工! public void addClerk(Clerk clerk) //注意用增加的對象的引用作為參數! { al.add(clerk); //ArrayList添加方法用add()方法! } //根據工號顯示該員工的信息 public void showInfo(String no) { int flag = 0; for(int i=0; i<al.size(); i++) { Clerk clerk= (Clerk)al.get(i); if(clerk.getNo().equals(no)) { flag = 1; System.out.println("clerk"+(i+1)+"的信息是:"); System.out.print("姓名:"+clerk.getName()); System.out.print(" 性別:"+clerk.getSex()); System.out.print(" 年齡:"+clerk.getAge()); System.out.print(" 工號:"+clerk.getNo()); System.out.println(" 薪資:"+clerk.getSalary()); } } if(flag == 0) System.out.println("找不到所查工號!"); } //顯示所有員工信息 public void showAllInfo() { for(int i=0; i<al.size(); i++) { Clerk clerk= (Clerk)al.get(i); System.out.println("clerk"+(i+1)+"的信息是:"); System.out.print("姓名:"+clerk.getName()); System.out.print(" 性別:"+clerk.getSex()); System.out.print(" 年齡:"+clerk.getAge()); System.out.print(" 工號:"+clerk.getNo()); System.out.println(" 薪資:"+clerk.getSalary()); } } //修改員工的薪水 public void modifySal(String no, float sal) //員工編號 最新的薪資 { int flag = 0; for(int i=0; i<al.size(); i++) { Clerk clerk= (Clerk)al.get(i); if(clerk.getNo().equals(no)) { flag = 1; clerk.setSalary(sal); } } if(flag == 0) System.out.println("找不到所查工號!"); } //根據工號刪除該員工的信息 public void deleteInfo(String no) { int flag = 0; for(int i=0; i<al.size(); i++) { Clerk clerk= (Clerk)al.get(i); if(clerk.getNo().equals(no)) { flag = 1; al.remove(i); } } if(flag == 0) System.out.println("找不到所查工號!"); } //根據薪資由低到高排序 public void Qsort(int left, int right) { int i = left; int j = right; if(i < j)//遞歸結束條件 { Clerk clerk = (Clerk)al.get(left); float key = clerk.getSalary(); while(i<j)//一趟快速排序 { while(i<j && ((Clerk)al.get(j)).getSalary() >= key) { j--; } if(i<j) { al.set(i,al.get(j)); i++; } while(i<j && ((Clerk)al.get(i)).getSalary() <= key) { i++; } if(i<j) { al.set(j, al.get(i)); } } al.set(i, clerk); Qsort(left, i-1); Qsort(i+1, right); } } //統計員工的平均工資、最高工資和最低工資 public void calSalary() { float totalSal = 0; float minSal = ((Clerk)al.get(0)).getSalary(); float maxSal = ((Clerk)al.get(0)).getSalary(); for(int i=0; i<al.size(); i++) { Clerk clerk = (Clerk)al.get(i); totalSal += clerk.getSalary(); if(minSal > clerk.getSalary()) { minSal = clerk.getSalary(); } if(maxSal < clerk.getSalary()) { maxSal = clerk.getSalary(); } } System.out.println(al.size()+"個人的平均薪資為:" + totalSal/al.size()); System.out.println(al.size()+"個人的最低薪資為:"+minSal); System.out.println(al.size()+"個人的最高薪資為:"+maxSal); } } //員工類 class Clerk { private String name; private String sex; private int age; private String no; private float salary; public Clerk(String name, String sex, int age, String no, float salary) { this.name = name; this.sex = sex; this.age = age; this.no = no; this.salary = salary; } 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 int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getNo() { return no; } public void setNo(String no) { this.no = no; } public float getSalary() { return salary; } public void setSalary(float salary) { this.salary = salary; } }