用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;
        else
            salary = 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);
                else
                    salary = 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);
            else
                return 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");
        }
    }
}

  • 测试结果
    测试结果
  • 25
    点赞
  • 135
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不要做码农呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值