那个好人家帮帮我啊,我连看都没看懂

•一、项目需求分析。
1•害求描述 新科技公司基本情况是:公司现有50名员工,预计5年后发展到100名员 工。员工分为行政人员、技术人员、销售人员。为了方便公司员工工资管理,急
需一套开发工资、管理系统。。 该系统功能包括用户登录、用户管理、员工基本信息管理、员工工资信息管 理、实时交流等模块。其中用户登录实现正常用户登录,登录成功的用户可以进 入系统,进行相应的換作;用户管理包括用户新增、删除、密码修改操作;员工 基本信息管理包括员工基本信息的新增、删除、修改、查询操作;员工工资信息 管理包括员工月工资新增、删除、修改、查询、统计操作;实时交流模块用于用 户之间的实时交流操作。人事部门可输入员工的基本信息和基本工资,每月输入 员工工资相关的信息,系统自动生成月工资,还可统计员工年工资。员工可以查
吞自己的月工资。"
系统所涉及的数据描述如下:。 行政人员信息包括:工号、姓名、岗位类别、职位、基本工资、年、月份、 缺勤情況、出勤奖、月工资,其中月工资=基本工资+出勤奖,出勤奖是根据缺 勤情况计算得到,即缺勤0天,出勤奖为基本工资的20%;缺勤4-5天,出勤奖为基本工资的5%;缺勤5天以上,
出勤奖为0。+ 技术人员信息包括:工号、姓名、岗位类别、职位、基本工资、年、月份、
项目奖励、月工资,其中月工资=基本工资+项目奖励。。 销售人员信息包括:工号、姓名、岗位类别、职位、基本工资、年、月份、 销售额、销售奖励、月工资,其中月工资=基本工资+销售奖励,销售奖励=销售
额*5%。(参考此文档,定义员工类的代码)

【以下回答由 GPT 生成】

public abstract class Employee {
    private String employeeId; // 员工工号
    private String name; // 员工姓名
    private String category; // 员工岗位类别
    private String position; // 员工职位
    private double baseSalary; // 员工基本工资
    private int year; // 年份
    private int month; // 月份
    private double monthlySalary; // 员工月工资

    public Employee(String employeeId, String name, String category, String position, double baseSalary, int year, int month) {
        this.employeeId = employeeId;
        this.name = name;
        this.category = category;
        this.position = position;
        this.baseSalary = baseSalary;
        this.year = year;
        this.month = month;
    }

    public String getEmployeeId() {
        return employeeId;
    }

    public String getName() {
        return name;
    }

    public String getCategory() {
        return category;
    }

    public String getPosition() {
        return position;
    }

    public double getBaseSalary() {
        return baseSalary;
    }

    public int getYear() {
        return year;
    }

    public int getMonth() {
        return month;
    }

    public double getMonthlySalary() {
        return monthlySalary;
    }

    public abstract void calculateMonthlySalary(); // 抽象方法,由子类实现具体的计算月工资逻辑
}
public class AdminEmployee extends Employee {
    private int absentDays; // 缺勤天数
    private double attendanceBonus; // 出勤奖

    public AdminEmployee(String employeeId, String name, String position, double baseSalary, int year, int month, int absentDays) {
        super(employeeId, name, "行政人员", position, baseSalary, year, month);
        this.absentDays = absentDays;
        calculateMonthlySalary();
    }

    public int getAbsentDays() {
        return absentDays;
    }

    public double getAttendanceBonus() {
        return attendanceBonus;
    }

    @Override
    public void calculateMonthlySalary() {
        if (absentDays == 0) {
            attendanceBonus = getBaseSalary() * 0.2;
        } else if (absentDays >= 4 && absentDays <= 5) {
            attendanceBonus = getBaseSalary() * 0.05;
        } else {
            attendanceBonus = 0;
        }
        setMonthlySalary(getBaseSalary() + attendanceBonus);
    }
}
public class TechnicalEmployee extends Employee {
    private double projectBonus; // 项目奖励

    public TechnicalEmployee(String employeeId, String name, String position, double baseSalary, int year, int month, double projectBonus) {
        super(employeeId, name, "技术人员", position, baseSalary, year, month);
        this.projectBonus = projectBonus;
        calculateMonthlySalary();
    }

    public double getProjectBonus() {
        return projectBonus;
    }

    @Override
    public void calculateMonthlySalary() {
        setMonthlySalary(getBaseSalary() + projectBonus);
    }
}
public class SalesEmployee extends Employee {
    private double salesAmount; // 销售额
    private double salesBonus; // 销售奖励

    public SalesEmployee(String employeeId, String name, String position, double baseSalary, int year, int month, double salesAmount) {
        super(employeeId, name, "销售人员", position, baseSalary, year, month);
        this.salesAmount = salesAmount;
        calculateMonthlySalary();
    }

    public double getSalesAmount() {
        return salesAmount;
    }

    public double getSalesBonus() {
        return salesBonus;
    }

    @Override
    public void calculateMonthlySalary() {
        salesBonus = salesAmount * 0.05;
        setMonthlySalary(getBaseSalary() + salesBonus);
    }
}

以上代码定义了一个抽象的员工类Employee和它的三个子类AdminEmployee、TechnicalEmployee和SalesEmployee,根据不同岗位的不同计算方式,实现了计算员工月工资的逻辑。



【相关推荐】


  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7544266
  • 除此之外, 这篇博客: 关于final修饰的字段初始化问题中的 于是我得出了个人的一个结论:final修饰的非静态的字段, 在虚拟机为它开辟空间时必须得保证它会被显式赋值一次且只被赋值一次, 不管是在初始化块时, 显式初始化时, 还是构造方法初始化时, 也就是说如果在在初始化块中对final修饰的字段进行了初始化, 那么就不能进行显示初始化, 也不能使用构造方法初始化, 如果在定义字段时就显式赋值了, 那么同理不能进行初始化块初始化和构造方法初始化, 以此类推.但是使用构造方法初始化时, 要注意必须在每一个构造器中都对final修饰的字段初始化, 不然就存在该字段可能没有赋值的可能 部分也许能够解决你的问题。

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^