人事管理系统实验报告

上传人:wu****ei 文档编号:157468419 上传时间:2022-09-29 格式:DOC 页数:27 大小:474.02KB
返回 下载 相关 举报
人事管理系统实验报告_第1页
第1页 / 共27页
人事管理系统实验报告_第2页
第2页 / 共27页
人事管理系统实验报告_第3页
第3页 / 共27页
点击查看更多>>
资源描述
湖南科技大学计算机科学与工程学院数据库系统课程设计报告 题目:人事管理系统 年级专业: 计算机科学与技术 学 号: * 姓 名: * 指导老师: * 完成时间: 2014.01.03 第一章 系统需求分析1.1系统功能分析 人事管理系统主要有以下几项功能要求:l 新员工资料的输入l 自动分配员工,并且设置初始的用户密码l 人事变动的详细记录,包括岗位和部门的调整l 员工信息的查询和修改,包括员工个人信息和密码等l 查询人事变更记录1.2 系统功能模块设计 根据系统功能需求,可以将系统分解成几个模块来分别设计应用程序设计界面,如下图所示: 人事管理系统 新员工档案输入增加人事变更记录员工档案查询查询人事记录1.3 与其它系统的关系 本系统是公司管理信息系统的基础部分。为其他子系统,如考勤管理系统、工资管理系统和员工培训系统,提供员工的基本信息。同时为其它的系统提供了员工登录的密码认定和权限分配功能。1.4 数据流程图 人事信息管理系统的数据流程如图所示,所有数据有人事科管理员输入。人事科招聘新员工分配员工号员工信息数据员工辞退人事变更记录岗位调整个人信息查询个人信息查询结果1.5 数据库需求分析 根据数据流程图,可以列出以下数据项和数据结构:l 员工信息:员工号、密码、权限、姓名、性别、生日、所在部门、职务、受教育程度、专业、家庭住址、电话、电子邮箱、当前状态、备注l 人事变更记录:记录号、员工号、变动、详细记录。 所需的外部数据支持:l 部门信息:部门编号、名称、部门经理、简介l 受教育程度代码表:代码、说明l 职务代码表:职务编号、 名称l 人事变动代码:代码、描述第二章 概念结构设计2.1 概念结构设计的步骤概念结构的设计可分为两步:第一步是抽象数据并设计局部视图。第二步是集成局部视图,得到全局的概念结构。员工实体E-R图:员工 备注员工号性别生日当前状态密码姓名所在部门职务电子邮箱联系电话家庭住址专业技能受教育程度用户权限部门实体E-R图:部门编号部门名称简介部门部门经理职务代码表E-R图:职务职务编号职务名称教育程度代码表E-R图 :教育程度代码说明人事变动代码表E-R图 代码描述 人事变动代码人事变更记录表E-R图:人事变更记录记录编号员工号详细记录变更代码实体E-R总图: 1员工教育程度人事变更记录部门拥有存在工作存在职务m111m1m拥有11第三章 逻辑结构设计 3.1 E-R图向关系模型的转换将总体关系的E-R图转换为关系模型: 员工(员工号、密码、用户权限、姓名、性别、生日、所在部门、职务、受教育程度、专业技能、家庭住址、联系电话、电子邮箱、当前状态、 备注)部门(部门号,部门名称, 部门经理, 简介) 职务(职务号、职务名称) 教育程度(代码,说明)人事变更记录(记录编号,员工号,变更代码,详细记录)人事变动代码(代码, 描述) 第四章 物理结构设计4.1数据表的物理结构 根据系统E-R图,本系统需要有两个数据分别来存放工人个人信息和人事变动记录。并且需要一个外部数据表(部门信息)的支持。同时部分记录字段需要用代码来表示,因此需要3个代码来分别记录教育程度、职务和人事变更的代码。这个6个数据表的结构如表1到表6所示。 表1 PERSON 员工个人信息表 字段名数据类型长度是否为空说明IDint4NOT NULL员工号(主关键字) PASSWDvarchar50NOT NULL密码AUTHORITYvarchar50NOT NULL用户权限NAMEvarchar50NOT NULL姓名SEXint 4NOT NULL性别BIRTHDAYvarchar50NULL生日DEPARTMENTint 4NOT NULL所在部门JOBint4NOT NULL职务EDU_LEVEL int4NOT NULL受教育程度SPCIALTYvarchar50NULL专业技能ADDRESSvarchar50NULL家庭住址TELvarchar50NULL联系电话 EMAILvarchar50NULL电子邮箱 STATEbit1NOT NULL当前状态(T-员工、F-非员工) REMARKtext16NULL备注 表2 PERSONNEL 人事变更记录表 字段名数据类型长度是否为空说明IDint4NOT NULL记录编号PERSONint4NOT NULL员工号CHANGEint4NOT NULL变更代码DESCRIPTIONtext16NULL详细记录 表3 EDU_LEVEL受教育程度代码表字段名数据类型长度是否为空说明CODEint 4NOT NULL代码DESCRIPTIONvarchar50 NULL描述 表4 JOB 职务代码表 字段名 数据类型 长度是否为空说明CODE int4NOT NULL 代码DESCRIPTIONvarchar50NULL描述 表5 PERSONNEL_CHANGE 人事变动代码表字段名数据类型长度是否为空说明CODEint 4NOT NULL代码DESCRIPTIONvarchar50 NULL描述 表6DEPANTMENT 部门信息表 字段名 数据类型长度 是否为空说明IDINT4NOT NULL部门编号NAMEVARCHAR50NOT NULL部门名称MANAGERINT4NOT NULL部门经理INTROVARCHAR 50NULL简介第五章 界面设计,主要模块算法设计等5.1登入界面的设计如下图:登入模块算法设计:获取界面上的输入的用户名、密码和选择身份,连接数据库;把获得的数据与数据库员工表里面的数据进行比较,如果正确则登入进去,否则提示错误。5.2管理员的主界面的设计如下图:5.3新员工档案输入界面如下图:新员工档案输入模块算法设计:随机给员工分配员工编号,给定一个默认密码,然后获取界面上的数据写入数据库,并且弹出一个增加人事变更记录的界面,记录新员工加入一些描述信息并写入数据库的人事变更记录表。5.4增加人事变更记录界面如下图:子界面如下图:显示员工部门和职务信息:显示员工的状态:增加人事变更记录模块算法设计:随机产生记录编号,获取界面上员工号数据。然后根据选择的变更原因:u 如果是新员工加入,与数据库员工表里面的数据判断该员工编号是否存在,如果没有,则弹出新员工档案输入界面输入员工信息,然后输入详细记录并存入数据库人事变更表中。u 如果是职务变动,与数据库员工表里面的数据判断该员工编号是否存在,如果没有,提示没此员工,否则显示员工的部门和职务信息供修改,然后输入详细记录并存入数据库人事变更表中。u 如果是辞退,与数据库员工表里面的数据判断该员工编号是否存在,如果没有,提示没此员工,否则显示员工的状态供修改,然后输入详细记录并存入数据库人事变更表中。5.5 员工档案查询界面如下图:员工档案查询模块算法设计:根据选择的查询条件,例如员工编号、部门和所有人,连接数据库员工表查询数据,显示在表格中。5.6 查询人事记录界面:如下图:人事记录查询模块算法设计:根据选择的查询条件,例如记录编号、员工编号和变更原因,连接数据库人事记录表查询数据,显示在表格中。5.7显示员工信息界面如下图:显示员工个人信息算法设计:根据普通员工在登入界面输入用户名,连接数据库员工信息表查询数据,显示在界面上。并且提供给员工修改自己能修改的数据,并且保存到数据库员工信息表。第六章 主要程序模块代码的编写和调试6.1 登入模块核心代码如下: /* * 检查用户名和密码是否正确 * param id 员工编号 * param password 员工编号 * param flag TRUE表示管理员登入 FALSE表示普通员工登入 * return 如果正确 返回TRUE 否则FALSE */ public boolean checkOut(int id, String password, boolean flag) boolean isTrue = false; Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try conn = DbUtil.getConn();String sql = null;if (flag) sql = select * from t_person where id = ? and password = ? and department = 0 and state = 1; else sql = select * from t_person where id = ? and password = ? and state = 1;pstmt = conn.prepareStatement(sql);pstmt.setInt(1, id);pstmt.setString(2, password);rs = pstmt.executeQuery();if (rs.next() isTrue = true; else isTrue = false; catch (SQLException e) e.printStackTrace(); catch (Exception e) e.printStackTrace(); finally try DbUtil.close(rs, pstmt, conn); catch (Exception e) e.printStackTrace();return isTrue; 调试信息: 如果登入成功就会进入管理员主界面或普通员工个人信息显示界面,否则会提示如下图的错误。6.2 新员工档案输入模块核心代码如下:1. 随机分配员工编号/* * 随机产生员工的编号 * return 返回员工的编号 */public int initID() Random r = new Random();int id = 0;Connection conn = null;PreparedStatement pstmt = null;ResultSet rs = null;try conn = DbUtil.getConn();String sql = select * from t_person where id = ?;pstmt = conn.prepareStatement(sql);while (true) /随机产生编号id = r.nextInt(100) + 1;pstmt.setInt(1, id);rs = pstmt.executeQuery();/判断数据库里面是否存在if (!rs.next() break;this.tfID.setText(String.valueOf(id);this.tfID.setEnabled(false); catch (SQLException e) e.printStackTrace(); catch (Exception e) e.printStackTrace(); finally try DbUtil.close(rs, pstmt, conn); catch (Exception e) e.printStackTrace();return id;2 验证电话和邮箱的正确性/验证电话号码是否正确p = Ppile(0-911);m = p.matcher(tel);if (!m.matches() this.isTel = false;如果错误会提示如下图:String email = this.tfEmail.getText().trim();/验证邮箱格式是否正确p = Ppile(w-+(.w-+)*w-+(.w-+)+$);m = p.matcher(email);if (!m.matches() this.isEmail = false;如果错误会提示如下图:3. 插入员工信息/* * 将员工对象的数据插入数据库的t_person表中 * param staff 员工对象 */protected void insertDatabase(Staff staff) Connection conn = null;PreparedStatement pstmt = null;try conn = DbUtil.getConn();String sql = insert into t_person values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);pstmt = conn.prepareStatement(sql);pstmt.setInt(1, staff.getId();pstmt.setString(2, staff.getPassword();pstmt.setString(3, staff.getAuthority();pstmt.setString(4, staff.getName();pstmt.setInt(5, staff.getSex() = 男 ? 1 : 0);pstmt.setString(6, staff.getBirthday();pstmt.setInt(7, staff.getDepartment();pstmt.setInt(8, staff.getJob();pstmt.setInt(9, staff.getEduLevel();pstmt.setString(10, staff.getSpcialty();pstmt.setString(11, staff.getAddress();pstmt.setString(12, staff.getTel();pstmt.setString(13, staff.getEmail();pstmt.setBoolean(14, staff.isState();pstmt.setString(15, staff.getRemark();pstmt.executeUpdate(); catch (SQLException e) e.printStackTrace(); catch (Exception e) e.printStackTrace(); finally try pstmt.close();conn.close(); catch (SQLException e) e.printStackTrace();6.3 增加人事变更记录模块核心代码如下:1 随机产生记录编号/* * 随机产生记录编号 */public void initID() Random r = new Random();int id = 0;Connection conn = null;PreparedStatement pstmt = null;ResultSet rs = null;try conn = DbUtil.getConn();String sql = select * from t_personnelChange where code = ?;pstmt = conn.prepareStatement(sql);while (true) /* * 随机产生编号 */id = r.nextInt(100) + 1;pstmt.setInt(1, id);rs = pstmt.executeQuery();if (!rs.next() break;this.tfID.setText(String.valueOf(id);this.tfID.setEnabled(false); catch (SQLException e) e.printStackTrace(); catch (Exception e) e.printStackTrace(); finally try DbUtil.close(rs, pstmt, conn); catch (Exception e) e.printStackTrace();2 将人事变更记录插入数据库/* * 把ChangeInfoTable对象里面的数据写入数据库 * param changeInfoTable ChangeInfoTable对象 */SuppressWarnings(deprecation)protected void insertDatabase(ChangeInfoTable changeInfoTable) Connection conn = null;PreparedStatement pstmt = null;try conn = DbUtil.getConn();String sql = insert into t_personnel values(?, ?, ?, ?);pstmt = conn.prepareStatement(sql);pstmt.setInt(1, changeInfoTable.getId();pstmt.setInt(2, changeInfoTable.getStaffId();pstmt.setInt(3, changeInfoTable.getReason();Date date = new Date();pstmt.setString(4, date.toLocaleString() + 描述内容: + changeInfoTable.getDescription();pstmt.executeUpdate(); catch (SQLException e) e.printStackTrace(); catch (Exception e) e.printStackTrace(); finally try pstmt.close();conn.close(); catch (SQLException e) e.printStackTrace();3 获取员工的状态/* * 获取员工的状态 * param id 员工编号 * return 返回员工的状态 */ public int getState(int id) int state = 0; Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; String sql = select state from t_person where id = ?; try conn = DbUtil.getConn();pstmt = conn.prepareStatement(sql);pstmt.setInt(1, id);rs = pstmt.executeQuery();if (rs.next() state = rs.getInt(1); catch (SQLException e) e.printStackTrace(); catch (Exception e) e.printStackTrace(); return state; 4 获取员工的部门和职务 /* * 获得员工的部门和职务 * param id 员工编号 * return 返回员工的部门和职务编号 */ public int getJOB(int id) int departmentAndJob = new int2; Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; String sql = select department, job from t_person where id = ? and state = 1; try conn = DbUtil.getConn();pstmt = conn.prepareStatement(sql);pstmt.setInt(1, id);rs = pstmt.executeQuery();if (rs.next() departmentAndJob0 = rs.getInt(1);departmentAndJob1 = rs.getInt(2); else this.isStaff = false; catch (SQLException e) e.printStackTrace(); catch (Exception e) e.printStackTrace(); return departmentAndJob; 5检验员工编号是否存在 /* * 经验员工编号是否存在 * param id 员工编号 * return 如果存在返回TRUE 返回FALSE */ public boolean checkID(int id) boolean isTrue = false; Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; String sql = select * from t_person where id = ?; try conn = DbUtil.getConn();pstmt = conn.prepareStatement(sql);pstmt.setInt(1, id);rs = pstmt.executeQuery();if (rs.next() isTrue = true; catch (SQLException e) e.printStackTrace(); catch (Exception e) e.printStackTrace(); return isTrue; 6.4 员工档案查询模块核心代码如下:1 查询所有员工的信息/* * 根据所有人设置表格值 */public void setTableValues() Connection conn = null;PreparedStatement pstmt = null;ResultSet rs = null;try conn = DbUtil.getConn();String sql = select * from t_person;pstmt = conn.prepareStatement(sql);rs = pstmt.executeQuery();int index = 0;while (rs.next() this.table.setValueAt(rs.getInt(1), index, 0);this.table.setValueAt(rs.getString(2), index, 1);this.table.setValueAt(rs.getString(3), index, 2);this.table.setValueAt(rs.getString(4), index, 3);this.table.setValueAt(rs.getInt(5)=1?男:女, index, 4);this.table.setValueAt(rs.getString(6), index, 5);this.table.setValueAt(this.boxDepartment.getItemAt(rs.getInt(7)+1), index, 6);this.table.setValueAt(this.jobStrsrs.getInt(7)+1rs.getInt(8)+1, index, 7);this.table.setValueAt(this.eduLevelStrs(rs.getInt(9)+1), index, 8);this.table.setValueAt(rs.getString(10), index, 9);this.table.setValueAt(rs.getString(11), index, 10);this.table.setValueAt(rs.getString(12), index, 11);this.table.setValueAt(rs.getString(13), index, 12);this.table.setValueAt(rs.getBoolean(14)=true?是:否, index, 13);this.table.setValueAt(rs.getString(15), index, 14);index+; catch (SQLException e) e.printStackTrace(); catch (Exception e) e.printStackTrace(); finally try DbUtil.close(rs, pstmt, conn); catch (Exception e) e.printStackTrace();2根据部门查询员工信息/* * 根据部门设置表格值 * param department 部门 * param flag 用来区分方法的没有实际意义 */public void setTableValues(int department, boolean flag) Connection conn = null;PreparedStatement pstmt = null;ResultSet rs = null;try conn = DbUtil.getConn();String sql = select * from t_person where department = ?;pstmt = conn.prepareStatement(sql);pstmt.setInt(1, department);rs = pstmt.executeQuery();int index = 0;while (rs.next() this.table.setValueAt(rs.getInt(1), index, 0);this.table.setValueAt(rs.getString(2), index, 1);this.table.setValueAt(rs.getString(3), index, 2);this.table.setValueAt(rs.getString(4), index, 3);this.table.setValueAt(rs.getInt(5)=1?男:女, index, 4);this.table.setValueAt(rs.getString(6), index, 5);this.table.setValueAt(this.boxDepartment.getItemAt(rs.getInt(7)+1), index, 6);this.table.setValueAt(this.jobStrsrs.getInt(7)+1rs.getInt(8)+1, index, 7);this.table.setValueAt(this.eduLevelStrs(rs.getInt(9)+1), index, 8);this.table.setValueAt(rs.getString(10), index, 9);this.table.setValueAt(rs.getString(11), index, 10);this.table.setValueAt(rs.getString(12), index, 11);this.table.setValueAt(rs.getString(13), index, 12);this.table.setValueAt(rs.getBoolean(14)=true?是:否, index, 13);this.table.setValueAt(rs.getString(15), index, 14);index+; catch (SQLException e) e.printStackTrace(); catch (Exception e) e.printStackTrace(); finally try DbUtil.close(rs, pstmt, conn); catch (Exception e) e.printStackTrace();3根据员工编号查询信息/* * 根据员工编号设置表格值 * param id 员工编号 */public void setTableValues(int id) Connection conn = null;PreparedStatement pstmt = null;ResultSet rs = null;try conn = DbUtil.getConn();String sql = select * from t_person where id = ?;pstmt = conn.prepareStatement(sql);pstmt.setInt(1, id);rs = pstmt.executeQuery();if (rs.next() this.table.setValueAt(rs.getInt(1), 0, 0);this.table.setValueAt(rs.getString(2), 0, 1);this.table.setValueAt(rs.getString(3), 0, 2);this.table.setValueAt(rs.getString(4), 0, 3);this.table.setValueAt(rs.getInt(5)=1?男:女, 0, 4);this.table.setValueAt(rs.getString(6), 0, 5);this.table.setValueAt(this.boxDepartment.getItemAt(rs.getInt(7)+1), 0, 6);this.table.setValueAt(this.jobStrsrs.getInt(7)+1rs.getInt(8)+1, 0, 7);this.table.setValueAt(this.eduLevelStrs(rs.getInt(9)+1), 0, 8);this.table.setValueAt(rs.getString(10), 0, 9);this.table.setValueAt(rs.getString(11), 0, 10);this.table.setValueAt(rs.getString(12), 0, 11);this.table.setValueAt(rs.getString(13), 0, 12);this.table.setValueAt(rs.getBoolean(14)=true?是:否, 0, 13);this.table.setValueAt(rs.getString(15), 0, 14); catch (SQLException e) e.printStackTrace(); catch (Exception e) e.printStackTrace(); finally try DbUtil.close(rs, pstmt, conn); catch (Exception e) e.printStackTrace();4验证员工编号是否存在在上面的一个模块以及有了代码,在这就不贴了。6.5 人事变更记录查询模块核心代码如下:1根据变更原因查询记录/* * 根据变更原因查询 * param reason 变更原因编号 */public void setTableValues(int reason) Connection conn = null;PreparedStatement pstmt = null;ResultSet rs = null;try conn = DbUtil.getConn();String sql = select * from t_personnel where change = ?;pstmt = conn.prepareStatement(sql);pstmt.setInt(1, reason);rs = pstmt.executeQuery();int index = 0;while (rs.next() this.table.setValueAt(rs.getInt(1), index, 0);this.table.setValueAt(rs.getInt(2), index, 1);this.table.setValueAt(this.boxChange.getItemAt(rs.getInt(3)+1), index, 2);this.table.setValueAt(rs.getString(4), index, 3);index+; catch (SQLException e) e.printStackTrace(); catch (Exception e) e.printStackTrace();2根据记录编号或员工编号来查询记录/* * 根据编号来查询 * param id 编号 * param flag TRUE表示记录编号 FALSE表示员工编号 */public void setTableValues(int id, boolean flag) Connection conn = null;PreparedStatement pstmt = null;ResultSet rs = null;try conn = DbUtil.getConn();String sql = null;if (flag) sql = select * from t_personnel where id = ?; else sql = select * from t_personnel where person = ?;pstmt = conn.prepareStatement(sql);pstmt.setInt(1, id);rs = pstmt.executeQuery();int index = 0;while (rs.next() this.table.setValueAt(rs.getInt(1), index, 0);this.table.setValueAt(rs.getInt(2), index, 1);this.table.setValueAt(this.boxChange.getItemAt(rs.getInt(3)+1), index, 2);this.table.setValueAt(rs.getString(4), index, 3);index+; catch (SQLException e) e.printStackTrace(); catch (Exception e) e.printStackTrace();3验证记录编号和员工编号是否存在在上面的一个模块以及有了代码,在这就不贴了。6.6 提供给员工查询个人信息和修改个人信息模块核心代码如下:更新员工信息/* * 更新员工的数据 * param staff 员工对象 */public void updataInfo(Staff staff) Connection conn = null;PreparedStatement pstmt = null;try conn = DbUtil.getConn();String sql = update t_person set id = ?, password = ?, authority = ?, name = + ?, sex = ?, birthday = ?, department = ?, job = ?, eduLevel = ?+ , spcialty = ?, address = ?, tel = ?, email = ?, state = ?, remark = ? where id = ?;pstmt = conn.prepareStatement(sql);pstmt.setInt(1, staff.getId();pstmt.setString(2, staff.getPassword();pstmt.setString(3, staff.getAuthority();System.out.println(staff.getName();pstmt.setString(4, staff.getName();pstmt.setInt(5, staff.getSex() = 男 ? 1 : 0);pstmt.setString(6, staff.getBirthday();pstmt.setInt(7, staff.getDepartment();pstmt.setInt(8, staff.getJob();pstmt.setInt(9, staff.getEduLevel();pstmt.setString(10, staff.getSpcialty();pstmt.setString(11, staff.getAddress();pstmt.setString(12, staff.getTel();pstmt.setString(13, staff.getEmail();pstmt.setBoolean(14, staff.isState();pstmt.setString(15, staff.getRemark();pstmt.setInt(16, staff.getId();pstmt.executeUpdate(); catch (SQLException e) e.printStackTrace(); catch (Exception e) e.printStackTrace(); finally try pstmt.close();conn.close(); catch (SQLException e) e.printStackTrace();总结:通过这次课程设计,将理论知识与实践更好的结合起来,巩固所学的知识,熟练掌握一下数据库的基本操作
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 工作总结


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!