您的位置:首页 > 其它

使用集合(ArrayList,HashMap等做对比)实现员工管理系统案例

2015-06-11 11:27 543 查看
用案例说话,在案例中学习集合。当然这里并没有引入泛型。下一次用另外一个来引入泛型。希望小伙伴关注。这个案例中注释很清晰,相信大家可以看懂。
package com.test;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
import java.util.logging.Level;
import java.util.logging.Logger;
public class test {
public static void main(String[] args) {
       //创建EmpMange对象
    EmpManage em=new EmpManage();
    //输入流
    BufferedReader br=new BufferedReader(new InputStreamReader(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.退出系统");
        try {
            String operType=br.readLine();
              //判断操作数类型
            if(operType.equals("1")){//add emp
                System.out.println("请输入编号:");
                String empNo=br.readLine();
                System.out.println("请输入姓名:");
                String name=br.readLine();
                System.out.println("请输入该员工薪水:");
                float sal=Float.parseFloat(br.readLine());
                Emp emp=new Emp(empNo, name, sal);
                em.addEmp(emp);
            }
            else if(operType.equals("2")){//查找
                System.out.println("请输入编号");
                String empNo=br.readLine();
                em.showInfo(empNo);
            }
            else if(operType.equals("3")){//修改雇员薪资
                System.out.println("请输入要修改的员工的编号:");
                String empNo=br.readLine();
                System.out.println("请输入该员工的新工资:");
                float empSal=Float.parseFloat(br.readLine());
                em.updateSal(empNo, empSal);
            }
            else if(operType.equals("4")){//删除一个员工
                System.out.println("请输入你要删除的员工的编号:");
                String empNo=br.readLine();
                em.delEmp(empNo);
            }
            else if(operType.equals("5")){
                System.exit(0);
            }
        } catch (IOException ex) {
            Logger.getLogger(test.class.getName()).log(Level.SEVERE, null, ex);
         }
      }
    }
}
//雇员管理类
class EmpManage{
    private ArrayList al=null;
    public EmpManage(){
        al=new ArrayList();
    }
    //加入员工
    public void addEmp(Emp emp){
        al.add(emp);
    }
    //显示员工的相关信息
    public void showInfo(String empNo){
        //遍历整个ArrayList
        for(int i=0;i<al.size();i++){
            //取出Emp对象
            Emp emp=(Emp) al.get(i);
            //比较编号
            if(emp.getEmpNo().equals(empNo)){
                System.out.println("找到该员工,他的信息是:");
                System.out.println("编号=:"+empNo);
                System.out.println("名字="+emp.getName());
                System.out.println("薪水="+emp.getSal());
            }
        }
    }
    //修改工资
    public void updateSal(String empNo,float newSal){
        for(int i=0;i<al.size();i++){
            Emp emp=(Emp) al.get(i);
            if(emp.getEmpNo().equals(empNo)){
                emp.setSal(newSal);
            }
        }
    }
    //删除某个员工
    public void delEmp(String empNo){
        for(int i=0;i<al.size();i++){
            Emp emp=(Emp) al.get(i);
            if(emp.getEmpNo().equals(empNo)){
                al.remove(i);//前者根据index来删除,
                //后者直接把对象放进去删除al.remove(emp);
            }
        }
    }
}
//雇员类
class Emp{
    private String empNo;//员工号
    private String name;//名字
    private float sal;//薪水
    public Emp(String empNo,String name,float sal){
        this.empNo=empNo;
        this.name=name;
        this.sal=sal;
    }
        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;
        }
    
}
第二个java文件用来测试hashMap
package com.test;

import java.util.HashMap;
import java.util.Iterator;

public class HashMap_demo {
    public static void main(String[] args) {
        //创建一个HashMap对象
        HashMap hm=new HashMap();
        Emp emp1=new Emp("s001", "zhangsan", 1000f);
        Emp emp2=new Emp("s002", "lisi", 500f);
        Emp emp3=new Emp("s003", "wangmazi", 500f);
        //将两个员工员工对象放入到hm
        hm.put("s001", emp1);
        hm.put("s002", emp2);
        //下面这样子添加,会把原来s002的键覆盖掉,让它的值变为emp3
        //其实这也就做到了 修改的目的。  ArrayList 允许重复,而hashmap则不允许
        //因为映射是要做到唯一性的
        hm.put("s002", emp3);
        //如果要查找的编号是s002
        if(hm.containsKey("s002")){
            System.out.println("有该员工");
            //如何取出,不用像ArrayList那样去遍历
            //通过键来获取他的对象值
            //通过hashmap来做刚刚那个员工管理系统是更方便的。
            Emp emp=(Emp) hm.get("s002");
            System.out.println("名字:"+emp.getName());
        }
        else{
            System.out.println("can not find");
        }
        //如何遍历haspMap中所有的Key和Value
        //使用迭代器,这个迭代器遍历是没有特定顺序的遍历
        //The elements are returned in no particular order 
      // (unless this set is an instance of some class that provides a guarantee
        Iterator it=hm.keySet().iterator();    
        //hasNext看看还有没有更多的元素
        while(it.hasNext()){
            //取出key,迭代器对象的next()方法返回的是,迭代器里面的下一个元素,我么
            //我们现在迭代器里面是key的set集合,所以取出的自然是key,而我们的key是string类型的,
            //当然要用string来接受
            String key=(String) it.next();
            //通过key取出value
            Emp emp=(Emp) hm.get(key);
            System.out.println("名字:"+emp.getName());
            System.out.println("薪水:"+emp.getSal());
        }
    }
 
}
输出结果:
有该员工
名字:wangmazi
名字:wangmazi
薪水:500.0
名字:zhangsan
薪水:1000.0
第三个java文件用来演示Hashtable的
package com.test;import java.util.HashMap;import java.util.Hashtable;import java.util.Map;public class Hashtable_demo {    public static void main(String[] args) {        Hashtable ht=new Hashtable();        //put()和 get()非常相似,这里不演示了        //这里进行区别演示,Hashtable中不允许出现null//        ht.put(null, null);//        System.out.println("Hashtable测试:"+ht.get(null));        //如果我是用HashMap        Map hm2=new HashMap();//这里体现了多态,而且很方便        //也可以HashMap hm2=new HashMap();        hm2.put(null, null);        System.out.println("HashMap测试:"+hm2.get(null));    }}
输出结果:HashMap测试:null如果是将Hashtable的注释去掉,因为不允许空值,所以,会报错,但是编译是通过的。会报一个异常,输入如下:Exception in thread "main" java.lang.NullPointerExceptionat java.util.Hashtable.put(Hashtable.java:459)at com.test.Hashtable_demo.main(Hashtable_demo.java:12)Java Result: 1
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: