设计一个简易的员工管理系统,可以进行员工信息的添加,删除,查询功能要求有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包导入和数据库连接程序,还有监听器设计需要数据库相关知识,这是我大一的期末作业,费了很大劲才完成,希望能给带来大家一点帮助,最后创作不易,希望各位能多多支持