Eclipse+Java+Swing+Mysql实现工资管理系统

yizhihongxing

Eclipse+Java+Swing+Mysql实现工资管理系统攻略

1. 系统概述

工资管理系统是企业内部薪资管理的重要组成部分,其任务是集中管理员工的薪资及相关信息。本系统采用Eclipse+Java+Swing+Mysql技术实现,具备以下功能模块:

  1. 登录模块:提供登录界面,验证用户身份。
  2. 员工信息管理:添加、删除员工及修改员工信息。
  3. 薪资管理:计算、修改员工薪资。
  4. 统计分析:统计员工薪资等相关信息。
  5. 数据库管理:备份、恢复数据库。

2. 系统架构

2.1 开发环境

本系统的开发环境及相关工具如下:

  • JDK1.8
  • Eclipse Neon
  • WindowBuilder插件
  • Mysql5.7

2.2 数据库设计

本系统采用Mysql5.7作为后端数据库,共设计了2张数据表:员工信息表和薪资信息表。其中,员工信息表包含员工的基本信息,如员工编号、姓名、性别、部门等;薪资信息表包含员工的薪资信息,如基本工资、奖金等。

2.3 技术选型

本系统采用以下技术实现:

  • Java语言实现系统业务逻辑和界面交互
  • Swing库实现系统界面设计
  • JDBC连接Mysql数据库

3. 系统实现

3.1 系统登录模块

系统登录模块包含一个登录界面,用户输入用户名和密码后,系统将用户的信息通过JDBC连接Mysql进行验证。如果验证成功,则跳转到主界面,否则提示用户名或密码错误。

// 登录界面代码
public class LoginFrame extends JFrame {
    private JTextField usernameField;
    private JPasswordField passwordField;

    public LoginFrame() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setTitle("登录");
        setResizable(false);
        setBounds(100, 100, 360, 240);

        JPanel contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);

        JLabel titleLabel = new JLabel("工资管理系统");
        titleLabel.setHorizontalAlignment(SwingConstants.CENTER);
        titleLabel.setFont(new Font("微软雅黑", Font.PLAIN, 30));
        titleLabel.setBounds(70, 20, 220, 50);
        contentPane.add(titleLabel);

        JLabel usernameLabel = new JLabel("用户名:");
        usernameLabel.setFont(new Font("宋体", Font.PLAIN, 16));
        usernameLabel.setBounds(62, 100, 70, 20);
        contentPane.add(usernameLabel);

        JLabel passwordLabel = new JLabel("密  码:");
        passwordLabel.setFont(new Font("宋体", Font.PLAIN, 16));
        passwordLabel.setBounds(62, 130, 70, 20);
        contentPane.add(passwordLabel);

        usernameField = new JTextField();
        usernameField.setBounds(130, 100, 150, 20);
        contentPane.add(usernameField);
        usernameField.setColumns(10);

        passwordField = new JPasswordField();
        passwordField.setColumns(10);
        passwordField.setBounds(130, 130, 150, 20);
        contentPane.add(passwordField);

        JButton loginButton = new JButton("登录");
        loginButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                if (login(usernameField.getText(), passwordField.getPassword())) {
                    MainFrame frame = new MainFrame();
                    frame.setVisible(true);
                    LoginFrame.this.setVisible(false);
                } else {
                    JOptionPane.showMessageDialog(LoginFrame.this, "用户名或密码错误!", "错误", JOptionPane.ERROR_MESSAGE);
                }
            }
        });
        loginButton.setBounds(130, 170, 80, 25);
        contentPane.add(loginButton);

        JButton cancelButton = new JButton("取消");
        cancelButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                System.exit(0);
            }
        });
        cancelButton.setBounds(200, 170, 80, 25);
        contentPane.add(cancelButton);
    }

    // 验证用户名和密码是否正确
    public boolean login(String username, char[] password) {
        String passwordStr = new String(password);
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        boolean success = false;
        try {
            conn = DbUtils.getConnection();
            pstmt = conn.prepareStatement("select * from user where username=? and password=?");
            pstmt.setString(1, username);
            pstmt.setString(2, passwordStr);
            rs = pstmt.executeQuery();
            if (rs.next()) {
                success = true;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            DbUtils.close(rs, pstmt, conn);
        }
        return success;
    }
}

3.2 员工信息管理模块

员工信息管理模块包含员工信息的添加、删除和修改功能。员工信息以表格的形式展示在界面上,用户点击按钮后,系统将弹出一个对话框进行相应的操作。以下为添加员工和删除员工的代码示例:

