[工作范文]人力资源管理系统设计说明书完整版.doc

上传人:音乐台 文档编号:1975236 上传时间:2019-01-27 格式:DOC 页数:54 大小:3.26MB
返回 下载 相关 举报
[工作范文]人力资源管理系统设计说明书完整版.doc_第1页
第1页 / 共54页
[工作范文]人力资源管理系统设计说明书完整版.doc_第2页
第2页 / 共54页
[工作范文]人力资源管理系统设计说明书完整版.doc_第3页
第3页 / 共54页
亲,该文档总共54页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《[工作范文]人力资源管理系统设计说明书完整版.doc》由会员分享,可在线阅读,更多相关《[工作范文]人力资源管理系统设计说明书完整版.doc(54页珍藏版)》请在三一文库上搜索。

1、人力资源管理系统设计说明书 内部文档人力资源管理系统设计说明书编写:日期:2010年月日审核:日期:批准:日期:受控状态:是 发布版次:1.0日期:2010年月日编号:变更记录日期版本变更说明作者2010年x月xx日1.0初始版本2010年x月xx日1.1修改版本签字确认系统模块对应章节对应部门负责人签字目 录1引言51.1编写目的51.2背景51.3基线51.4范围51.5定义51.6参考资料52总体设计52.1概述52.1.1功能描述52.1.2运行环境62.1.3开发环境62.2设计思想72.2.1系统构思72.2.2关键技术与算法82.2.3关键数据结构92.3人工处理过程93系统功能

2、设计93.1个人办公93.1.1日程安排94系统数据结构设计144.1说明144.2数据结构144.3数据结构与系统元素的关系145接口设计145.1用户接口145.2外部接口146运行设计156.1系统初始化156.2运行控制156.3系统结束157系统出错处理设计157.1出错信息157.2补救措施158系统维护设计168.1检测点的设计168.2检测专用模块的设计169尚待解决的问题1610尚待解决的问题引言1.1 编写目的本说明书目的在于明确说明系统各功能的实现方式,指导开发员进行编码。提供给开发人员进行开发参考,以及测试人员编写单元测试所用。本说明书的预期读者为:系统设计者、系统开发

3、员。1.2 背景待开发软件系统的名称:人力资源管理系统此软件系统任务提出者:中软国际此软件系统任务开发者:“一Ja人”小组此软件系统任务用户:暂无1.3 基线人力资源管理系统需求分析说明书 v1.01.4 定义专门术语Entity: 实体User Profile:用户的详细信息Reeducation:再教育Refer People:家庭成员Job History:职位变更的历史记录Recommendation:推荐系统:若未特别指出,统指本机预定系统。1.5 参考资料序号文件名文件编号发表日期出版单位或作者1C#编码规范2HRM系统需求说明书2005-3-03张咏勤3HRM概要设计说明书200

4、6-4-6张咏勤4详细设计说明书5软件开发计划6用户操作手册7Java Web整合开发王者归来1.6 术语与缩写解释缩写、术语解 释SPP精简并行过程,Simplified Parallel ProcessSD系统设计,System DesignBLL业务逻辑层DAL数据访问层SQL SERVER系统服务器所使用的数据库管理系统。SQLStructured Query Language一种用于访问查询数据库的语言事务流数据进入模块后可能有多种路径进行处理。主键数据库表中的关键域。值互不相同。外部主键数据库表中与其它表的主键关联的域。HTML(Hyper Text Markup Language

5、 超文本标识语言)CSS(Cascading Style Sheet,可译为“层叠样式表”或“级联样式表”)JS即JavaScript,一种计算机脚本语言,主要在web浏览器(客户端)解释执行。2 模块命名规则编 号模 块 名 称模 块 标 识1人事信息管理11基本信息管理User12详细信息管理UserProfile13工作经验信息管理Experience14项目经验信息管理Project15技能信息管理Skill2职位变更21职位空缺登记Vacancy22简历信息同人事信息管理各模块23面试相关信息Interview24领导审批Interview25录用情况JobHistory3系统管理3

