A. 作业4 群体对象

定义类factory,该类有私有属性employees,类型为HashMap。
完成下述功能:
1) 定义方法void initEmployees(List es),以socialSecurityNumber为key,将员工对象保存到HashMap中。其中Employee类定义见实验3。
2) 定义方法Employee getEmployee( String empSecNum),用于查找并返回社会保险号为empSecNum的员工,若未找到该员工,返回null, 然后输出”get: employee not found.”, 否则根据返回的员工对象输出员工信息,信息格式与实验3一致。
3) 定义方法Employee deleteEmployee(String empSecNum),用于从HashTable中删除社会保险号为empSecNum的员工,并返回该员工对象的引用。若未找到该员工,返回null, 然后输出”delete: employee not found.”,否则根据返回的员工对象输出员工信息。
4) 定义方法Employee addEmployee(Employee stu),用于添加参数定义的员工对象到HashMap中。如果此员工已经存在,则返回null,然后输出”add: employee exists.” 。否则返回该员工对象,并输出员工信息。
5) 定义方法Employee updateEmployee(String empSecNum ,Employee emp),用于更新员工集合中社会保险号为empSecNum的员工对象信息,更新后的信息为emp。如果不存在该员工,返回null,然后输出”update: employee not found.”。否则返回emp,并输出员工信息。
6) 定义方法void printEmployees(),用于输出每一个员工的信息。

样例格式说明:
每行表示一个操作。样例中首先以init操作读取多个员工信息。其中init后的数字表示员工类型,-1表示init结束,此时应该调用initEmployees方法将多个员工信息存入HashMap。0表示SalaridEmployee,1表示HourlyEmployee,2表示CommissionEmployee,3表示BasePlusCommisionEmployee。

get 对应getEmployee方法。
add 对应addEmployee方法。
update对应updateEmployee方法。
delete对应deleteEmployee方法
print 对应printEmployees方法。

 

输入样例

init 0 Ai Meng 2012673901 4312
init 1 NanXiong Qimu 2016782340 15.2 200
init 2 Guo Yang 2017672347 46781.3 0.1
init 3 Rong Huang 2018768901 7854.4 0.28 7098
init -1
get 2018768902
get 2018768901
delete 2018768901
add 0 Ai Meng 2012673901 4312
add 0 Hai Kong 2015673901 4333
update 0 Hai Kong 2015673901 9999
delete 2017672347
delete 2015673909
print

输出样例

