BUPT_HUSTOJ_1076

持续更新,敬请关注!

问题 A: 群体对象_TreeMap

题目描述

定义下述5个类(这5个类与前边的作业的要求一致,可以直接拿来用)
其中SalaridEmployee, HourlyEmployee, CommisionEmployee 继承自Employee,basePlusCommisionEmployee继承自 CommisionEmployee。
类属性如下:
Employee: firstName,lastName,socialSecurityNumber
SalaridEmployee: weeklySalary(周薪)
HourlyEmployee: wage(每小时的工钱),hours(月工作小时数)
CommisionEmployee: grossSales(销售额),commissionRate(提成比率)
basePlusCommisionEmployee: baseSalary(月基本工资)

Employee类中定义了抽象方法earning,用于计算员工的月工资。
SalaridEmployee月工资计算为:weeklySalary4
HourlyEmployee月工资计算为:wage
hours
CommisionEmployee月工资计算为:grossSalescommissionRate
basePlusCommisionEmployee月工资计算为:grossSales
commissionRate+baseSalary
类还应该包括构造方法,toString方法,属性的get/set方法。
firstName,lastName,socialSecurityNumber的初始化在构造方法中完成。其中对firstName,lastName也要提供get/set方法,对socialSecurityNumber只提供get方法。
其他属性要提供get和set方法。

定义EmployeeException类,该类继承自Exception,至少包含code 和 message两个属性,分别代表错误码和错误信息。

定义类factory,该类有私有属性employees,类型为TreeMap。
完成下述功能:
1) 定义方法Employee getEmployee( String empSecNum),用于查找并返回社会保险号为empSecNum的员工,若未找到该员工,则抛出EmployeeException异常,其中错误码为1004,错误信息为"employee not found.", 否则根据返回的员工对象的引用。
2) 定义方法Employee deleteEmployee(String empSecNum),用于从TreeMap中删除社会保险号为empSecNum的员工,并返回该员工对象的引用。若未找到该员工,则抛出EmployeeException异常,其中错误码为1002,错误信息为"employee not found."。
3) 定义方法Employee addEmployee(Employee emp),用于添加参数定义的员工对象到TreeMap中。如果此员工已经存在,则抛出EmployeeException异常,其中错误码为1001,错误信息为"employee exists." 。否则返回该员工对象的引用。
4) 定义方法Employee updateEmployee(String empSecNum ,Employee emp),用于更新员工集合中社会保险号为empSecNum的员工对象信息,更新后的信息为emp。如果不存在该员工,抛出EmployeeException异常,其中错误码为1003,错误信息为"employee not found." 否则返回emp。
5) 定义方法void printEmployees(),用于输出每一个员工的信息。

用以上各类完成下述功能。

输入

为若干行,每行代表一个操作。每行的格式为:第一个字符串为操作命令,其中:
get 对应getEmployee方法。
add 对应addEmployee方法。
update对应updateEmployee方法。
delete对应deleteEmployee方法
print 对应printEmployees方法。
exit表示程序结束。

add和update的后续格式为一个雇员的信息(具体见样例):其中0表示SalaridEmployee,1表示HourlyEmployee,2表示CommissionEmployee,3表示basePlusCommisionEmployee。紧跟着的三个字符串依次代表firstName,lastName,socialSecurityNumber。后边的数字,如果是SalaridEmployee则代表周薪,如果是HourlyEmployee,则依次代表wage,hours,如果是CommissionEmployee则依次代表grossSales,commissionRate,如果是basePlusCommisionEmployee则依次代表grossSales,commissionRate,baseSalary。

get和delete的后续格式为雇员的社会保险号(具体见样例)。
print与exit没有后续输入。

样例:

add 0 Ai Meng 2012673901 4312
add 1 NanXiong Qimu 2016782340 15.2 200
add 2 Guo Yang 2017672347 46781.3 0.1
add 3 Rong Huang 2018768901 7854.4 0.28 7098
get 2016782340
delete 2018768901
update 2 Guo Yang 2017672347 46780 0.1
get 2016782345
delete 20187890
print
exit

输出

print操作,依次输出TreeMap全部雇员信息(格式见样例)。
其他操作,如果发生异常,则输出错误代码和错误信息(格式见样例),否则,输出对应方法返回的雇员信息(格式见样例)。

样例:

firstName:Ai; lastName:Meng; socialSecurityNumber:2012673901; earning:17248.00
firstName:NanXiong; lastName:Qimu; socialSecurityNumber:2016782340; earning:3040.00
firstName:Guo; lastName:Yang; socialSecurityNumber:2017672347; earning:4678.13
firstName:Rong; lastName:Huang; socialSecurityNumber:2018768901; earning:9297.23
firstName:NanXiong; lastName:Qimu; socialSecurityNumber:2016782340; earning:3040.00
firstName:Rong; lastName:Huang; socialSecurityNumber:2018768901; earning:9297.23
firstName:Guo; lastName:Yang; socialSecurityNumber:2017672347; earning:4678.00
1004
employee not found.
1002
employee not found.
firstName:Ai; lastName:Meng; socialSecurityNumber:2012673901; earning:17248.00
firstName:NanXiong; lastName:Qimu; socialSecurityNumber:2016782340; earning:3040.00
firstName:Guo; lastName:Yang; socialSecurityNumber:2017672347; earning:4678.00

代码


import java.util.*;

class SalaridEmployee extends Employee {
    //0
	private double weeklySalary;
	public SalaridEmployee(String firstname, String lastname, String socail, double weeklySalary) 
	{
   
		super(firstname, lastname, socail);
		this.weeklySalary = weeklySalary;
	}
	public double getWeeklySalary()
	{
   
		return weeklySalary;
	}
	public double
  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值