【java】计算员工工资

2023-11-05

【案例介绍】

  1. 任务描述

某公司有多个部门,员工信息包含姓名 name、类型 type、部门 department 和底薪

basicSalary,其中员工的类型有三种:管理员、销售员和工人。

公司财务部门工作人员每月要计算员工的实发工资。

实发工资 = 月收入 – 应缴个人所得税。

其中:

( 1)月收入计算方法是根据类型来决定的:

 管理员:月收入=底薪+奖金 bonus

 销售员:月收入=底薪+销售额 salesAmount * 提成率 rate

 工人:月收入=底薪+加班费 overtimePay

(2)应缴个人所得税的方法是统一的,根据月收入扣除不同比例的所得税:

 月收入⩽5000 元,所得税: 0 元。

 5000<月收入⩽15000,所得税: 月收入*5%。

 15000<月收入,所得税:月收入*20%。

要求编写 5 个类,分别是:员工的抽象类 Employee、管理员类 Admin、销售员
类 Salesman 和工人类 Worker,并编写用于测试的演示类 SalayDemo。

要求这这些类都放在 cn.edu.gpnu.company 包中。

【案例目标】

 学会分析“计算员工工资”任务实现的逻辑思路。

 能够独立完成“计算员工工资”程序的源代码编写、编译以及运行。

 掌握 Java 中的继承的知识点。

 掌握抽象类、抽象方法的编写与使用。

【运行结果】
在这里插入图片描述
【运行代码】
1.

package cn.edu.gpnu.bank.company;

class Admin extends Employee {
    double bonus;

    public Admin(String name, String type, String department, double basicSalary, double bonus) {
        super(name, type, department, basicSalary);
        this.bonus = bonus;
    }

    public double getBonus() {
        return bonus;
    }

    public void setBonus(double bonus) {
        this.bonus = bonus;
    }

    public double getIncome(){
        return (getBasicSalary()+getBonus());
    }
}

package cn.edu.gpnu.bank.company;

abstract public class Employee {
    String name;
    String type;
    String department;
    double basicSalary;

    public Employee(String name, String type, String department, double basicSalary) {
        this.name = name;
        this.type = type;
        this.department = department;
        this.basicSalary = basicSalary;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public String getDepartment() {
        return department;
    }

    public void setDepartment(String department) {
        this.department = department;
    }

    public double getBasicSalary() {
        return basicSalary;
    }

    public void setBasicSalary(double basicSalary) {
        this.basicSalary = basicSalary;
    }

    abstract public double getIncome();

    public double getTax(){
        double income = getIncome();
        if(income<=5000)
        {
            return 0;
        }
        if(income>5000 && income<=15000)
        {
            return income*0.05;
        }
        else
        {
            return income * 0.2;
        }
    }

    public String info(){
        return"姓名:"+this.name+",类型:"+this.type+",部门:"+this.department
                +",月收入:"+getIncome()+"元,所得税:"+getTax()+"元,实发工资:"
                +(getIncome()-getTax())+"元";

    }


}

package cn.edu.gpnu.bank.company;

class Salesman extends Employee {
    double saleAmount;
    double rate;

    public Salesman(String name, String type, String department, double basicSalary, double saleAmount, double rate) {
        super(name, type, department, basicSalary);
        this.saleAmount = saleAmount;
        this.rate = rate;
    }

    public double getSaleAmount() {
        return saleAmount;
    }

    public void setSaleAmount(double saleAmount) {
        this.saleAmount = saleAmount;
    }

    public double getRate() {
        return rate;
    }

    public void setRate(double rate) {
        this.rate = rate;
    }

    public double getIncome() {
        return (getBasicSalary()+getSaleAmount()*getRate());
    }
}

package cn.edu.gpnu.bank.company;

class Worker extends Employee {
    double overtimePay;

    public Worker(String name, String type, String department, double basicSalary, double overtimePay) {
        super(name, type, department, basicSalary);
        this.overtimePay = overtimePay;
    }

    public double getOvertimePay() {
        return overtimePay;
    }

    public void setOvertimePay(double overtimePay) {
        this.overtimePay = overtimePay;
    }

    public double getIncome() {
        return (getBasicSalary()+getOvertimePay());
    }
}

package cn.edu.gpnu.bank.company;

public class SalayDemo {
    public static void main(String[] args) {
        Admin admin = new Admin("张三", "管理员",
                "研发部", 14000, 5600);

        Salesman salesman = new Salesman("李四", "销售员",
                "天河销售部", 6000, 98900, 0.03);

        Worker worker = new Worker("王五", "工人",
                "南沙制造场", 2500, 1350);

        System.out.println(admin.info());
        System.out.println(salesman.info());
        System.out.println(worker.info());

    }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【java】计算员工工资 的相关文章

  • 是否可以在 Spring Batch 中结合分区和并行步骤?

    我只是想知道它在 Spring Batch 中可行吗 Step1Step2 流程 gt 流程1 流程2 流程3 Step3 其中每个flow1 gt 划分为 5 个 GridSizeflow2 gt 划分为 5 个 GridSizeflow
  • Spring控制器是线程安全的吗

    我遇到了这个控制器示例 想知道它是否是线程安全的 我特别想知道 gson 实例变量 import org springframework stereotype Controller import org springframework we
  • 无法加载 jar 文件的主类

    我使用 Eclipse IDE 开发了一个应用程序 创建应用程序后 我以 jar 格式导出项目 当我尝试运行此 jar 文件时 出现错误 无法加载主类 请帮忙 当您将项目导出为 jar 时 请参阅此所以问题 https stackoverf
  • 通过 InjectMocks Spy 注入对象

    我需要对一个类运行一系列单元测试 该类具有 Autowired Logger 实现 实现的基本思想是 Mock Logger logger InjectMocks TestedClass tested 但我想保存日志输出功能 Mockito
  • 有没有好的方法来解析用户代理字符串?

    我有一个Java接收模块User Agent来自最终用户浏览器的字符串的行为需要略有不同 具体取决于浏览器类型 浏览器版本甚至操作系统 例如 FireFox 7 0 Win7 Safari 3 2 iOS9 我明白了User Agent由于
  • Java 泛型/类型调度问题

    考虑以下程序 import java util List import java util ArrayList public class TypeTest public static class TypeTestA extends Type
  • PropertySources 中各种源的优先级

    Spring引入了新的注释 PropertySources对于所有标记为的类 Configuration since 4 0 需要不同的 PropertySource作为论证 PropertySources PropertySource c
  • 场景生成器删除 fxml 文件中的导入

    我使用场景构建器 Gluon Scene Builder JavaFX Scene Builder 8 1 1 来创建应用程序的 UI 并使用 Eclipse 开发 JavaFX 现在 每次我在场景生成器中保存某些内容时 它都会从 fxml
  • 使用 Java 在浏览器中下载 CSV 文件

    我正在尝试在 Web 应用程序上添加一个按钮 单击该按钮会下载一个 CSV 文件 该文件很小 大小仅约 4KB 我已经制作了按钮并附加了一个侦听器 文件也准备好了 我现在唯一需要做的就是创建单击按钮时下载 csv 文件的实际事件 假设 fi
  • 使用 java 按电子邮件发送日历邀请

    我正在尝试使用 java 发送每封电子邮件的日历邀请 收件人收到电子邮件 但不会显示接受或拒绝的邀请 而是将该事件自动添加到他的日历中 我正在使用 ical4j jar 构建活动 邀请 private Calendar getInvite
  • Java:VM 如何在 32 位处理器上处理 64 位“long”

    JVM 如何在 32 位处理器上处理 64 位的原始 long 在多核 32 位机器上可以并行利用多个核心吗 64 位操作在 32 位机器上慢了多少 它可能使用多个核心来运行不同的线程 但不会并行使用它们进行 64 位计算 64 位长基本上
  • 尝试在没有 GatewayIntent 的情况下访问消息内容

