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日

相关文章

  • SpringBoot SpringEL表达式的使用

    SpringEL表达式的使用攻略 1. SpringEL表达式的概述 Spring Expression Language(简称Spring EL)是一种表达式语言,用于在Spring应用程序中访问和操作对象图。它支持在运行时查询和操作对象图。 在Spring Boot应用程序中,可以使用Spring EL表达式来配置应用程序的各种组件,如依赖注入、AOP等…

    Java 2023年6月15日
    00
  • Java中基于Aspectwerkz的AOP

    Java中基于Aspectwerkz的AOP是一种切面编程的技术,它可以在不修改原有业务逻辑代码的情况下,对业务逻辑进行增强,比如添加日志、缓存、事务等。 下面是Java中基于Aspectwerkz的AOP的完整攻略,包含了环境搭建、Aspectj语法介绍、示例说明等内容。 环境搭建 下载Aspectwerkz包:在Aspectwerkz官网下载最新版本的A…

    Java 2023年6月15日
    00
  • spring中的FactoryBean代码示例

    FactoryBean是Spring中一个非常重要的接口,常用于实例化非Bean类型对象或实例化有状态的Bean对象。在使用FactoryBean时,需要实现该接口并实现其中的方法,让Spring容器在初始化Bean时通过FactoryBean实现对Bean的创建和定制化处理。 1. 定义FactoryBean 在Spring中定义FactoryBean需要…

    Java 2023年5月31日
    00
  • SpringBoot自动配置特点与原理详细分析

    一、SpringBoot自动配置特点与原理分析 自动配置原理 SpringBoot的自动配置背后的原理是,通过条件注解来根据已有的bean、属性和类路径等来做出判断,自动调整项目的配置。 自动配置特点 约定优于配置:SpringBoot的自动配置遵循约定优于配置的原则,框架尽量避免使用XML等外置文件进行配置,采用内置默认配置的方式进行配置。 基于条件注解:…

    Java 2023年5月15日
    00
  • SpringBoot默认使用HikariDataSource数据源方式

    Spring Boot 是一种在 Spring 框架基础上开发应用程序的快速,便捷的方式。在 Spring Boot 应用程序中,HikariDataSource 是默认的数据源,以提高应用程序的性能。 Spring Boot 框架中默认使用 HikariDataSource 数据源方式,这是因为 HikariCP 是一个高性能的数据库连接池,它具有以下优点…

    Java 2023年5月20日
    00
  • 完整详解Java开发学习路线指南

    完整详解Java开发学习路线指南 Java是一门非常流行的编程语言,在软件开发领域具有广泛的应用。如果想要成为一名Java开发人员,需要掌握一系列的知识和技能。下面是一个Java开发学习路线的完整攻略,希望可以帮助大家快速入门Java开发。 学习基础知识 Java开发的第一步是掌握基础知识。以下是Java开发初学者需要掌握的几个基本概念: 数据类型 Java…

    Java 2023年5月20日
    00
  • 堆内存和栈内存的区别是什么?

    以下是关于堆内存和栈内存的区别的完整使用攻略: 堆内存和栈内存的区别是什么? 堆内存和栈内存都是计算机内存中的一部分,但它们的使用方式和特点不同。 堆内存是指由程序员手动分配和释放的内存空间,通常用于存储动态分配的数据结构,如数组和对象等。堆内存的大小通常比栈内存大,但是它的分配和释放速度较慢。 栈内存是指由编译器自动分配和释放的内存空间,通常用于存储局部变…

    Java 2023年5月12日
    00
  • Java中SSM+Shiro系统登录验证码的实现方法

    下面我会详细讲解Java中SSM+Shiro系统登录验证码的实现方法。 一、什么是验证码 验证码是一种人机识别技术,通常是在表单提交时对用户输入的内容进行验证。而验证码的实现方式有很多,比较常见的有“图片验证码”和“短信验证码”。 二、验证码的实现 1. 图片验证码 图片验证码是最常用的一种验证码,它是通过随机生成一张图片,使得用户必须输入正确的验证码才能提…

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