6、1部门管理Department32职位管理Position33密码修改User3 总体设计3.1 概述3.1.1 功能描述系统包括的范围:为便于公司高层对员工进行系统的管理,首先由管理员为各部门相关管理人员分配用户名、初始密码。人事部门需把员工信息(包括:员工编号、姓名、性别、出生日期、民族、政治面貌、职务、部门、基本工资、备注),招聘计划(包括:招聘时间、部门、人数、要求),奖惩情况,考试管理,输入到系统的客户端程序,财务部门根据员工一段时间来的工作日来把员工的工资信息(包括:员工编号、姓名、 性别、部门号、基本工资、浮动工资、交通补贴、通讯补贴、常规、午餐补贴、车补、福利、扣除、应发工资)

7、输入到系统的客户端程序。要求系统能有效、快速、安全、可靠和无误的完成上述操作。3.1.2 运行环境系统将由两部分程序组成,安装在公司各部门客户机上的客户程序及公司内的数据服务器程序。3.1.2.1 软件环境分类名称版本语种操作系统Windows XP Vista WIN7简体中文操作系统的附加功能SP43简体中文数据库平台Oracle10g简体中文数据库平台补丁简体中文应用平台tomcat5.5.x简体中文应用平台补丁简体中文邮件系统Foxmail4.2.0简体中文客户端软件MS IE6.0简体中文3.1.2.2 硬件环境服务器最低配置推荐配置应用和数据库服务器1CPU:P4 2.0G 1CP

8、U:P4 2.8G邮件服务器Foxmail4.2.03.1.3 开发环境 MyEclipse、VisualAge for Java、Forte for Java, Visual Cafe、Eclipse、NetBeans IDE、JCreator +J2SDK、jdk+记事本、EditPl us+ J2SDK等等。3.1.3.1 服务器软件环境分类名称版本语种操作系统Windows XP WIN7简体中文数据库平台Oracle10g简体中文数据库平台补丁简体中文应用平台tomcat5.5.x简体中文应用平台补丁简体中文版本控制系统简体中文目录服务系统简体中文邮件系统Foxmail4.2.0简体

9、中文客户端软件MS IE6.0简体中文3.1.3.2 服务器硬件环境服务器最低配置推荐配置应用服务器、数据库服务器、邮件服务器、目录服务器1CPU:P4 2.0G 1CPU:P4 2.8G3.1.3.3 开发机器软件环境分类名称版本语种操作系统Windows XP WIN77600简体中文操作系统的附加功能SP43简体中文数据库平台Oracle10g简体中文应用平台tomcat5.0简体中文开发平台MyEclipse7.0简体中文客户端软件MS IE6.0简体中文3.1.3.4 开发机器硬件环境分类最低配置推荐配置开发机器1CPU:P4 2.0G 1CPU:P4 2.8G3.2 设计思想3.2

10、.1 系统构思3.2.2 关键技术与算法主要采用SQL复制技术进行大量数据同步,并且结合SQL技术进行数据筛选,使传输到移动设备数据达到最小,实际情况中网络状况的不稳定性时,无法利用SQLServer数据复制机制,不能及时将移动设备中征稽系统所有信息传输到中心服务器,在这种情况下,采用XML传输文件同步方式,网络故障时我们把XML数据利用存储设备拷贝到实际中心服务器在服务器端解析XML文件,把信息传输到服务器。快速排序,排人的工资,按姓名排序(字母序)。链表的使用,用链表存人的信息,实现增删改查。(如果是数据库系统就不能了)。加密算法。哈弗曼编码,把信息编码输出保存,也可以解密。1.连接数据库

11、public class ConnDb private Connection ct = null;public Connection getConn()try Class.forName(oracle.jdbc.driver.OracleDriver);ct = DriverManager.getConnection(jdbc:oracle:thin:127.0.0.1:1521:ORCL,scott,tiger); catch (Exception e) e.printStackTrace();return ct;2.分页算法public class PageSet private Prep

12、aredStatement ps = null;private Connection ct = null;private ResultSet rs = null;private int pageSize = 7;/每页显示多少条记录private int rowCount = 0;/总记录数private int pageCount = 0;/总页面public int getPageCount()try ct = new ConnDb().getConn();/得到连接ps = ct.prepareStatement(select count(*) from staff);rs = ps.e