    我希望每当我写一条打招呼的消息时 机器人都会在控制台中响应一条消息 但它只是给我一个错误 JDA MainWS ReadThread WARN JDA Attempting to access message content without
  • 覆盖 MATLAB 默认静态 javaclasspath 的最佳方法

    MATLAB 配置为在搜索用户可修改的动态路径之前搜索其静态 java 类路径 不幸的是 静态路径包含相当多非常旧的公共库 因此如果您尝试使用新版本 您可能最终会加载错误的实现并出现错误 例如 静态路径包含 google collectio
  • jmap - 组织和堆操作会给 jvm 带来开销吗?

    正如标题所述 需要多少开销jmap histo and jmap heap分别带到jvm 如果一个内存敏感的 Java 进程处于OutOfMemory 例如 大约 96 的堆已满 并且无法通过 full gc 清除 其中一项操作是否有可能将
  • 让JScrollPane控制多个组件

    对于我的应用程序 我正在设计一个脚本编辑器 目前我有一个JPanel其中包含另一个JPanel保存行号 位于左侧 以及JTextArea用于允许用户输入代码 位于右侧 目前 我已经实施了JScrollPane on the JTextAre
  • 如何为 Jackson 编写一个包罗万象的(反)序列化器

    当您提前知道类型时 编写自定义序列化器非常容易 例如 MyType一个人可以写一个MyTypeSerializer extends StdSerializer
  • 在 Selenium WebDriver 上如何从 Span 标签获取文本

    在 Selenium Webdriver 上 如何从 span 标记检索文本并打印 我需要提取文本UPS Overnight Free HTML代码如下 div id customSelect 3 class select wrapper
  • 阻止 OSX 变音符号为所有用户禁用 Java 中的 KeyBindings?

    注 我知道这个问题 https stackoverflow com questions 40335285 java keybinds stop working after holding down a key用户必须输入终端命令才能解决此问
  • Java 编码风格、局部变量与重复方法调用

    我更喜欢使用局部变量而不是多次调用同一方法 I prefer this Vehicle vehicle person getVehicle if vehicle instanceof Car Car car Car vehicle car
  • 为什么 BufferedWriter 不写入文件?

    我有这个代码 String strings Hi You He They Tetrabenzene Caaorine Calorine File file new File G words txt FileWriter fWriter Bu

随机推荐

  • continue与break --- 循环控制的两大巨头

    目录 前言 break continue 总结 前言 continue与break都是用于循环语句的 帮助我们更好的控制循环流程 我们以while循环为例 来深度解析continue与break语句 这是while语句的基本结构 结合con
  • FastDFS安全注意事项

    FastDFS安全注意事项 本篇文章转载于 FastDFS 作者 余庆 大佬的 FastDFS分享与交流 公众号 对于互联网应用 FastDFS 的标准使用姿势 通过 FastDFS API 进行文件上传等更新操作 storage serv
  • Jmeter(二十八) - 从入门到精通 - Jmeter Http协议录制脚本工具-Badboy1(详解教程)

    1 简介 在使用jmeter自动录制脚本时会产生很多无用的请求 所以推荐使用badboy录制脚本之后保存为jmx文件 在jmeter中打开使用 因此宏哥在这里介绍一下Badboy这款工具 本来打算不做介绍了 原因是因为这款工具已经不在维护和
  • python-selenium-弹窗的处理

    切换到弹窗视角 alert driver switch to alert 点击弹窗中的确认 alert accept 点击弹窗中的取消 alert dismiss 获取弹出框的信息内容 alert text 当遇到弹窗时 1 切换到弹窗视角
  • Android Socket详细使用攻略

    前言 Socket的使用在 Android网络编程中非常重要 今天我将带大家全面了解 Socket 及 其使用方法 目录 1 网络基础 1 1 计算机网络分层 计算机网络分为五层 物理层 数据链路层 网络层 运输层 应用层 其中 网络层 负
  • C语言第一次作业练习

