1、2014 - 2015学年 第 2 学期 1.总体目标 4 1.1背景 4 1.1.1引言 4 1.2要求 4 1.3目标 4 2.需求分析 5 2.1功能需求描述 5 2.1.1基本功能: 5 2.1.2业务功能: 5 2.2用户需求描述 5 2.2.1学生用户需求描述 5 2.2.2任课教师用户需求描述 5 3.数据库设计 5 4. 功能模块设计 7 4.1系统流程 8 5. 主要功能的具体实现 11 5.1请假功能的实现 11 5.2审核功能的实现 14 5.3权限修改功能 18 5.4导入功能 20 6.系统的运行环境需求 21 6.1
2、硬件环境: 21 6.2.软件环境: 21 7.测试结果与分析 21 7.1主要测试内容 21 7.2软件测试的目的 22 7.3软件测试的任务 22 7.4.1功能测试 22 7.4.2负载测试 22 7.4.3文档测试 22 7.5 测试环境 23 7.6 系统具体测试 23 8.课程设计总结 24 1.总体目标 1.1背景 1.1.1引言 目前高校大部分都还是采用学生写好请假条,然后到辅导员那里申请请假的方式进行请假,这种方式不仅麻烦而且比较费时。在信息化的今天,能有效地借助网络才能提高办事效率。因此,请假管理系统能够解决这种请假方式所带来的很
3、多麻烦。 1.2要求 请假管理系统要达到以下功能: 增删查改:学生信息管理(导入/查/改/删)、老师(含辅导员和系领导)信息管理 业务功能:学生填写请假事由、提交给辅导员审批、按请假制度超过3天的提交给系领导审批、打印请假条、学生查看历史请假记录、辅导员可按不同筛选条件查看请假记录。 1.3目标 请假管理系统的基本目标是方便学生请假和校方的批假工作,系统实现后,应做该到: 方便学生:学生可以通过登录本系统填写请假原因向校方申请请假,不用通过手写请假条后找到导员请假。 方便校方:学生在系统中申请请假后可以进入本系统进行审核,方便了校方很多请假方面的工作。 2.需求分析 2
4、1功能需求描述 2.1.1基本功能: 学生信息管理(导入/查/改/删)、老师(含辅导员和系领导)信息管理 2.1.2业务功能: 学生填写请假事由、提交给辅导员审批、按请假制度超过3天的提交给系领导审批、打印请假条、学生查看历史请假记录、辅导员可按不同筛选条件查看请假记录。 2.2用户需求描述 2.2.1学生用户需求描述 学生对本系统的主要需求是:学生填写请假理由进行请假、打印请假条、查看请假记录、修改密码。 2.2.2任课教师用户需求描述 校方对本系统的主要需求是:学生信息管理(导入/查/改/删)、老师(含辅导员和系领导)信息管理、对学生的请假申请进行审核、打印、和查看请假
5、记录。 3.数据库设计 请假管理系统涉及到学生用户、教师用户和管理员。根据实际应用的需要,最大限度的提高系统的性能,本系统涉及到8张表,分别是管理员表、学生表、教师表、请假表、审核表、岗位表、管理员表、权限表。 学生表(student): 字段 类型 长度 主键 是否为空 注释 id int 50 1 0 id stu_num vachar 50 0 0 学号 stu_name vachar 50 0 0 学生姓名 stu_sex vachar 50 0 0 性别 stu_class vachar 50 0 0 班级
6、 leava_times int 50 0 0 请假次数 stu_phone vachar 50 0 0 联系电话 stu_yuanxi vachar 50 0 0 所属院系 root_type vachar 50 0 0 权限类型(岗位名称) 教师表(teacher): 字段 类型 长度 主键 是否为空 注释 id int 50 1 0 id tch_num vachar 50 0 0 教师编号 tch_name vachar 50 0 0 教师姓名 tch_sex vachar 5
7、0 0 0 教师性别 lavel vachar 50 0 0 级别(辅导员,领导) yuanxi vachar 50 0 0 所属院系 tch_phone vachar 50 0 0 联系电话 root_type vacahr 50 0 0 权限类型(岗位名称) 请假表(leave): 字段 类型 长度 主键 是否为空 注释 id int 50 1 0 id leave_num vachar 50 0 0 请假流水号 leave_start vachar 50 0 0 请假开始时间
8、 leave_end vachar 50 0 0 请假结束时间 leave_days vachar 50 0 0 请假天数 leave_reason vachar 50 0 0 请假原因 stu_num vachar 50 0 0 请假学号 stu_name vachar 50 0 0 学生姓名 审核表(audit): 字段 类型 长度 主键 是否为空 注释 id int 50 1 0 id leave_num vachar 50 0 0 请假流水号 audit_name vachar
9、 50 0 0 审核人 audit_status int 50 0 0 审核状态 audit_time vachar 50 0 0 审核时间 audit_posi vachar 50 0 0 审核岗位 audit_note vachar 150 0 0 批注 岗位表(position): 字段 类型 长度 主键 是否为空 注释 id int 50 1 0 id posi_num vachar 50 0 0 岗位编号 posi_name vachar 50 0 0 岗位名称
10、 管理员表(admin): 字段 类型 长度 主键 是否为空 注释 id int 50 1 0 id admin_num vachar 50 0 0 管理员编号 admin_name vacahr 50 0 0 管理员名字 admin_phone int 10 0 0 联系电话 权限表(root): 字段 类型 长度 主键 是否为空 注释 id int 50 1 0 id root_type vachar 50 0 0 权限类型(学生,辅导员,领导) root_list vachar
11、 50 0 0 权限集合 root_num vachar 50 0 0 权限编号 4. 功能模块设计 请假管理系统涉及到学生用户、教师用户和管理员,主要的功能模块为学生管理模块、教师管理模块、请假管理模块、角色管理模块。本系统的功能模块图如图:4-0 图4-0 4.1系统流程 4.1.1登陆流程:如图4-1-1 图4-1-1 4.1.2请假流程:需要请假的学生可以在系统中填写请假条进行请假申请,提交请假申请后,提交到辅导员岗进行审核,如果请假时间小于或等于3天,辅导员审核通过后生成请假记录,未通过,请假流程结束,如果请假时间大于3天,若
12、未审核未通过则请假流程结束,若在辅导员岗审核通过,则提交到院领导岗进行审核,审核通过后生成请假记录,未通过则请假流程结束;如图4-1-2 图4-1-2 4.1.3权限设置流程:系统管理员可以通过权限设置进行添加不同的登录角色并可以赋予不同的权限;如图4-1-3 图4-1-3 4.1.4修改权限:系统管理员可以通过查询出系统不同用户类型的权限并可以进行各种权限的添加或者删除进行修改;如图4-1-4 图4-1-4 5. 主要功能的具体实现 5.1请假功能的实现 学生在需要请假时,进入系统按照要求填写好请假条的内容确认后则提交请假申请交由辅导员进行审核。如图所示:
13、 其部分代码如下: Action: /** * 保存请假条信息 * @return */ public String addLeave(){ System.out.println("请假表信息:"+leave); String username = (String) getRequest().getSession().getAttribute("username"); String rootType = (String) getRequest().getSession().getAttribute("rootType"); leaveSe
14、rvice.doFirstAudi(leave, username, rootType);
return SUCCESS;
}
Struct.xml:
15、 * @param auditName 审核人,请假学生 * @param auditPosi 审核岗位 * @param auditStatus 审核状态 1-未审核, 2-已审核 , 3-审核不通过 */ @Override public void doFirstAudi(Leave leave,String auditName,String auditPosi) { System.out.println("保存请假表,生成第一岗记录----------"); //0-生成流水号 UUID uuid = UUID.randomUUID();
16、 leave.setLeaveNum(uuid.toString()); //保存请假表 leaveDAO.save(leave); //3-保存审核表 //1.申请登记(学生自己) //(1)办结本岗,流水号、审核人、岗位名称、状态=2(已审核) Audit audit1 = new Audit(); audit1.setLeaveNum(uuid.toString()); audit1.setAuditName(auditName); audit1.setAuditPosi(auditPosi); audit1.setStuN
17、ame(auditName); audit1.setAuditStatus(2); auditDAO.save(audit1); //(2)初始化辅导员岗位,流水号、岗位名称、状态=1(未审核) Audit audit2 = new Audit(); audit2.setLeaveNum(uuid.toString()); audit2.setStuName(auditName); audit2.setAuditPosi("辅导员"); audit2.setAuditStatus(1); auditDAO.save(audit2); }
18、 5.2审核功能的实现 学生提交请假申请后,提交到辅导员岗进行审核,如果请假时间小于或等于3天,辅导员审核通过后生成请假记录,未通过,请假流程结束,如果请假时间大于3天,若未审核未通过则请假流程结束,若在辅导员岗审核通过,则提交到院领导岗进行审核,审核通过后生成请假记录,未通过则请假流程结束; 如图5-2-0和图5-2-1 图5-1-0 图5-2-1 其部分代码如下 LeaveAction: /** * 第二岗 * @return */ public String doSecond(){ System.out.println("审核信息+"+
19、leave); System.out.println("审核批注+"+leave.getAuditNote()); String username = (String) getRequest().getSession().getAttribute("username"); String rootType = (String) getRequest().getSession().getAttribute("rootType"); leaveService.doSecond(leave, username, rootType); return null; }
20、/** * 最后一岗 * @return */ public String doEnd(){ System.out.println("院领导审核信息+"+leave); System.out.println("院领导审核批注+"+leave.getAuditNote()); String username = (String) getRequest().getSession().getAttribute("username"); String rootType = (String) getRequest().getSession().getAttr
21、ibute("rootType"); leaveService.doEnd(leave, username, rootType); return null; } LeaveServiceImpl: /** * 办结第二岗 * @param leave 请假表对象 * @param auditNote 审核批注 * @param auditName 审核人 * @param auditPosi 审核人 */ public void doSecond(Leave leave,String auditName, String auditPo
22、si){ //(1)办结本岗,流水号、审核人、岗位名称、状态=2(已审核) int days =Integer.parseInt(leave.getLeaveDays()); Audit audit1 = new Audit(); audit1.setLeaveNum(leave.getLeaveNum()); audit1.setAuditName(auditName); audit1.setAuditPosi("辅导员"); audit1.setAuditNote(leave.getAuditNote()); audi
23、t1.setAuditStatus(2); if(days<=3){//小于等于3天,成功标志设置为1 audit1.setAuditEnd(1); Leave lea = new Leave(); lea.setAuditName(auditName); lea.setAuditNote(leave.getAuditNote()); lea.setLeaveNum(leave.getLeaveNum()); leaveDAO.updateLeave(lea); }else{ audit1
24、setAuditEnd(0); } auditDAO.updateByLeaveNum(audit1); if(days>3){//大于3天,生成下一岗记录 Audit audit2 = new Audit(); audit2.setLeaveNum(leave.getLeaveNum()); audit2.setStuName(leave.getStuName()); audit2.setAuditPosi("院领导"); audit2.setAuditStatus(1); auditDA
25、O.save(audit2); } } /** * 办结最后一岗 * @param leave 请假表对象 * @param auditNote 审核批注 * @param auditName 审核人 * @param auditPosi 审核人 */ public void doEnd(Leave leave,String auditName, String auditPosi){ //(1)办结本岗,流水号、审核人、岗位名称、状态=2(已审核) Audit audit = new Audit(); audi
26、t.setLeaveNum(leave.getLeaveNum()); audit.setAuditName(auditName); audit.setAuditPosi("院领导"); audit.setAuditNote(leave.getAuditNote()); audit.setAuditStatus(2); audit.setAuditEnd(1); Leave lea = new Leave(); lea.setAuditName(auditName); lea.setAuditNote
27、leave.getAuditNote()); lea.setLeaveNum(leave.getLeaveNum()); leaveDAO.updateLeave(lea); auditDAO.updateByLeaveNum(audit); } 5.3权限修改功能 系统管理员可以通过查询出系统不同用户类型的权限并可以进行各种权限的添加或者删除进行修改;如图:图5-3 图5-3 其部分代码如下 RoleAction: public String updateRole() throws IOException{ System
28、out.println("更新的权限列表:"+role.getRootList()); roleService.updateUser(role); setForwardpage(JSP_ROLE_LIST); tips = "修改成功!"; return SUCCESS; } /** * 根据角色id查找权限列表返回前台设置单选框的状态 * @return * @throws IOException */ public String findListByRootID() throws IOException{
29、String rootType = role.getRootType(); role = roleService.findListByRootID(rootType); System.out.println("返回数据json:"+role); return "json2"; } RoleServiceImpl: /** * 根据rootType获取权限对象 * @return Role */ @Override public Role findListByRootID(String rootType) { return roleDao.
30、findRootListByRoottype(rootType); } /** * 更新角色权限 * @param role 权限对象 */ @Override public void updateUser(Role role) { Role role_1 = null; List list = roleDao.findByRootType(role.getRootType()); if(list.size()>0){ role_1 = (Role) list.get(0); } role_1.setRootList(ro
31、le.getRootList()); try { roleDao.merge(role_1); } catch (Exception e) { e.printStackTrace(); } } 5.4导入功能 学生、教师基本信息可以通过导入excel表格的方式进行批量添加,其部分代码如下: JSP:






