Eclipse+Java+Swing+Mysql实现工资管理系统攻略
1. 系统概述
工资管理系统是企业内部薪资管理的重要组成部分,其任务是集中管理员工的薪资及相关信息。本系统采用Eclipse+Java+Swing+Mysql技术实现,具备以下功能模块:
- 登录模块:提供登录界面,验证用户身份。
- 员工信息管理:添加、删除员工及修改员工信息。
- 薪资管理:计算、修改员工薪资。
- 统计分析:统计员工薪资等相关信息。
- 数据库管理:备份、恢复数据库。
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技术站