计算公司员工的工资(面向对象复习)

某公司的雇员分为以下若干类:

Employee:这是所有员工总的父类,属性:员工的姓名,员工的生日月份。方法:double getSalary(int month) 根据参数月份来确定工资,如果该月员工过生日,则公司会额外奖励100元。

SalariedEmployee:Employee的子类,拿固定工资的员工。属性:月薪

HourlyEmployee:Employee的子类,按小时拿工资的员工,每月工作超出160小时的部分按照1.5倍工资发放。属性:每小时的工资、每月工作的小时数

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

BasePlusSalesEmployee:SalesEmployee的子类,有固定底薪的销售人员,工资由底薪加上销售提成部分。属性:底薪。

写一个程序,把若干各种类型的员工放在一个Employee数组里,写一个方法,打印出某月每个员工的工资数额。

注意:要求把每个类都做成完全封装,不允许非私有化属性。

import java.util.Calendar;

public class Employee {
private String name;//员工姓名
private int month;//生日月份
public Employee(){ }
public Employee(String name,int month){
this.setName(name);
this.setMonth(month);
}
public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getMonth() {
return month;
} public void setMonth(int month) {
this.month = month;
} /**
* 判断员工是否当月过生日
* @param month
* @return 是的话返回100,不是返回0
*/
public static double getSalary(int month){
//获取当前月份,属于工具类中的内容
Calendar ca=Calendar.getInstance();
int m=ca.get(Calendar.MONTH)+1;
if(month==m){
return 100;
}else{
return 0;
}
}
}
//固定月薪

public class SalariedEmployee extends Employee {

    private double monthsalary;//月薪

    public SalariedEmployee(){

    }

    public SalariedEmployee(String name,int month){

        super(name,month);

    }

    public double getMonthsalary() {

        return monthsalary;

    }

    public void setMonthsalary(double monthsalary) {

        this.monthsalary = monthsalary;

    }

    /**

     * 计算固定月薪员工的工资

     * @param monthsalary

     * @param month

     * @return 固定月薪员工的工资

     */

    public double getmonth(double monthsalary,int month){

        double n=monthsalary+Employee.getSalary( month);

        return n;

    }
}
//时薪*小时   超过160小时,超过部分1.5工资

public class HourlyEmployee extends Employee{

    private double hourlyWage;//时薪

    private int hour;//总时长

    public HourlyEmployee(){

    }

    public HourlyEmployee(String name,int month){

        super(name,month);

    }

    public double getHourlyWage() {

        return hourlyWage;

    }

    public void setHourlyWage(double hourlyWage) {

        this.hourlyWage = hourlyWage;

    }

    public int getHour() {

        return hour;

    }

    public void setHour(int hour) {

        this.hour = hour;

    }

    /**

     * 计算时薪员工的工资

     * @param hour

     * @param hourlyWage

     * @param month

     * @return  时薪员工的工资

     */

    public double gethour(int hour,double hourlyWage,int month){

        double n;

        if(hour>160){

           n=160*hourlyWage+(hour-160)*hourlyWage*1.5+Employee.getSalary(month);

        }else{

            n=hour*hourlyWage+Employee.getSalary(month);

        }

        return n;

    }

}
//销售额*提成率

public class SalesEmployee extends Employee{

    private int salesVolume;//销售额

    private double royalty;//提成率

    public SalesEmployee(){

    }

    public SalesEmployee(String name,int month){

        super(name,month);

    }

    public int getSalesVolume() {

        return salesVolume;

    }

    public void setSalesVolume(int salesVolume) {

        this.salesVolume = salesVolume;

    }

    public double getRoyalty() {

        return royalty;

    }

    public void setRoyalty(double royalty) {

        this.royalty = royalty;

    }

    /**

     * 计算提成

     * @param salesVolume

     * @param royalty

     * @return 提成

     */

    public double getroyalty(int salesVolume,double royalty){

       return salesVolume*royalty;

    }

}
//销售额*提成+底薪

public class BasePlusSalesEmployee extends SalesEmployee{

   private double baseSalary;//底薪

    public BasePlusSalesEmployee(){

    }

    public BasePlusSalesEmployee(String name,int month){

        super(name,month);

    }

    public double getBaseSalary() {

        return baseSalary;

    }

    public void setBaseSalary(double baseSalary) {

        this.baseSalary = baseSalary;

    }

    /**

     * 计算销售人员的工资

     * @param salesVolume

     * @param royalty

     * @param baseSalary

     * @param month

     * @return 销售人员月薪

     */

    public double getroyalty(int salesVolume,double royalty,double baseSalary,int month){

        return salesVolume*royalty+baseSalary+Employee.getSalary(month);

    }

}
public class EmployeeTest {
public static void main(String[] args){
SalariedEmployee a=new SalariedEmployee("月薪人",7);
HourlyEmployee b=new HourlyEmployee("时薪人",10);
BasePlusSalesEmployee c=new BasePlusSalesEmployee("提成人",1);
System.out.println( a.getName()+":\n月薪"+a.getmonth(10000,a.getMonth()));
System.out.println(b.getName()+":\n月薪"+b.gethour(170,20,b.getMonth()));
System.out.println(c.getName()+":\n月薪"+c.getroyalty(100,50,1000,c.getMonth())); }
}

运行结果:

月薪人:

月薪10100.0

时薪人:

月薪3500.0

提成人:

月薪6000.0

