java实现简单的员工管理系统

设计一个简易的员工管理系统,可以进行员工信息的添加,删除,查询功能要求有GUI界面,体现面向对象编程思想。主体功能如下

(1)可对员工的增改删除

(2)该管理系统只有管理员可以进入,需要输入正确账号和密码才可进入

(3)该系统与数据库相连,可直接实时影响数据库

我使用eclipse编译,首先是连接数据库,要导入与数据库版本匹配的jar包然后按部就班地

使用连接步骤,jar包导入教程

数据库连接程序

导入数据库必要的包,try Class.forName(“com.mysql.jdbc.Driver”)......

我用jdbc驱动,com.mysql.jdbc.Driver 是旧版本五点多的MySQL驱动类名,新版本八点多应使用 com.mysql.cj.jdbc.Driver

连接用语句 try con=DriverManager.getConnection("jdbc:mysql...://...)

useSSL=false 表示不使用SSL连接,根据实际情况可能需要调整,characterEncoding=utf8 设置字符编码为UTF-8。serverTimezone=GMT%2B8 设置时区为GMT+8,可根据实际情况调整

定义员工类,定义员工属性和构造函数

右键点击source可快速生成构造函数

通过JDBC操作MySQL数据库,实现对员工信息的增删查功能然后返回受影响的行数,关闭资源,

public List<Employee> getEmployess() 方法用于从数据库中查询所有员工信息,并将其封装到一个 List<Employee> 中返回

  • 该SQL语句用于从 employee 表中查询所有记录。
  • 调用 connect.getConnection() 方法获取数据库连接。
  • 初始化 PreparedStatement 和 ResultSet 对象。
  • 创建一个 ArrayList 用于存储查询结果。
  • 使用 connection.prepareStatement(sql) 创建 PreparedStatement 对象。
  • 调用 ps.executeQuery() 执行查询,并将结果存储在 ResultSet 对象中。
  • while (re.next()) 遍历结果集中的每一条记录。
  • 从结果集中获取每个字段的值,并创建一个 Employee 对象。
  • 将 Employee 对象添加到列表中
  • 异常处理 .捕获并打印异常信息,关闭资源catch(Exception e){e.printStack Track();finally(

    {connect.close(connection, ps, re);}返回结果return list​​​​​​​

创建主界面(主入口)

导入必要的包

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;

  • java.awt.event.*:用于处理事件,如按钮点击。
  • java.util.List:用于存储查询结果。
  • javax.swing.*:用于创建图形用户界面组件。
  • javax.swing.table.DefaultTableModel:用于创建和管理表格模型。

定义类和成员变量

public class jiemian {
    DefaultTableModel model;
    EmployeeDAO employeeDAO = new EmployeeDAO();

  • DefaultTableModel model:用于存储和管理表格数据。
  • EmployeeDAO employeeDAO:用于操作数据库中的员工信息。

构造方法和布局

jiemian() {
    JFrame jf = new JFrame();
    JTextField name = new JTextField();
    name.setBounds(20, 10, 200, 30);
    JButton username = new JButton("搜索");
    username.setBounds(240, 10, 70, 30);
    Object[] header = {"员工ID", "员工姓名", "年龄", "性别", "职位", "工资", "生日", "地址", "手机号码"};
    model = new DefaultTableModel(header, 0);
    JTable jt = new JTable(model);
    JScrollPane js = new JScrollPane(jt);
    js.setBounds(20, 50, 800, 600);
    initRowData();
    JButton del = new JButton("删除员工");
    del.setBounds(20, 680, 100, 30);
    JLabel namelabe = new JLabel("员工姓名: ");
    JTextField userfield = new JTextField();
    namelabe.setBounds(860, 50, 100, 30);
    userfield.setBounds(950, 50, 200, 30);
    JLabel em = new JLabel("员工信息");
    em.setBounds(950, 0, 1000, 30);
    JLabel phlb = new JLabel("手机号码: ");
    JTextField phfd = new JTextField();
    phlb.setBounds(860, 100, 100, 30);
    phfd.setBounds(950, 100, 200, 30);
    JLabel agelb = new JLabel("年龄: ");
    JTextField agefd = new JTextField();
    agelb.setBounds(860, 200, 100, 30);
    agefd.setBounds(950, 200, 200, 30);
    JLabel sexlb = new JLabel("性别: ");
    String[] sexString = {"男", "女"};
    JComboBox<String> sexq = new JComboBox<String>(sexString);
    sexlb.setBounds(860, 150, 100, 30);
    sexq.setBounds(950, 150, 200, 30);
    JLabel salb = new JLabel("工资: ");
    JTextField safd = new JTextField();
    salb.setBounds(860, 250, 100, 30);
    safd.setBounds(950, 250, 200, 30);
    JLabel polb = new JLabel("职位: ");
    JTextField pofd = new JTextField();
    polb.setBounds(860, 300, 100, 30);
    pofd.setBounds(950, 300, 200, 30);
    JLabel bolb = new JLabel("出生日期: ");
    JTextField bofd = new JTextField();
    bolb.setBounds(860, 350, 100, 30);
    bofd.setBounds(950, 350, 200, 30);
    JLabel adlb = new JLabel("地址: ");
    JTextField adfd = new JTextField();
    adlb.setBounds(860, 400, 100, 30);
    adfd.setBounds(950, 400, 200, 30);
    JLabel idlb = new JLabel("ID: ");
    JTextField idfd = new JTextField();
    idlb.setBounds(860, 450, 100, 30);
    idfd.setBounds(950, 450, 200, 30);
    JButton add = new JButton("新增员工");
    add.setBounds(950, 500, 100, 30);
    jf.add(add);
    jf.add(idfd);
    jf.add(idlb);
    jf.add(adfd);
    jf.add(adlb);
    jf.add(bofd);
    jf.add(bolb);
    jf.add(pofd);
    jf.add(polb);
    jf.add(safd);
    jf.add(salb);
    jf.add(agelb);
    jf.add(agefd);
    jf.add(em);
    jf.add(sexlb);
    jf.add(sexq);
    jf.add(phlb);
    jf.add(phfd);
    jf.add(namelabe);
    jf.add(userfield);
    jf.add(del);
    jf.add(js);
    jf.add(username);
    jf.add(name);
    jf.setTitle("员工管理系统");
    jf.setBounds(400, 100, 1200, 800);
    jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    jf.setLayout(null);
    jf.setVisible(true);

  • 创建并配置各种Swing组件,如文本框、按钮、标签、表格等。
  • 设置组件的位置和大小。
  • 将组件添加到JFrame中。

搜索按钮的事件处理

username.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        String username = name.getText();
        List<Employee> list = employeeDAO.getEmployessBy(username);
        model.getDataVector().clear();
        for (int i = 0; i < list.size(); i++) {
            Employee employee = list.get(i);
            Object[] rowData = {employee.emID, employee.name, employee.getAge(), employee.getGender(), employee.getPosition(),
                    employee.getSalary(), employee.getBirthday(), employee.getAddress(), employee.getPhone()};
            model.addRow(rowData);
        }
    }
});

  • 当用户点击“搜索”按钮时,获取输入的姓名,调用getEmployessBy方法查询员工信息。
  • 清空表格数据,并将查询结果添加到表格中。

添加按钮的事件处理

add.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        String name = namelabe.getText();
        int phone = Integer.valueOf(phfd.getText());
        String sex = (String) sexq.getSelectedItem();
        int age = Integer.valueOf(agefd.getText());
        Double salary = Double.valueOf(safd.getText());
        String address = adfd.getText();
        String position = pofd.getText();
        String birthday = bofd.getText();
        int id = Integer.valueOf(idfd.getText());
        Employee employee = new Employee(id, name, age, sex, position, salary, birthday, address, phone);
        try {
            int num = employeeDAO.addEmployee(employee);
            if (num == 1) {
                JOptionPane.showMessageDialog(jf, "添加成功", "提示", JOptionPane.INFORMATION_MESSAGE);
            }
            initRowData();
        } catch (Exception e2) {
            JOptionPane.showMessageDialog(jf, "手机号已存在", "提示", JOptionPane.INFORMATION_MESSAGE);
        }
    }
});

  • 当用户点击“新增员工”按钮时,获取输入的员工信息,创建Employee对象。
  • 调用addEmployee方法添加员工信息到数据库。
  • 如果添加成功,显示提示信息并刷新表格数据。

