案例介绍:

某公司的员工分为5类,每类员工都有相应的封装类,这5个类的信息如下。

(1)Employee:这是所有员工的父类。

①属性:员工的姓名、员工的生日月份。

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

(2)SalariedEmployee:Employee的子类,拿固定工资的员工。

属性:月薪。

(3)HourlyEmployee:Employee的子类,按小时拿工资的员工,每月超出160h的部分按照1.5倍工资发放。

属性:每小时的工资、每月工作的小时数。

(4)SalesEmployee:Employee的子类,销售人员,工资由月销售额和提成率决定。

属性:月销售额,提成率。

(5)BasePlusSalesEmployee:SalesEmployee的子类,有固定底薪的销售人员,工资为底薪加上销售提成。

属性:底薪。

要求根据上述员工分类,编写一个程序,实现以下功能:

(1)创建一个Employee数组,分别创建若干不同的Employee对象,并打印某个月的工资。

(2)每个类都完全封装,不允许有非私有化属性。

运行结果:

//Employee:这是所有员工的父类

class Employee {private String name; //员工姓名private int monthOfBirthday; //生日月份public Employee() {} //无参构造函数public Employee(String name,int monthOfBirthday) {this.name=name;this.monthOfBirthday=monthOfBirthday;}//计算工资,参数month是月份,如果当月是员工生日,奖励100元public double getSalary(int month) {return (this.monthOfBirthday==month)?100:0;}public void setName(String name) {this.name=name;}public void setMonthOfBirthday(int monthOfBirthday) {this.monthOfBirthday = monthOfBirthday;}public String getName() {return name;}public int getMonthOfBirthday() {return monthOfBirthday;}
}

//SalariedEmployee:Employee的子类,拿固定工资的员工

class SalariedEmployee extends Employee {private double monthSalary; //月薪public SalariedEmployee() {} //无参构造函数public SalariedEmployee(String name,int monthOfBirthday,double monthSalary) {super(name, monthOfBirthday); //通过super关键字调用Employee类有两个参数的构造方法this.monthSalary=monthSalary;}public void setMonthSalary(double monthSalary) {this.monthSalary=monthSalary;}public double getMonthSalary() {return monthSalary;}@Overridepublic double getSalary(int month) {return monthSalary + super.getSalary(month);}
}

//HourlyEmployee:Employee的子类,按小时拿工资的员工,每月超出160h的部分按照1.5倍工资发放

class HourlyEmployee extends Employee {private double hourlyWage; //每小时工资private int workHours; //当月工作小时数public HourlyEmployee() {} //无参构造函数public HourlyEmployee(String name,int monthOfBirthday,double hourlyWage,int workHours) {super(name, monthOfBirthday); //通过super关键字调用Employee类有两个参数的构造方法this.hourlyWage=hourlyWage;this.workHours=workHours;}public void setHourlyWage(double hourlyWage) {this.hourlyWage = hourlyWage;}public void setWorkHours(int workHours) {this.workHours = workHours;}public double getHourlyWage() {return hourlyWage;}public int getWorkHours() {return workHours;}@Overridepublic double getSalary(int month) {if(workHours<0){ // 如果工作小时数小于0,输出数据错误System.out.println("数据错误,工作小时数小于0");return 0;}else if(workHours<=160) { //小于160小时return workHours*hourlyWage + super.getSalary(month);}else { //超出160个小时的工作时长,按照1.5倍计算return 160*hourlyWage + (workHours-160)*hourlyWage*1.5 + super.getSalary(month);}}
}

//SalesEmployee:Employee的子类,销售人员,工资由月销售额和提成率决定

class SalesEmployee extends Employee {private double sales; //销售额private double rate; //提成率public SalesEmployee() {} //无参构造函数public SalesEmployee(String name,int monthOfBirthday,double sales,double rate) {super(name,monthOfBirthday);this.sales=sales;this.rate=rate;}public void setSales() {this.sales=sales;}public void setRate(double rate) {this.rate = rate;}public double getSales() {return sales;}public double getRate() {return rate;}@Overridepublic double getSalary(int month) {return sales*rate + super.getSalary(month);}
}

//BasePlusSalesEmployee:SalesEmployee的子类,有固定底薪的销售人员,工资为底薪加上销售提成

class BasePlusSalesEmployee extends SalesEmployee {private double baseSalary; //底薪public BasePlusSalesEmployee() {} //无参构造函数public BasePlusSalesEmployee(String name,int monthOfBirthday,double sales,double rate,double baseSalary) {super(name,monthOfBirthday,sales,rate);this.baseSalary=baseSalary;}public void setBaseSalary(double baseSalary) {this.baseSalary = baseSalary;}public double getBaseSalary() {return baseSalary;}@Overridepublic double getSalary(int month) {return baseSalary + super.getSalary(month);}
}

