实验题目:
编写工资系统,实现不同类型员工(多态)的按月发放工资。如果当月出现某个Employee对象的生日,则将在该雇员的工资上增加100元发给他。

实验目的:
对象、继承、封装、多态、抽象类的组合应用。

实验说明:
(1)定义一个Employee类,该类包含:
private成员变量number编号,姓名name,生日birthday,其中birthday 为MyDate类的对象;
abstract方法double earnings();toString()方法输出对象的name,number和birthday。

(2)MyDate类包含:
private成员变量month,day,year;
toDateString()方法返回日期对应的字符串:xxxx年xx月xx日

(3)定义SalariedEmployee类继承Employee类,实现按月计算工资的员工处理。该类包括:
private成员变量monthlySalary;//月薪
private 成员变量 workingDay;//本月出勤天数
private 成员变量 totalDays;//本月总工作日天数,除了周末和假期
实现父类的抽象方法earnings(),该方法返回月薪*出勤天数/本月总工作日;
toString()方法输出员工类型信息及员工的name,number,birthday。

(4)参照SalariedEmployee类定义HourlyEmployee类,实现按小时计算工资的员工处理。该类包括:
private成员变量wage和hour;
实现父类的抽象方法earnings(),该方法返回wage*hour值;toString()方法输出员工类型信息及员工的name,number,birthday。

(5)定义PayrollSystem类,创建Employee变量数组并初始化,该数组存放各类雇员对象的引用。利用循环结构遍历数组元素,输出各个对象的类型,name,number,birthday,以及该对象的实发工资。当键盘输入本月月份值时,如果本月是某个Employee对象的生日,还要体现增加工资信息。

提示:
//定义People类型的数组
People c1[]=new People[10];
//数组元素赋值
c1[0]=new People(“John”,“0001”,20);
c1[1]=new People(“Bob”,“0002”,19);
//若People有两个子类Student和Officer,则数组元素赋值时,可以使父类类型的数组元素指向子类。
c1[0]=new Student(“John”,“0001”,20,85.0);
c1[1]=new Officer(“Bob”,“0002”,19,90.5);