    以下程序教材基于 谭浩强C程序设计 第四版 第1题 参照例1 3 在Visual C 6 0环境中继续完成教材P 15 习题6 此程序于2017年3月1日12 48编写 目的 当用户在命令窗口输入a b c三个值 输出 其中最大者 incl
  • windows10下配置android-studio-ide

    前言 android studio ide配置对于新手来说可能有一点点麻烦 这里详细记录一下 希望对新手有所帮助 大佬请忽略哈 下载 android studio ide官网下载地址 谷歌官网的这个地址目前对天朝开放 android stu
  • C#判断字符串中有没有字母,正则表达式、IsLetter

    要判断字符串中是否包含字母 可以使用正则表达式或者循环遍历字符串的方式 方法一 使用正则表达式 using System Text RegularExpressions string input Hello123 bool contains
  • 单例模式、工厂模式,观察者模式

    单例模式 Singleton 限制了类的实例化次数只能一次 从经典意义来将 单例模式 在实例不存在的时候 可以通过一个方法创建一个类来实现创建类的新实例 如果实例已经存在 他会简单返回该对象的引用 单例模式不同于静态类 可以推迟它们的初始化
  • csharp:Dapper Sample

    You can find Dapper on Google Code here http code google com p dapper dot net and the GitHub distro here https github co
  • Redis集群的那些谜

    下列问题是我在搭建Redis集群之前与实验过程发出的疑问 随着我Redis集群的成功搭建 疑问也一个一个解开 Redis集群搭建参考资料 Redis Cluster参考资料 Redis集群的数据互通吗 先说结论 互通的 往Redis集群里存
  • hualinux dj3 2.6:drf ViewSets使用@action添加路由及传参

    目录 一 viewSets active修饰器介绍 1 1 介绍 1 2 用法 二 例子 2 1 需求 2 2 分析 2 2 1 action自定义路由 2 2 2 action url path不支持尖括号传参问题 2 3 实现代码 2
  • 杂项记录

    2019 07 14 查看一些基础的信息 比如CPU 逻辑核等系你 查看某个网卡在哪个numa节点上https blog csdn net jpmsdn article details 84561294 DPDK最大支持核数 128 在rt
  • cmake安装更新(解决cmake报错:CMake 3.8 or higher is required. You are running version 3.5.1)

    ubuntu16 04在安装libfreenect过程中 出现cmake报错 CMake 3 8 or higher is required You are running version 3 5 1 cmake3 5 1是在安装ubunt
  • Linux查看用户UID和所属组

    使用以下命令查看 id 用户名 如省略用户名代表查看当前用户的
  • SQL注入1——显注(重学)

    SQL注入 学习自 文章 201 A3 SQL注入 上 视频 农夫安全201 A3 sql注入技巧上2 SQL注入 SQL注入 前言 一 显注 1 判断 2 判断字段数量 3 获取数据库信息 4 获取表信息 5 获取列信息 6 获取表信息
  • 配置虚拟机,查看主机cpu个数

    打开 任务管理器 性能 资源监视器 CPU 即可查看 根据自身cpu个数不同分配虚拟机处理器个数 我这里是有8个cpu
  • LeetCode 高级 - 矩阵中的最长递增路径

    矩阵中的最长递增路径 给定一个整数矩阵 找出最长递增路径的长度 对于每个单元格 你可以往上 下 左 右四个方向移动 你不能在对角线方向上移动或移动到边界外 即不允许环绕 示例 1 输入 nums 9 9 4 6 6 8 2 1 1 输出 4
  • Idea+git push时候出现HTTP 413 错误

    Delta compression using up to 4 threads Compressing objects 100 2364 2364 done Writing objects 100 4329 4329 1 15 MiB 11
  • 【java】计算员工工资

    案例介绍 任务描述 某公司有多个部门 员工信息包含姓名 name 类型 type 部门 department 和底薪 basicSalary 其中员工的类型有三种 管理员 销售员和工人 公司财务部门工作人员每月要计算员工的实发工资 实发工资