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

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日

相关文章

  • javaweb实现文件上传与下载功能

    请看以下内容: javaweb实现文件上传与下载功能攻略 1. 上传功能的实现 1.1 前端的实现 上传功能需要用户选择文件,并将文件发送到后台。我们可以通过HTML表单及其相关API来实现此功能。以下是一段HTML代码片段,用于实现文件上传输入框: <form action="/upload" method="post&…

    Java 2023年5月20日
    00
  • Java中实现代码优化的技巧分享

    Java中实现代码优化的技巧分享 在编写Java代码时,我们可能会遇到一些性能上的问题,比如程序运行速度变慢、内存使用过多等。如果遇到这样的问题,代码优化就是一个非常好的解决方案。本文将分享一些Java中实现代码优化的技巧。 1. 减少对象的创建 创建对象也是消耗资源的一个过程,因此我们可以通过减少对象的创建次数来提高程序的执行效率。具体实现方法如下: 1.…

    Java 2023年5月18日
    00
  • SpringBoot自定义starter实例代码

    SpringBoot自定义starter实例代码 在SpringBoot中,我们可以使用自定义starter来封装一些常用的功能,以便于在多个项目中复用。本文将详细讲解SpringBoot自定义starter实例代码的完整攻略,并提供两个示例。 1. 创建自定义starter 以下是创建自定义starter的基本流程: 创建一个Maven项目,并添加以下依赖…

    Java 2023年5月15日
    00
  • spring事务隔离级别、传播机制以及简单配置方式

    Spring事务管理 Spring提供了强大的事务管理服务,可以方便的实现事务控制,避免了在代码中写大量的底层JDBC事务代码。本篇文章将详细说明Spring事务的隔离级别、传播机制以及简单配置方式。 事务隔离级别 事务隔离级别是数据库保证数据一致性的重要手段,在并发访问数据库时可以防止不同线程对同一个数据产生相互影响的问题。Spring框架支持设置五个事务…

    Java 2023年5月20日
    00
  • Java 方法(方法的定义,可变参数,参数的传递问题,方法重载,方法签名)

    Java方法 Java方法是一段被命名过并执行了一些特定任务的代码。它是类的一部分,并且能够被其他方法或类通过方法调用语句来调用并执行任务。方法可以减少重复代码并有益于代码的重用。在本文中,我们将会详细讲解Java方法的定义,可变参数,参数的传递问题,方法重载和方法签名。 方法的定义 在Java中,方法定义由方法名称,返回类型,参数列表(可选)和方法体组成。…

    Java 2023年5月26日
    00
  • spring boot打jar包发布的方法

    强烈建议在开始发布jar包之前先确保项目的可运行性,即进行单元测试和集成测试。 一、添加Maven插件 在pom.xml文件中添加如下代码,以添加Maven插件: <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId&g…

    Java 2023年5月15日
    00
  • 如何选择合适的Java垃圾回收器?

    选择合适的Java垃圾回收器对于应用的性能和稳定性至关重要。以下是如何选择合适的Java垃圾回收器的完整使用攻略: 1. 确定需求和限制 在选择垃圾回收器之前,需要先了解应用的需求和限制。例如,需要考虑的因素包括: 应用的类型和规模 应用的性能要求 应用的内存消耗 应用的响应时间等 2. 了解常见的 Java 垃圾回收器 Java 虚拟机提供了多种垃圾回收器…

    Java 2023年5月11日
    00
  • Spring Security权限管理小结

    Spring Security 权限管理小结 Spring Security 是一个强大的安全框架,提供了许多功能来帮助我们保护应用程序,其中最重要的功能之一是权限管理。在这篇文章中,我们将深入了解 Spring Security 的权限管理机制。 权限管理的概述 在 Spring Security 中,权限管理是通过访问控制列表(Access Contro…

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