// 添加员工操作
public void addEmployee() {
    EmployeeDialog dialog = new EmployeeDialog();
    if (dialog.showDialog() == EmployeeDialog.OK) {
        Employee emp = dialog.getEmployee();
        if (emp != null) {
            Connection conn = null;
            PreparedStatement pstmt = null;
            try {
                conn = DbUtils.getConnection();
                pstmt = conn.prepareStatement("insert into employee (name, sex, dept, position) values (?, ?, ?, ?)");
                pstmt.setString(1, emp.getName());
                pstmt.setString(2, emp.getSex());
                pstmt.setString(3, emp.getDept());
                pstmt.setString(4, emp.getPosition());
                pstmt.executeUpdate();
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                DbUtils.close(pstmt, conn);
            }
            refreshEmployeeTable();
        }
    }
}

// 删除员工操作
public void deleteEmployee() {
    int[] indexs = employeeTable.getSelectedRows();
    if (indexs.length > 0) {
        int option = JOptionPane.showConfirmDialog(MainFrame.this, "确认删除?", "提示", JOptionPane.YES_NO_OPTION);
        if (option == JOptionPane.YES_OPTION) {
            Connection conn = null;
            PreparedStatement pstmt = null;
            try {
                conn = DbUtils.getConnection();
                pstmt = conn.prepareStatement("delete from employee where id=?");
                for (int i = indexs.length - 1; i >= 0; i--) {
                    int index = indexs[i];
                    int id = (int) employeeTable.getValueAt(index, 0);
                    pstmt.setInt(1, id);
                    pstmt.executeUpdate();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                DbUtils.close(pstmt, conn);
            }
            refreshEmployeeTable();
        }
    }
}

3.3 薪资管理模块

薪资管理模块可以对员工的薪资进行计算和修改。系统提供一个计算薪资的按钮,用户点击后,系统将会根据员工的基本工资和奖金计算薪资,结果将会在一个新的窗口中展示。以下为计算薪资的代码示例:

// 计算薪资操作
public void calculateSalary() {
    int index = employeeTable.getSelectedRow();
    if (index >= 0) {
        int id = (int) employeeTable.getValueAt(index, 0);
        String name = (String) employeeTable.getValueAt(index, 1);
        Employee emp = new Employee(id, name);

        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        try {
            conn = DbUtils.getConnection();
            pstmt = conn.prepareStatement("select * from salary where employee_id=?");
            pstmt.setInt(1, id);
            rs = pstmt.executeQuery();
            if (rs.next()) {
                emp.setSalary(rs.getDouble("salary"));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            DbUtils.close(rs, pstmt, conn);
        }

        SalaryDialog dialog = new SalaryDialog(emp);
        if (dialog.showDialog() == SalaryDialog.OK) {
            double salary = dialog.getSalary();
            conn = null;
            pstmt = null;
            try {
                conn = DbUtils.getConnection();
                if (emp.getSalary() > 0) {
                    pstmt = conn.prepareStatement("update salary set salary=? where employee_id=?");
                    pstmt.setDouble(1, salary);
                    pstmt.setInt(2, id);
                    pstmt.executeUpdate();
                } else {
                    pstmt = conn.prepareStatement("insert into salary (employee_id, salary) values (?, ?)");
                    pstmt.setInt(1, id);
                    pstmt.setDouble(2, salary);
                    pstmt.executeUpdate();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                DbUtils.close(pstmt, conn);
            }
            refreshEmployeeTable();
        }
    }
}

3.4 统计分析模块

统计分析模块用来统计员工薪资等相关信息。系统提供一个统计按钮,用户点击后,按照部门进行薪资统计,结果将会在一个新的窗口中展示。以下为统计薪资的代码示例:

// 统计薪资操作
public void calculateSalaryByDept() {
    Map<String, Double> data = new HashMap<String, Double>();

    Connection conn = null;
    PreparedStatement pstmt = null;
    ResultSet rs = null;
    try {
        conn = DbUtils.getConnection();
        pstmt = conn.prepareStatement("select e.dept, s.salary from employee e, salary s where e.id=s.employee_id");
        rs = pstmt.executeQuery();
        while (rs.next()) {
            String dept = rs.getString("dept");
            double salary = rs.getDouble("salary");
            if (data.containsKey(dept)) {
                data.put(dept, data.get(dept) + salary);
            } else {
                data.put(dept, salary);
            }
        }
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        DbUtils.close(rs, pstmt, conn);
    }

    StatisticDialog dialog = new StatisticDialog(data);
    dialog.showDialog();
}

4. 总结

本文以Eclipse+Java+Swing+Mysql为基础,详细讲解了如何实现一个桌面端的工资管理系统。系统采用JDBC连接Mysql数据库,实现了员工信息管理、薪资管理、统计分析等功能模块,并提供了详细的代码示例进行讲解。希望本文对Java开发者以及想要学习Java桌面端开发的读者有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Eclipse+Java+Swing+Mysql实现工资管理系统 - Python技术站

(0)
上一篇 2023年5月30日
下一篇 2023年5月30日

相关文章

  • Spring Boot加密配置文件方法介绍

    下面就为大家详细讲解“Spring Boot加密配置文件方法介绍”。 1. 前置条件 首先需要确保你已经安装了JDK并且配置了环境变量。同时,需要掌握Spring Boot的基本使用和配置知识。 2. 密钥生成 在介绍加密配置文件的方法之前,需要先生成一个密钥。可以使用keytool工具生成密钥。 打开终端或命令行窗口,执行以下命令: keytool -ge…

    Java 2023年6月3日
    00
  • java SpringBoot 分布式事务的解决方案(JTA+Atomic+多数据源)

    下面我将详细讲解“Java SpringBoot 分布式事务的解决方案(JTA+Atomic+多数据源)”的完整攻略。 一、前置知识 在学习Java SpringBoot 分布式事务的解决方案之前,需要掌握以下相关知识: SpringBoot框架开发基础; 数据库事务基础; Java SE 8以及以上版本基础知识。 二、JTA+Atomikos+多数据源实现…

    Java 2023年5月19日
    00
  • 简要分析Java的Hibernate框架中的自定义类型

    接下来我将详细讲解”简要分析Java的Hibernate框架中的自定义类型”的完整攻略。 简介 Java的Hibernate框架是非常流行的ORM框架,它可以帮助Java开发人员轻松和高效的操作关系型数据库。其中一个重要的特性就是类型映射,Hibernate框架支持大部分的Java数据类型和关系型数据库中的数据类型之间的映射。但是有时我们需要对数据类型进行更…

    Java 2023年5月20日
    00
  • 详解Java如何优雅地书写if-else

    下面我将为你详细讲解“详解Java如何优雅地书写if-else”的完整攻略。 一、Java中if-else语句的基本用法 在Java中,if-else语句是一种常见的控制流程语句,用于根据条件是否满足来执行不同的代码。其基本语法如下: if (condition) { // condition为真时执行的语句块 } else { // condition为假…

    Java 2023年5月26日
    00
  • SpringBoot JPA懒加载失效的解决方案(亲测有效)

    下面我将详细讲解“SpringBoot JPA懒加载失效的解决方案(亲测有效)”的完整攻略。 1. 问题描述 在使用SpringBoot框架中,我们常常会使用JPA来进行数据持久化操作,而在使用JPA的过程中,我们可能会遇到懒加载失效的问题。具体来说,就是当我们使用懒加载的注解(如@OneToMany)来关联查询两个实体类时,有时候却发现第二个实体类并没有进…

    Java 2023年5月20日
    00
  • java一个数据整理的方法代码实例

    针对“java一个数据整理的方法代码实例”的完整攻略,我将详细讲解以下几个方面: 1.目标 首先,我们需要明确准备实现什么样的数据整理方法。例如,一个实际需求是我们需要从一份数据集中,提取出某个字段所对应的数据,并对其进行统计分析。那么,我们的目标就是实现一个函数,接收这份数据集和指定的字段名,返回经过处理后的结果。 2.实现思路 在明确目标后,我们需要考虑…

    Java 2023年5月23日
    00
  • Java实现将文件或者文件夹压缩成zip的详细代码

    将文件或者文件夹压缩成zip是Java中的一个常见任务。下面是一份详细的Java代码攻略来实现这个功能。 1. 引入相关依赖 Java提供了ZipOutputStream和ZipEntry这两个类来实现文件或者文件夹压缩成zip的功能,因此需要通过pom文件或者手动导入相关依赖。 <dependency> <groupId>org.a…

    Java 2023年5月31日
    00
  • 微信小程序以ssm做后台开发的实现示例

    下面我将详细讲解如何使用ssm框架进行微信小程序后台开发的实现示例。 一、什么是SSM框架 SSM框架实际上是Spring、SpringMVC和MyBatis三个框架的结合,可以高效稳定地进行Java Web开发。其中,Spring是用于控制Bean的,SpringMVC是用于控制请求的,MyBatis是用于控制数据的。部署方便,使用简单,很适合中小型互联网…

    Java 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部