删除按钮的事件处理

del.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        int index = jt.getSelectedRow();
        if (index == -1) {
            JOptionPane.showMessageDialog(jf, "请选择员工", "提示", JOptionPane.INFORMATION_MESSAGE);
        } else {
            int emID = (int) jt.getValueAt(index, 0);
            int num = JOptionPane.showConfirmDialog(jf, "是否删除", "提示", JOptionPane.OK_CANCEL_OPTION);
            if (num == 0) {
                int ret = employeeDAO.delEmployee(emID);
                if (ret > 0) {
                    jt.clearSelection();
                    initRowData();
                }
            }
        }
    }
});
  • 当用户点击“删除员工”按钮时,获取选中的员工行。
  • 如果未选中任何行,显示提示信息。
  • 否则,获取选中的员工ID,弹出确认对话框。
  • 如果用户确认删除,调用delEmployee方法删除员工信息,并刷新表格数据。

初始化表格数据的方法

public void initRowData() {
    model.getDataVector().clear();
    List<Employee> list = employeeDAO.getEmployess();
    for (int i = 0; i < list.size(); i++) {
        Employee employee = list.get(i);
        Object[] rowData = {employee.emID, employee.name, employee.getAge(), employee.getGender(), employee.getPosition(),
                employee.getSalary(), employee.getBirthday(), employee.getAddress(), employee.getPhone()};
        model.addRow(rowData);
    }
}

  • 清空表格数据,并从数据库中获取所有员工信息。
  • 将员工信息添加到表格中。

