用Java编写一个工资支付系统
工资支付系统:
- 要求:为某公司编写一个工资支付系统,用于计算某一类员工的月薪。该公司共有四类员工:领固定月薪的(SalariedEmployee);计时取酬的(HourlyEmployee,如果一月工时超过160小时,则还需对额外的工时支付加班费);按销售额提成(CommissionEmployee)的和带底薪并按销售额提成的(BasePlusCommissionEmployee),其继承层次结构如下所示。已知每类员工均有表示员工工号、姓名和出生年月的属性,和用于计算员工月薪的方法。创建一个Employee变量数组,保存Employee类层次结构中每个具体类对象的引用,对每个Employee显示其工号、姓名、出生年月和月收入,如果当月是Employee的生日所在的月份,则还另发给他100元作为红包。
- 继承关系图如下:
- 代码实现:
//Employee.java(抽象类)
abstract class Employee {public int number;public String name;public int birthYear;public int birthMonth;public static int salary;public abstract int salary();
}
//GetSalaryPerMonth.java(接口)
public interface GetSalaryPerMonth {int SalaryPerMonth = 5000; //假设月薪为5000
}
//GetWorkHour.java(接口)
public interface GetWorkHour {int SalaryPerHour = 30; //给定时薪int OvertimeSalaryPerHour = 40; //给定超过标准工时的时薪
}
//GetSale.java(接口)
public interface GetSale {int SalaryPerSale = 10;
}
//GetBaseSalary.java(接口)
public interface GetBaseSalary {int BaseSalary = 1000; //给定底薪
}
- 下面四个类是对抽象类的实现
//SalariedEmployee.java
import java.util.Calendar;public class SalariedEmployee extends Employee implements GetSalaryPerMonth{public static int RedEnvelope = 100; //生日红包public int salary() {int month = Calendar.getInstance().get(Calendar.MONTH) + 1; //获取当前月份if (month == birthMonth)salary = SalaryPerMonth + RedEnvelope;elsesalary = SalaryPerMonth;return salary;}
}
//HourlyEmployee.java
import java.util.Calendar;
import java.util.InputMismatchException;
import java.util.Scanner;public class HourlyEmployee extends Employee implements GetWorkHour {public static double RedEnvelope = 100;public static int StandardWorkTime = 160;public int salary() {try { //规范输入int month = Calendar.getInstance().get(Calendar.MONTH) + 1;int WorkHour;System.out.print("请输入您的工时:");WorkHour = new Scanner(System.in).nextInt();if (WorkHour < 0) //规范输入{System.out.println("请输入正整数!");return salary();}else{ //计算工资if (WorkHour > StandardWorkTime)salary = SalaryPerHour * StandardWorkTime + OvertimeSalaryPerHour * (WorkHour - 160);elsesalary = SalaryPerHour * WorkHour;if (month == birthMonth)salary += RedEnvelope;return salary;}}catch (InputMismatchException e){System.out.println("请输入整数!");return salary();}}
}
//CommissionEmployee.java
import java.util.Calendar;
import java.util.InputMismatchException;
import java.util.Scanner;public class CommissionEmployee extends Employee implements GetSale{public static double RedEnvelope = 100;public int salary() {try {int month = Calendar.getInstance().get(Calendar.MONTH) + 1;int AmountOfSale;System.out.print("请输入您的销售量:");AmountOfSale = new Scanner(System.in).nextInt();if (AmountOfSale < 0){System.out.println("请输入正整数!");return salary();}else{salary = AmountOfSale * SalaryPerSale;if (month == birthMonth)salary += RedEnvelope;return salary;}}catch (InputMismatchException e){System.out.println("请输入整数!");return salary();}}
}
//BasePlusCommissionEmployee.java
import java.util.Calendar;
import java.util.InputMismatchException;
import java.util.Scanner;public class BasePlusCommissionEmployee extends Employee implements GetSale,GetBaseSalary {public static int RedEnvelope = 100;public int salary() {try {int month = Calendar.getInstance().get(Calendar.MONTH) + 1;int AmountOfSale;System.out.print("请输入您的销售量:");AmountOfSale = new Scanner(System.in).nextInt();if (AmountOfSale < 0){System.out.println("请输入正整数!");return salary();}else{salary = BaseSalary + AmountOfSale * SalaryPerSale;if (month == birthMonth)salary += RedEnvelope;return salary;}}catch (InputMismatchException e){System.out.println("请输入整数!");return salary();}}
}
- 主类
//PayrollSystem.java
import java.util.InputMismatchException;
import java.util.Scanner;
import java.util.regex.Pattern;public class PayrollSystem {public static int choice;//选择菜单public static int choice() {try {choice = new Scanner(System.in).nextInt();if (choice < 0 || choice > 4){System.out.println("请输入整数0-4!");return choice();}else if (choice == 0)System.exit(0);elsereturn choice;}catch (InputMismatchException e){System.out.println("请输入整数!");return choice();}return -1;}//获取工号public static int get_number() {Scanner sc = new Scanner(System.in);System.out.print("请输入工号:");try {int number = sc.nextInt();if (number <= 0){System.out.println("请输入正整数!");return get_number();}return number;}catch (InputMismatchException e){System.out.println("请输入整数!");return get_number();}}//获取姓名public static String get_name() {Scanner sc = new Scanner(System.in);System.out.print("请输入姓名:");String name = sc.next();Pattern pattern = Pattern.compile(".*\\d+.*");if (pattern.matcher(name).matches()){System.out.println("不能输入数字");return get_name();}return name;}//获取出生年份public static int get_birthYear() {Scanner sc = new Scanner(System.in);System.out.print("请输入出生年份:");try {int birthYear = sc.nextInt();if (birthYear < 1900 || birthYear > 2021){System.out.println("输入有误,请重新输入!");return get_birthYear();}return birthYear;}catch (InputMismatchException e){System.out.println("请输入数字!");return get_birthYear();}}//获取出生月份public static int get_birthMonth() {Scanner sc = new Scanner(System.in);System.out.print("请输入出生月份:");try {int birthMonth = sc.nextInt();if (birthMonth < 1 || birthMonth > 12){System.out.println("输入有误,请重新输入!");return get_birthMonth();}return birthMonth;}catch (InputMismatchException e){System.out.println("请输入数字!");return get_birthMonth();}}public static void main(String[] args) {Employee []Data = new Employee[4];Data[0] = new SalariedEmployee();Data[1] = new HourlyEmployee();Data[2] = new CommissionEmployee();Data[3] = new BasePlusCommissionEmployee();System.out.println("请输入员工类型:1.领固定月薪 2.计时取酬 3.按销售额提成 4.带底薪并按销售额提成 0.退出");choice = choice();switch (choice){case 1:{Data[0].number = get_number();Data[0].name = get_name();Data[0].birthYear = get_birthYear();Data[0].birthMonth = get_birthMonth();System.out.println("处理结果:");System.out.println("工号:"+Data[0].number);System.out.println("姓名:"+Data[0].name);System.out.println("出生年月:"+Data[0].birthYear+"年"+Data[0].birthMonth+"月");System.out.println("工资:"+Data[0].salary());break;}case 2:{Data[1].number = get_number();Data[1].name = get_name();Data[1].birthYear = get_birthYear();Data[1].birthMonth = get_birthMonth();int salary = Data[1].salary();System.out.println("处理结果:");System.out.println("工号:"+Data[1].number);System.out.println("姓名:"+Data[1].name);System.out.println("出生年月:"+Data[1].birthYear+"年"+Data[1].birthMonth+"月");System.out.println("工资:"+salary);break;}case 3:{Data[2].number = get_number();Data[2].name = get_name();Data[2].birthYear = get_birthYear();Data[2].birthMonth = get_birthMonth();int salary = Data[2].salary();System.out.println("处理结果:");System.out.println("工号:"+Data[2].number);System.out.println("姓名:"+Data[2].name);System.out.println("出生年月:"+Data[2].birthYear+"年"+Data[2].birthMonth+"月");System.out.println("工资:"+salary);break;}case 4:{Data[3].number = get_number();Data[3].name = get_name();Data[3].birthYear = get_birthYear();Data[3].birthMonth = get_birthMonth();int salary = Data[3].salary();System.out.println("处理结果:");System.out.println("工号:"+Data[3].number);System.out.println("姓名:"+Data[3].name);System.out.println("出生年月:"+Data[3].birthYear+"年"+Data[3].birthMonth+"月");System.out.println("工资:"+salary);break;}default:System.out.println("error");}}
}
- 测试结果
用Java编写一个工资支付系统相关推荐
- java实现网上支付_java编写一个网上支付系统界面
展开全部 购物与结算 (beta4)/IE9.js"> function pay() { var link = document.getElementById("a1&quo ...
- 假定要为某个公司编写雇员工资支付程序,这个公司有各种类型的雇员(Employee),不同类型的雇员按不同的方式支付工资:
假定要为某个公司编写雇员工资支付程序,这个公司有各种类型的雇员(Employee),不同类型的雇员按不同的方式支付工资: (1)经理(Manager)--每月获得一份固定的工资 (2)销售人员(Sal ...
- 停车场管理系统 java_使用java编写一个停车场管理系统
使用java编写一个停车场管理系统 发布时间:2020-11-30 16:00:28 来源:亿速云 阅读:145 作者:Leah 这篇文章给大家介绍使用java编写一个停车场管理系统,内容非常详细,感 ...
- 用Java模拟一个银行ATM系统
用Java模拟一个银行ATM系统 系统功能介绍: 全部代码 示例截图 系统功能介绍: 使用面向对象的编程思想,尽可能模拟真实世界中的银行ATM业务流程. main方法里通过调用一行代码,完成整个业务流 ...
- 用Java编写一个最简单的桌面程序
使用Java的优势在于网络应用方面,但Java也提供了强大的用于开发桌面程序的API,它们包含在javax.swing包中.使用这个包可以编写简单的Java桌面应用程序. Java的javax.swi ...
- 用Java编写城市公交查询系统
城市公交查询系统是一个实用的应用程序,可以帮助用户在城市中查找公交车路线.站点和到达时间.在这个回答中,我将用Java编写一个城市公交查询系统,包括代码和说明. 一.系统架构和功能 该城市公交查询系统 ...
- java编写存钱_用Java编写一个简单的存款
package desposit.money; public class DespositMoney { public static void main(String[] args) { Custom ...
- 用java编写一个简单计算器
java 采用java编写一个简单计算器,使用awt和swing 代码如下: import java.awt.Color; import java.awt.Font; import java.awt. ...
- 自动点名系统c语言,用C语言编写一个随机点名系统
/*编写一个随机点名系统,运行该系统后,按空格键可以显示出一名同学,以前被选中的同学,将不会再次被选中*/ #include /*standard input & output*/ #incl ...
最新文章
- element 使用阿里图标变形了_web前端大厂面试题(阿里云笔试篇)
- SAP PP 成品批次的生产日期自动抓取半成品批次的生产日期
- HDU 2243考研路茫茫——单词情结 (AC自动机+矩阵快速幂)
- 巧用Windows Phone应用商城中的应用链接
- 实验三——vlan间路由
- 真香!你的 2019 年终总结已经出 - 请查收
- iOS5 UI 设计新手段 Storyboard
- 编译安装LAMP对其性能压力测试
- 借贷记账思考2015.12.28
- 计算机技能是啥,简历中的IT技能是什么意思?
- 私有服务器虚拟化软件市场排名,操作系统、数据库和虚拟化软件2017年市场格局分析...
- 计算机关机的DOS命令是,如何设置电脑自动关机dos指令
- 人脸识别门禁应用方案
- 网络骇客入门之网络编程(一):网络应知应会
- QEMU脏页速率计算原理
- 【英文命名】星座、奢侈品、深海物种相关英语词汇帮助你命名
- 2022安好? 2023何如?
- 基于spring boot的婚纱摄影约拍系统
- UDS协议发展历史(UDS是什么?)
- stm32f103驱动SHT20( I2C )