Java项目案例之---计算公司员工的工资(面向对象复习)
计算公司员工的工资(面向对象复习)
某公司的雇员分为以下若干类:
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项目案例之---计算公司员工的工资(面向对象复习)的更多相关文章
- Java项目案例之--封装的实例
Java项目案例之---封装的实例 有一个专业类,有一个专业对象,专业名称:计算机科学与技术,专业编号:J001,专业年限:4,对年限添加约束,如果输入小于0,则默认为0,否则显示输入的值 有一个学生 ...
- Java项目案例之---常用工具类练习
常用工具类练习 1. 请根据控制台输入的特定日期格式拆分日期,如:请输入一个日期(格式如:**月**日****年),经过处理得到:****年**月**日 import java.util.Scanne ...
- Java项目案例之---登录和修改(JSP)
登录和修改(JSP) 通过案例学习jsp的常用知识点: 1.创建一个Map集合,用于存放学生信息,将学生信息存入Map中 2.通过page将需要的包导入 3.用request.getParameter ...
- Java项目案例之---加法计算器(转发和重定向)
加法计算器(转发和重定向) 运行显示: 转发 重定向 代码: index.jsp <%-- Created by IntelliJ IDEA. User: Administrator Date: ...
- Java项目案例:酒店前台客服管理系统
import java.util.Scanner; public class HelloWorld { public static void main(String[] args){ String [ ...
- Java项目案例之---定时器的使用
定时器的使用 使用定时器,在当前时间的10秒后调用方法,输出语句 import java.text.SimpleDateFormat; import java.util.Calendar; impor ...
- Java项目案例之---开灯(面向对象复习)
开灯(面向对象复习) 设计一个台灯类(Lamp)其中台灯有灯泡类(Buble)这个属性,还有开灯(on)这个方法 设计一个灯泡类(Buble),灯泡类有发亮的方法 其中有红灯泡类(RedBuble)和 ...
- 收藏基本Java项目开发的书
一.Java项目开发全程实录 第1章 进销存管理系统(Swing+SQL Server2000实现) 第2章企业内部通信系统(Swing+JavaDB实现) 第3章 企业人事管理系统( Swing+H ...
- Java学生管理系统项目案例
这是一个不错的Java学生管理系统项目案例,希望能够帮到大家的学习吧. 分代码如下 package com.student.util; import java.sql.Connection; impo ...
随机推荐
- .Net中使用数据库(sqlite)的大体流程(简单向)
说来数据库,各种语言各种数据库在操作上大体无异,基本都是连接数据库.操作数据库.关闭数据库连接的流程,不过Sqlite由于是单文件数据库,相比其他服务器的数据库连接更简单,只需要给定数据库文件的路径即 ...
- 【C#】使用EF访问Sqlite数据库
原文:[C#]使用EF访问Sqlite数据库 1. 先上Nuget下载对应的包 如图,搜索System.Data.SQLite下载安装即可,下载完之后带上依赖一共有这么几个: EntityFramew ...
- 『开发技巧』Python音频操作工具PyAudio上手教程
『开发技巧』Python音频操作工具PyAudio上手教程 0.引子 当需要使用Python处理音频数据时,使用python读取与播放声音必不可少,下面介绍一个好用的处理音频PyAudio工具包. ...
- 浅谈.NET(C#)与Windows用户账户信息的获取
原文:浅谈.NET(C#)与Windows用户账户信息的获取 目录 1. 用户账户名称 - 使用Environment类 2. 用户账户信息 - 使用WindowsIdentity和IdentityR ...
- UWP-HttpClient
原文:UWP-HttpClient 基本格式: HttpClient client = new HttpClient(); Uri uri = new Uri(url); HttpResponseMe ...
- winform picturebox设置布局样式
这里分背景图和直接显示的图片的布局 背景图的布局为BackgroundImageLayout设置为strecth即为自动拉伸 图片的布局为SizeMode 设置为StretchImage即自动拉伸
- ML:梯度下降(Gradient Descent)
现在我们有了假设函数和评价假设准确性的方法,现在我们需要确定假设函数中的参数了,这就是梯度下降(gradient descent)的用武之地. 梯度下降算法 不断重复以下步骤,直到收敛(repeat ...
- Android View 滚动边界的测量
最近一直在用Android TV的RecyclerView,实现视频搜索列表卡片的滚动显示,由于采用了双排滚动,打破了系统默认的单排滚动,且每一屏幕显示10个完整卡片5个半漏边卡片,每个完整卡片的左下 ...
- 使用Disk2VHD进行P2V转换需要知道的一些事
据不可靠统计,有「无数」工具可以实现物理机到虚拟机的(P2V)转换,虽然有很多此类工具都被开发商帖上了高价标签,但至少来自微软 Sysinternals 工具集中的 Disk2VHD 还是可以免费使用 ...
- 深入探索ScrollWindow
最近做WIN32 API开发时发现对ScrollWindow的一些工作原理并不是太清楚,于是做了相关研究,记载下来和大家共同学习. 首先在WM_CREATE中获取系统字符的宽度和高度 case WM_ ...