//测试类

public class Test {public static void main(String[] args){//声明一个Employee类型的数组,并创建不同子类型的对象Employee[] employee = {new SalariedEmployee("张三",1,6000),//张三,1月生日,月薪6000new HourlyEmployee("李四",2,50,180),//李四,2月生日,工作180小时,时薪50new SalesEmployee("王五",3,50000,0.15),//王五,3月生日,销售额50000,提成率0.15new BasePlusSalesEmployee("赵六",4,40000,0.15,2000),//赵六,4月生日,,销售额40000,提成率0.15,底薪2000};//打印每个员工的工资for(Employee emp:employee) {System.out.println(emp.getName()+" 10月工资 "+Math.round(emp.getSalary(10)));}}
}

完整代码:

class Employee {private String name; //员工姓名private int monthOfBirthday; //生日月份public Employee() {} //无参构造函数public Employee(String name,int monthOfBirthday) {this.name=name;this.monthOfBirthday=monthOfBirthday;}//计算工资,参数month是月份,如果当月是员工生日,奖励100元public double getSalary(int month) {return (this.monthOfBirthday==month)?100:0;}public void setName(String name) {this.name=name;}public void setMonthOfBirthday(int monthOfBirthday) {this.monthOfBirthday = monthOfBirthday;}public String getName() {return name;}public int getMonthOfBirthday() {return monthOfBirthday;}
}class SalariedEmployee extends Employee {private double monthSalary; //月薪public SalariedEmployee() {} //无参构造函数public SalariedEmployee(String name,int monthOfBirthday,double monthSalary) {super(name, monthOfBirthday); //通过super关键字调用Employee类有两个参数的构造方法this.monthSalary=monthSalary;}public void setMonthSalary(double monthSalary) {this.monthSalary=monthSalary;}public double getMonthSalary() {return monthSalary;}@Overridepublic double getSalary(int month) {return monthSalary + super.getSalary(month);}
}class HourlyEmployee extends Employee {private double hourlyWage; //每小时工资private int workHours; //当月工作小时数public HourlyEmployee() {} //无参构造函数public HourlyEmployee(String name,int monthOfBirthday,double hourlyWage,int workHours) {super(name, monthOfBirthday); //通过super关键字调用Employee类有两个参数的构造方法this.hourlyWage=hourlyWage;this.workHours=workHours;}public void setHourlyWage(double hourlyWage) {this.hourlyWage = hourlyWage;}public void setWorkHours(int workHours) {this.workHours = workHours;}public double getHourlyWage() {return hourlyWage;}public int getWorkHours() {return workHours;}@Overridepublic double getSalary(int month) {if(workHours<0){ // 如果工作小时数小于0,输出数据错误System.out.println("数据错误,工作小时数小于0");return 0;}else if(workHours<=160) { //小于160小时return workHours*hourlyWage + super.getSalary(month);}else { //超出160个小时的工作时长,按照1.5倍计算return 160*hourlyWage + (workHours-160)*hourlyWage*1.5 + super.getSalary(month);}}
}class SalesEmployee extends Employee {private double sales; //销售额private double rate; //提成率public SalesEmployee() {} //无参构造函数public SalesEmployee(String name,int monthOfBirthday,double sales,double rate) {super(name,monthOfBirthday);this.sales=sales;this.rate=rate;}public void setSales() {this.sales=sales;}public void setRate(double rate) {this.rate = rate;}public double getSales() {return sales;}public double getRate() {return rate;}@Overridepublic double getSalary(int month) {return sales*rate + super.getSalary(month);}
}class BasePlusSalesEmployee extends SalesEmployee {private double baseSalary; //底薪public BasePlusSalesEmployee() {} //无参构造函数public BasePlusSalesEmployee(String name,int monthOfBirthday,double sales,double rate,double baseSalary) {super(name,monthOfBirthday,sales,rate);this.baseSalary=baseSalary;}public void setBaseSalary(double baseSalary) {this.baseSalary = baseSalary;}public double getBaseSalary() {return baseSalary;}@Overridepublic double getSalary(int month) {return baseSalary + super.getSalary(month);}
}public class Test {public static void main(String[] args){//声明一个Employee类型的数组,并创建不同子类型的对象Employee[] employee = {new SalariedEmployee("张三",1,6000),//张三,1月生日,月薪6000new HourlyEmployee("李四",2,50,180),//李四,2月生日,工作180小时,时薪50new SalesEmployee("王五",3,50000,0.15),//王五,3月生日,销售额50000,提成率0.15new BasePlusSalesEmployee("赵六",4,40000,0.15,2000),//赵六,4月生日,,销售额40000,提成率0.15,底薪2000};//打印每个员工的工资for(Employee emp:employee) {System.out.println(emp.getName()+" 10月工资 "+Math.round(emp.getSalary(10)));}}
}

【Java案例】公司员工工资发放相关推荐

  1. [附源码]Java计算机毕业设计SSM电力公司员工安全培训系统

    项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...

  2. Java毕设项目电力公司员工安全培训系统计算机(附源码+系统+数据库+LW)

    Java毕设项目电力公司员工安全培训系统计算机(附源码+系统+数据库+LW) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行) ...

