1、江西经济管理干部学院毕业设计(论文)题目:基于ESSH框架的考勤日志系统系别 信息工程系 专业班级 131软件订单班 学生姓名 张高剑 指导教师 熊龙芳、魏斌峰 指导教师职称 研发工程师、讲师 2016年5月20日目 录摘 要1引 言2一、需求分析3(一)考勤日志系统需求规格说明书编写目的3(二)具体需求分析4二、系统设计14(一)总体架构14(二)数据库结构15(三)详细设计21三、编码实现26(一)编码规范26(二)算法分析28(三)单元测试29(四)部分代码分析29四、系统测试32(一)软件测试方法分类32五、小结35致 谢36参考文献37I运用ESSH框架的考勤日志系统摘要:日志考勤系
2、统应用ESSH框架(easy ui,struts2,spring,hibernate),这个框架开发效率快、稳定、可以大大简化代码量,采用MVC模式,减少软件间的耦合度,力求做到系统的稳定性、可重用性和可扩充性、能把开发更好的分工,可以进一步提高效率。系统开发工具MyEclipse 8.5,开发语言为JAVA,后台数据库使用Oracle,Tomcat6.0作为系统服务器。在这个模式框架上又应用了easy ui、jquery,进行前台的优化。设计目的是为了减少公司因为请假加班这些繁琐的事务而去浪费大量的人力物力来审批请假、加班请求。该软件功能主要有以下四个模块:用户模块、请假模块、加班模块、日志
3、模块。请假系统、加班系统、日志系统这三个系统都需要建立在用户模块上,需要有用户登录才可以进行这些业务修改。小结:应用MVC模式的软件都有个共同的特点,层次分明,视图层只做视图,数据层只会和逻辑层进行交互,给开发带来方便,而MVC对于SSH设计模式是这个的核心,MVC就是SSH框架的思想,再加上eqsy ui和 jquery技术,使得对jsp页面进行id选择更加简便。关键词:ESSH easy ui jquery MVC引 言随着软件行业的兴起,经济的飞速发展,越来越多的管理者认识到管理与效益是息息相关的,实现数据规范化、自动化的电脑管理规范、运作高效的企业单位的必然要求。现在的市场竞争是知识的
4、竞争,管理手段的竞争,谁有先进的技术设备和管理手段,谁就有成功的先机,但是,目前国内大多数企业在进行考勤管理时,使用的是传统的手工、半手工方式,如通过纸质的EXCEL表进行记录和统计,这样的考勤管理方式不仅效率低,也容易出错,维护成本比较高,而通过单机的打卡机,进行请假和加班的申请和数据维护。为加强对工作人员的管理工作,我们为公司开发了“考勤日志系统”,解决了该公司管理工作程序复杂、不规范等问题,优化了管理流程,实现了该公司管理工作的优化办公。一、 需求分析(一) 考勤日志系统需求规格说明书编写目的考勤日志系统1定位于软件开发行业信息化建设的基础软件平台在对软件公司的办公、管理和信息沟通提供强
5、有力的网络化、电子化支持外,还为其它信息化系统的引入、为这些系统间的信息交流提供帮助,实现单位信息化程度的全面提升。该系统主要是基于InternetIntranet和网络数据库,集流程管理、人员组织管理、系统权限管理、公共信息管理、信息共享为一体的信息管理系统。以其特有的技术、结合各单位办公管理业务流程的特点,提供一套完整的计算机应用解决方案,最终使贵单位真正提高管理的质量和效率。此需求规格说明书对考勤日志系统软件做了全面细致的用户需求分析,明确所要开发的软件应具有的功能,性能与界面,使系统分析人员及软件开发人员能清楚地了解用户的需求,并在此基础上进步提出概要设计说明书和完成后续设计与开发工作
6、。本说明书的预期读者为客户,业务或需求分析人员,测试人员,用户文档编写者,项目管理人员。1、 考勤日志系统范围日志管理系统全面支持安全设备(如防火墙等)、网络设备(如交换机、路由器等)多种产品的系统日志数据的采集和分析。支持对不同日志格式的分类、筛选、最大效率保 存;日志自动导出、导入、删除、备份、恢复等日志管理功能。提供了多样、灵活的日志信息查询,同时支持按用户设定的条件进行不同日志的相关查询,帮助管理 员实现更加全面、深入的分析事件。软件研发日志管理系统主要运用于公司管理员工的日常工作情况,员工每天上班所做的事情都要填写在日志,记录工作信息。员工可以登录日志管理系统,根据自己的信息查询自己
7、的日志信息。项目经理根据员工填写的日志信息进行审批,并将审批的结果返回给员工。(二) 具体需求分析1、 登录模块分析登录模块主要有登录功能,新增功能,修改功能,删除功能。如下图1. 1用户模块所示:用户模块登录用户新增用户修改用户删除用户图1.1 在用户模块登录功能:用户填写帐号密码进行登录,账号和密码传递到后台进行和数据库进行比较,如果符合,将登录成功,如果不符合,返回错误信息。如图1.2身份验证所示:开始填写登录名,密码验证结束NY图1.2 身份验证新增功能:管理员登录后新增,首先姓名要不为空,并且密码两次验证,然后进行填写其他的信息,邮箱和号码必须要符合格式。如果注册失败会弹出提示信息,
8、如果格式错误控件也会弹出提示框,流程如下图1.3所示:开始新增新用户验证重复结束YN图1.3 新增用户修改功能:首选要选择修改的用户(管理员权限下),对要修改的信息进行修改:并且修改的格式要相同,具体流程如下图1.4修改用户所示:开始修改用户信息验证格式结束NY图1.4 修改用户删除用户:首先要选择用户,然后点击删除按钮,点击确定删除,即可删除该用户。如图1.5删除用户所示:开始删除用户确认删除结束NY图1.5 删除用户2、 请假模块分析登录模块主要有请假申请,修改请假,删除请假,审批请假。如下图1.6请假模块所示:请假新增请假修改请假删除请假审批请假图1.6 请假模块申请请假:用户登录后对请
9、假进行申请,首先开始请假日期不能小于结束请假日期,并且提交请假日期不能大于开始请假日期,然后进行填写其他的信息,提交失败会弹出提示,格式错误控件也会弹出提示框,流程如下图1.7请假所示:开始申请请假判断正确结束NY图1.7 申请请假请假修改:首选要选择修改的请假信息(修改的请假信息没有通过审批),对要修改的信息进行修改,具体流程如下图1.8请假修改所示:开始修改请假验证格式结束NY图1.8 请假修改删除请假:首先要选择用户,然后点击删除按钮(删除的请假信息没有通过审批),点击确定删除,即可删除该用户。如图1.9删除请假所示:开始删除请假信息确定删除结束NY图1.9 删除请假审批请假:审批顺序必
10、须先是组长通过然后经理才可以进行审批。组长或者项目经理(管理员)首先要选择用户,然后点击审批按钮(删除的请假信息没有通过审批),点击审批,即可审批该用户。在对审批的信息进行适当修改,然后通过如图1.10审批请假所示:开始审批请假信息确定通过结束NY图1.10 审批请假3、 加班模块分析登录模块主要有加班申请,修改加班,删除加班,审批加班。如下图1.11登陆模块所示:加班新增加班修改加班删除加班审批加班图1.11 登陆模块申请加班:用户登录后对加班进行申请,开始加班日期不能小于结束加班日期,提交加班日期不能大于开始加班日期,然后填写其他的信息,如果提交失败会弹出提示信息,格式错误控件也会弹出提示
11、框,如下图1.12申请加班所示:开始申请加班格式通过结束NY图1.12 申请加班加班修改:首选要选择修改的加班信息(修改的加班信息没有通过审批),对要修改的信息进行修改:并且修改的格式要相同,具体流程如下图1.13加班修改所示:开始加班修改确定修改结束NY图1.13 加班修改删除加班:首先要选择加班信息,然后点击删除按钮(删除的加班信息没有通过审批),点击确定删除,即可删除该用户。如图1.14删除加班所示:开始删除加班信息确定删除结束NY图1.14 删除加班审批加班:审批顺序必须先是组长通过然后经理才可以进行审批。组长或者项目经理(管理员)首先要选择用户,然后点击审批按钮(删除的加班信息没有通
12、过审批),点击审批,即可审批该用户。在对审批的信息进行适当修改,然后通过如图1.15审批加班所示:开始审批加班信息确定删除结束NY图1.15 审批加班4、 日志模块分析日志模块主要有新增日志,修改日志,删除日志,审批日志。如下图1. 16日志模块所示:日志新增日志修改日志删除日志审批日志图1.16 日志模块申请日志:用户登录后对日志进行申请,首先填写日志名,日志内容,然后进行填写其他的信息,如果提交失败会弹出提示信息,如果格式错误控件也会弹出提示框,流程如下图1.17申请日志所示:开始提交日志信息确定提交结束NY图1.17 申请日志日志修改:首选要选择修改的日志信息(修改的日志信息没有通过审批
13、),对要修改的信息进行修改,具体流程如下图1.18日志修改所示:开始日志修改确定修改结束NY图1.18 日志修改删除日志:首先要选择日志信息,然后点击删除按钮(删除的日志信息没有通过审批),点击确定删除,即可删除该用户。如图1.19删除日志所示:开始删除日志确定删除结束NY图1.19 删除日志审批日志:审批顺序必须先是组长通过然后经理才可以进行审批。组长或者项目经理(管理员)首先要选择用户,然后点击审批按钮(删除的日志信息没有通过审批),点击审批,即可审批该用户。在对审批的信息进行适当修改,然后通过如图1.20审批日志所示:开始审批日志确定通过结束NY图1.20 审批日志二、 系统设计(一)
14、总体架构1、 系统架构完成了需求分析之后,就进入系统的设计阶段,在整个系统开发周期,设计阶段也很重要,设计任务分为两个阶段,第一阶段是概要设计阶段,主要任务是建立软件的总体结构,即软件的组成,以及各组成成分(子系统或模块)之间的相互联系,第二阶段是详细设计,该任务是确定模块的算法结构。应用ESSH框架(easy ui,struts2,spring,hibernate2)。本系统根据需求分析在进行设计出原型,然后在原型的基础上进行测试和改进。架构设计:架构的本质在于其抽象性,包括两个方面的抽象:业务抽象和技术抽象。优点:有助于提高重用性,根据实际情况决定不同类间的耦合度,必须客观的评价耦合度。根
15、据需求的稳定性,来决定耦合的程度恰到好处在同样都能够满足需要的情况下,一项简单的设计远比复杂的设计来的直接和有效。应用模式:模式和功能组件的区别就在于模式会引发你的思考模式,应用在架构设计上,能够大大增强架构的稳定性。架构模式:层次模式: 在层次模式中, 应用被分解为若干层次。 现在流行的应用系统三层架构, 网络服务的七层协议都是典型的层次模式的例子。MVC3模式: 即模型-视图-控制模式。 在MVC模式中, 应用分为三部分: 模型负责数据和其中的规则, 视图负责信息如何展现给用户,控制则负责处理用户的输入。(二) 数据库结构数据库4的设计实际上是对项目设计的一个整体规划,因为数据库中表的结构
16、都是与程序紧密相关的,如果数据库设计如果没有到位,设计会受到一定的影响。1、 表汇总本系统采用Oracle5 数据库,系统数据库名为LGMS,数据库ORCL中包括13个数据表。如表2-1标汇总所示:表 2-1 表汇总表名功能说明T_BASE_LOG日志表,用户填写、修改的日志表都会上传到这个表里面T_BASE_USER用户表,组员组长管理员的表T_BASE_ROLE用户角色T_BASE_ORGAN组织表T_BASE_USER_ORGAN用户组织T_SYS_DICTIONARYTYPE数据字典类型T_SYS_DICTIONARY数据字典T_BASE_USER_ROLE用户角色表T_RESOURC
17、E_ROLE资源角色T_BASE_RESOURCE资源表T_BASE_ROLE_MENU角色菜单T_BASE_MENU菜单T_SYS_BUG漏洞2、 日志表这是日志表,存放日志信息,当进行业务时,就是对这个表进行处理。具体如表2-2 T_BASE_LOG所示:表 2-2 T_BASE_LOG表名T_BASE_LOG列名数据类型(精度范围)空/非空约束条件IDNUMBER(19)非空外键LOGNAMEVARCHAR2(255 CHAR)非空TypeVARCHAR2(255 CHAR)stateNUMBER(6)contextVARCHAR2(255 CHAR)LOG_IDNUMBER(19)外键
18、主键补充说明除了主键、登录名外,其他的都可为空3、 用户表这是用户表,存放用户信息,当进行业务时,就是对这个用户表进行处理。具体如表2-3 T_BASE_USER所示:表 2-3 T_BASE_USER表名T_BASE_USER列名数据类型(精度范围)空/非空约束条件IDNUMBER(19)非空主键CREATE_TIMETIMESTAMP(6)CREATE_USERVARCHAR2(36 CHAR)STATUSNUMBER(10)UPDATE_TIMETIMESTAMP(6)UPDATE_USERVARCHAR2(36 CHAR)VERSIONNUMBER(10)EMAILVARCHAR2(2
19、55 CHAR)LOGINNAMEVARCHAR2(32 CHAR)非空MOBILEPHONEVARCHAR2(255 CHAR)NAMEVARCHAR2(32 CHAR)PASSWORDVARCHAR2(64 CHAR)非空SEXNUMBER(10)TELVARCHAR2(255 CHAR)补充说明用户的登录等操作查询这个表4、 角色表这是角色表,存放角色信息,控制用户权限。与菜单表和用户表可以进行外键连接。来控制用户权限。具体如表2-4 T_BASE_ROLE所示:表 2-4 T_BASE_ROLE表名T_BASE_ROLE列名数据类型(精度范围)空/非空约束条件IDNUMBER(19)非
20、空主键、外键CREATE_TIMETIMESTAMP(6)CREATE_USERVARCHAR2(36 CHAR)STATUSNUMBER(10)UPDATE_TIMETIMESTAMP(6)UPDATE_USERVARCHAR2(36 CHAR)VERSIONNUMBER(10)补充说明组员和组长的关系5、 组织表这是组织表,存放组织信息。可以与用户进行外键连接,来控制用户权限的必要的表。具体如表2-5 T_BASE_ORGAN所示:表 2-5 T_BASE_ORGAN表名T_BASE_ORGAN列名数据类型(精度范围)空/非空约束条件IDNUMBER(19)非空主键CREATE_TIMET
21、IMESTAMP(6)CREATE_USERVARCHAR2(36 CHAR)STATUSNUMBER(10)UPDATE_TIMETIMESTAMP(6)UPDATE_USERVARCHAR2(36 CHAR)VERSIONNUMBER(10)ADDRESSVARCHAR2(255 CHAR)CODEVARCHAR2(32 CHAR)MANAGERVARCHAR2(255 CHAR)NAMEVARCHAR2(255 CHAR)PHONEVARCHAR2(255 CHAR)PARENT_IDNUMBER(19)外键补充说明组员和组长的关系6、 用户组织外表这是用户和组织的外表,两个都为外键。具
22、体如表2-6 T_BASE_USER_ORGAN所示:表 2-6 T_BASE_USER_ORGAN表名T_BASE_USER_ORGAN列名数据类型(精度范围)空/非空约束条件ORGAN_IDNUMBER(19)非空外键USER_IDNUMBER(19)非空外键补充说明组织7、 字典类型表这是字典表,存放数据字典信息,当进行相关业务是,就是对这个表处理。具体如表2-7 T_SYS_DICTIONARYTYPE所示:表 2-7 T_SYS_DICTIONARYTYPE表名T_SYS_DICTIONARYTYPE列名数据类型(精度范围)空/非空约束条件IDNUMBER(19)非空主键CREATE
23、_TIMETIMESTAMP(6)CREATE_USERVARCHAR2(36 CHAR)STATUSNUMBER(10)UPDATE_TIMETIMESTAMP(6)UPDATE_USERVARCHAR2(36 CHAR)VERSIONNUMBER(10)ADDRESSVARCHAR2(255 CHAR)CODEVARCHAR2(32 CHAR)ORDER_NONUMBER(10)NAMEVARCHAR2(255 CHAR)补充说明这个表是数据字典类型8、 字典表这是字典表,存放数据字典信息,当进行相关业务是,就是对这个表处理。具体如表2-8 T_SYS_DICTIONARY所示:表 2-8
24、 T_SYS_DICTIONARY表名T_SYS_DICTIONARY列名数据类型(精度范围)空/非空约束条件IDNUMBER(19)非空主键CREATE_TIMETIMESTAMP(6)CREATE_USERVARCHAR2(36 CHAR)STATUSNUMBER(10)UPDATE_TIMETIMESTAMP(6)UPDATE_USERVARCHAR2(36 CHAR)VERSIONNUMBER(10)ADDRESSVARCHAR2(255 CHAR)CODEVARCHAR2(32 CHAR)ORDER_NONUMBER(10)NAMEVARCHAR2(255 CHAR)REMARKVA
25、RCHAR2(255 CHAR)DICTIONARYTYPE_CODEVARCHAR2(12 CHAR)非空PARENT_CODEVARCHAR2(36 CHAR)非空补充说明这个表是数据字典9、 用户角色外表 这是用户角色的外表,控制用户权限的表。具体如表2-9 T_BASE_USER_ROLE所示:表 2-9 T_BASE_USER_ROLE表名T_BASE_USER_ROLE列名数据类型(精度范围)空/非空约束条件USER_IDNUMBER(19)非空外键ROLE_IDNUMBER(19)非空外键补充说明这个表是用户角色10、 资源表这是资源的表。用来和角色进行外键连接,从而进行权限的控
26、制。具体如表2-10 T_BASE_RESOURCE所示:表 2-10 T_BASE_RESOURCE表名T_BASE_RESOURCE列名数据类型(精度范围)空/非空约束条件IDNUMBER(19)非空主键、外键CREATE_TIMETIMESTAMP(6)CREATE_USERVARCHAR2(36 CHAR)STATUSNUMBER(10)UPDATE_TIMETIMESTAMP(6)UPDATE_USERVARCHAR2(36 CHAR)VERSIONNUMBER(10)ICONVARCHAR2(255 CHAR)ORDERNONUMBER(10)PERMISSIONVARCHAR2(
27、255 CHAR)NAMEVARCHAR2(32 CHAR)PASSWORDVARCHAR2(255 CHAR)TYPENUMBER(10)URLVARCHAR2(255 CHAR)PARENT_IDNUMBER(19)非空外键补充说明用户的登录等操作查询这个表11、 资源角色表这是资源角色的表,控制角色的表。和用户表进行外键连接,控制用户权限。具体如表2-11 T_RESOURCE_ROLE所示:表 2-11 T_RESOURCE_ROLE表名T_RESOURCE_ROLE列名数据类型(精度范围)空/非空约束条件RESOURCE_IDNUMBER(19)非空外键ROLE_IDNUMBER(1
28、9)非空外键补充说明12、 角色菜单外表 这是角色菜单的外表,控制菜单的表。具体如表2-12 T_BASE_ROLE_MENU所示:表 2-12 T_BASE_ROLE_MENU表名T_BASE_ROLE_MENU列名数据类型(精度范围)空/非空约束条件MENU_IDNUMBER(19)非空外键ROLE_IDNUMBER(19)非空外键补充说明13、 菜单表这是菜单的外表,控制菜单的表,与角色表外键连接,控制权限。具体如表2-13 T_BASE_MENU 所示:表 2-13 T_BASE_MENU表名T_BASE_MENU列名数据类型(精度范围)空/非空约束条件IDNUMBER(19)非空主键
29、CREATE_TIMETIMESTAMP(6)CREATE_USERVARCHAR2(36 CHAR)STATUSNUMBER(10)UPDATE_TIMETIMESTAMP(6)UPDATE_USERVARCHAR2(36 CHAR)VERSIONNUMBER(10)ICOVARCHAR2(255 CHAR)MARK_URLVARCHAR2(32 CHAR)ORDER_NONUMBER(10)NAMEVARCHAR2(255 CHAR)URLVARCHAR2(255 CHAR)PARENT_IDNUMBER(19)非空PARENT_CODEVARCHAR2(36 CHAR)非空补充说明这个表
30、是数据字典14、 BUG这是系统BUG的表。系统的BUG全部会存入这个表。具体如表2-14 T_SYS_BUG 所示:表 2-14 T_SYS_BUG表名T_SYS_BUG列名数据类型(精度范围)空/非空约束条件IDNUMBER(19)非空主键、外键CREATE_TIMETIMESTAMP(6)CREATE_USERVARCHAR2(36 CHAR)STATUSNUMBER(10)UPDATE_TIMETIMESTAMP(6)UPDATE_USERVARCHAR2(36 CHAR)VERSIONNUMBER(10)TITLEVARCHAR2(255 CHAR)CONTENTCLOB补充说明(三
31、) 详细设计1、 请假模块请假设计主要有以下界面如下图2. 1请假申请所示:1) 请假申请:所有员工进入请假申请页面,选项卡方式显示我的请假。2) 点击请假申请,弹出请假申请的对话框。3) 在对话框填入申请人、请假类别、请假日期、开始时间、结束时间、请假天数、请假事由等信息。4) 点击请假申请按钮,将请假申请提交给项目经理。图2.1 请假申请修改申请:1) 当所有员工进入我的申请页面时,点击修改申请按钮弹出其界面。2) 修改申请界面需填写的主要内容包括:请假人姓名,请假类别,开始时间,结束时间,最底部的修改申请按钮为事件触发按钮即当您点击此按钮时会弹出如图2. 2申请主页图和2.3修改页面图的
32、界面,单您点击确定按钮时,你的修改信息将被写入数据库,即您的本次修改已成功。图2.2 申请主页图2.3 修改页面请假撤销:1) 选择你要撤销的请假信息,然后点击撤销请假按钮。2) 点击确定的话就执行撤销申请的操作,否则反之,返回主界面。如图2.4删除申请所示:图2.4 删除申请2、 加班模块加班申请:1) 加班申请:点击添加按钮,弹出一个加班申请页面。2) 在页面上显示申请人,项目名称,加班日期,加班类型,加班时长,开始和结束时间。3) 当填写完信息后点击保存。4) 申请完后页面自动刷新。如图2.5加班申请和图2.6加班主页所示:图2.5 加班申请图2.6 加班主页3、 日志模块日志新增:1)
33、 用户通过日志管理系统登录,然后点击首页(日期查询页面)的+号可以展开,可以在那边的日期添加日志。2) 组员进入日志添加页面,选项卡方式只显示自己的日志,用户在每个分页面输入要查询的条件,点击查询,页面列表显示所有符合查询条件的日志信息。3) 点击新增会在日志页面列表弹出链接,显示日志名称、日志类型、状态。4) 日志分为公共日志、个人事务、其他日志,状态包括待审批、拒绝、已审批。5) 开始日期和结束日期的日期选择控件的第一列为星期四(默认),最后一天为星期三。如图2.7日志主页、图2.8日志新增和图2.9日志查询所示:图2.7 日志主页图2.8 日志新增图2.9 日志查询日志删除:1) 通过日
34、志管理系统登录,然后点击首页(日期查询页面)的+号可以展开,可以在那边的日期下面删除日志。2) 所有用户进入日志日期查询页面,管理员在每个分页面输入要查询的条件,点击日期可以查到自己的日志,页面列表显示所有符合条件的日志信息。3) 日志删除只能是自己删除自己的日志,组长没有权限删除他人日志。如图2.10日志删除所示:图2.10 日志删除三、 编码实现(一) 编码规范1. 文件命名规范文件名说明Struts2配制文件命名struts-模块名.xmlTApple.java 或者TAppleBoy.java实体域模型文件,Apple,Boy均为指代AppleAction.javaAppleActio
35、n.javaAppleService.javaservice接口文件AppleServiceImpl.javaservice接口实现文件apple_main.jspapple为对应的AppleAction名,主文件apple_xxx.jsp ,apple_boy_xxx.jspxx命名详见附录A:词典规范2. 方法排版规则1) 方法名和其后的括弧之间不应有空格。2) 在方法的局部变量声明和语句之间加一个空行。3) 块注释或单行注释之前必须有一行空行。4) 方法内的两个逻辑段之间必须有一行空行。5) 简单语句每行至多包含一条语句。3. 语句排版规则1) 必须用“”和“”将if内的语句括起来。(即
36、使只有一条语句的情况下)。2) 每当一个case顺着往下执行时(因为没有break语句),通常应在break语句的位置添加注释。3) 使用JavaDoc,列出功能、版本信息、日期、作者和版权声明。4) 如果对文件进行了修改,必须说明修改目的、修改日期、修改人,并变更版本信息 。4. 类方法注释规则1) 用中文写出每个参数和返回值的含。2) 当修改其他组员创建的类时,增加author标签。块注释规则:1) 方法内部的块注释位于所描述内容之前。2) 块注释前留一行空行。单行注释规则:1) 单行注释位于所描述内容之前。2) 单行注释之前留一行空行。5. 变量命名规则1) 变量名采用大小写混合的方式,
37、第一个单词的首字母小写,其后单词的首字母大写。2) 除一次性的临时变量(如for循环变量)以外,不能用单个字符的变量名。3) 如果变量名代表容器(collection),如Array, Vector等,在变量名后加“List”或者“s”。6. 方法命名规则1) 方法名是动词或动词名词对,采用大小写混合的方式,第一个单词的首字母小写,其后单词的首字母大写。7. 方法的参数命名规则:1) 使用全英文命名。首字母小写,后续单词首字母大写。8. 数组命名规则:1) 将 放在类型后。9. 变量规范1) 不要将不同类型变量的声明放在同一行。2) 提供对实例以及类变量的get和set方法。3) 不要在一个语
38、句中给多个变量赋相同的值。10. 尾端注释规则1) 对变量或常量的简短注释在代码右端。2) 代码和尾端注释之间留有足够多的空白。(二) 算法分析1、 逻辑删除除了一般的增删改查,该系统还毒用户进行了权限管理,如果是员工A登录系统,那么查询的信息只能是A的信息,如果A删除日志(逻辑删除),那么那条日志A将无权限看到删除的日志,如果组长删除A那条日志,同理,组长也无权限访问那条日志。2、 回显查询在jsp页面的查询条件有下拉框查询,下拉框的数据是有后台提供,并且显示该权限下用户可以查到的条件在进行下拉框查询。(三) 单元测试测试分为四大模块进行测试:用户模块、请假模块、加班模块、日志模块。这四个模
39、块分别对系统进行了系统性的测试,详情请查询测试用例书。1) 登录测试测试是否登录成功,如果失败将会回到原页面,成功将会跳到下一页面。详情如下表3-1所示:表3-1 用户登录测试表测试要点测试路径测试结果用户名、密码用户名为假,密码为假;输入用户名“a”;密码“111”提示“用户名或密码输入错误” 请返回重新输入。用户名、密码用户名为真,密码为假;输入用户名“admin”;密码“111”提示“登录失败”返回重新登录。用户名、密码用户名为真,密码为真;输入用户名“admin”;密码“password”提示“登录成功”返回主页2) 修改密码测试测试是否密码修改成功,如果失败将会返回出错信息,成功将会
40、跳到下一页面。详情如下表3-2所示:表3-2 用户登录测试表测试要点测试路径测试结果密码密码为空;提示“密码不可为空” 请返回重新输入。密码密码与上次密码一致,密码:“123”提示“与近期密码相似”返回重新修改。密码成功修改,密码“password”提示“修改成功”返回主页(四) 部分代码分析这是一段获取数据并将数据转换成json数据通过jsp页面显示出来。以下注释对代码简单的介绍:public String datagrid2() throws Exception try /获得登录对象User sessionUser = userManager.getCurrentUser();/ 自动构
41、造属性过滤器List filters = HibernateWebUtils.buildPropertyFilters(Struts2Utils.getRequest();Page p = getEntityManager().find(page, rows, sort, order,filters);/获取所有数据List datalist=p.getResult();/循环,如果user有数据改为空for (Log log:datalist)log.setUser(null);/如果是管理员则不需要判断身份if(!(sessionUser.getId()=1)/循环,对数据进行移除 for(int i=0;idatalist.size();i+)Log log=datalist.get(i); int visble=log.getVisble(); /如果登录名和数据的名字一致或者是组长登录 if(!log.getLoginName().equals(sessionUser.getLoginName()& sessionUser.getId()!=1738822)datalist.remove(i);i-; /如果是组长登录或者该数据状态为组长不可见if(sessionUser.getId()=1738822 & (1=