Java基础(员工工资管理系统)

这篇具有很好参考价值的文章主要介绍了Java基础(员工工资管理系统)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

项目介绍:

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

SalariedEmployee:拿固定⼯资的员⼯。

HourlyEmployee:按⼩时拿⼯资的员⼯,每⽉⼯作超出160⼩时的部分按照1.5倍⼯资发放 

SalesEmployee:销售⼈员,⼯资由⽉销售额和提成率决定。3万以下,提成率5%,3万以上提成率8% 

BasePlusSalesEmployee:有固定底薪的销售⼈员,⼯资由底薪加上销售提成部分。 提成率5%

所有员工如果该⽉员⼯过⽣⽇,则公司会额外奖励100元。

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

项目分析

  1. 每个员工都有姓名,薪资,生日月份的属性,因此可以设计以下类
  2. 设计一个所有员工的总父类Employee,具有姓名,生日的属性,具有根据生日月份确定工资一个方法

  3. SalariedEmployee 是Employee的子类 ,拿固定工资,拥有独立的属性月薪

  4. HourlyEmployee是Employee的子类, 独立的属性:每小时的工资数,每月工作的小时数 

  5. SalesEmployee 是Employee的子类 独立的属性:销售额

  6. BasePlusSalesEmployee 是SalesEmployee的子类:独立的属性: 底薪

知识了解

Java抽象(abstract)类

在 Java 中抽象类的语法格式如下:

<abstract>class<class_name> {
    <abstract><type><method_name>(parameter-iist);
}
其中,abstract 表示该类或该方法是抽象的;class_name 表示抽象类的名称;method_name 表示抽象方法名称,parameter-list 表示方法参数列表。

如果一个方法使用 abstract 来修饰,则说明该方法是抽象方法,抽象方法只有声明没有实现。需要注意的是 abstract 关键字只能用于普通方法,不能用于 static 方法或者构造方法中。

抽象方法的 3 个特征如下:
  1. 抽象方法没有方法体
  2. 抽象方法必须存在于抽象类中
  3. 子类重写父类时,必须重写父类所有的抽象方法

注意:在使用 abstract 关键字修饰抽象方法时不能使用 private 修饰,因为抽象方法必须被子类重写,而如果使用了 private 声明,则子类是无法重写的。

抽象类的定义和使用规则如下:
  1. 抽象类和抽象方法都要使用 abstract 关键字声明。
  2. 如果一个方法被声明为抽象的,那么这个类也必须声明为抽象的。而一个抽象类中,可以有 0~n 个抽象方法,以及 0~n 个具体方法。
  3. 抽象类不能实例化,也就是不能使用 new 关键字创建对象。

Calendar的使用

一、 如何创建 Calendar 对象

Calendar 是一个抽象类, 无法通过直接实例化得到对象。因此, Calendar 提供了一个方法 getInstance,来获得一个Calendar对象, 得到的 Calendar 由当前时间初始化。

 Calendar cal = Calendar.getInstance();

二、 字段解释

Calendar 中 set 和 get 时间都是通过在参数中填入不同的字段来实现的, 不过有部分字段的常量值与约定俗成的值不相同。

