java大作业编一个程序打印出公司某月各员工工资

更新时间:2024-04-07 08:14:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

姓名:王镱澍

Java大作业

一、 题目

白浪公司的雇员根据参数月份来确定工资,如果该月员工过生日,则公司会额外奖励100元。

雇员分为以下若干类:

SalariedEmployee:拿固定工资的员工。 HourlyEmployee:按小时拿工资的员工。

SalesEmployee:销售人员,工资由月销售额和提成率决定。

BasePlusSalesEmployee:有固定底薪的销售人员,工资由底薪加上销售提成。

公司会给SalaryEmployee每月另外发放2000元加班费,给 BasePlusSalesEmployee发放1000元加班费。编一个java程序创建上述若干类,并实现确定月份以及该月不同员工的工作情况后打印出该公司该月各员工工资,公司总的工资支出情况。

二、 程序功能说明

编一个java程序创建上述若干类,并实现确定该月不同员工的工作情况以及输入月份后打印出该公司该月各员工工资,公司总的工资支出情况。

三、 类、属性、方法说明

程序中已给出详细解释在此只作简要说明: Employee:这是所有员工总的父类。 属性:员工的姓名和生日月份。

方法:getSalary(int month) 根据参数月份来确定工资,如果该月员工过生日,则公司会额外奖励100元。

SalariedEmployee:Employee的子类,拿固定工资的员工。 属性:月薪。

方法:每月工作超出160小时的部分按照1.5倍工资发放。

HourlyEmployee:Employee的子类,按小时拿工资的员工。 属性:每小时的工资、每月工作的小时数。

SalesEmployee:Employee的子类,销售人员。 属性:月销售额、提成率。

方法:工资由月销售额和提成率决定。

BasePlusSalesEmployee:SalesEmployee的子类,有固定底薪的销售人员。 属性:底薪。

方法:工资由底薪加上销售提成部分。

四、 程序代码

import java.util.*;

class MyException extends Exception {

MyException(){} //创建自己的异常定义 }

public class EmployeeTest {

//月份输入函数。

static int scanf() throws MyException {

Scanner in=new Scanner(System.in); int s=in.nextInt();

if(s<1|s>12) { throw new MyException(); } //月份不正确时抛出定义的异常。 else return s; }

//主函数入口。

public static void main(String[] args) {

Employee ep[] = new Employee[4];

ep[0] = new SalariedEmployee(\魏威\ ep[1] = new HourlyEmployee(\段利峰\ ep[2] = new SalesEmployee(\林龙\

ep[3] = new BasedPlusSalesEmployee(\华溪\ System.out.println(\请输入月份:\ int month=1; int data=1; while(data==1) {

try {month=scanf();data=0;}

catch(MyException e) { System.out.println(\月份是1-12月请输入正确月份\ }

System.out.println(\白浪集团\月工资表:\ for(int i=0;i

System.out.println(ep[i].getName()+\ }

//统计加班费 int result = 0;

for(int i=0;i

//统计本月给出员工的总工资 int salary=0;

for(int i=0;i

{ salary +=ep[i].getSalary(month)+ep[i].getAddtionalSalary();} System.out.println(\本月给出员工的总工资: \

} }

//定义加班费接口

interface AddtionalSalary {

int getAddtionalSalary(); } /**

*这是所有员工总的父类。

*属性:员工的姓名和生日月份。

*方法:getSalary(),getName(),getAddtionalSalary() */

class Employee implements AddtionalSalary {

private String name;//员工姓名 private int birth;//员工生日月份

public Employee(String name,int birth) { this.name = name;this.birth = birth;} /**

*方法说明:根据参数月份来确定工资,如果该月员工过生日,则公司会额外奖 *励100元。 */

public int getSalary(int month) {

int result = 0; if(month==birth) result = 100; return result; }

public String getName() {return name;} //方法说明:获取员工姓名。 /**

*方法说明: 公司会给SalaryEmployee每月另外发放2000元加班费,给 *BasePlusSalesEmployee发放1000元加班费 */

public int getAddtionalSalary() {return 0;} } /**

*Employee的子类,拿固定工资的SalariedEmployee员工。 *属性:月薪

*方法:getSalary(),getAddtionalSalary(). */

class SalariedEmployee extends Employee {

private int salaryPerMonth;

public SalariedEmployee(String name,int birth,int salaryPerMonth)

{

super(name,birth);

this.salaryPerMonth = salaryPerMonth; }

//按小时拿工资的员工,每月工作超出160小时的部分按照1.5倍工资发放. public int getSalary(int month) {

return this.salaryPerMonth + super.getSalary(month)+ this.getAddtionalSalary(); }

public int getAddtionalSalary() {return 2000;} } /**

*Employee的子类,按小时拿工资的员工。 *属性:每小时的工资、每月工作的小时数。 *方法:getSalary() */

class HourlyEmployee extends Employee {

private int salaryPerHour; private int hoursPerMonth;

public HourlyEmployee(String name,int birth,int hoursPerMonth) {

super(name,birth);

this.salaryPerHour = salaryPerHour; this.hoursPerMonth = hoursPerMonth; }

public int getSalary(int month) {

int result = 0;

if(this.hoursPerMonth<=160)

{result = hoursPerMonth*salaryPerHour;} else {

result = 160*salaryPerHour +

(int)((hoursPerMonth-160)*1.5*salaryPerHour); }

return result+super.getSalary(month); } } /**

*Employee的子类,销售人员. *属性: 月销售额、提成率.

salaryPerHour,int *方法: getSalary(). */

class SalesEmployee extends Employee {

private int sales; private double rate;

public SalesEmployee(String name,int birth,int sales,double rate) {

super(name,birth); this.sales = sales; this.rate = rate; }

//方法说明:工资由月销售额和提成率决定. public int getSalary(int month)

{return (int)(sales*rate)+super.getSalary(month);} } /**

*SalesEmployee的子类,有固定底薪的销售人员. *属性: 底薪.

*方法: getSalary(),getAddtionalSalary(). */

class BasedPlusSalesEmployee extends SalesEmployee {

private int basedSalary;

public BasedPlusSalesEmployee(String name,int birth,int rate,int basedSalary) {

super(name,birth,sales,rate); this.basedSalary = basedSalary; }

public int getSalary(int month)// 工资由底薪加上销售提成部分 {

return this.basedSalary+super.getSalary(month) + this.getAddtionalSalary(); }

public int getAddtionalSalary() {return 1000;} }

五、运行结果

sales,double

在C:\\Program Files\\Java\\text目录下产生的类文件:

六、结果说明

当输入正确的1-12月月份后程序就根据开始定义的员工生日情况给本月过生的员工增加100工资例如输入月份为2时魏威工资7000+100=7100,同理分析列出的其他员工的工资情况和公司支出情况,与笔算结果相符,可见程序实现了题目的功能。 七、心得体会

通过这几个月的学习我感受到java是一门非常有用的面向对象语言,有着广泛的应用,我印象较深的是它可以创建丰富精彩的图形用户界面,这在互联网可以看到很多例子。这次编程虽然只是实现了一些简单的功能但是通过实践让我对java面向对象思想有了一定的体会,学到了一些基本的编程、调试步骤和方法。然而毕竟是初学者,很多概念还不够熟悉,我认识到只有经过更多实践练习才能掌握这种强大有用的语言。

本文来源:https://www.bwwdw.com/article/mxar.html

Top