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

本文介绍了如何使用Java编程实现一个工资系统,该系统处理不同类型的员工(如固定工资和小时工)并考虑员工生日的工资额外奖励。通过定义Employee抽象类,创建SalariedEmployee和HourlyEmployee子类,实现了多态和抽象方法的运用。SalarySystem类管理员工数组,根据输入的月份判断并处理员工的生日福利。
摘要由CSDN通过智能技术生成

题目要求

附:题目来源于尚硅谷
编写工资系统,实现不同类型员工(多态)的按月发放工资。如果当月出现某个
Employee对象的生日,则将该雇员的工资增加100元。
实验说明:
(1)定义一个Employee类,该类包含:
private成员变量name,number,birthday,其中birthday 为MyDate类的对象;abstract方法earnings();toString()方法输出对象的name,number和birthday。
(2)MyDate类包含:private成员变量year,month,day ;toDateString()方法返回日期对应的字符串:xxxx年xx月xx日
(3)定义SalariedEmployee类继承Employee类,实现按月计算工资的员工处理。该类包括:private成员变量monthlySalary;
实现父类的抽象方法earnings(),该方法返回monthlySalary值;toString()方法输出员工类型信息及员工的name,number,birthday。
(4)参照SalariedEmployee类定义HourlyEmployee类,实现按小时计算工资的员工处理。该类包括:private成员变量wage和hour;实现父类的抽象方法earnings(),该方法返回wage*hour值;
toString()方法输出员工类型信息及员工的name,number,birthday。
(5)定义SalarySystem类,创建Employee变量数组并初始化,该数组存放各类雇员对象的引用。利用循环结构遍历数组元素,输出各个对象的类型,name,number,birthday,以及该对象生日。当键盘输入本月月份值时,如果本月是某个Employee对象的生日,还要输出增加工资信息。

设计思路

1、Employee类中有抽象方法earnings,则Employee类应声明为抽象类
2、设计Employee类的两个子类,分别实现父类的抽象方法。注意父类已有toString(),只是输出的内容只有name、bumber、birthday。然而对子类的该方法要求增加了需要输出类的信息,需重写该方法。
3、编写SalarySystem类,创建Employee变量数组(此处只是声明一个类型为Employee的数组,并没有创建抽象类Employee对象),采用多态初始化数组。初始化后,需要检查是否有员工当月生日,有,则需为其增加100元工资,当时据题意,不同员工的表示方式是不同的(SalariedEmployee的薪资属性monthlySalary,HourlyEmployee的薪资属性为hourlySalary),那么遇到员工当月生日,为其增加100元工资的具体实现也是不同的,因此为当月生日的员工工资增加100元的方法在父类中已抽象方法声明,在不同的子类中做具体实现。

代码

import java.util.Scanner;
public class SalarySystem {
   
    public static void main(String[] args) {
   
        Employee employee[]=new Employee[4];
        Scanner scan=new Scanner(System.in);
        for(int i=0;i<2;i++){
   
            System.out.print("输入小时职员姓名:");
            String name=scan.next();
            System.out.print("编号:");
            int number=scan.nextInt();
            System.out.print("出生年、月、日:");
            int year=scan.nextInt();
            int month=scan.nextInt();
            int day=scan.nextInt();
            System.out.print("时薪:");
            int wage=scan.nextInt();
            System.out.print(
工资发放系统 某公司按给其雇员发放工资,该公司有4种雇员:  固定薪金的雇员:不管工作多长时间,总拿固定薪;(但如果请假,要扣除相应的薪金,请假次数×每次扣除金额30)  小时工:以小时计算,加上加班费;(每基本工作时间为160小时,其余为加班时间)  销售员:按销售收入提成计算;(每基本销售额度为30000,低于此额度,在薪里扣除少于30000部分的千分之二)  带薪销售员:底薪加上销售收入提成(要求同上,若有请假,也要扣除相应的薪金) 如果雇员生日所在的份在本,那么公司无条件补贴200。 设计一工资发放系统,完成各种工资的计算,并实现以下功能: 1) 初始化系统 创建存储该公司职工信息的存储系统Employee.dat),并进行职工信息的输入,注意:公司的职工编号由系统按顺序自动生成,并且员工号一旦分配好就不可以再修改! 第一次运行系统,根据系统提示从键盘输入员工的相应信息进行初始化操作,并保存至Employee.dat文件中。以后每次运行程序,初始化时都从文件Employee.dat中读取员工数据即可。 2) 职工信息输出 要求可以输出: 某类职工当月的薪水发放信息 分类输出全体职工当月的薪水发放信息 某一名职工当月的薪水发放信息 格式如下: ******************************** 固定薪金职员********************************* 编号 姓名 出生年 工种 奖励薪金 固定薪 请假天数 应扣 实发工资 是否领取 **********************************计时职员*********************************** 编号 姓名 出生年 工种 奖励薪金 工作时长 时薪 加班时长 实发工资 是否领取 **********************************普通销售员*********************************** 编号 姓名 出生年 工种 奖励薪金 销售额 提成比例 应扣 实发工资 是否领取*********************************带薪销售员************************************ 编号 姓名出生年工种奖励薪金固定薪销售额提成比例请假天数应扣实发工资是否领取 3) 添加职工 通过键盘输入相应的职工信息,添加职工,并保存至Employee.dat文件中。 4) 删除职工 通过输入职工的工号,首先输出要删除的职工相应的信息,经确认后删除,要考虑职工不存在的情况。删除后保存至Employee.dat文件中。 5) 修改信息 要求可以修改: 除编号外的所有职工信息,包括工种以及由修改工种带来的各项操作 修改某一类工种的信息,如销售人员的提成比例,统一提高0.05; 输出修改前的职工信息,经确认后修改后,输出修改后的职工信息,考虑职工不存在的情况,修改后保存至Employee.dat文件中。 6) 工资发放 通过输入职工号方式,输出查询到的职工相应的信息,经确认发放工资,将员工是否领取工资信息设置为是(即真),考虑所要查询的职工编号不存在和已经发放工资的情况。 7) 保存退出 通过确认,保存修改的信息至文件Employee.dat中,退出系统,结束运行。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值