主方法

public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            new LoginFrame().setVisible(true);
        }
    });
}

  • 使用SwingUtilities.invokeLater确保在事件调度线程中创建和显示登录窗口。

登录界面(loginFrame)

倒入必要的包

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

​​​​​​​​​​​​​​

定义类和成员变量

public class LoginFrame extends JFrame {
    private JTextField usernameField;
    private JPasswordField passwordField;
    private JButton loginButton;
  • LoginFrame 继承自 JFrame,表示一个窗口。
  • usernameField:用于输入用户名的文本框。
  • passwordField:用于输入密码的密码框。
  • loginButton:用于登录的按钮。

构造方法

public LoginFrame() {
    setTitle("管理员登录");
    setSize(300, 150);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setLocationRelativeTo(null);
    setLayout(null);
  • setTitle("管理员登录"):设置窗口标题为“管理员登录”。
  • setSize(300, 150):设置窗口大小为300x150像素。
  • setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE):设置关闭窗口时退出应用程序。
  • setLocationRelativeTo(null):将窗口居中显示。
  • setLayout(null):设置布局管理器为空,使用绝对定位。

创建和添加组件

JLabel usernameLabel = new JLabel("用户名:");
usernameLabel.setBounds(20, 20, 80, 25);
add(usernameLabel);

usernameField = new JTextField(20);
usernameField.setBounds(100, 20, 160, 25);
add(usernameField);

JLabel passwordLabel = new JLabel("密码:");
passwordLabel.setBounds(20, 50, 80, 25);
add(passwordLabel);

passwordField = new JPasswordField(20);
passwordField.setBounds(100, 50, 160, 25);
add(passwordField);

loginButton = new JButton("登录");
loginButton.setBounds(100, 80, 80, 25);
add(loginButton);
  • 创建并配置各种Swing组件,如标签、文本框、密码框和按钮。
  • 设置组件的位置和大小。
  • 将组件添加到JFrame中。

登录按钮的事件处理

loginButton.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        String username = usernameField.getText();
        String password = new String(passwordField.getPassword());

        // 这里应该进行实际的用户名和密码验证
        if ("123".equals(username) && "123".equals(password)) {
            dispose(); // 关闭登录窗口
            new jiemian(); // 打开主界面
        } else {
            JOptionPane.showMessageDialog(LoginFrame.this, "用户名或密码错误", "错误", JOptionPane.ERROR_MESSAGE);
        }
    }
});
  • 当用户点击“登录”按钮时,获取输入的用户名和密码。
  • 进行简单的用户名和密码验证(这里硬编码了用户名和密码为“123”)。
  • 如果验证通过,调用 dispose() 方法关闭登录窗口,并创建并显示主界面 jiemian
  • 如果验证失败,弹出错误提示对话框

ps:我一共是分了五个文件写,每个大标题对应一个文件,主入口是第四个文件,其中麻烦的的就是jar包导入和数据库连接程序,还有监听器设计需要数据库相关知识,这是我大一的期末作业,费了很大劲才完成,希望能给带来大家一点帮助,最后创作不易,希望各位能多多支持

  • 14
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值