Java项目案例之---计算公司员工的工资(面向对象复习)的更多相关文章

  1. Java项目案例之--封装的实例

    Java项目案例之---封装的实例 有一个专业类,有一个专业对象,专业名称:计算机科学与技术,专业编号:J001,专业年限:4,对年限添加约束,如果输入小于0,则默认为0,否则显示输入的值 有一个学生 ...

  2. Java项目案例之---常用工具类练习

    常用工具类练习 1. 请根据控制台输入的特定日期格式拆分日期,如:请输入一个日期(格式如:**月**日****年),经过处理得到:****年**月**日 import java.util.Scanne ...

  3. Java项目案例之---登录和修改(JSP)

    登录和修改(JSP) 通过案例学习jsp的常用知识点: 1.创建一个Map集合,用于存放学生信息,将学生信息存入Map中 2.通过page将需要的包导入 3.用request.getParameter ...

  4. Java项目案例之---加法计算器(转发和重定向)

    加法计算器(转发和重定向) 运行显示: 转发 重定向 代码: index.jsp <%-- Created by IntelliJ IDEA. User: Administrator Date: ...

  5. Java项目案例:酒店前台客服管理系统

    import java.util.Scanner; public class HelloWorld { public static void main(String[] args){ String [ ...

  6. Java项目案例之---定时器的使用

    定时器的使用 使用定时器,在当前时间的10秒后调用方法,输出语句 import java.text.SimpleDateFormat; import java.util.Calendar; impor ...

  7. Java项目案例之---开灯(面向对象复习)

    开灯(面向对象复习) 设计一个台灯类(Lamp)其中台灯有灯泡类(Buble)这个属性,还有开灯(on)这个方法 设计一个灯泡类(Buble),灯泡类有发亮的方法 其中有红灯泡类(RedBuble)和 ...

  8. 收藏基本Java项目开发的书

    一.Java项目开发全程实录 第1章 进销存管理系统(Swing+SQL Server2000实现) 第2章企业内部通信系统(Swing+JavaDB实现) 第3章 企业人事管理系统( Swing+H ...

  9. Java学生管理系统项目案例

    这是一个不错的Java学生管理系统项目案例,希望能够帮到大家的学习吧. 分代码如下 package com.student.util; import java.sql.Connection; impo ...

随机推荐

  1. openFrameworks 是一个旨在助力你进行开创性工作的开源 C++ 工具箱(是很多其它类库的组合)

    openFrameworks 是一个旨在助力你进行开创性工作的开源 C++ 工具箱,提供了简单且直观的实验框架.该工具箱具有常见的工具,并集合了众多常见的库: OpenGL, GLEW, GLUT,  ...

  2. 芒果TV For Windows10 成长历史 & 迭代历史 & 新闻报道

    芒果TV 是国内领先的基于Windows10操作系统并支持Windows10全系列设备的视频应用和内容服务商. Win10商店版<芒果TV>是湖南快乐阳光互动娱乐传媒有限公司专门为Wind ...

  3. LoadLibrary方法加载运行DLL库

    最近和另一家公司对接,要求用对方提供的测试程序测试我们做的DLL. 接到对方的测试程序,发现和我们以前调用DLL的方式不太一样.但我稍微看了一会代码也看懂其意思了,一天搞定了. 但其中也遇到些小困惑, ...

  4. PHPstudy + phpstrom +xdebug 断点调试(windows) - CSDN博客

    原文:PHPstudy + phpstrom +xdebug 断点调试(windows) - CSDN博客 php.ini 配置 需要添加如下内容 [XDebug]xdebug.profiler_ou ...

  5. 可以用GetObjectProp来获取对象的属性

    原来可以用GetObjectProp来获取对象的属性,还有这用法,哈哈哈哈…… var SL: TStrings; UseDBTools: Boolean;begin SL := nil; if Me ...

  6. 使用百度网盘+Git,把版本控制托管到云端,附精彩评论

    http://www.cnblogs.com/vajoy/p/3929675.html 我试过多个这种双向同步的网盘,在网络状况不好.系统卡顿以及某些程序BUG的情况下,同步会有错乱现象,尤其是多个电 ...

  7. VC6下 try catch 在release下的杯具(默认情况下,要加上throw语句catch才不会被优化掉)

    IDE:VC6 今天遇到一个小问题,把我郁闷了好久,××医生的VulEngine不时在wcsstr处发生crash,加了一番强大的参数检查后,再加上了强大的try catch,其实不是很喜欢用try和 ...

  8. 如何判断操作系统是64位还是32位(GetNativeSystemInfo和IsWow64Process两种方法)

    64位Wnidows 里面有个叫Wow64的模拟器技术,可以使32位的程序在64位Windows 上运行. 当你想在程序里面针对32b位/ 64位系统执行不同代码的时候, 需要判断操作系统是32位还是 ...

  9. 《C++ Primer》读书笔记 第三章

    1.注意:头文件不应包含using声明.因为头文件的内容会拷贝到所有引用他的文件中去,对于某些程序来说,由于不经意间包含了一些名字,可能会产生名字冲突.2.string类型的读入:用cin读入stri ...

  10. 条款09:绝不在构造和析构过程中调用virtual函数

    不该在构造函数和析构函数期间调用virtual函数,这一点是C++与jave/C#不同的地方之一. 假设有一个class继承体系,用来模拟股市交易如买进.卖出的订单等等.这样的交易一定要经过审计,所以 ...