下面字段我们以 1997 年 11 月 09 日 00 时 13分 11 秒 来讲解

 Calendar cal = Calendar.getInstance();
 cal.set(Calendar.YEAR, 1997);
 cal.set(Calendar.MONTH, 11);
 cal.set(Calendar.DATE, 09);
 cal.set(Calendar.HOUR_OF_DAY, 00);
 cal.set(Calendar.MINUTE, 13);
 cal.set(Calendar.SECOND, 11);
  • YEAR:默认情况下指示为当前年份。
  • MONTH:指示当前年中的月份数,一年中的一月的值为 0
  • 需要注意的是 JANUARY, FEBRUARY, MARCH,,APRIL,MAY,JUNE,JULY,AUGUST,SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER 分别与 [0, 11] 对应,在设置和获取日期时要格外注意。
  • WEEK_OF_YEAR:指示当前年中的星期数。 一年中的第一个星期的值为 1。
  • WEEK_OF_MONTH:指示当前月中的星期数。 一个月中第一个星期的值为 1。
  • DAY_OF_MONTH:指示一个月中的某天。它与 DATE 是同义词. 一个月中第一天的值为 1。
  • DATE:同 DAY_OF_MONTH
  • DAY_OF_YEAR:指示当前年中的天数。 一年中第一天的值为 1。
  • DAY_OF_WEEK:指示一个星期中的某天。 一周中第一天的值为 1。
  • 需要注意的是, 与中国人的习惯不同, 此处一周中的第一天为 周日。 一周的顺序依次为: 周日(1),周一(2), 周二(3), 周三(4), 周四(5),周五(6), 周六(7) 在设置和获取日期时要格外注意。
  • AM_PM:指示 HOUR 是在中午之前还是在中午之后。[0, 12) 为上午, AM_PM 值为 1 [12, 24)为下午,AM_PM 值为 0。
  • HOUR:指示上午或下午的小时。
  • 例子中 HOUR 为 11
  • HOUR_OF_DAY:指示一天中的小时。 HOUR_OF_DAY 用于 24 小时制时钟。
  • 例子中 HOUR_OF_DAY 为 23
  • MINUTE:指示一小时中的分钟
  • 例子中 MINUTE 为 11
  • SECOND:指示一分钟中的秒
  • 例子中 SECOND 为 11
     

源码 :

Java基础(员工工资管理系统)

 Employee.java

package overproject;

import java.util.Calendar;

//销售父类为抽象类,不同的子类定义不同的计算工资方法
public abstract class Employee {
    private String name;//姓名
    private int month;//生日月份

     //构造方法
    public Employee(String name,int month) {
        this.name=name;
        this.month=month;
    }
   //姓名和生日月份的get set方法
    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setMonth(int month) {
        this.month = month;
    }
    public int getMonth() {
        return month;
    }

    //计算工资方法
    //使用抽象方法
    //抽象方法只有声明没有实现。需要注意的是 abstract 关键字只能用于普通方法,不能用于 static 方法或者构造方法中。
    public abstract double getSalary();

    //判断是否为生日月份,获取额外工资
    public double getSalarybyBrith()
    {
        Calendar calendar= Calendar.getInstance();
        int mm=calendar.get(Calendar.MONTH)+1;//默认0-11
        if(month==mm)
        {
            return 100;
        }
        else
            return 0;
    }


}

SalariedEmployee.java

package overproject;

//拿固定⼯资的员⼯类
public class SalariedEmployee extends Employee{

    private double monthSalary;//固定月薪月薪

    //set get方法
    public double getMonthSalary() {
        return monthSalary;
    }

    public void setMonthSalary(double monthSalary) {
        this.monthSalary = monthSalary;
    }

    //构造方法
    public SalariedEmployee(String name, int month, double monthSalary) {
        super(name, month);//调用父类构造方法
        this.monthSalary = monthSalary;
    }

    //计算工资方法
    @Override
    public double getSalary() {
        //当月薪资加是否为生日月份
        return this.monthSalary+this.getSalarybyBrith();

    }
}

HourlyEmployee.java

package overproject;

//小时工
public class HourlyEmployee extends Employee{
    private double timesalaries;//每小时工资
    private int timemonth;//每月工作小时数
    //构造函数
    public HourlyEmployee(String name, int month, double timesalaries,int timemonth) {
        super(name, month);
        this.timesalaries = timesalaries;
        this.timemonth = timemonth;
    }

    //set get方法
    public double getTimesalaries() {
        return timesalaries;
    }

    public void setTimesalaries(double timesalaries) {
        this.timesalaries = timesalaries;
    }

