Java第二次作业第十六题Word文档下载推荐.docx
《Java第二次作业第十六题Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《Java第二次作业第十六题Word文档下载推荐.docx(8页珍藏版)》请在冰豆网上搜索。
已知每类员工均有表示员工工号、姓名和出生年月的属性,和用于计算员工月薪的方法。
创建一个Employee变量数组,保存Employee类层次结构中每个具体类对象的引用,对每个Employee显示其工号、姓名、出生年月和月收入,如果当月是Employee的生日所在的月份,则还另发给他100月作为红包。
二、题目分析与设计
1.题目需求:
①计算每一类员工的工资
②创建一个Employee变量数组,保存Employee类层次结构中每个具体类对象的引用
③对每个Employee显示其工号、姓名、出生年月和月收入
2.创造一个employee抽象类,其中有employee的基本属性:
工号、姓名、出生年月和月收入,还有一个抽象方法,每一个类员工都是一个具体类,对抽象方法进行不同的重载,以实现不同员工不同的工资计算方法,另外因为本题没有给出当前月份、固定月薪、销售每件产品的提成、时薪、加班费等,因此本程序都以假设的方法自行设定,保存在多个接口中,在每个类中按需继承
3.继承层次结构
4.开发环境:
Eclipse
三、测试分析
程序输出:
pleaseenteremployeetype
0:
SalariedEmployee1:
HourlyEmployee2:
CommissionEmployee3:
BasePlusCommissionEmployee
用户输入:
0(这里以固定月薪做示范,假定当前为11月,固定月薪为5000)
pleaseenterdetailsofthisemployee(namenumberbirthyearbirthmonth)
forexample:
John
9527
1995
10
Jack
5816
1998
name:
number:
birthyear:
birthmonth:
income:
5000.000000
②pleaseenteremployeetype
11(其他不变,月份输入11)
11
5100.000000(发了100元红包)
附录:
源代码
importjava.util.Scanner;
abstractclassEmployee
{
publicintnumber;
publicString[]name=newString[10];
publicintbirthYear;
publicintbirthMonth;
publicstaticdoublesalary;
publicabstractvoidpay(String[]name,intnumber,intbirthYear,intbirthMonth);
}
interfaceGetMonth
publicintmonth=11;
//假设现在是11月份
interfaceGetSalaryPerMonth
publicdoublesalaryPerMonth=5000;
//假设月薪5000元
interfaceGetWorkTime
publicdoubleworkTime=250;
//假设每个月工作时间200小时
publicdoublesalaryPerHour=20;
//时薪20元
publicdoubleoverTimePay=30;
//加班费30元每小时
interfaceGetAmountOfSaled
publicintamountOfSaled=500;
//假设一个月销量500件
publicdoublesalaryPerSaled=10;
//假设卖一件10元
interfaceGetBase
publicdoublebase=2000;
//假设底薪2000元
classSalariedEmployeeextendsEmployeeimplementsGetMonth,GetSalaryPerMonth
publicvoidpay(String[]name,intnumber,intbirthYear,intbirthMonth)
{
if(birthMonth==month)salary=salaryPerMonth+100;
//当月为生日月份,则发100元发红包
elsesalary=salaryPerMonth;
System.out.printf("
%s\n"
name+"
%d\n"
number+"
出生年月:
%d%d\n"
birthYear,birthMonth+"
月收入:
%lf\n"
salary);
}
classHourlyEmployeeextendsEmployeeimplementsGetMonth,GetWorkTime
if(workTime>
160)salary=workTime*20+(workTime-160)*30;
elsesalary=workTime*20;
if(birthMonth==month)salary+=100;
classCommissionEmployeeextendsEmployeeimplementsGetMonth,GetAmountOfSaled
salary=amountOfSaled*salaryPerSaled;
if(birthMonth==month)salary=+100;
classBasePlusCommissionEmployeeextendsEmployeeimplementsGetMonth,GetAmountOfSaled,GetBase
salary=amountOfSaled*salaryPerSaled+base;
publicclassPaysystemimplementsGetMonth
publicstaticvoidmain(Stringargs[])
Employee[]Data=newEmployee[4];
Data[0]=newSalariedEmployee();
Data[1]=newHourlyEmployee();
Data[2]=newCommissionEmployee();
Data[3]=newBasePlusCommissionEmployee();
//创建一个Employee变量数组,保存Employee类层次结构中每个具体类对象的引用,
System.out.println("
pleaseenteremployeetype\n0:
BasePlusCommissionEmployee"
);
Scanners=newScanner(System.in);
inta=s.nextInt();
if(a!
=0&
&
a!
=1&
=2&
=3)
System.out.println("
error"
System.exit(0);
pleaseenterdetailsofthisemployee(namenumberbirthyearbirthmonth)\nforexample:
\nJohn\n9527\n1995\n10"
Stringstr=s.next();
inth=s.nextInt();
intl=s.nextInt();
intm=s.nextInt();
System.out.printf("
str);
%d\nbirthyear:
%d\nbirthmonth:
h,l,m);
switch(a)
case(0):
if(l==11)System.out.printf("
%f"
SalariedEmployee.salary=5100);
elseSystem.out.printf("
SalariedEmployee.salary=5000);
};
break;
case
(1):
SalariedEmployee.salary=6000);
SalariedEmployee.salary=5900);
case
(2):
case(3):
SalariedEmployee.salary=7100);
SalariedEmployee.salary=7000);