get: employee not found.
firstName:Rong; lastName:Huang; socialSecurityNumber:2018768901; earning:9297.23
firstName:Rong; lastName:Huang; socialSecurityNumber:2018768901; earning:9297.23
add: employee exists.
firstName:Hai; lastName:Kong; socialSecurityNumber:2015673901; earning:17332.00
firstName:Hai; lastName:Kong; socialSecurityNumber:2015673901; earning:39996.00
firstName:Guo; lastName:Yang; socialSecurityNumber:2017672347; earning:4678.13
delete: employee not found.
firstName:Ai; lastName:Meng; socialSecurityNumber:2012673901; earning:17248.00
firstName:NanXiong; lastName:Qimu; socialSecurityNumber:2016782340; earning:3040.00
firstName:Hai; lastName:Kong; socialSecurityNumber:2015673901; earning:39996.00
import java.util.*;
public class FactoryTest {
    public static void main(String[] args) {
        Scanner inputinformation = new Scanner(System.in);
        factory f = new factory();
        while (inputinformation.hasNext()) {
            List<String> es = new ArrayList<String>();
            String s = inputinformation.nextLine();
            //System.out.println();
            String[] arr = s.split(" ");
            //System.out.println(arr);
            //System.out.println(arr.length);
            for (int i = 0; i <8; i++) {
                if (i <arr.length)
                    es.add(arr[i]);
                else
                    es.add("0");
            }
            if (arr[0].equals("init")) {
                if (arr[1].equals("-1")) continue;
                else f.initEmployees(es);
            } else if (arr[0].equals("get")) {
                f.getEmployees(arr[1]);
            } else if (arr[0].equals("add")) {
                Employee stu = new Employee(Integer.valueOf(es.get(1)).intValue(), es.get(2), es.get(3), es.get(4));
                stu.earning(Integer.valueOf(es.get(1)).intValue(), Double.valueOf(es.get(5)).doubleValue(), Double.valueOf(es.get(6)).doubleValue(), Double.valueOf(es.get(7)).doubleValue());
                f.addEmployee(stu);
            } else if (arr[0].equals("update")) {
                Employee emp = new Employee(Integer.valueOf(es.get(1)).intValue(), es.get(2), es.get(3), es.get(4));
                emp.earning(Integer.valueOf(es.get(1)).intValue(), Double.valueOf(es.get(5)).doubleValue(), Double.valueOf(es.get(6)).doubleValue(), Double.valueOf(es.get(7)).doubleValue());
                f.updateEmployee(emp.socialSecityNumber, emp);
            } else if (arr[0].equals("delete")) {
                f.deleteEmployee(es.get(1));
            }
            else if(arr[0].equals("print")){
                f.printEmployees();
            }

        }
    }
}

    class factory {
        HashMap<String, Employee> employes = new HashMap<>();

        void initEmployees(List<String> es) {
            //System.out.println(es.get(2));
           // System.out.println(es.get(3));
            //System.out.println(es.get(4));
            Employee x = new Employee(Integer.valueOf(es.get(1)).intValue(), es.get(2), es.get(3), es.get(4));
            x.earning(Integer.valueOf(es.get(1)).intValue(), Double.valueOf(es.get(5)).doubleValue(), Double.valueOf(es.get(6)).doubleValue(), Double.valueOf(es.get(7)).doubleValue());
            employes.put(es.get(4), x);
        }

        void getEmployees(String s) {
            Iterator iterator = employes.entrySet().iterator();
            int ensure = 0;
            while (iterator.hasNext()) {
                Map.Entry entry = (Map.Entry) iterator.next();
                if (entry.getKey().equals(s)) {
                    System.out.println(entry.getValue());
                    ensure = 1;
                }
            }
            if (ensure == 0) {
                System.out.println("get: employee not found.");
            }
        }

        void deleteEmployee(String empSecNum) {
            int ensure = 0;
            Iterator iterator = employes.entrySet().iterator();
            while (iterator.hasNext()){
                Map.Entry entry = (Map.Entry) iterator.next();
                if (entry.getKey().equals(empSecNum)) {
                    Employee re = employes.remove(empSecNum);
                    ensure = 1;
                    System.out.println(re);
                    break;
                }
            }
            if (ensure == 0) {
                System.out.println("delete: employee not found.");
            }
        }

        Employee addEmployee(Employee stu) {
            int ensure = 0;
            for (Map.Entry<String, Employee> item : employes.entrySet()) {
                if (item.getKey().equals(stu.getSocialSecityNumber())) {
                    System.out.println("add: employee exists.");
                    ensure = 1;
                    return null;
                }
            }
            if (ensure == 0) {
                employes.put(stu.socialSecityNumber, stu);
                System.out.println(stu);
                return stu;
            }
            return null;
        }

        Employee updateEmployee(String empSecNum, Employee emp) {
            int ensure = 0;
            for (Map.Entry<String, Employee> item : employes.entrySet()) {
                if (item.getKey().equals(empSecNum)) {
                    employes.put(empSecNum, emp);
                    System.out.println(emp);
                    ensure = 1;
                    return emp;
                }

            }
            return null;
        }

        void printEmployees() {
            for (String num : employes.keySet()) {
                System.out.println(employes.get(num).toString());
            }
        }

    }

    class Employee {
        String firstName;
        String lastName;
        String socialSecityNumber;
        double weeklySalary;
        double wage;
        double grossSales;
        double hours;
        double commissionrate;
        double basesalary;
        double earning;
        int type;

         Employee(int type, String firstName, String lastName, String socialSecityNumber) {
            this.type = type;
           this. firstName = firstName;
            this.lastName = lastName;
            this.socialSecityNumber = socialSecityNumber;
        }

        String getFirstName() {
            return firstName;
        }

        String getLastName() {
            return lastName;
        }

        String getSocialSecityNumber() {
            return socialSecityNumber;
        }

        double earning(int i, double a, double b, double c) {
            if (i == 0) {
                this.weeklySalary = a;
                earning = weeklySalary * 4.00;
            } else if (i == 1) {
                this.wage = a;
                this.hours = b;
                earning = wage * hours;
            } else if (i == 2) {
                this.grossSales = a;
                this.commissionrate = b;
                earning = grossSales * commissionrate;
            } else if (i == 3) {
                this.grossSales = a;
                this.commissionrate = b;
                this.basesalary = c;
                earning = grossSales * commissionrate + basesalary;
            }
            return earning;
        }

        double getEarning() {
            return earning;
        }

        public String toString() {
            return "firstName:" +
                    firstName +
                    "; lastName:" +
                    lastName +
                    "; socialSecurityNumber:" +
                    socialSecityNumber +
                    "; earning:" +
                    String.format("%.2f", earning);
        }
    }

我想读java的底层源代码,之前在图书馆看的STL源码手册太震撼了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值