    public double getTimemonth() {
        return timemonth;
    }

    public void setTimemonth(int timemonth) {
        this.timemonth = timemonth;
    }
    //计算工资方法
    //每⽉⼯作超出160⼩时的部分按照1.5倍⼯资发放
    @Override
    public double getSalary() {
        if(this.timemonth<160&&this.timemonth>0)
        {
            return (this.timemonth*this.timesalaries)+this.getSalarybyBrith();
        }
        else if(this.timemonth>160)
        {
            return ((this.timemonth-160)*(this.timesalaries*1.5))+160*this.timesalaries+this.getSalarybyBrith();
        }
        else
            return 0;
    }
}

SalesEmployee.java

package overproject;

//无固定底薪的销售工
//⼯资由⽉销售额和提成率决定。3万以下,提成率5%,3万以上提成率8%
public class SalesEmployee extends Employee{
    private  double sales;//销售额

    public SalesEmployee(String name, int month, double sales) {
        super(name, month);
        this.sales = sales;
    }

    public double getSales() {
        return this.sales;
    }

    public void setSales(double sales) {
        this.sales = sales;
    }
    //计算工资方法
    @Override
    public double getSalary() {

        if(sales<30000&&sales>0)
        {
            return sales*0.05+this.getSalarybyBrith();
        }
        else if(sales>30000)
        {
            return 30000*0.05+(sales-30000)*0.08+this.getSalarybyBrith();
        }
        else
            return 0;
    }
}

BasePlusSalesEmployee.java

package overproject;

//有固定底薪的销售⼈员,⼯资由底薪加上销售提成部分。 提成率5%

public class BasePlusSalesEmployee extends SalesEmployee{
    private double salarlies;//底薪

    public BasePlusSalesEmployee(String name, int month, double sales, double salarlies) {
        super(name, month, sales);
        this.salarlies = salarlies;
    }

    public double getSalarlies() {
        return salarlies;
    }

    public void setSalarlies(double salarlies) {
        this.salarlies = salarlies;
    }

    //计算工资方法
    @Override
    public double getSalary(){
        return this.salarlies+this.getSales()*0.05+this.getSalarybyBrith();

    }
}

 test.java 

package overproject;
import java.util.Scanner;

