行业知识
数据库系统课设--人事管理系统
���录
前言
一,课程设计的目的
二,总体设计
1 系统需求分析
1.1 系统功能分析
1.2 系统功能模块设计(划分)
1.3 与其它系统的关系
1.4 数据流程图
2 数据库设计
2.1 数据库需求分析
2.2 数据库概念结构设计
2.3 数据库逻辑结构设计
2.4 数据库的建立
2.4.1 数据库的建立
2.4.2 初始数据的输入
3 各功能模块的设计与实现
3.1 功能说明
3.2 用户界面设计
3.3 各功能模块的实现
4 系统实现
4.2 加密模块
4.3 登陆模块
4.4 管理模块
4.5 新员工档案录入模块
4.6 人事变更模块
4.7 管理员员工档案查询修改模块
4.8 员工自身信息查询修改模块
4.9 数据库代码
4.10 数据库表结构
5 界面图预览
5.1 登录界面
5.2 管理界面
5.3 新员工档案录入界面
5.4 人事变更界面
5.5 管理员员工档案查询修改界面
5.6 员工自身信息查询修改界面
前言
2023.7.30,鉴于大家都要数据库代码,所以重新更新了4.9数据库代码部分。
2023.11.18,鉴于许多人问数据库部分,新增数据库表结构部分4.10数据库表结构
本博客内容为课设内容,在这里仅提供思路和代码给大家参考,请不要轻易抄袭,最好理解代码并自己实现题目的要求,锻炼自己的编程和逻辑能力。另外,本次的课程设计我是用命令行操作mysql数据库,使用IDEA编写java程序的。
一,课程设计的目的
数据库系统课程设计是为了配合学习数据库系统原理及应用开发而设置的,是计算机科
学与技术、大数据、信息安全、物联网工程、软件工程、智能制造等专业集中实践的教学环
节,是将关系数据库理论知识转化为解决实际问题能力的重要环节。数据库系统课程设计目
的在于加深对关系数据库理论知识的理解,通过使用具体的 DBMS,掌握一种实际的数据
库管理系统并掌握其操作技术,熟练掌握使用数据库前端开发工具(如 VB、C++、Java、
JSP、Delphi、PowerBuilder 等),进一步提高同学们运用数据库技术解决实际问题的能力。
二,总体设计
企业人事管理系统主要用于员工个人资料的录入、职务变动的记录和管理。使用人事管理系统,便于公司领导掌握人员的动向,及时调整人才的分配。
1 系统需求分析
1.1 系统功能分析
人事管理系统主要有以下几项功能要求:
-
新员工资料的输入。
-
自动分配员工号,并且设置初始的用户密码。
-
人事变动的详细记录,包括岗位和部门的调整。
-
员工信息的查询和修改,包括员工个人信息和密码等。
1.2 系统功能模块设计(划分)
根据系统功能要求,可以将系统分解成几个模块来
分别设计应用程序界面,如图1 所示。
1.3 与其它系统的关系
本系统是公司管理信息系统的基础部分。为其他子系统,如考勤管理系统、工资管理系统和员工培训系统,提供员工的基本信息。同时为其它系统提供了员工登录的密码认证和权限分配功能。
1.4 数据流程图
人事信息管理系统的数据流程如图2 所示,所有数据由人事科管理人员输入。
2 数据库设计
2.1 数据库需求分析
根据数据流程图,可以列出以下数据项和数据结构:
-
员工信息:员工号、密码、权限、姓名、性别、生日、专业、通讯地址、 电话、email、当前状态、其他。
-
人事变动:记录号、员工、变动、详细描述。
-
所需的外部数据支持:
-
部门设置:部门编号、名称......
2.2 数据库概念结构设计
图3 是本系统所需数据的 E-R 模型图。
2.3 数据库逻辑结构设计
根据系统E—R 图,本系统需要有 2 个数据表分别来存放员工个人信息和人事变动记录。并且需要 1 个外部数据表(部门信息)的支持。同时部分记录字段需要用代码来表示,因此需要 3 个代码表来分别记录教育程度、职务和人事变更的代码。这 6 个数据表的结构如表 1 到表 6 所示。
2.4 数据库的建立
2.4.1 数据库的建立
创建需要一个数据库即可
2.4.2 初始数据的输入
本系统中需要输入的初始数据包括:部门信息、受教育程度代码、职务代码和人事变动代码。受教育程度代码和人事变动代码如表7 到表 8 所示,部门信息代码和职务代码的设置如图4 所示。
图4、部门信息代码和职务代码
3 各功能模块的设计与实现
3.1 功能说明
1、增加新员工
2、人事变动
3、员工信息查询修改
4、加密模块
5、员工登录
3.2 用户界面设计
完成数据库创建和功能说明以后,我们可以进行下一步工作,即设计用户界面。我们把人事信息管理系统的窗体分以下成 6 个主要部分。
1、主窗口的创建
2、增加新员工窗体的创建
3、人事变动窗体的创建
4、员工信息查询修改窗体的创建
5、加密模块的创建
6、登录窗口的创建
3.3 各功能模块的实现
1、增加新员工的实现
2、人事变动的实现
3、员工信息查询修改的实现
4、加密模块的实现
5、员工登录的实现
4 系统实现
4.1 数据库连接模块
import java.sql.*;import java.util.ArrayList;import java.util.List;public class DbProcess{ Connection connection = null; ResultSet rs = null; //mysql数据库url String userMySql="root"; String passwordMySql="xxxx";//xxxx表示自己的数据库密码 String urlMySql = "jdbc:mysql://localhost:3306/CourseDesign?user=" +userMySql+"&password="+passwordMySql + "&serverTimezone=UTC&useUnicode=true&characterEncoding=gbk"; //sqlserver数据库url //String urlSqlServer = "jdbc:sqlserver://localhost:1433;integratedSecurity=true;DatabaseName=InfoDb"; public DbProcess() { try { //mysql数据库设置驱动程序类型 Class.forName("com.mysql.cj.jdbc.Driver"); System.out.println("mysql数据库驱动加载成功"); //sqlserver数据库设置驱动程序类型 //Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); //System.out.println("sqlserver数据库驱动加载成功"); } catch(java.lang.ClassNotFoundException e) { e.printStackTrace(); } } public void connect(){ try{ //mysql数据库 connection = DriverManager.getConnection(urlMySql); //sqlserver数据库 //connection = DriverManager.getConnection(urlSqlServer); if(connection!=null){ System.out.println("数据库连接成功"); } } catch(Exception e){ e.printStackTrace(); } } public void disconnect(){ try{ if(connection != null){ connection.close(); connection = null; System.out.println("数据库断开成功"); } } catch(Exception e){ e.printStackTrace(); } } public ResultSet executeQuery(String sql) { try { System.out.println("executeQuery(). sql = " + sql); PreparedStatement pstm = connection.prepareStatement(sql); // 执行查询 rs = pstm.executeQuery(); } catch(SQLException ex) { ex.printStackTrace(); } return rs; } //插入 //executeUpdate 的返回值是一个整数,指示受影响的行数(即更新计数)。 //executeUpdate用于执行 INSERT、UPDATE 或 DELETE 语句 //以及 SQL DDL(数据定义语言)语句,例如 CREATE TABLE 和 DROP TABLE。 //执行增、删、改语句的方法 public int executeUpdate(String sql) { int count = 0; connect(); try { Statement stmt = connection.createStatement(); count = stmt.executeUpdate(sql); } catch(SQLException ex) { System.err.println(ex.getMessage()); } disconnect(); return count; }}4.2 加密模块
import java.math.BigInteger;public class Md5 { public static String md5(String str){ BigInteger bStr = new BigInteger(str); BigInteger B = new BigInteger("654321"); System.out.println("bStr="+bStr); System.out.println(B.xor(bStr)); return String.valueOf(B.xor(bStr)); }}4.3 登陆模块
import javax.swing.*;import javax.swing.table.DefaultTableModel;import java.awt.*;import java.awt.event.*;import java.sql.ResultSet;import java.sql.SQLException;public class Login extends JFrame implements ActionListener{ // 定义组件 JLabel jLPersonnelManagement = null;//人事管理系统 JLabel jLLoginUser = null;//登录工号 JLabel jLLoginPassword = null;//登录密码 JLabel jLLoginStatus = null;//身份 JTextField jTFLoginUser = null;//用户框 JPasswordField jPFLoginPassword = null;//密码框 JButton jBLogin = null;//登录 JButton jBExit = null;//退出 JComboBox jCBSelectUser = null;//用户选择 JPanel jP1, jP2,jP3,jP4,jP5 = null; JPanel jP= null; JScrollPane LoginJScrollPane = null; private static DbProcess LdbProcess; private static Manage M; private static Employee E; private static Md5 md5; String SelectUserStr = "管理员"; public Login() { this.md5 = new Md5(); // 创建标签组件 jLPersonnelManagement = new JLabel("人事管理系统"); jLPersonnelManagement.setFont(new Font("宋体",Font.BOLD,25)); jLLoginUser = new JLabel("工号:"); jLLoginUser.setFont(new Font("宋体",Font.BOLD,15)); jLLoginPassword = new JLabel("密码:"); jLLoginPassword.setFont(new Font("宋体",Font.BOLD,15)); jLLoginStatus = new JLabel("身份:"); jLLoginStatus.setFont(new Font("宋体",Font.BOLD,15)); jTFLoginUser = new JTextField(15);//用户 jPFLoginPassword = new JPasswordField(15);//密码 jBLogin = new JButton("登录"); jBLogin.setFont(new Font("宋体",Font.BOLD,15)); jBExit = new JButton("退出"); jBExit.setFont(new Font("宋体",Font.BOLD,15)); // 设置监听 jBLogin.addActionListener(this); jBExit.addActionListener(this); jCBSelectUser = new JComboBox();//查询字段 jCBSelectUser.setFont(new Font("宋体",Font.BOLD,15)); //添加选项 jCBSelectUser.addItem("管理员"); jCBSelectUser.addItem("普通员工"); jCBSelectUser.addItemListener(new ItemListener() {//下拉框事件监听 public void itemStateChanged(ItemEvent event) { switch (event.getStateChange()) { case ItemEvent.SELECTED: SelectUserStr = (String) event.getItem(); System.out.println("选中:" + SelectUserStr); break; case ItemEvent.DESELECTED: System.out.println("取消选中:" + event.getItem()); break; } } }); LoginJScrollPane = new JScrollPane(); jP1 = new JPanel(); jP2 = new JPanel(); jP3 = new JPanel(); jP4 = new JPanel(); jP5 = new JPanel(); jP = new JPanel(); jP1.add(jLPersonnelManagement); jP1.setLayout(new FlowLayout(FlowLayout.CENTER)); jP1.setPreferredSize(new Dimension(20,85)); jP2.add(jLLoginUser); jP2.add(jTFLoginUser); jP2.setLayout(new FlowLayout(FlowLayout.CENTER)); jP2.setPreferredSize(new Dimension(20,85)); jP3.add(jLLoginPassword); jP3.add(jPFLoginPassword); jP3.setLayout(new FlowLayout(FlowLayout.CENTER)); jP3.setPreferredSize(new Dimension(20,85)); jP4.add(jLLoginStatus); jP4.add(jCBSelectUser); jP4.setLayout(new FlowLayout(FlowLayout.CENTER)); jP4.setPreferredSize(new Dimension(20,85)); jP5.add(jBLogin); jP5.add(jBExit); jP5.setLayout(new FlowLayout(FlowLayout.CENTER)); jP5.setPreferredSize(new Dimension(20,85)); jP.setLayout(new GridLayout(5, 1)); jP.add(jP1); jP.add(jP2); jP.add(jP3); jP.add(jP4); jP.add(jP5); this.add("North",LoginJScrollPane); this.add("South",jP); this.setLayout(new BorderLayout()); this.add(jP,BorderLayout.SOUTH); this.setTitle("登录界面"); this.setSize(460, 500); this.setLocation(450, 100); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); this.setResizable(false); LdbProcess = new DbProcess(); } public void actionPerformed(ActionEvent e) { if(e.getActionCommand().equals("登录") &&!jTFLoginUser.getText().isEmpty() &&!String.valueOf(jPFLoginPassword.getPassword()).equals("")){ String sID = jTFLoginUser.getText().trim(); String sPassword = new String(jPFLoginPassword.getPassword()); System.out.println("actionPerformed(). 登录"+sPassword); loginProcess(sID,sPassword,SelectUserStr); jPFLoginPassword.setText(""); }else if(e.getActionCommand().equals("退出")) { System.out.println("actionPerformed(). 退出"); System.exit(0); } } public void loginProcess(String sID, String sPassword,String userStr){ try{ // 建立查询条件 String sql = "select * from staff where "; sql = sql + "sID"; sql = sql + " = "; sql = sql + "'" + sID + "';"; System.out.println("queryProcess(). sql = " + sql); LdbProcess.connect(); ResultSet rs = LdbProcess.executeQuery(sql); rs.next(); if(rs.getString(14).equals("T")){ if(this.md5.md5(sPassword).equals(rs.getString(2))){ if(rs.getString(3).equals("普通员工")){ if(userStr.equals("普通员工")){ JOptionPane.showMessageDialog(null, "登录成功!","提示",JOptionPane.INFORMATION_MESSAGE); this.dispose(); this.E = new Employee(rs); }else{ JOptionPane.showMessageDialog(null, "用户身份错误,请重新选择!","错误",JOptionPane.ERROR_MESSAGE); } } if(rs.getString(3).equals("管理员")){ JOptionPane.showMessageDialog(null, "登录成功!","提示",JOptionPane.INFORMATION_MESSAGE); this.dispose(); if(userStr.equals("普通员工")){ this.E = new Employee(rs); }else if(userStr.equals("管理员")){ this.M = new Manage(); } } }else{ JOptionPane.showMessageDialog(null, "用户密码错误,请重新输入!","错误",JOptionPane.ERROR_MESSAGE); } }else{ JOptionPane.showMessageDialog(null, "你已非本公司员工!","错误",JOptionPane.ERROR_MESSAGE); } LdbProcess.disconnect(); }catch(SQLException sqle){ System.out.println("sqle = " + sqle); JOptionPane.showMessageDialog(null, "你输入的工号不存在,请从新输入!","错误",JOptionPane.ERROR_MESSAGE); }catch(Exception e){ System.out.println("e = " + e); JOptionPane.showMessageDialog(null, "你输入的工号不存在,请从新输入!","错误",JOptionPane.ERROR_MESSAGE); } }}4.4 管理模块
import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.sql.ResultSet;import java.sql.SQLException;public class Manage extends JFrame implements ActionListener{ // 定义组件 JButton jBInsert = null;//员工加入 JButton jBChange = null;//人事变更 JButton jBQueryUpdate = null;//查询修改 //JButton jBChangeRecord = null;//变更记录 JPanel jP1, jP2,jP3,jP4 = null; JPanel jP = null; JScrollPane ManageJScrollPane = null; private static DbProcess MdbProcess; private static PersonnelChange P; private static NewEmployee N; private static DatabaseCourseDesign D; public Manage() { MdbProcess = new DbProcess(); int pid=100000; try{ String sql ="select max(pID) from personnel;"; MdbProcess.connect(); ResultSet rs = MdbProcess.executeQuery(sql); if(rs.next()){ if(pid
-
-
-
-
-
-
-
上一篇:dedecms怎么仿站?