• 1.68 MB
  • 2022-05-17 13:23:49 发布

宿舍考勤管理系统详细设计与实现

  • 31页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
引言在互联网思维蔓延的今天,自动化,信息化显得尤为重要。宿舍的管理、考勤在以前是一项耗费人力物力的低效机械劳动。但在今天,随着计算机技术的突飞猛进,借助信息化技术,宿舍管理、考勤,正在变得简单而高效,只需少量人员,便可以轻松管理整个学校的宿舍和学生。随着大数据的到来,管理人员只需点击鼠标,便可将详尽、准确的报表数据一览无余,精确的预测学生的行为状态。系统详细设计与实现,正是电子化信息管理的关键一环。系统之前的设计,都是在建立扎实的基础,而详细设计与实现则是真正建立高效稳定的系统,是对系统的每一个细微环节的优化,是一项精雕细琢的工作。系统的每一个功能,都需在此过程中精妙设计,仔细推敲,反复验证。只有这样,系统才能让用户满意,达到预期的效果。也只有经过详细设计,才能确保后面的代码实现,不偏离用户的需求,系统的定义,从而让之后的测试和维护变得简单有意义。系统详细设计与实现,是整个软件工程中通向成功的重要一步。前期的铺垫设计,是为了详细设计的明确性,不至于浪费时间,走弯路,同时也保障了代码实现的准确性。但并不是说详细设计与实现没有自主性,相反,在此过程中可以验证需求的正确性,问题定义的准确性,起到了补充完善的作用,使得系统更为符合用户的需求。系统详细设计与实现,承接之前的问题定义、可行性研究、需求分析及总体设计,对之前的分析做一个系统的验证和实现,同时开启之后的系统测试、系统维护和反馈,保证之后的过程通常顺利,从而保证整个软件工程质量,使得系统高效、稳定、安全。1问题定义本人与杨博文、王玉霞、张晓燕、夏成旭同学共同参与了这个过程,其中王玉霞在这个过程中起主要作用。2系统可行性研究本人与杨博文、王玉霞、张晓燕、夏成旭同学共同参与了这个过程,其中王玉霞在这个过程中起主要作用。3系统开发计划本人与杨博文、王玉霞、张晓燕、夏成旭同学共同参与了这个过程,其中王玉霞在这个过程中起主要作用。4系统需求分析31 本人与杨博文、王玉霞、张晓燕、夏成旭同学共同参与了这个过程,其中王玉霞在这个过程中起主要作用。5系统总体设计本人与杨博文、王玉霞、张晓燕、夏成旭同学共同参与了这个过程,其中夏成旭在这个过程中起主要作用。6系统数据库设计本人与杨博文、王玉霞、张晓燕、夏成旭同学共同参与了这个过程,其中杨博文在这个过程中起主要作用。7系统详细设计与实现本人与杨博文、王玉霞、张晓燕、夏成旭同学共同参与了这个过程,其中本人在这个过程中起主要作用。7.1核心技术简介7.1.1Java简介Java是目前最流行的面向对象的程序设计语言之一。它具有简单,跨平台,健壮安全,可移植,多线程的特点。其语言风格十分接近C、C++语言。与C,C++不同的是,Java是一个纯粹的面向对象的程序设计语言,它继承了C++语言面向对象技术的核心,但舍弃了C++中容易出错的指针。Java的核心思想是“一次编写,到处运行(Writeonce,Runanywhere)”在实现了Java虚拟机的机器上,Java可以运行其特定编译的字节码,从而达到跨平台,到处运行的效果。7.1.2Struts2简介Struts2是目前Web开发中较为成熟的MVC框架,它兼容Struts1和WebWork。所谓MVC框架是指Web开发中的三层结构,即:1.Model(模型)2.View(视图)3.Contorller(控制器)。Struts2中MVC的对应关系为:1.Model:JavaBean。2.View:JSP、Struts2的TagLib。3.Controller:Struts2的ActionServlet、Action。Struts2的简单处理流程如下:1.浏览器发送请求。2.中心处理器根据Struts2配置文件struts.xml,查找对应的处理请求的Action类。3.WebWork的拦截器链自动对请求应用通用功能,例如:WorkFlow、Validation等功能。4.如果Struts.xml文件中配置Method参数,则调用Method参数对应的Action类中的Method方法,否则调用通用的Execute方法来处理用户请求。5.将Action类中的对应方法返回的结果响应给浏览器。31 7.1.3ApacheTomcat服务器简介Apache是普通WEB服务器,本身只支持HTML即普通静态网页,而Tomcat是应用(java)服务器,它只是一个servlet容器,是Apache的扩展。Apache只支持静态网页,但像asp,php,cgi,jsp等动态网页就需要Tomcat来处理。Apache是html容器,功能像IIS一样;Tomcat是jsp/servlet容器,用于发布jsp。将Apache和Tomcat整合在一起,则可以很好处理前台页面请求,快速响应动态和静态的页面请求,适合运用java环境开发的WEB应用程序。因此目前许多WEB服务器都是采用Tomcat。7.1.4MySQL数据库简介MySQL数据库是目前较为流行的关系型数据库管理系统,大多数中小型企业和个人都选用它来构建稳定健壮的网站系统。MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言。7.1.5JSP页面简介JSP全名为JavaServerPages,即java服务器页面。它主要是在传统HTML中嵌入JSP标签(以<%,%>形式),并在后台服务器端执行,生成相应HTML标签,客户端只要有浏览器便可以浏览。JSP技术将传统的静态HTML页面变为动态页面,丰富了前台显示效果,简化了HTML页面的显示复杂性,将网页逻辑与设计分离开来,使得Web应用程序的开发变得迅速和容易。JSP页面内部可以嵌入java代码,也可嵌入JSP标签,从而增加了页面的灵活性,使页面功能更为完善强大。7.1.6JavaScript,JQuery,CSS简介JavaScript是一种动态类型,弱变量类型的解释性脚本语言,广泛应用于浏览器客户端。JavaScript脚本语言具有以下特点:(1)脚本语言。(2)基于对象。(3)简单。(4)动态性。(5)跨平台性。jQuery是一个兼容多浏览器的JavaScript库,是目前最流行的前台轻量级JavaScript库,其核心理念是writeless,domore(写得更少,做得更多)。CSS中文名:级联样式表,是一种用来表现HTML或XML等文件样式的计算机语言。它能精确控制网页元素显示效果。并能够进行初步交互设计。CSS能够根据不同使用者的理解能力,简化或者优化写法,针对各类人群,有较强的易读性。31 7.2系统架构设计7.2.1B/S体系设计本系统采用了浏览器/服务器的体系结构,分为“浏览器/Web服务器/Web应用程序/数据缓存服务器/数据库”四层结构。用户通过浏览器,向服务器发出http请求,部署在网络上的Appache接受到请求后,先从缓存服务器中查找用户请求的信息,有则返回缓存信息给用户,没有则将请求发送给Tomcat服务器,然后Tomcat将请求封装好,交给Web应用程序,Web应用程序链接数据库,处理用户的请求,并将结果反馈给Tomcat服务器,并由后者交给Apache服务器,返回给用户。其流程体系如图7-1所示。Web应用程序Apache服务器Browser浏览器Tomcat服务器wwebMysql数据库缓存数据库图7-1四层体系结构图第一层(表示层):Browser即Web浏览器。本层的主要作用是:显示系统逻辑,为用户和系统提供一个友好的交互页面。其工作流程是:1.浏览器接受用户的请求。2.浏览器将用户请求交给系统处理,等待处理结果。3.系统将处理结果返回给浏览器显示。第二层(应用层):对Http请求相应的Web服务器。该层主要接受浏览器请求,并转发给相应Web应用程序。工作流程为:Apache服务器接受来自前台的Http请求,简单封装后将其转发给相应的Web应用程序。第三层(业务逻辑层):Web应用程序对Http请求的业务逻辑处理。Web应用程序接受Web服务器的Http请求后,调用相应的ActionServlet及Dao(数据访问对象)层接口,完成对数据业务的逻辑处理。第四层(数据服务层):访问缓存数据库及数据库完成数据的操作。Dao层中调用JDBC接口打开数据库,读取数据库数据或缓存数据,完成业务逻辑层对于数据的操作,从而完成此次请求的处理,并返回结果至用户浏览器。31 7.2.2系统总体结构宿舍考勤管理系统主要分为:宿舍管理,考勤管理,及学生管理。本系统引入了角色权限管理,分别有“超级管理员”,“宿舍区管理员”,“学生”。超级管理员主要管理各个宿舍区管理员,及学生的登记入住。宿舍区管理员主要管理该宿舍区的情况,包括各个宿舍和学生,以及考勤。学生主要管理个人信息及查看自己的缺勤情况。总体框架如图7-2所示。Apache+Tomcat+Mysql宿舍考勤管理系统B/S结构WindowsXP/Windows7/Windows8图7-2宿舍考勤管理系统总体框架图图7-2宿舍考勤系统总体框架7.3系统总体工程结构7.3.1MVC设计思想MVC即ModelViewController,是模型(Model)-视图(view)-控制器(Controller)的缩写。它一种常见的设计模式,Web应用框架,更是一种解决复杂应用问题的思想。MVC模式的核心思想是分离责任,让数据、模型、和视图分离开来,降低模块间的耦合性,示意图如7-3所示模型更新更新视图2视图1获得数据获得数据控制器改变改变事件31 图7-3MVC结构示意图7.3.2模型层结构模型是数据库里的实体及实体的业务逻辑操作,在Java中用Javabean或EJB来实现,其主要作用是在各层之间起一个数据传输的桥梁。模型功能结构如图7-4所示。宿舍区管理员模型TeacherBean.java宿舍区管理员表teacher宿舍模型domitory宿舍模型DomitoryBean.java刷卡记录模型CardDataBean.java刷卡记录表card_data缺勤记录表log缺勤记录模型LogBean.java考勤时间范围模型CheckTime.java考勤时间范围check_time图7-4自动考勤模块Model层主要实体及JavaBean结构图7.3.3视图层结构视图是用户直观看见的界面,用户通过视图,并进行输入,从而达到与系统交互的目的。在MVC框架中,视图层(View)主要将model层的数据更新显示出来,对controller层中的逻辑控制作出响应,跳至对应页面。其主要作用就是理由JSP页面等载体,将model层的数据展示出来,提供给用户交互的界面,使得系统与用户交互变得既友好又简单。视图层结构图如7-5,7-6,所示。31 宿舍考勤管理系统系统登录首页Login.jsp登录宿舍区管理员学生学生首页IndexStudent.jsp宿舍区管理员首页IndexManager.jsp超级管理员超级管理员首页IndexAdmin.jsp图7-5宿舍考勤管理系统登录功能结构图自动考勤自动考勤页面ManagerAutoCheck.jsp自动考勤报表页面ManagerAutoCheckReport.jsp图7-6自动考勤功能结构图31 7.3.4控制层结构控制层(Controller)负责具体的业务模块流程的控制,一般流程是:前台请求Action,MVC框架根据配置文件跳至相应Aciton,并在Action里调用相应方法,以及service,service里调用dao层数据库连接,待数据库操作完成,Action里返回相应jsp达到控制效果。控制层结构示意图如7-7,7-8所示。首页登录请求处理publicStringexecute()throwsException首页登录控制器GoLogin.java图7-7宿舍考勤系统登录控制器结构图自动考勤请求处理publicStringexecute()throwsException自动考勤控制器ManagerAutoCheck.java自动考勤报表请求处理publicStringexecute()throwsException自动考勤报表控制器ManagerAutoCheckReport.java图7-8自动考勤系统登录控制器结构图7.4系统功能模块分析7.4.1宿舍考勤管理系统主要功能1)宿舍管理。包括宿舍区和宿舍两部分管理。超级管理员和宿舍区管理员都有宿舍管理权限,但宿舍区的管理只有超级管理员有权限。2)学生管理。包括学生的个人信息及考勤情况。超级管理员和宿舍区管理员都有学生管理权限。3)考勤管理。包括自动考勤和报表统计,自动考勤主要用宿舍区管理员操作,报表统计有宿舍区管理员和超级管理员查看。4)请假管理。包括学生请假申请和管理员审批,学生填写请假条,并提交,有宿舍区管理员审核,超级管理员查看。31 7.4.2宿舍考勤管理系统主要使用者1)学生。主要查看自己的缺勤情况,以及请假申请,管理个人信息。2)宿舍区管理员。主要管理宿舍区下的所有宿舍和学生,以及自动考勤和请假审核。宿舍区管理员可以手动填写学生的缺勤记录,还可以使用自动考勤功能,设置考勤时间后,自动生成缺勤记录,并且可根据缺勤记录查看本宿舍区的报表统计,根据报表数据预测学生行为状态。3)超级管理员。主要管理宿舍区管理员和学生的入住登记,以及所有宿舍区。并且可以查看各个宿舍区的缺勤,请假情况,及报表统计。7.5系统开发环境本系统在开发和设计的过程中遵循软件工程和管理工程的相关理论,采用面向对象的方法,运用MVC思想设计,从而保证了系统的稳健性和“高内聚、低耦合”。整个系统的核心框架为Struts2,结合JavaBean及JSP,MYSQL实现系统。整个系统采取了目前较为流行的开发方法“敏捷开发”,以求达到对需求变化的反应迅速而敏捷,系统迭代符合需求变更,保证用户时时能用到符合用户需求的稳定、安全的系统。本系统的开发环境为:操作系统:windowsXP/windows7/windows8浏览器:InternetExplorer11/Chrome(谷歌浏览器)运行环境:Apache2.2,Tomcat7.0,JDK1.7,Strut2.0数据库平台:MySQL5.5编程工具:MyEclipse10.7/Eclipse3.57.6系统功能模块设计7.6.1登录模块(1)模型层设计packagecom.bean;publicclassAdminBean{privateintAdmin_ID;privateStringAdmin_Username;privateStringAdmin_Password;privateStringAdmin_Name;AdminBean(超级管理员)核心代码如下:31 privateStringAdmin_Sex;privateStringAdmin_Tel;publicintgetAdmin_ID(){returnAdmin_ID;}publicvoidsetAdmin_ID(intadminID){Admin_ID=adminID;}publicStringgetAdmin_Username(){returnAdmin_Username;}publicvoidsetAdmin_Username(StringadminUsername){Admin_Username=adminUsername;}publicStringgetAdmin_Password(){returnAdmin_Password;}publicvoidsetAdmin_Password(StringadminPassword){Admin_Password=adminPassword;}publicStringgetAdmin_Name(){returnAdmin_Name;}publicvoidsetAdmin_Name(StringadminName){Admin_Name=adminName;}publicStringgetAdmin_Sex(){returnAdmin_Sex;}publicvoidsetAdmin_Sex(StringadminSex){Admin_Sex=adminSex;}publicStringgetAdmin_Tel(){returnAdmin_Tel;}publicvoidsetAdmin_Tel(StringadminTel){Admin_Tel=adminTel;}}31 控制层设计GoLogin(登录Action)核心代码如下:publicStringexecute()throwsException{if(Type.equals("系统管理员")){if(null==newAdminDao().CheckLogin(Username,Password)){Msg="用户名或者密码错误";returnINPUT;}else{//获取IDStringAdmin_ID=newAdminDao().CheckLogin(Username,Password);//创建sessionHttpSessionsession=ServletActionContext.getRequest().getSession();session.setAttribute("id",Admin_ID);session.setAttribute("type","1");returnSUCCESS;}}elseif(Type.equals("楼宇管理员")){if(null==newTeacherDao().CheckLogin(Username,Password)){Msg="用户名或者密码错误";returnINPUT;}else{//获取IDStringTeacher_ID=newTeacherDao().CheckLogin(Username,Password);//创建sessionHttpSessionsession=ServletActionContext.getRequest().getSession();session.setAttribute("id",Teacher_ID);session.setAttribute("type","2");return"successManager";}}31 (3)视图层设计首页登录视图及宿舍区管理员登录视图,如图7-9,7-10所示。图7-9首页登录视图图7-10宿舍区管理员登录视图31 7.6.2自动考勤模块(1)模型层设计CardDataBean(门禁系统数据)publicclassCardDataBean{privateintbuilding_ID;privateStringstudent_Username;privateStringupdate_Date;privateStringupdate_Time;privateintrecord_Flag;publicintgetBuilding_ID(){returnbuilding_ID;}publicvoidsetBuilding_ID(intbuilding_ID){this.building_ID=building_ID;}publicStringgetStudent_Username(){returnstudent_Username;}publicvoidsetStudent_Username(Stringstudent_Username){this.student_Username=student_Username;}publicStringgetUpdate_Date(){returnupdate_Date;}publicvoidsetUpdate_Date(Stringupdate_Date){this.update_Date=update_Date;}publicStringgetUpdate_Time(){returnupdate_Time;}publicvoidsetUpdate_Time(Stringupdate_Time){this.update_Time=update_Time;}publicintgetRecord_Flag(){returnrecord_Flag;}publicvoidsetRecord_Flag(intrecord_Flag){this.record_Flag=record_Flag;}}31 (2)控制器层设计publicStringexecute()throwsException{//解决乱码,用于页面输出HttpServletResponseresponse=null;response=ServletActionContext.getResponse();HttpServletRequestrequest=ServletActionContext.getRequest();response.setContentType("text/html;charset=UTF-8");response.setCharacterEncoding("UTF-8");PrintWriterout=response.getWriter();//创建session对象HttpSessionsession=ServletActionContext.getRequest().getSession();//验证是否正常登录if(session.getAttribute("id")==null){out.print("alert("请重新登录!");window.location="Login.jsp";");out.flush();out.close();returnnull;}Stringid=session.getAttribute("id").toString();TbBean=newTBDao().GetByTeacherID(Integer.parseInt(id));Calendarcal=Calendar.getInstance();cal.add(Calendar.DATE,-1);ManagerAutoCheck(自动考勤Action)核心代码如下:31 Stringyesterday=newSimpleDateFormat("yyyy-MM-dd").format(cal.getTime());UpdateTime=newCheckTimeDao().getTimeEnd(Integer.parseInt(id));if(StringUtils.isBlank(UpdateTime))newCheckTimeDao().insert(TbBean.getTB_TeacherID(),"22:30:00","23:30:00",yesterday,yesterday);elsenewCheckTimeDao().UpdateDate(TbBean.getTB_TeacherID(),yesterday);UpdateTime=newCheckTimeDao().getTimeEnd(Integer.parseInt(id));Building_ID=String.valueOf(TbBean.getTB_BuildingID());stu_list=newStudentDao().GetCheckedStudent(Integer.parseInt(Building_ID),Integer.parseInt(id),TbBean.getBuilding_Name(),yesterday);PageUtils.setPageInfo(request,stu_list.size(),15);request.setAttribute("Building_Name",TbBean.getBuilding_Name());request.setAttribute("yesterday",yesterday);request.setAttribute("list_size",stu_list.size());request.setAttribute("Building_ID",Building_ID);request.setAttribute("stu_list",stu_list);returnSUCCESS;}privatebooleanisInvalid(Stringvalue){return(value==null||value.length()==0);}//测试publicstaticvoidmain(String[]args){System.out.println();}}31 (3)视图层设计缺勤统计视图及自动考勤视图,如图7-11,7-12所示。图7-11缺勤统计视图图7-12自动考勤视图31 7.6.3自动考勤报表模块(1)模型层设计ReportBean(报表模型)核心代码如下:publicclassReportBean{privateStringreport_Date_Start;privateStringreport_Date_End;privateStringreport_Building_Name;privateStringreport_Domitory_Name;publicStringgetReport_Date_Start(){returnreport_Date_Start;}publicvoidsetReport_Date_Start(Stringreport_Date_Start){this.report_Date_Start=report_Date_Start;}publicStringgetReport_Date_End(){returnreport_Date_End;}publicvoidsetReport_Date_End(Stringreport_Date_End){this.report_Date_End=report_Date_End;}publicStringgetReport_Building_Name(){returnreport_Building_Name;}publicvoidsetReport_Building_Name(Stringreport_Building_Name){this.report_Building_Name=report_Building_Name;}publicStringgetReport_Domitory_Name(){returnreport_Domitory_Name;}publicvoidsetReport_Domitory_Name(Stringreport_Domitory_Name){this.report_Domitory_Name=report_Domitory_Name;}publicStringgetReport_Absent_Count(){returnreport_Absent_Count;}publicvoidsetReport_Absent_Count(Stringreport_Absent_Count){this.report_Absent_Count=report_Absent_Count;}31 (2)控制层设计publicclassManagerAutoCheckReportextendsActionSupport{privateTBBeanTbBean;privateStringBuilding_ID;privateListreport_list;publicListgetReport_list(){returnreport_list;}publicvoidsetReport_list(Listreport_list){this.report_list=report_list;}publicStringgetBuilding_ID(){returnBuilding_ID;}publicvoidsetBuilding_ID(Stringbuilding_ID){Building_ID=building_ID;}publicTBBeangetTbBean(){returnTbBean;}publicvoidsetTbBean(TBBeantbBean){TbBean=tbBean;}publicStringexecute()throwsException{//解决乱码,用于页面输出HttpServletResponseresponse=null;response=ServletActionContext.getResponse();HttpServletRequestrequest=ServletActionContext.getRequest();response.setContentType("text/html;charset=UTF-8");response.setCharacterEncoding("UTF-8");PrintWriterout=response.getWriter();//创建session对象HttpSessionsession=ServletActionContext.getRequest().getSession();//验证是否正常登录ManagerAutoCheckReport(自动考勤报表Action)核心代码如下:31 if(session.getAttribute("id")==null){out.print("alert("请重新登录!");window.location="Login.jsp";");out.flush();out.close();returnnull;}Stringid=session.getAttribute("id").toString();String_building_ID=request.getParameter("building_ID");TbBean=newTBDao().GetByTeacherID(Integer.parseInt(id));if(session.getAttribute("type").toString().equals("2"))Building_ID=String.valueOf(TbBean.getTB_BuildingID());if(!StringUtils.isBlank(_building_ID))Building_ID=_building_ID;report_list=newReportDao().getReport(Integer.parseInt(Building_ID));request.setAttribute("report_list",report_list);request.setAttribute("Building_ID",Building_ID);PageUtils.setPageInfo(request,report_list.size(),15);returnSUCCESS;}}privatebooleanisInvalid(Stringvalue){return(value==null||value.length()==0);}//测试publicstaticvoidmain(String[]args){System.out.println();}}31 (3)视图层设计报表宿舍区选择视图及自动考勤报表视图,如图7-13,7-14所示。图7-13报表宿舍区选择视图图7-14自动考勤报表视图31 7.6.4请假管理模块(1)模型层设计AbsentReqBean(请假表模型)publicclassAbsentReqBean{privateIntegerid;privateIntegerstudent_ID;privateStringstudent_name;privateStringcreate_time;privateStringstart_time;privateStringend_time;privateStringreason;//请假原由privateintstatus;//状态0草稿,1提交,2审批通过,3拒绝,-1删除……privateIntegeraudit_id;//审批人privateStringaudit_name;privateStringaudit_time;//审批时间privateStringaudit_content;//审批意见publicIntegergetId(){returnid;}publicvoidsetId(Integerid){this.id=id;}publicIntegergetStudent_ID(){returnstudent_ID;}publicvoidsetStudent_ID(Integerstudent_ID){this.student_ID=student_ID;}publicStringgetCreate_time(){returncreate_time;}publicvoidsetCreate_time(Stringcreate_time){this.create_time=create_time;}publicStringgetStart_time(){returnstart_time;}publicvoidsetStart_time(Stringstart_time){this.start_time=start_time;}31 publicStringgetEnd_time(){returnend_time;}publicvoidsetEnd_time(Stringend_time){this.end_time=end_time;}publicStringgetReason(){returnreason;}publicvoidsetReason(Stringreason){this.reason=reason;}publicintgetStatus(){returnstatus;}publicvoidsetStatus(intstatus){this.status=status;}publicIntegergetAudit_id(){returnaudit_id;}publicvoidsetAudit_id(Integeraudit_id){this.audit_id=audit_id;}publicStringgetAudit_time(){returnaudit_time;}publicvoidsetAudit_time(Stringaudit_time){this.audit_time=audit_time;}publicStringgetAudit_content(){returnaudit_content;}publicvoidsetAudit_content(Stringaudit_content){this.audit_content=audit_content;}publicStringgetStudent_name(){returnstudent_name;}publicvoidsetStudent_name(Stringstudent_name){this.student_name=student_name;}}(2)控制层设计AbsentManager(请假管理Action)核心代码如下:31 publicStringexecute()throwsException{HttpServletResponseresponse=null;response=ServletActionContext.getResponse();response.setContentType("text/html;charset=UTF-8");response.setCharacterEncoding("UTF-8");PrintWriterout=response.getWriter();HttpSessionsession=ServletActionContext.getRequest().getSession();if(session.getAttribute("id")==null){out.print("alert("登录错误");window.location="Login.jsp";");out.flush();out.close();returnnull;}StringstrWhere="1=1";if(!(isInvalid(SearchKey))){strWhere+="and"+SearchRow+"=""+SearchKey+""";}if("3".equals(session.getAttribute("type"))){strWhere+="andb.student_id="+session.getAttribute("id");}list=newAbsentReqDao().GetList(strWhere,"create_time");returnSUCCESS;}privatebooleanisInvalid(Stringvalue){return(value==null||value.length()==0);}//测试publicstaticvoidmain(String[]args){System.out.println();}}31 (3)视图层设计请假管理视图及请假申请单视图,如图7-15,7-16所示。图7-15请假管理视图图7-16请假申请单视图31 7.6.5宿舍管理模块(1)模型层设计DomitoryBean(宿舍表模型)publicclassDomitoryBean{privateintdomitory_ID;privateintdomitory_BuildingID;privateStringdomitory_Name;privateStringdomitory_Type;privateStringdomitory_Number;privateStringdomitory_Tel;publicintgetDomitory_ID(){returndomitory_ID;}publicvoidsetDomitory_ID(intdomitory_ID){this.domitory_ID=domitory_ID;}publicintgetDomitory_BuildingID(){returndomitory_BuildingID;}publicvoidsetDomitory_BuildingID(intdomitory_BuildingID){this.domitory_BuildingID=domitory_BuildingID;}publicStringgetDomitory_Name(){returndomitory_Name;}publicvoidsetDomitory_Name(Stringdomitory_Name){this.domitory_Name=domitory_Name;}publicStringgetDomitory_Type(){returndomitory_Type;}publicvoidsetDomitory_Type(Stringdomitory_Type){this.domitory_Type=domitory_Type;}publicStringgetDomitory_Number(){returndomitory_Number;}publicvoidsetDomitory_Number(Stringdomitory_Number){this.domitory_Number=domitory_Number;}31 publicStringgetDomitory_Tel(){returndomitory_Tel;}publicvoidsetDomitory_Tel(Stringdomitory_Tel){this.domitory_Tel=domitory_Tel;}publicStringgetBuilding_Name(){returnbuilding_Name;}publicvoidsetBuilding_Name(Stringbuilding_Name){this.building_Name=building_Name;}privateStringbuilding_Name;}(2)控制层设计publicStringexecute()throwsException{//解决乱码,用于页面输出HttpServletResponseresponse=null;response=ServletActionContext.getResponse();HttpServletRequestrequest=ServletActionContext.getRequest();response.setContentType("text/html;charset=UTF-8");response.setCharacterEncoding("UTF-8");PrintWriterout=response.getWriter();//创建session对象HttpSessionsession=ServletActionContext.getRequest().getSession();//验证是否正常登录if(session.getAttribute("id")==null){out.print("alert("请重新登录!");window.location="Login.jsp";");out.flush();out.close();returnnull;}HttpSessionsession=ServletActionContext.getRequest().getSession();//验证是否正常登录if(session.getAttribute("id")==null){DomitoryManager(宿舍管理Action)核心代码如下:31 out.print("alert("请重新登录!");window.location="Login.jsp";");out.flush();out.close();returnnull;}StringstrWhere="1=1";String_Domitory_BuildingID=request.getParameter("Domitory_BuildingID");if(!StringUtils.isBlank(_Domitory_BuildingID))Domitory_BuildingID=_Domitory_BuildingID;Stringid=session.getAttribute("id").toString();if(session.getAttribute("type").toString().equals("2")){Domitory_BuildingID=String.valueOf(newTBDao().GetByTeacherID(Integer.parseInt(id)).getTB_BuildingID());}if(!(isInvalid(SearchKey))){strWhere+="and"+SearchRow+"=""+SearchKey+""";}if(!(isInvalid(Domitory_BuildingID))){strWhere+="andDomitory_BuildingID=""+Domitory_BuildingID+""";}if(session.getAttribute("type").toString().equals("1"))buildinglist=newBuildingDao().GetList("","Building_Name");elseif(session.getAttribute("type").toString().equals("2"))buildinglist=newBuildingDao().GetTeacherBuildingList(Integer.parseInt(id));//查询所有list=newDomitoryDao().GetList(strWhere,"Domitory_Name");PageUtils.setPageInfo(request,list.size(),15);request.setAttribute("Domitory_BuildingID",Domitory_BuildingID);returnSUCCESS;}31 (3)视图层设计多区域宿舍管理视图及单区域宿舍管理视图,如图7-17,7-18所示。图7-17多区域宿舍管理视图图7-18单区域宿舍管理视图31 7.7小结首先,通过宿舍考勤管理系统的详细设计与实现,我们组对软件设计又有了更深入的认识。这次宝贵的项目经验,对我们以后的工作和生活有很重要的意义。尽管我们的设计可能还有不足之处,但整体来说,我们达到了预期的效果,锻炼了动手能力。特别是“自动考勤”,“报表统计”,“请假管理”功能的实现,由于其功能计算和逻辑的复杂性,我们组花费了很大的精力,当然也从中获益匪浅,加固了所学过的如“数据结构”,“操作系统”等专业课知识。所以这是一次较为成功的项目经验。其次,在宿舍考勤管理系统的详细设计和实现中,我们组解决了不少难题,而在这个过程中,我们充分的发挥了团队精神,认识到了团队的力量和重要性。对于系统的每一个细节,我们都精心处理,比如“自动考勤”,我们考虑了多种可能的缺勤情况,像“没有刷卡记录”,“超时缺勤”等等。而“请假管理”,我们考虑到了“草稿箱”和“审批”制度,增加了请假条的多样性和真实性。“报表统计”,我们则考虑到以寝室为单位,统计缺勤人次数,并默认按降序排列,增加了直观性。还有信息管理功能,我们采用了层级管理方式,“超级管理员”管理宿舍区管理员,“宿舍区管理员”管理学生,这样使得管理工作简单而高效。简而言之,我们系统功能的设计,核心思想是“简单,高效,友好、人性化”。最后,总体来说,本次系统详细设计和实现是成功的,功能都已按照之前的设计准确实现,并及时修改了之前设计所考虑不周的地方。在这个过程中,我们组虽然困难重重,但都咬牙坚持过来了,在这些棘手的问题的解决过程中,我们组的解决问题的能力和决心得到了极大的提升,相信以后不管遇到任何问题,我们都会引刃而解。虽然系统还有些不足之处,以及一些需要完善的地方,但相信经过我们组的不懈努力,一定会让我们的宿舍考勤管理系统更加完美,更加人性化,并且也会让之后的测试和维护变得简单顺利。8系统测试本人与杨博文、王玉霞、张晓燕、夏成旭同学共同参与了这个过程,其中张晓燕这个过程中起主要作用。9用户操作手册本人与杨博文、王玉霞、张晓燕、夏成旭同学共同参与了这个过程,其中张晓燕这个过程中起主要作用。31 10结束语经过数月的准备和努力,我们小组完成了宿舍考勤管理系统的开发、实现和测试的工作,在有限的时间里较为圆满的达到了我们所想要达到的目的。在这一段时间中,要非常的感谢让我们具有清晰的头脑,使得我们能够在开发的过程当中解决掉我们独自无法解决的问题,让我们顺利完成此次设计的朱红灿老师。当然,由于是首次去开发一套完整的管理系统,我们还是表现出了许多的不足之处,例如,由于对于这套系统中所涉及的技术并不是完美的熟知,所以我们的小组成员有一个从初接触到熟练到精通的过程。简而言之,在此次的设计过程当中,朱红灿老师对于我们的帮助和指导使得我们小组的各个成员都受益匪浅,活跃了我们的大脑,增长了见识。锻炼了我们的实际操作能力,让我们能够得以不断的完善自我,为我们日后的工作和生活奠定了一些基础。在本次的毕业设计中,我们组也遇到了重重困难,但在朱红灿老师的悉心指导下,以及院领导和系领导的鼓励和关怀下,顺利克服了我们所遇到的困难。衷心感谢朱红灿老师,及院领导和系领导,在我们组毕业设计中所提供的帮助。最后,我们组在此次毕业设计中,学到了不少的东西,尤其是团队合作。同时这次毕业设计也锻炼了我们的动手能力,丰富了知识层面,为以后的工作和生活积累了宝贵的经验。31 参考文献:[1]苏畅.基于JAVA的公司考勤系统的设计与实现[J].科技广场.2013(05):P2~30.[2]章通,陈金玉.网络指纹考勤系统的设计与实现[J].计算机应用与软件.2011(02):P1~17.[3]李建军.基于web应用的高职院校学生考勤系统的设计与开发[J].电脑知识与技术.2012(21):P1~23.[4]季相云.基于J2EE的考勤管理系统的设计与实现[D].山东大学 2012[5]闫振东.一种基于多层块区的数据存储架构[J].微处理机.2015(01):P1~28.[6](美)克罗恩克.数据库处理—基础.设计与实现—(第十一版[M].电子工业出版社.2011(01):P50~245.[7]薛华成.管理信息系统(第6版[M].清华大学出版社.2012(01):P98~177.[8]张海藩.软件工程导论[M].清华大学出版社.2012(05):P75~188.[9]周德伟.MYSQL数据库技术[M].高等教育出版社.2014(08):P20~125.[10]于静.JAVA Web应用开发教程[M].北京邮电大学出版社.2010(04):P35~120.31