public class test {
    public static void main(String[] args) {

        Scanner sc= new Scanner(System.in);

        System.out.println("请输入拿固定工资的人数:");
        int number1=sc.nextInt();
        //创建一个数组,保存number1个固定工资的人数
        SalariedEmployee[] salariedemployee=new SalariedEmployee[number1];

        System.out.println("请输入拿无固定底薪的人数:");
        int number2=sc.nextInt();
        SalesEmployee[] salesEmployee=new SalesEmployee[number2];

        System.out.println("请输入拿有固定底薪的人数:");
        int number3=sc.nextInt();
        BasePlusSalesEmployee[] basePlusSalesEmployee=new BasePlusSalesEmployee[number3];

        System.out.println("请输入打小时工的人数:");
        int number4=sc.nextInt();
        HourlyEmployee[] hourlyEmployee=new HourlyEmployee[number4];

        int type;
        do {

            System.out.println("***欢迎使用员工工资管理系统****");
            System.out.println("**************************");
            System.out.println("0-退出         1-固定工资员工");
            System.out.println("2-无固定底薪    3-有固定底薪");
            System.out.println("4-小时工       5-打印工资表 ");


            System.out.println("请输入选项:");
            type=sc.nextInt();
            switch (type) {
                case 1:
                    for (int i = 0; i < salariedemployee.length; ++i) {
                        System.out.println("请输入第"+(i+1)+"个员工姓名:");
                        String name = sc.next();
                        System.out.println("请输入第"+(i+1)+"个员工出生月份:");
                        int month = sc.nextInt();
                        System.out.println("请输入第"+(i+1)+"个员工月薪:");
                        double monthSalary = sc.nextDouble();
                        SalariedEmployee salariedemployees = new SalariedEmployee(name, month, monthSalary);
                        salariedemployee[i] = salariedemployees;
                    }
                    break;
                case 2:
                    for (int i = 0; i < salesEmployee.length; ++i) {
                        System.out.println("请输入第"+(i+1)+"个员工姓名:");
                        String name = sc.next();
                        System.out.println("请输入第"+(i+1)+"个员工出生月份:");
                        int month = sc.nextInt();
                        System.out.println("请输入第"+(i+1)+"个员工销售额:");
                        int sales = sc.nextInt();
                        SalesEmployee salesEmployees = new SalesEmployee(name, month, sales);
                        salesEmployee[i] = salesEmployees;
                    }
                    break;
                case 3:
                    for (int i = 0; i < basePlusSalesEmployee.length; ++i) {
                        System.out.println("请输入第"+(i+1)+"个员工姓名:");
                        String name = sc.next();
                        System.out.println("请输入第"+(i+1)+"个员工出生月份:");
                        int month = sc.nextInt();
                        System.out.println("请输入第"+(i+1)+"个员工销售额:");
                        int sales = sc.nextInt();
                        System.out.println("请输入第"+(i+1)+"个员工底薪:");
                        int salarlies = sc.nextInt();
                        BasePlusSalesEmployee basePlusSalesEmployees = new BasePlusSalesEmployee(name, month, sales, salarlies);
                        basePlusSalesEmployee[i] = basePlusSalesEmployees;
                    }
                    break;
                case 4:
                    for (int i = 0; i < hourlyEmployee.length; ++i) {
                        System.out.println("请输入第"+(i+1)+"个员工姓名:");
                        String name = sc.next();
                        System.out.println("请输入第"+(i+1)+"个员工出生月份:");
                        int month = sc.nextInt();
                        System.out.println("请输入第"+(i+1)+"个员工每月工作时长(h):");
                        int timemonth = sc.nextInt();
                        System.out.println("请输入第"+(i+1)+"个员工每小时时薪:");
                        int timesalaries = sc.nextInt();
                        HourlyEmployee hourlyEmployees = new HourlyEmployee(name, month, timesalaries, timemonth);
                        hourlyEmployee[i] = hourlyEmployees;
                    }
                    break;
                case 5:
                    for (int i = 0; i < salariedemployee.length; ++i) {
                        System.out.println("员工姓名:" + salariedemployee[i].getName() + "\t\t" + "员工薪资:" + salariedemployee[i].getSalary());
                    }
                    for (int i = 0; i < salesEmployee.length; ++i) {
                        System.out.println("员工姓名:" + salesEmployee[i].getName() + "\t\t" + "员工薪资:" + salesEmployee[i].getSalary());
                    }
                    for (int i = 0; i < basePlusSalesEmployee.length; ++i) {
                        System.out.println("员工姓名:" + basePlusSalesEmployee[i].getName() + "\t\t" + "员工薪资:" + basePlusSalesEmployee[i].getSalary());
                    }
                    for (int i = 0; i < hourlyEmployee.length; ++i){
                        System.out.println("员工姓名:" + hourlyEmployee[i].getName() + "\t\t" + "员工薪资:" + hourlyEmployee[i].getSalary());
                     }
                    break;
                case 0:
                    break;
                default:
                    System.out.println("您的输入有误!请重新输入");
            }

        }while(type!=0);

    }
}

 最终效果:

Java基础(员工工资管理系统)

 Java基础(员工工资管理系统)

 Java基础(员工工资管理系统)

这是一个练手的小项目,适合初学Java,对基本知识的一个复习 

Java基础(员工工资管理系统)

 文章来源地址https://www.toymoban.com/news/detail-426890.html

