定义类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源码手册太震撼了!