13、xecuteQuery();if(rs.next()rowCount = rs.getInt(1);if(rowCount%pageSize=0)pageCount = rowCount/pageSize;elsepageCount = rowCount/pageSize + 1; catch (Exception e) e.printStackTrace(); finallytry if(rs != null)rs.close();rs = null;if(ps != null)ps.close();ps = null;if(ct != null)ct.close();ct = null;

14、catch (Exception e2) / TODO: handle exceptione2.printStackTrace();return pageCount;int pageCount = new PageSet().getPageCount(); /分页算法 if(pageNow != 1) out.print(首 页); out.print( 上一页); if(pageNow = 1 | pageNow = 2) for(int i = 1;i = 5;i+) out.print( +i+ ); else if(pageNow = pageCount) for(in

15、t i = pageNow-4;i = pageNow;i+) out.print( +i+ ); else if(pageNow = pageCount-1) for(int i = pageNow-3;i = pageNow+1;i+) out.print( +i+ ); else for(int i = pageNow-2;i = pageNow+2;i+) out.print( +i+ ); if(pageNow != pageCount) out.print(下一页); out.print( 尾 页); 3.上传:package com.inmsg.beans; im

16、port java.io.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*; public class Upload private String saveDir = .; /要保存文件的路径private String contentType = ; /文档类型private String charset = ; /字符集private ArrayList tmpFileName = new ArrayList(); /临时存放文件名的数据结构private Hashtable paramet

17、er = new Hashtable(); /存放参数名和值的数据结构private ServletContext context; /程序上下文,用于初始化private HttpServletRequest request; /用于传入请求对象的实例private String boundary = ; /内存数据的分隔符private int len = 0; /每次从内在中实际读到的字节长度private String queryString; private int count; /上载的文件总数private String fileName; /上载的文件名数组private lo

18、ng maxFileSize = 1024 * 1024 * 10; /最大文件上载字节; private String tagFileName = ; public final void init(HttpServletRequest request) throws ServletException this.request = request; boundary = request.getContentType().substring(30); /得到内存中数据分界符queryString = request.getQueryString(); public String getParam

19、eter(String s) /用于得到指定字段的参数值,重写request.getParameter(String s)if (parameter.isEmpty() return null; return (String) parameter.get(s); public String getParameterValues(String s) /用于得到指定同名字段的参数数组,重写request.getParameterValues(String s)ArrayList al = new ArrayList(); if (parameter.isEmpty() return null; E

20、numeration e = parameter.keys(); while (e.hasMoreElements() String key = (String) e.nextElement(); if ( -1 != key.indexOf(s + |) | key.equals(s) al.add(parameter.get(key); if (al.size() = 0) return null; String value = new Stringal.size(); for (int i = 0; i value.length; i+) valuei = (String) al.get

21、(i); return value; public String getQueryString() return queryString; public int getCount() return count; public String getFileName() return fileName; public void setMaxFileSize(long size) maxFileSize = size; public void setTagFileName(String filename) tagFileName = filename; public void setSaveDir(

22、String saveDir) /设置上载文件要保存的路径this.saveDir = saveDir; File testdir = new File(saveDir); /为了保证目录存在,如果没有则新建该目录if (!testdir.exists() testdir.mkdirs(); public void setCharset(String charset) /设置字符集this.charset = charset; public boolean uploadFile() throws ServletException, IOException /用户调用的上载方法setCharse

23、t(request.getCharacterEncoding(); return uploadFile(request.getInputStream(); private boolean uploadFile(ServletInputStream servletinputstream) throws /取得央存数据的主方法ServletException, IOException String line = null; byte buffer = new byte256; while ( (line = readLine(buffer, servletinputstream, charset)

24、 != null) if (line.startsWith(Content-Disposition: form-data; ) int i = line.indexOf(filename=); if (i = 0) /如果一段分界符内的描述中有filename=,说明是文件的编码内容String fName = getFileName(line); if (fName.equals() continue; if (count = 0 & tagFileName.length() != 0) String ext = fName.substring( (fName.lastIndexOf(.)

25、+ 1); fName = tagFileName + . + ext; tmpFileName.add(fName); count+; while ( (line = readLine(buffer, servletinputstream, charset) != null) if (line.length() = 2) break; File f = new File(saveDir, fName); FileOutputStream dos = new FileOutputStream(f); long size = 0l; while ( (line = readLine(buffer

26、, servletinputstream, null) != null) if (line.indexOf(boundary) != -1) break; size += len; if (size maxFileSize) throw new IOException(文件超过 + maxFileSize + 字节!); dos.write(buffer, 0, len); dos.close(); else /否则是字段编码的内容String key = getKey(line); String value = ; while ( (line = readLine(buffer, servl

27、etinputstream, charset) != null) if (line.length() = 2) break; while ( (line = readLine(buffer, servletinputstream, charset) != null) if (line.indexOf(boundary) != -1) break; value += line; put(key, value.trim(), parameter); if (queryString != null) String each = split(queryString, &); for (int k =

28、0; k each.length; k+) String nv = split(eachk, =); if (nv.length = 2) put(nv0, nv1, parameter); fileName = new StringtmpFileName.size(); for (int k = 0; k fileName.length; k+) fileNamek = (String) tmpFileName.get(k); /把ArrayList中临时文件名倒入数据中供用户调用if (fileName.length = 0) return false; /如果fileName数据为空说明

29、没有上载任何文件return true; private void put(String key, String value, Hashtable ht) if (!ht.containsKey(key) ht.put(key, value); else /如果已经有了同名的KEY,就要把当前的key更名,同时要注意不能构成和KEY同名try Thread.currentThread().sleep(1); /为了不在同一ms中产生两个相同的keycatch (Exception e) key += | + System.currentTimeMillis(); ht.put(key, val

30、ue); /*调用ServletInputstream.readLine(byte b,int offset,length)方法,该方法是从ServletInputstream流中读一行到指定的byte数组,为了保证能够容纳一行,该byteb不应该小于256,重写的readLine中,调用了一个成员变量len为实际读到的字节数(有的行不满256),则在文件内容写入时应该从byte数组中写入这个len长度的字节而不是整个byte的长度,但重写的这个方法返回的是String以便分析实际内容,不能返回len,所以把len设为成员变量,在每次读操作时把实际长度赋给它.也就是说在处理到文件的内容时数据既

31、要以String形式返回以便分析开始和结束标记,又要同时以byte的形式写到文件输出流中.*/private String readLine(byte Linebyte,ServletInputStream servletinputstream, String charset) try len = servletinputstream.readLine(Linebyte, 0, Linebyte.length); if (len = -1) return null; if (charset = null) return new String(Linebyte, 0, len); else re

32、turn new String(Linebyte, 0, len, charset); catch (Exception _ex) return null; private String getFileName(String line) /从描述字符串中分离出文件名if (line = null) return ; int i = line.indexOf(filename=); line = line.substring(i + 9).trim(); i = line.lastIndexOf(); if (i 0 | i = line.length() - 1) i = line.lastI

33、ndexOf(/); if (line.equals() return ; if (i 0 | i = line.length() - 1) return line; return line.substring(i + 1, line.length() - 1); private String getKey(String line) /从描述字符串中分离出字段名if (line = null) return ; int i = line.indexOf(name=); line = line.substring(i + 5).trim(); return line.substring(1, l

34、ine.length() - 1); public static String split(String strOb, String mark) if (strOb = null) return null; StringTokenizer st = new StringTokenizer(strOb, mark); ArrayList tmp = new ArrayList(); while (st.hasMoreTokens() tmp.add(st.nextToken(); String strArr = new Stringtmp.size(); for (int i = 0; i tm

35、p.size(); i+) strArri = (String) tmp.get(i); return strArr; 4.下载:public void downLoad(String filePath,HttpServletResponse response,boolean isOnLine)throws ExceptionFile f = new File(filePath); if(!f.exists()response.sendError(404,File not found!); return; BufferedInputStream br = new BufferedInputSt

36、ream(new FileInputStream(f); byte buf = new byte1024; int len = 0; response.reset(); /非常重要if(isOnLine) /在线打开方式URL u = new URL(file:/+filePath); response.setContentType(u.openConnection().getContentType(); response.setHeader(Content-Disposition, inline; filename=+f.getName(); /文件名应该编码成UTF-8else /纯下载方

37、式response.setContentType(application/x-msdownload); response.setHeader(Content-Disposition, attachment; filename= + f.getName(); OutputStream out = response.getOutputStream(); while(len = br.read(buf) 0)out.write(buf,0,len); br.close(); out.close(); 5.登录验证public boolean checkUser(String uname,String

38、 passwd)boolean result = false;try ct = new ConnDb().getConn(); st = ct.createStatement();/创建statement rs = st.executeQuery(select passwd from staff where uname=+uname+); if(rs.next() if(rs.getString(1).equals(passwd) /登录成功 result = true; catch (Exception e) e.printStackTrace(); finallythis.close();return result;3.2.3 关键数据结构数据结构数据结构反映了数据之间的组合关系。一个数据结构可以由若

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1