到了这里,关于Java基础(员工工资管理系统)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java员工信息管理系统(注释全)

     

    2024年02月12日
    浏览(32)
  • python+java+nodejs基于vue的企业人事工资管理系统

    根据系统功能需求分析,对系统功能的进行设计和分解。功能分解的过程就是一个由抽象到具体的过程。 作为人事数据库系统,其主要实现的功能应包括以下几个模块: 1.登录模块 登录模块是由管理员、员工2种不同身份进行登录。 2.系统管理模块 用户管理:新用户的添加和

    2024年02月03日
    浏览(39)
  • 基于java的员工绩效考核管理系统

    本员工绩效考核系统采用java语言开发,为企业员工的绩效考核的运行做基础,主要包括登陆模块,管理员管理,员工管理,薪酬管理,员工可以进行薪酬查询.系统开发环境是Myeclipse,数据库是mysql,基于web访问,简单方面.文档有配套论文等.适用范围\\\"毕业设计,课程设计等\\\" (一)登录模

    2023年04月15日
    浏览(40)
  • Java实现的企业员工考勤管理系统

    目录 一、引言 2 编写目的 2 项目背景 2 二、总体设计 3 2.1运行要求 3 2.2接口设计 3 2.3构架设计 3 2.4基本设计概念和处理流程 3 2.5结构 5 2.6功能需求与各模块之间关系 6 2.6.1基本信息管理模块 6 2.6.2个人出勤管理模块 10 2.6.3出勤管理模块 14 三、数据的逻辑描述 17 3.1 静态数据

    2024年02月09日
    浏览(33)
  • 通用工资管理系统--SQL server课程设计(Java实现+SQL server)

    本科参与项目文档合集: 点击跳转~ General payroll management system 设计题目:通用工资管理系统 专 业:计算机科学与技术 班 级: 19级1班 设 计 人: 安** 指导老师: 刘** 日 期:2021年06月30日 1.1开发环境 数据库系统:Microsoft SQL Server 2019 开发语言:JAVA 数据库连接方式:JDBC连接方

    2024年02月03日
    浏览(39)
  • Java Swing大作业--简易员工管理系统

    @Java Swing简易员工管理系统 系统包括管理员登录页面和主页面设计,在主界面包括员工信息的增删改查功能。 开发环境:eclipse 2022-03 Jdk版本:11 数据库:MySQL 1.创建数据库employees。 2.创建管理员表admin并增加数据。 3.创建员工信息表emp并增加数据。 1.基础层BaseDao 2.管理员Ad

    2024年02月09日
    浏览(32)
  • 基于Java企业员工信息管理系统详细设计和实现

    博主介绍 : ✌ 全网粉丝30W+,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流 ✌ 主要内容: SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、P

    2024年02月02日
    浏览(71)
  • 基于Java员工信息管理系统设计实现(源码+lw+部署文档+讲解等)

    博主介绍 : ✌全网粉丝30W+,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ 🍅 文末获取源码联系 🍅 👇🏻 精彩专栏 推荐订阅 👇🏻 不然下次找不到哟 Java项目精品

    2024年02月09日
    浏览(32)
  • 基于Java的企业员工管理系统的设计与实现(论文+源码)_kaic

    基于Java的企业员工管理系统的设计与实现 摘  要 随着电子信息的飞速发展,计算机已经融入到了生活的各个方面,越来越多的企业开始使用电子计算机来对企业进行管理,信息化的时代已经到来,各个企业无论大小都需要一个信息化的管理系统来对自己公司内部的员工信息

    2024年02月04日
    浏览(44)
  • vue-springboot-java电力员工安全施工培训课程考试管理系统

    本电力员工安全施工培训管理系统是为了提高员工查阅信息的效率和管理人员管理信息的工作效率,可以快速存储大量数据,还有信息检索功能,这大大的满足了员工和管理员这二者的需求。操作简单易懂,合理分析各个模块的功能,尽可能优化界面,让员工和管理员能使用

    2024年02月04日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包