/*
(1)定义一个Employee类,该类包含:private成员变量number编号,姓名name,生日birthday,其中birthday 为MyDate类的对象;abstract方法double earnings();toString()方法输出对象的name,number和birthday。*/
public abstract class Employee {private int number;// 编号private String name;private MyDate birthday;// 这个样子的话,使用者在传入参数的时候还得创建对象没有服务精神。public Employee(int number, String name, MyDate birthday) {super();this.number = number;this.name = name;this.birthday = birthday;}//这个样子的话使用者就直接传入参数就好了public Employee(int number, String name, int year, int month, int day) {super();this.number = number;this.name = name;this.birthday = new MyDate(year, month, day);}public Employee() {super();}public int getNumber() {return number;}public void setNumber(int number) {this.number = number;}public String getName() {return name;}public void setName(String name) {this.name = name;}public MyDate getBirthday() {return birthday;}public void setBirthday(MyDate birthday) {this.birthday = birthday;}public abstract double earnings();@Overridepublic String toString() {return "编号:" + number + "      " + "姓名:" + name + "      " + "生日" + birthday.toDateString();}}
/** MyDate类包含:private成员变量month,day,year;toDateString()方法返回日期对应的字符串:xxxx年xx月xx日*/
public class MyDate {private int year;private int month;private int day;public MyDate() {}public MyDate(int year, int month, int day) {this.year = year;   this.month = month;this.day = day;}public int getMonth() {return month;}public void setMonth(int month) {this.month = month;}public int getDay() {return day;}public void setDay(int day) {this.day = day;}public int getYear() {return year;}public void setYear(int year) {this.year = year;}public String toDateString() {return '\t' + year + "年" + month + "月" + day + "日"+'\t';}
}
/*
定义SalariedEmployee类继承Employee类,实现按月计算工资的员工处理。该类包括:
private成员变量monthlySalary;//月薪
private 成员变量 workingDay;//本月出勤天数
private 成员变量 totalDays;//本月总工作日天数,除了周末和假期
实现父类的抽象方法earnings(),该方法返回月薪*出勤天数/本月总工作日;
toString()方法输出员工类型信息及员工的name,number,birthday。*/
public class SalariedEmployee extends Employee {private double monthlySalary;//月薪private int workingDay;//本月出勤天数private int totalDays;//本月总工作日天数,除了周末和假期public SalariedEmployee(int number, String name, MyDate birthday, double monthlySalary, int workingDay,int totalDays) {super(number, name, birthday);this.monthlySalary = monthlySalary;this.workingDay = workingDay;this.totalDays = totalDays;}public SalariedEmployee(int number, String name, int year, int month, int day, double monthlySalary, int workingDay,int totalDays) {super(number, name, new MyDate(year, month, day));this.monthlySalary = monthlySalary;this.workingDay = workingDay;this.totalDays = totalDays;}public SalariedEmployee(int number, String name, MyDate birthday) {super(number, name, birthday);}public double getMonthlySalary() {return monthlySalary;}public void setMonthlySalary(double monthlySalary) {this.monthlySalary = monthlySalary;}public int getWorkingDay() {return workingDay;}public void setWorkingDay(int workingDay) {this.workingDay = workingDay;}public int getTotalDays() {return totalDays;}public void setTotalDays(int totalDays) {this.totalDays = totalDays;}@Overridepublic double earnings() {// TODO Auto-generated method stubreturn monthlySalary*workingDay/totalDays;}@Overridepublic String toString() {return super.toString() + "月薪:" + monthlySalary + "      " + "本月出勤天数" + workingDay + "      " + "本月总工作日天数"+ totalDays;}}
/** 参照SalariedEmployee类定义HourlyEmployee类,实现按小时计算工资的员工处理。该类包括:private成员变量wage和hour;实现父类的抽象方法earnings(),该方法返回wage*hour值;toString()方法输出员工类型信息及员工的name,number,birthday。*/
public class HourlyEmployee extends Employee {private double wage;private int hour;public HourlyEmployee(int number, String name, MyDate birthday) {super(number, name, birthday);}public HourlyEmployee(int number, String name, MyDate birthday, double wage, int hour) {super(number, name, birthday);this.wage = wage;this.hour = hour;}public HourlyEmployee(int number, String name, int year, int month, int day, double wage, int hour) {super(number, name, new MyDate(year, month, day));this.wage = wage;this.hour = hour;}public double getWage() {return wage;}public void setWage(double wage) {this.wage = wage;}public int getHour() {return hour;}public void setHour(int hour) {this.hour = hour;}@Overridepublic double earnings() {// TODO Auto-generated method stubreturn wage * hour;}@Overridepublic String toString() {return super.toString() + '\t' + "时薪:" + wage + "      "+ "工作的小时:" + hour;}}
import java.util.Scanner;public class PayrollSystem {/** 定义PayrollSystem类,创建Employee变量数组并初始化,该数组存放各类雇员对象的引用。* 利用循环结构遍历数组元素,输出各个对象的类型,name,number,birthday,以及该对象的实发工资。* 当键盘输入本月月份值时,如果本月是某个Employee对象的生日,还要体现增加工资信息。*/public static void main(String[] args) {Employee[] arr = new Employee[4];arr[0] = new SalariedEmployee(1001, "张三", 1996, 10, 1, 20000, 20, 22);arr[1] = new HourlyEmployee(1002, "李四", new MyDate(1995,6,1), 120, 12);//没有服务精神的时候就需要用户自己去创建对象了arr[2] = new HourlyEmployee(1003, "王五", 1994, 5, 1, 200, 12);arr[3] = new SalariedEmployee(1004, "六六", new MyDate(1997,12,1));//测试不传入值的时候会打印什么for (int i = 0; i < arr.length; i++) {System.out.println(arr[i]);System.out.println("实际工资:" + arr[i].earnings());}System.out.println("------------");System.out.println("请输入本月月份");Scanner input = new Scanner(System.in);int month = input.nextInt();for (int i = 0; i < arr.length; i++) {if(arr[i].getBirthday().getMonth() == month) {//判断本月有没有人生日System.out.println(arr[i]);System.out.println("实际工资:" + (arr[i].earnings() + 100));}else {System.out.println(arr[i]);System.out.println("实际工资:" + arr[i].earnings());}}}}

对象、继承、封装、多态、抽象类的组合应用:编写工资系统,实现不同类型员工(多态)的按月发放工资。如果当月出现某个Employee对象的生日,则将在该雇员的工资上增加100元发给他。相关推荐

  1. 编写工资系统,实现不同类型员工(多态)的按月发放工资。如果当月出现某个 Employee对象的生日,则将该雇员的工资增加100元。

    工资系统 题目要求 设计思路 代码 运行结果 题目要求 附:题目来源于尚硅谷 编写工资系统,实现不同类型员工(多态)的按月发放工资.如果当月出现某个 Employee对象的生日,则将该雇员的工资增加1 ...

  2. Java自学习day15-抽象类练习-编写工资系统,实现不同类型员工(多态)的按月发放工资

    编写工资系统,实现不同类型员工(多态)的按月发放工资.如果当月出现某个 Employee对象的生日,则将该雇员的工资增加100元. 实验说明: (1)定义一个Employee类,该类包含: priva ...

  3. 编写工资系统,实现不同类型员工(多态)的按月发放工资。如果当月出现某个Employee 对象的生日,则将该雇员的工资增加100元。

    说明: 定义一个Employee类 该类包含: private成员变最name.number.birthday.其中birthday为MyDate类的对象:abstract方法earnings():t ...

  4. java练习:编写工资系统,实现不同类型员工(多态)的按月发放工资。如果当月出现某个Employee对象的生日,则将该雇员的工资增加100元。

    1.员工类Employee: public abstract class Employee {//姓名private String name;//工号private String num;//生日pr ...

  5. javaswing员工工资系统java swing mysql 员工工资管理系统源码和导入文档(1014)

    目录 1.系统运行环境 2.系统功能介绍 3.项目结构略讲 3.1乱码问题 3.2 如何将UTF-8编码系统修改为GBK编码的系统? 3.3 项目结构 3.4 项目修改 3.5 项目运行 3.6 代码 ...

  6. 用抽象类简单实现一个发工资系统

    首先,创建5个类: Employee:员工类,其中有earnings()抽象方法 HourlyEmployee:按每小时来计算工资(不固定工资) SalariedEmployee:按月份来计算工资(固 ...

  7. java题算工资_Java模版方法的小练习——工资系统

    题目要求 解题思路 1.一共涉及了5个类,父类是Employee,父类中有个属性定义的是MyDate类的对象,存储的是生日信息.两个子类HourlyEmployee.SalariedEmployee代 ...

  8. 【C++ 七】类和对象:封装、继承、多态、友元、运算符重载

    封装.继承.多态.对象的初始化和清理.C++对象模型和this指针.友元.运算符重载 文章目录 封装.继承.多态.对象的初始化和清理.C++对象模型和this指针.友元.运算符重载 前言 1 封装 1 ...

  9. 面试轻松讲清楚 Java 面向对象的问题与知识(类与对象,封装,继承,多态,接口,内部类...)

    写在最前面 这个项目是从20年末就立好的 flag,经过几年的学习,回过头再去看很多知识点又有新的理解.所以趁着找实习的准备,结合以前的学习储备,创建一个主要针对应届生和初学者的 Java 开源知识项 ...

最新文章

  1. CveService.java
  2. 加密解密、食谱、新冠序列,各种有趣的开源项目Github上都有
  3. ubuntu下安装vim失败
  4. Protues 8.6 详细安装步骤
  5. Swift中的延迟加载(懒加载)
  6. 内存泄露Lowmemorykiller分析
  7. STL中vector和list的区别
  8. libcurl overview
  9. php运行环境出现Undefined index 或variable时解决方法
  10. atitit.Servlet2.5 Servlet 3.0 新特性 jsp2.0 jsp2.1 jsp2.2新特性
  11. 模拟登陆webqq总结(一)
  12. 关于border设置无边框
  13. Pandas高级教程之:自定义选项
  14. 基于FPGA的高速电路板设计
  15. 44 面向对象程序设计原则
  16. Opencv调取摄像头失败的处理方法
  17. bandzip与WinRAR
  18. webix .datatable 表格分页
  19. C#记录四——浅析LINQ
  20. 什么是嵌入式软件工程师?需具备哪些能力?

热门文章

  1. Android学习笔记(二)
  2. 悠悠web(1)-HTML基本结构
  3. MySQL卸载重装解决方案
  4. 名帖325 启功 行书《行书帖选》
  5. css 波纹扩散_css水波纹动画
  6. cairosvg在linux中的安装_Cairo编程
  7. “百度杯”CTF比赛 十一月场Look
  8. 初学者如何入门C语言
  9. python循环代码优化技巧_记一次优化python循环代码逻辑的过程
  10. docker基础操作