对象、继承、封装、多态、抽象类的组合应用:编写工资系统,实现不同类型员工(多态)的按月发放工资。如果当月出现某个Employee对象的生日,则将在该雇员的工资上增加100元发给他。
实验题目:
编写工资系统,实现不同类型员工(多态)的按月发放工资。如果当月出现某个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元发给他。相关推荐
- 编写工资系统,实现不同类型员工(多态)的按月发放工资。如果当月出现某个 Employee对象的生日,则将该雇员的工资增加100元。
工资系统 题目要求 设计思路 代码 运行结果 题目要求 附:题目来源于尚硅谷 编写工资系统,实现不同类型员工(多态)的按月发放工资.如果当月出现某个 Employee对象的生日,则将该雇员的工资增加1 ...
- Java自学习day15-抽象类练习-编写工资系统,实现不同类型员工(多态)的按月发放工资
编写工资系统,实现不同类型员工(多态)的按月发放工资.如果当月出现某个 Employee对象的生日,则将该雇员的工资增加100元. 实验说明: (1)定义一个Employee类,该类包含: priva ...
- 编写工资系统,实现不同类型员工(多态)的按月发放工资。如果当月出现某个Employee 对象的生日,则将该雇员的工资增加100元。
说明: 定义一个Employee类 该类包含: private成员变最name.number.birthday.其中birthday为MyDate类的对象:abstract方法earnings():t ...
- java练习:编写工资系统,实现不同类型员工(多态)的按月发放工资。如果当月出现某个Employee对象的生日,则将该雇员的工资增加100元。
1.员工类Employee: public abstract class Employee {//姓名private String name;//工号private String num;//生日pr ...
- javaswing员工工资系统java swing mysql 员工工资管理系统源码和导入文档(1014)
目录 1.系统运行环境 2.系统功能介绍 3.项目结构略讲 3.1乱码问题 3.2 如何将UTF-8编码系统修改为GBK编码的系统? 3.3 项目结构 3.4 项目修改 3.5 项目运行 3.6 代码 ...
- 用抽象类简单实现一个发工资系统
首先,创建5个类: Employee:员工类,其中有earnings()抽象方法 HourlyEmployee:按每小时来计算工资(不固定工资) SalariedEmployee:按月份来计算工资(固 ...
- java题算工资_Java模版方法的小练习——工资系统
题目要求 解题思路 1.一共涉及了5个类,父类是Employee,父类中有个属性定义的是MyDate类的对象,存储的是生日信息.两个子类HourlyEmployee.SalariedEmployee代 ...
- 【C++ 七】类和对象:封装、继承、多态、友元、运算符重载
封装.继承.多态.对象的初始化和清理.C++对象模型和this指针.友元.运算符重载 文章目录 封装.继承.多态.对象的初始化和清理.C++对象模型和this指针.友元.运算符重载 前言 1 封装 1 ...
- 面试轻松讲清楚 Java 面向对象的问题与知识(类与对象,封装,继承,多态,接口,内部类...)
写在最前面 这个项目是从20年末就立好的 flag,经过几年的学习,回过头再去看很多知识点又有新的理解.所以趁着找实习的准备,结合以前的学习储备,创建一个主要针对应届生和初学者的 Java 开源知识项 ...
最新文章
- CveService.java
- 加密解密、食谱、新冠序列,各种有趣的开源项目Github上都有
- ubuntu下安装vim失败
- Protues 8.6 详细安装步骤
- Swift中的延迟加载(懒加载)
- 内存泄露Lowmemorykiller分析
- STL中vector和list的区别
- libcurl overview
- php运行环境出现Undefined index 或variable时解决方法
- atitit.Servlet2.5 Servlet 3.0 新特性 jsp2.0 jsp2.1 jsp2.2新特性
- 模拟登陆webqq总结(一)
- 关于border设置无边框
- Pandas高级教程之:自定义选项
- 基于FPGA的高速电路板设计
- 44 面向对象程序设计原则
- Opencv调取摄像头失败的处理方法
- bandzip与WinRAR
- webix .datatable 表格分页
- C#记录四——浅析LINQ
- 什么是嵌入式软件工程师?需具备哪些能力?