  3. Java毕设项目电力公司员工安全培训系统(java+VUE+Mybatis+Maven+Mysql)

    Java毕设项目电力公司员工安全培训系统(java+VUE+Mybatis+Maven+Mysql) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX ...

  4. java毕业设计电力公司员工安全培训系统Mybatis+系统+数据库+调试部署

    java毕业设计电力公司员工安全培训系统Mybatis+系统+数据库+调试部署 java毕业设计电力公司员工安全培训系统Mybatis+系统+数据库+调试部署 本源码技术栈: 项目架构:B/S架构 开 ...

  5. Java+MySQL 基于ssm的公司员工人事工资管理系统#毕业设计

    文末获取源码 开发环境 项目编号:Java+MySQL ssm270公司员工人事工资管理系统#毕业设计 开发语言:Java 开发工具:IDEA /Eclipse 数据库:MYSQL5.7 应用服务:T ...

  6. 用Java写一个公司员工管理系统!

    用Java写一个公司员工管理系统! 今天看CSDN发现写管理系统的文章不少,我在这里也给大家用java写一篇!(当然这里只是最简单的那种qwq) 核心功能:对员工各项信息的管理 采用属性文件+资源文件 ...

  7. java考勤程序,请为一个公司编写程序记录公司员工出勤情况

    员工可通过客户端向服务器端发送数据表示到达公司,服务端发送消息确认,统计所有员工出勤情况,存放于一个指定文件中. 用UDP做法: 服务器端: import java.io.BufferedWriter ...

  8. java基于ssm的公司员工考勤管理系统

    目 录 Abstract    1 第一章 绪论    2 1.1  研究背景    3 1.2  公司员工管理系统的设计与实现的现状    5 1.3  系统实现的功能    6 1.4  公司员工 ...

  9. SAP自学指南:案例公司的需求分析

    产品数据管理 案例公司产品设计更改没有操作规范.现行的物料数据冗余,导致BOM数据维护工作量太大:部分产品BOM数据存在不完整.不标准:主数据变更频繁,缺少一套有效的管理机制. 案例公司需要统一的编码 ...

最新文章

  1. 推荐几个超NB的技术公号!
  2. Windows10为什么自带Linux,一直没有发现原来 Win10 内置了一个 Linux
  3. VMware HA环境搭建七:WIN2012 ISCSI目标服务器的安装
  4. torch动态学习率代码
  5. python打开界面是什么样的-python学习笔记(图形用户界面)
  6. [Embeding-1]Efficient Estimation of Word Representations in Vector Space 译文
  7. restful-api接口的设计规范介绍
  8. Asp.Net 学习资源列表(转)
  9. 我们的高中教育造就了什么?
  10. javaweb php异步处理,Spring-MVC异步请求之Servlet异步处理
  11. javaweb在线考试系统_有没有在线考试系统能承载几千人同时在线考试的?
  12. RS-485上下拉电阻选择
  13. 基于开源飞控系统和安卓系统的4g5g物联网无人机实现
  14. 代数基础-空间直线,面,向量,方向导数,梯度,法向量
  15. 我裁完兄弟后,辞职了,转行做了一名小职员
  16. html字体模糊怎么变清晰,电脑字体模糊怎么办 将字体调节清晰方法【详解】
  17. python字典程序题_Python练习:字典
  18. MySQL - 03DDL之数据表
  19. tomcat定时自动重启设置方法
  20. JAVA:AudioFiction(有声小说)项目实现

热门文章

  1. 101-STM32+Air724UG基本控制篇(自建物联网平台)-基础搭建-购买云主机,安装MQTT服务器软件(Linux系统)
  2. 弘辽科技:淘宝怎么看转化率提升销量?一般提升几天有效果?
  3. [转]Android数据存储SharedPreferences的使用
  4. Android OpenGL动态壁纸
  5. ik做尾巴摆动 maya_Maya-IK和约束实现活塞动画
  6. 点亮自然光线,享受更健康的照明,TaoTronics TT-DL16护眼台灯体验
  7. 360安全路由开启预约 双频路由器售价99元
  8. 人脸识别接口_模组式人脸识别相机,方便集成,涵盖活体检测
  9. python使用open的OSError: [Errno 22\] Invalid argument错误
  10. c语言网页版在线编译器_手机编写C语言神器,集成gcc插件,还能制作APP!