jsp班级内部事务管理ssh论文_第1页
jsp班级内部事务管理ssh论文_第2页
jsp班级内部事务管理ssh论文_第3页
jsp班级内部事务管理ssh论文_第4页
jsp班级内部事务管理ssh论文_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

NUMPAGES42毕业设计说明书班级内部事务管理系统设计班级:学号:姓名:学院:专业:指导教师:2013年6月系统设计部分主要介绍了系统详细功能设计、数据库设计以及代码架构设计。系统界面简洁友好,操作简单,安全性高,是一个实用的评教系统。

目录1引言 -6-1.1课题研究背景 -6-1.2课题研究目的 -6-1.3课题可行性分析 -7-2相关开发软件以及技术介绍 -7-2.1B/S结构介绍 -7-2.1.1B/S结构基础 -7-2.1.2B/S架构软件的优势与劣势 -8-2.1.3B/S与C/S结构软件技术上的比较 -9-2.2JavaEE技术介绍 -10-2.2.1Sun公司的企业级应用开发标准 -10-2.2.2JavaEE的优势 -11-2.3Struts2 -11-2.3.1Struts2简介 -11-2.3.2Struts工作原理 -12-2.4Spring框架 -13-2.5Hibernate框架 -13-2.6Tomcat服务器 -14-2.7JavaScript与Ajax -14-3系统需求分析和总体设计 -16-3.1系统模块划分 -16-3.2各模块的需求分析 -17-3.2.1管理员 -17-3.2.2班级成员管理模块需求分析 -18-3.2.3考勤管理模块需求分析 -19-3.2.4班费管理模块需求分析 -19-3.2.5成绩管块需求分析 -20-3.2.6网上投票模块需求分析 -20-3.2.7文件共享模块需求分析 -22-3.2.8通知模块需求分析 -22-3.3数据库设计 -23-4系统详细设计 -25-4.1用户登录详细设计 -25-4.2班级成员理模块详细设计 -26-4.3考勤管理模块详细设计 -27-4.3.1查看考勤记录 -27-4.3.2添加考勤信息 -28-4.4班费管理模块详细设计 -29-4.5成绩管理详细设计 -29-4.6投票模块详细设计 -30-4.7文件共享模块详细设计 -34-4.8通知模块详细设计 -35-4.9系统的整体结构 -36-5设计中遇到的问题及解决方案 -38-5.1单元测试 -38-5.2前端脚本测试 -38-5.3数据库的并发问题(事务) -38-5.4其它问题 -39-6总结 -40-参考文献 -41-致谢 -42-

1引言1.1课题研究背景2004年之后,我国进入互联网的爆炸式发展阶段,各大高校的计算机相关专业如雨后春笋般,成为最普通的高校专业。从此之后,计算机相关专业的学生在毕业设计选题时,教务系统是学生们做毕业设计的热门题目,然而大多的题目设计多过于大众化,并且停留在校园层面,所用的技术大多都是比较老,与社会上企业中真正使用的技术相关甚大。这种设计的方式存在着诸多缺点,如手续繁琐、工作量大、效率低下、出错率高、界面不友好等,而且程序过于繁琐,结果也不清晰、更新及维护都带来不少困难。在商业利益的刺激下,软件行业技术得到空前的发展特别在2008年之后,在B/S模式日渐成为各大企业以及众多用户接受后,出现了非常多的新技术,大大提高了Web系统的可用性。与传统的班级事务管理方式相比,班级内部事务管理系统利用局域网为学生自治管理带来了极大的便利,可以节省人力物力,并能降低错误,比如生活委员在进行班费管理时,传统的方式是使用纸笔进行记帐,且容易出现误差,而本系统提供的班费管理,可以清晰地记录每一笔班费的收支情况。此外,投票模块、通知模块、文件共享模块也为班级事务自治管理提供了极大的实用价值。作为计算机应用的一部分,JavaEE开发已经变得越来越普遍。相应的一些技术的产生给我们java程序的编写提供了很大的方便。同时,现在较为普遍的框架的SSH(spring,hibernate),以及MVC架构的支持使我们的计算机web技术使用更加淳熟。AJAX,JQuery技术的产生,为我们的计算机领web开发领域实现界面友好,大大提升了用户体验与系统的稳定性。因此,将这些相关的技术整合,应用到新的班级内部事务管理系统中,是十分必要的,从而构建由JQuery控制的前台界面,以及ajax实现信息的异步存取,经典的ssh框架的mvc结构。1.2课题研究目的班级内部事务管理系统将作为高校信息化的重要基层部分,是每个高校学生自治管理的必要的组成部分,为学生、教师提供相应的功能模块,实现班级工作管理的统一化、标准化、准确化。该系统系统面向一个班级的学生以及教师,为了方便相互沟通,脱离面对面的事务处理,因此采用B/S结构,无论用户在什么地方,只要可以连接互联网,无需安装客户端,在浏览器中输入相对应的地址即可,从服务器获得信息,不受操作系统平台的影响。而对于维护管理也更加便利,只需要更改服务端的程序或页面即可,与传统C/S架构的系统相比,不需要更新客户端,大大降低了用户的使用成本以及学校的维护更新成本。运用计算机辅助处理班级事务,即能实时地对各种数据进行检验和统计,十分方便地输出各类表格,同时也避免了人工处理时容易产生的错误。利用计算机辅助进行班级事务处理,可以按减轻教师的负担,将主要的事务交由班干部、普通同学进行自治管理。另外,本系统的通知模块除了实现日常教学工作中的通知外,普通学生及班导师也可以发表通知,可用于学生间、师生间的沟通工具。文件共享模块,可以为同学们实现课件共享等功能。因此,利用计算机辅助班级事务管理工作,可以节省大量人力,并且可以增强学生间、师生间的互动。1.3课题可行性分析JavaEE平台的飞速发展,技术的成熟以及应用领域的不断扩大,影响力的扩大使得各种技术交流社区、第三方开源团队不断为JavaEE阵营注入新的能量,基于JavaEE开发的B/S系统也越来越稳定、快速、安全。由于JavaEE平台基于用户需求的设计方法使得该系统的使用跟家的人性化、个性化、跟贴近用户。以JavaEE平台的构建思想来实现班级内部事务管理系统可以最大程度的做到实用性,可扩展性和可维护性相结合,安全性以及规范化原则。采用本系统,能够使整个系统内部所有信息的工作简化,提高工作效益。由于采用统一的数据信息,使相关资料能够快速地查询所需的数据、资料及其它信息的,使信息快速高效运行。2相关开发软件以及技术介绍2.1B/S结构介绍2.1.1B/S结构基础B/S结构(Browser/Server)结构即浏览器和服务器结构,相对于传统的C/S结构。它是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构。在这种结构下,用户工作界面是通过互联网浏览器来实现,极少部分事务逻辑在前端(Browser)实现,前端页面(HTML)主要用于显示内容并与用户进行交互,并通过脚本语言(主要是JavaScript)来增强前面页面的功能,提升易用性。系统的主要事务逻辑在服务器端(Server)实现形成所谓三层结构(MVC)。这样就大大简化了客户端电脑载荷,减轻了系统维护与升级的成本和工作量,降低了用户的总体成本(TCO),并且降低了软件升级维护的成本。以目前的技术看,局域网建立B/S结构的网络应用,并通过Internet/Intranet模式下数据库应用,相对易于把握、成本也是较低的。它是一次性到位的开发,能实现不同的人员,从不同的地点,以不同的接入方式(比如LAN,WAN,Internet/Intranet等)访问和操作共同的数据库,它能有效地保护数据平台和管理访问权限,服务器数据库也很安全。B/S结构最大的优点就是可以在任何地方进行操作而不用安装任何专门的软件,只要有一台能上网安装有浏览器的电脑就能使用,客户端零维护。系统的扩展非常容易,只要能上网,再由系统管理员分配一个用户名和密码,就可以使用了。甚至可以在线申请,通过公司内部的安全认证(如CA证书)后,不需要人的参与,系统可以自动分配给用户一个账号进入系统。B/S结构系统的工作原理图,如图2.1所示。2.1.2B/S架构软件的优势与劣势(1)维护和升级方式简单在需求不断变更的情况下,软件系统的改进和升级将会变得非常频繁,B/S架构的产品明显体现着更为方便的特性。对一个稍微较大应用系统来说,如果必须要新客户端程序将才可以登录使用系统,将会为大量的用户带来不便,而且当用户更换了计算机或下在使用一台临时的计算机时,必须要安装对应的客户端才可以使用系统,这对于用户来说将是极大的不便。但B/S架构的软件只需要更新维护服务器就行了,所有的客户端只是浏览器,根本不需要做任何的维护,而且即使系统升级了,用户依然像之前一样使用浏览器登录系统,无需进行额外的操作即可使用新版本的系统。因此无论用户的规模有多大,有多少分支机构都不会增加任何维护升级的工作量,所有的操作只需要针对服务器进行。如果是异地,只需要把服务器连接专网即可,实现远程维护、升级和共享。所以客户机越来越“瘦”,而服务器越来越“胖”是将来信息化发展的主流方向。今后,软件升级和维护会越来越容易,而使用起来会越来越简单,这对用户人力、物力、时间、费用的节省是显而易见的,惊人的。因此,维护和升级革命的方式是“瘦”客户机,“胖”服务器。(2)应用服务器负载对比由于B/S架构管理软件只安装在服务器端(Server)上,网络管理人员只需要管理服务器就行了,用户界面主要事务逻辑在服务器端(Server)完全通过WWW浏览器实现,极少部分事务逻辑在前端(Browser)实现,所有的客户端只有浏览器,网络管理人员只需要做硬件维护。因此B/S架构相对于C/S的一个重要隐患是服务器的负载更重,必须有良好的软件架构以及运行维护,保证服务器的响应效率,当有必要时可以使用分布式部署,这也是JavaEE的一个重要特征。在计算机硬件越来越强大的今天,这些劣势已经正在减少,但为了以防万一,必须备有数据库存储服务器,否则有可能发生灾难性后果。(3)成本降低,选择更多现在的趋势是凡使用B/S架构的应用管理软件,只需安装在Linux服务器上即可,而且安全性高。比如著名的LAMP(Linux,Apache、MySQL、PHP)组合,就是B/S架构的典型应用,而sun公司的JavaEE则是大型B/S架构的代表性阵营。这些系统避免了高维护成本的windows系统,而且能够使大部分人使用Windows作为桌面操作系统电脑不受影响。2.1.3B/S与C/S结构软件技术上的比较C/S(客户机服务器模式)结构软件分为客户机和服务器两层,客户机具有了一定的数据处理和数据存储能力,开发者可以把应用软件的计算和数据合理地分配在客户机和服务器两端,可以有效地降低网络通信成本和服务器负载。B/S是对C/S结构的一种改进。在这种结构下,软件应用的业务逻辑完全在应用服务器端实现,用户表现完全在Web服务器实现,客户端只进行简单的显示、交互工作,这种结构更成为当今应用软件的首选体系结构。(1)数据安全性比较由于C/S结构软件的数据分布特性,客户端所发生的各种故障或不可抗力都有可能成为攻击服务端的危险因素。对于集团级的异地软件应用,C/S结构的软件必须在各地安装多个服务器,并在多个服务器之间进行数据同步,因而每个数据点上的数据安全都成为了整个应用数据安全的隐患。所以,对于集团级的大型应用来讲,C/S结构软件的安全性是令人无法接受的。对于B/S结构的软件来讲,由于其数据集中存储于总部的数据库服务器,客户端无法知道任何软件实现的细节,如连接数据库、调用函数等,也无需进行什么数据同步,所以这些安全问题也就自然不存在了。(2)数据实时性比较在企业级应用里,C/S结构不可能随时随地看到当前业务的发生情况,看到的都是事后数据。而B/S结构则不同,它可以实时看到当前发生的所有业务,方便了快速决策,有效地避免了企业损失。(3)对业务需求变更的反应时效当企业的业务流程、业务逻辑发生变化时,软件供应商提供必须对软件产品进行维护、升级,此时,C/S结构软件,由于其应用是分布的,需要对每一个使用节点进行程序安装,所以,即使非常小的程序缺陷都需要很长的重新部署时间。而B/S结构的软件不同,其应用都集中于总部服务器上,各应用结点并没有任何程序,也不会影响客户端,一个地方更新则全部应用程序更新,可以做到快速服务响应。2.2JavaEE技术介绍2.2.1Sun公司的企业级应用开发标准 JavaEE(JavaPlatformEnterpriseEdition)是使用Java技术开发企业级应用的一种事实上的工业标准(Sun公司出于其自身利益的考虑,至今没有将Java及其相关技术纳入标准化组织的体系),也称JavaEE,但Sun在2008年发布JDK5的时候,已正式将其命名为JavaEE。它是Java技术不断适应和促进企业级应用过程中的产物。Sun推出JavaEE的目的是为了克服传统Client/Server模式的弊病,迎合Browser/Server架构的潮流,为应用Java技术开发服务器端应用提供一个平台独立的、可移植的、多用户的、安全的和基于标准的企业级平台,从而简化企业应用的开发、管理和部署。JavaEE是一个标准,而不是一个现成的产品。各个平台开发商按照JavaEE规范分别开发了不同的JavaEE应用服务器,JavaEE应用服务器是JavaEE企业级应用的部署平台。由于它们都遵循了JavaEE规范,因此,使用JavaEE技术开发的企业级应用可以部署在各种JavaEE应用服务器上。2.2.2JavaEE的优势(1)高效快速JavaEE允许公司把一些通用的、很繁琐的服务端任务交给中间件供应商去完成这样开发人员可以集中精力在如何创建业务逻辑上,相应地缩短了开发时间。(2)持续性服务让开发人员不用对数据访问逻辑进行编码就能编写应用程序,能生成更轻巧,与数据库无关的应用程序,这种应用程序更易于开发与维护。(3)支持异构环境Java的一个重要特殊是跨平台,“一次编译,到处运行”,因此JavaEE是能够开发部署在异构环境中的可移植程序。基于JavaEE的应用程序不依赖任何特定操作系统、中间件、硬件。因此设计合理的基于JavaEE的程序只需开发一次就可部署到各种平台。(5)稳定的可用性Java运行在JVM(Java虚拟机)之上,JVM有非常高的安全机制,可以有效地进行内存管理,保证服务器端程序必须能全天候运转以满足公司客户、合作伙伴的需要。这是实时性很强商业系统理想的选择。2.3Struts22.3.1Struts2简介Struts2是JavaEE系统中的控制层开源框架,基于xwork核心,与Strust1有着质的不同。它已逐步越来越多运用于商业软件,是一种非常优秀的JavaEEMVC实现方式。软件工程师使用Struts2为业务应用的控制层提供支持,它可以完成其中一些繁重的工作,帮助我们从繁重而与业务无关的工作解脱出来,专注于业务逻辑之上,减少在运用MVC设计模型来开发Web应用的时间。2.3.2Struts工作原理MVC(Model-View-Controller),是一种经典的常用设计模式。MVC减弱了业务逻辑接口和数据接口之间的耦合,以及让视图层更富于变化,MVC可以让整个逻辑很清晰,这种思想和思维和人的思维很接近,很容易被理解。MVC的工作原理如图2.2所示:图2.2MVC工作原理Struts是MVC的一种实现,它将Servlet和JSP标记(属于JavaEE规范)用作实现的一部分。Struts继承了MVC的各项特性,并根据JavaEE的特点,做了相应的变化与扩展。Struts的工作原理,如图2.3所示:图2.3struts工作原理(1)Controller:在XML文件Struts-config.xml中,与之相关联的是Controller,在Struts中,承担MVC中Controller角色的是一个Servlet,叫ActionServlet。ActionServlet是一个通用的控制组件。这个控制组件提供了处理所有发送到Struts的HTTP请求的入口点。它截取和分发这些请求到相应的动作类(这些动作类都是Action类的子类)。另外控制组件也负责用相应的请求参数填充ActionFrom(通常称之为FromBean),并传给动作类(通常称之为ActionBean)。动作类实现核心商业逻辑,它可以访问javabean或调用EJB。最后动作类把控制权传给后续的JSP文件,后者生成视图。所有这些控制逻辑利用Struts-config.xml文件来配置。(2)视图:主要由JSP生成页面完成视图,Struts提供丰富的JSP标签库:Html,Bean,Logic,Template等,这有利于分开表现逻辑和程序逻辑。(3)模型:模型以一个或多个javabean的形式存在。这些bean分为三类:ActionForm、Action、JavaBean。Action通常称之为ActionBean,获取从ActionSevlet传来的FormBean,取出FormBean中的相关信息,并做出相关的处理。2.4Spring框架Spring实质上是一个巨大的工厂,可以管理整个系统所有的Bean。Spring推行面向接口编程,通过IOC机制,可以最大限度地降低系统各个模块的耦合度,为系统的后期维护与扩展提供了极大的便利。降低耦合度是选用Spring框架的一个重要目的,另外,Spring提供了对各种开源框架的支持,如Struts2、Hibernate,并提供了非常方便的DAO层访问模板以及数据库的事务处理,从而保障了事务并发的安全性。Spring是潜在地一站式解决方案,定位于与典型应用相关的大部分基础结构,它也涉及到其他框架没有考虑到的内容。2.5Hibernate框架 在B/S项目的开发中,和数据库的交互式不可避免,JavaEE的规范中提供了JDBC的接口来操作数据库,对于JDBC,开发人员可以获取数据库连接,然后向数据库发送SQL语句,并返回数据库操作的结果集,然后封装成对象返回给上层的应用程序。这就造成开发人员不但要求能够编写程序,熟悉业务逻辑,还要求开发人员同时能够担任DBA,对开发人员的要求很高;同时,当引入新的项目时,很多地方必须废弃,因为我们的代码中不光是业务逻辑,其中也嵌入了许多和底层有关的一些SQL代码另外这些嵌入在代码中的SQL语句也影响了我们程序的可测试性,我们在对代码进行调试的时候,既要测试代码,同时我们还要测试SQL语句。为了解决这些问题,引入了hibernate。Hibernate是一个对JDBC进行轻量级封装的持久层开源框架,Hibernate可以用在任何JDBC可以使用的场合,例如Java应用程序的数据库访问代码,DAO接口的实现类。Hibernate是一个和JDBC密切关联的框架,所以Hibernate的兼容性和JDBC驱动,和数据库都有一定的关系,但是和使用它的Java程序,和其它模块没有任何关系,也不存在兼容性问题。Hibernate与数据库之间的关系是宽松的,当软件系统需要更换其它数据库产品时,DAO层并不需要进行任何的改动,只需更改Hibernate中相应的配置文件即可,因此可以大大降低软件后期的维护成本。2.6Tomcat服务器Tomcat是一个免费的开源的Serlvet容器,完整的实现了Servlet2.3和Jsp1.2规范。由于Java的跨平台特性,基于Java的Tomcat也具有跨平台性。Tomcat不仅仅是一个Servlet容器,它也具有传统的Web服务器的功能:处理Html页面。但是与Apache相比,它的处理静态Html的能力就不如Apache.我们可以将Tomcat和Apache集成到一块,让Apache处理静态Html,而Tomcat处理Jsp和Servlet。这种集成只需要修改一下Apache和Tomcat的配置文件即可。本系统将部署在Tomcat服务器上,由于采用了轻量级的开源框架以及轻量级的MySQL数据库,并且具有跨平台的特征,因此可以在普通PC上进行开发与测试。2.7JavaScript与AjaxJavascript是一种由Netscape的LiveScript发展而来的原型化继承的面向对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如Perl,遗留的速度问题,为客户提供更流畅的浏览效果。当时服务端需要对数据进行验证,由于网络速度相当缓慢,只有28.8kbps,验证步骤浪费的时间太多。于是Netscape的浏览器Navigator加入了Javascript,提供了数据验证的基本功能。使用JavaScript脚本,可以在浏览器端完成一些页面动态显示、表单验证、DOM节点操作等功能,可以完成一部分数据的处理以减轻服务器端的负担,并能做出各种特效,提高易用性与用户体验。Ajax是一种异步请求技术,可以在不刷新当前页面的情况下向服务端发送请求,并通过JavaScript脚本来处理接收到的服务端请求,从而大大地提升了用户体验。本系统将大量使用Ajax技术,用户在操作时,整个页面不会刷新,只会根据用户的操作,局布更新相应的页面内容。

3系统需求分析和总体设计3.1系统模块划分 根据高校教务评教的具体需求,将本系统划分为八个模块,分别为用户管理、个人信息管理、考勤管理、班费管理、成绩查看、网上投票、文件共享、通知管理。系统总体结构如图3.1所示。图3.1系统模块结构图 本系统划分为六种用户角色,分别为:管理员、班导师、班长、学习委员、生活委员、一般学生。其中,管理员拥有整个系统的最高权限,可以使用所有功能。班级成员管理模块可以对班级里的学生进行添加、修改、删除操作;考勤管理模块:管理员、班导师、班长及学习委员都有添加考勤记录的权限,而普通同学只能查看自己的考勤记录;班费管理模块:管理员、班长、生活委员有权限使用此模块,可以查看、添加及修改班费收支记录;成绩管理模块:管理员、班导师、学习委员有权限使用此模块,可以查看、添加、修改学生的成绩,普通学生则只能查看本人的成绩列表;网上投票模块:发起及投票功能面对学生,班导师及管理员可查看投票结果;文件共享模块:所有成员均可使用,但管理员可以对所有的共享文件进行修改、删除操作,其它用户只能管理自己上传的文件;通知管理:面向所有用户,管理员及班导师可以对所有通知进行修改、删除操作,其它用户只能管理自己发布的通知。3.2各模块的需求分析3.2.1管理员管理员帐号拥有本系统的最高权限,可以对所有模块进行管理,操作数据库中所有的数据。班级成员由管理员创建、分配帐号。首先,管理员需要登录后才能使用系统。用户登录管理模块对不同的用户角色都是统一的,在班级管理系统首页选择对应的角色,输入用户名、密码以及验证码即可以登录。管理员的用户由拥有数据库管理权限的DBA管理,其他人无法创建,保证了系统的安全性。超级管理员的用例图如图3.2所示。图3.2超级管理员用例图超级管理员可以进行班级成员管理、考勤管理、班费管理、成绩管理、网上投票管理、文件共享管理、通知管理。 3.2.2班级成员管理模块需求分析 本系统面向一个班级,因此必须为所有的班级成员各分配一个帐号,而且在系统开始使用之后,需要对班级成员进行信息维护。班级成员管理模块只面对管理员,管理员可以添加、修改、删除学生信息。如图3.3所示。图3.3学生信息管理列表 当学生信息发生变化时,或者学生忘记了密码,管理员可以通过“修改学生信息”功能更改其信息。如图3.4所示。图3.4修改学生信息 当班级出现转班、休学、退学等成员流失情况时,管理员可以执行“删除”操作,将学生信息从数据库中删除。3.2.3考勤管理模块需求分析 考勤管理模块的功能为:添加考勤记录、查看考勤记录。管理员、班导师、班长、学习委员拥有添加考勤记录的权限,其他用户只能查看自己的考勤记录。这是符合班级日常管理的,如果所有学生都有权限添加考勤记录,则会出现管理混乱的情况,另外,为班长及学习委员分配添加考勤记录权限,可以发挥班委的作用,减轻教师的考勤工作压力。3.2.4班费管理模块需求分析 班费管理模块功能:添加、修改、删除班费收支记录。班费管理是班级自治管理中重要的一环,可以使用此模块的用户为:管理员、班长、生活委员。在此模块中,可以按时间顺序查看所有的班费收支记录,并可以对其进行修改或删除操作,所有变更班费金额的操作,如添加、修改收支记录,都会影响到班费总额的变动。班费管理报表如图3.5所示。图3.5班费管理报表3.2.5成绩管块需求分析 成绩管理模块,管理员、班导师、学习委员可以进行最高权限的操作:添加、修改、删除成绩记录,如图3.6所示。而其他用户(班长、生活委员、一般学生)只能查看自己的成绩记录,并且不能修改或删除,如图3.7所示。图3.6管理员及学习委员的成绩管理页面图3.7一般学生的成绩查看页面3.2.6网上投票模块需求分析 网上投票功能主要面向学生,只有学生身份的用户(包括班长、学习委员、生活委员)才能发起投票,管理员、班导师可以查看、投票主题及投票结果,另外管理员还可以删除投票主题。 学生可以发起一个投票,投票采用单选模式,可以添加多个选项,添加多道选题,如图3.8所示。图3.8发起投票 投票结果会统计所有选项的得票数,如图3.9所示。图3.9投票结果3.2.7文件共享模块需求分析 文件共享模块主要是方便学生之间共享学习资料而设计,所有的学生,以及班导师、管理员都可以上传、下载共享文件。管理员、班导师拥有共享文件管理权限,可以修改、删除已上传的文件信息。3.2.8通知模块需求分析 通知工作是班级事务管理中最为重要、频繁的工作,但是当前几乎所有高校的班级都没有固定的教室,且学生的宿舍有时相隔较远,班委要传达通知时,往往需要花很多时间才能通知到位。为了简化班级事务通知工作流程,提高效率,本系统专门提供通知模块,班导师、学生登录系统后即可以在主页查看最新发布的通知,并可以发布通知。其中,管理员及班导师拥有此模块的最高权限,可以修改、删除通知记录。如图3.10所示。图3.10通知管理3.3数据库设计 根据本设计的需求分析,对数据库进行设计,共创建12张表,管理员表(admin),班导师表(teacher),学生表(student),考勤表(checkin),班费收支表(fund),通知表(notice),投票主题表(vote),投票结果表(voting),选项表(options),问题表(question),成绩表(score),分享文件表(sharefile)。其中,学生表包括了一般学生、班长、学习委员、生活委员,使用了一个role字段来区分他们的角色,0为一般学生,1为班长,2为学习委员,3为生活委员。投票模块一共使用了四张表,包括描述投票主题的vote表,记录了投票主题、描述、发起时间、截止时间;投票结果表voting,记录了哪个学生在哪个投票主题的哪一题中选了哪个选项;选项表及问题表是构成一张投票主题的一部分,这四张表之间都建立了外键关联。考勤表、通知表、成绩表、投票结果表都与学生表建立了删除级联外键,当学生信息被删除时,所有的与该学生相关的考勤记录、成绩、投票都会同时被删除。数据库设计的ER图如图3.11所示。

4系统详细设计4.1用户登录详细设计 本系统共有6类用户,提供了统一的登录界面,为了区别不同的用户类型,输入用户名及密码时,应选择对应的身份类型,当用户提交表单时,服务端程序会根据用户所选择的身份类型调用不同的DAO查询不同的数据表。 用户的登录时序图如图4.1所示,当用户打开主页,选择用户身份并填写好用户名图4.1超级管理员登录时序图与密码后,向服务器提交表单,此时Sturst2将会根据用户的请求调用相应的Action,Action将用户从前端发送过来的数据封装到相应的成员变量,然后调用业务层的方法。在登录模块,UserAction将会调用Service层的login方法,从DAO层根据用户的用户名及密码进行查询,并返回查找到的用户信息。UserAction会判断查找到的UserBean对象,如果此对象为null,则说明刚才在DAO层中查找时,没有找到相应的记录(图4.1中第6步),此时给msg属性赋值“用户名或密码错误”并返回“ERROR”,Sturst2中配置ERROR字符串的返回值会转发到index.jsp,在此jsp中紧随着密码输入框有一个span标签,<spanid="errorInfo"style="color:red;">${msg}</span>,因此登录错误时将可以显示错误信息,提示用户重新输入。而如果用户输入了正确的用户名及密码,则返回的SuperUser对象不为空,此时Action将其存放到Session中,以保证此后可以对该用户进行会话跟踪;然后返回字符串“login”,让Strust2转向相应用户的主页,至此,登录成功。4.2班级成员理模块详细设计 管理员拥有对班级成员信息的查询、新增、修改、删除的权限,班级成员管理的DAO层提供了对应的方法。添加新成员功能,在前端用html写一个表单,表单的name属性根据Strust2的标准,按“Action属性名.bean属性名”的规范,则可以被Strust2的拦截器注入相应的属性中。在Action中调用相应的业务层方法即可保存到数据库中,学生信息更新方法也是类似。在前端jsp页面中,充分使用了ajax异步请求技术,达到了在整个操作过程中,原页面不会刷新,只对需要变化的节点进行更新。为了节省开发时间,避免将时间浪费在大量的业务无关性基础代码上,引入了jQuery框架,使用jQuery框架提供的load、$.get或$.post方法,可以根据业务需求快速实现ajax效果。 本模块中,学生信息删除功能使用ajax请求技术,发送想要删除的学生的ID号到服务器,服务器端的Action将会调用业务层的删除方法,若整个操作没有抛出异常,则说明操作成功,Action将status属性设为1代表操作成功,并让Strust2以json的形式把此传回浏览器,前端的JavaScript脚本将会删除页面上对应的记录;若服务端抛出异常,删除失败,我们则把status的值设为-1,代表删除失败,JavaScript则给出相应的提示,不对DOM节点做任何操作。 以下为删除学生功能的JavaScript脚本代码:/***删除一条学生信息*/functiondelStudent(studentId){ varisConfirm=window.confirm('确定删除此信息?'); if(isConfirm) $.get(//使用jQuery框架的get方式进行ajax请求 '../admin/admin_deleteStudent',//请求地址 {'status':studentId},//请求参数 function(data){ if(data==1){ alert('删除成功'); $('#row_'+studentId).remove();//将表格中对应的行删除 }else{ alert('系统繁忙,请稍候'); } } ); else return;}4.3考勤管理模块详细设计 考勤管理模块由两项功能组成,分别为查看考勤记录、添加考勤记录。4.3.1查看考勤记录 由于几乎每天都要进行考勤记录的添加,而且每一位同学就一条考勤记录,因此随着时间推移,考勤记录会越来越多,为了更便于查看,按日期来查看考勤记录。查询过程及结果如图4.2所示。图4.2查看考勤记录 在选择日期时,引入了WdatePicker.js插件,只要点击输入框即可显示日历让用户进行选择,这样既提高了用户体验,又能保证用户输入的日期一定是正确的格式,后台不需重复做日期格式检查。此处的输入框代码为:<inputid="viewdate"type="text"onClick="WdatePicker()"size="12"/>4.3.2添加考勤信息 管理员、班导师、班长、学习委员均可以添加考勤记录。添加考勤记录的流程为:选择日期、选择学生、选择考勤状态。选择日期同样使用WdatePicker.js插件,选择学生的下拉框是从数据库中查询所有学生,以学生ID为valuekey生成的,其代码如下:<s:selectid="csno"list="students"listValue="realName"listKey="studentId"headerValue="-请选择-"headerKey="-1"theme="simple"></s:select> 考勤状态一共有5类:正常、迟到、早退、旷课、请假,对应的状态码为:0、1、2、3、4,用于存储在数据库中,避免直接存储文字,达到节省存储空间及提高速度的目的。4.4班费管理模块详细设计 班级管理模块提供了班级收支记录的查看、修改、删除、统计的功能,进入此模块后,即可查看班费报表。添加记录的表单如图4.3所示。图4.3添加班费收支记录 班费收支记录修改表单与添加表单类似,同样使用了sturst2的表单格式,便于参数传递,在此不再赘述。本模块比较关键的地方是班费收支统计,根据所有的收入、支出记录,统计出总收入、总支出以及余额,这里是使用SQL语句在查询时实现的。查询总支出:selectsum(count)fromfundwheretype=-1;查询总收入:selectsum(count)fromfundwheretype=1;余额根据总收入与总支出可以求得。4.5成绩管理详细设计 成绩管理模块对不同的用户有不同的权限,其中管理员、班导师、学习委员都有全部权限,即可以查看、添加、修改、删除成绩记录,而其他用户只可以查看自己的成绩列表。 成绩添加功能。在转到该页面前,已经从数据库中查询了所有学生的学号,使用sturts2的select标签生成了学号下拉框,该下拉框会触一个JavaScript事件,该事件会根据所选的学号,发送对应的学生ID到服务端查询该学生的姓名,然后在“姓名”输入框中显示该学号的姓名,便于在录入成绩时进行核对,以免发生误录入。图4.4添加成绩表单完成此功能的JavaScript代码如下:functionshowName(val){ if(val.value==-1){ $('#sname').val('请选择学号'); return; } $.get( '../admin/admin_getStudentName',//请求地址 {'status':val.value},//请求参数:学生ID function(data){ $('#sname').val(data);//动态更改姓名输入框的内容 } );} 成绩修改功能与成绩添加功能类似,只是无须选择学号,在此不再赘述。4.6投票模块详细设计 网上投票是本设计最为复杂的模块,无论前端页面还是数据库设计,都最为繁杂。由于能力有限,此功能没有实现多选功能,所有选项均为单选,但是每道选题可以添加无限多个选项。 为了实现投票功能,在数据库中设计了投票主题表(vote),投票结果表(voting),选项表(options),问题表(question)四个表,表间的具体关系见3.3数据库设计细节。在前端页面中,发起一个新的投票主题时,默认只有一个题目,三个选项,点击“添加题目”、“添加选项”时,将会调用JavaScript代码,添加一个新的题目或选项,实现这个功能的代码如下:/***添加新问题*@paramtid问题ID*@return*/functionaddQuestion(tid){ varnewId=tid+1; varnewQuestion='<fieldsetclass="question"id="q'+newId+'"><legend>问题'+newId+'</legend>'+ '<table><tr><tdclass="form_td">题目</td><td><inputtype="text"name="questions['+newId+'].content"size="50"/></td></tr>'+ '<tr><tdclass="form_td">选项1</td><td><inputtype="text"name="questions['+newId+'].opts[0].content"size="50"/></td></tr>'+ '<tr><tdclass="form_td">选项2</td><td><inputtype="text"name="questions['+newId+'].opts[1].content"size="50"/></td></tr>'+ '<tr><tdclass="form_td">选项3</td><td><inputtype="text"name="questions['+newId+'].opts[2].content"size="50"/></td></tr>'+ '</table><span><inputtype="button"value="添加选项"onclick="addOption('+newId+',3);"/></span></fieldset>'; $('#q'+tid).after(newQuestion); $('#addButton').attr('onclick','addQuestion('+newId+')');}/***添加选项*@paramqid问题ID*@paramoptcount当前选项数量*@return*/functionaddOption(qid,optcount){ varcount=optcount+1;//新的选项数量 varnewOpt='<tr><tdclass="form_td">选项'+count+'</td><td><inputtype="text"name="questions['+qid+'].opts['+optcount+'].content"size="50"/></td></tr>'; $('#q'+qid+'tr:last').after(newOpt); $('#q'+qid+'input:last').attr('onclick','addOption('+qid+','+count+')');}其中,最关键的位置是各表单元素的name属性,因为要在服务端接收参数注入相应的Bean,而问题、选项都是可能多于一个的,只能使用“集合[下标].Bean.属性”的方法来注入,而下标是会动态变化的,所以每添加一个新的问题或选项时,需要更改添加按钮里的参数,以保证再次点击时能产生正确的表单属性,可以注入给Action中的Bean。 投票结果统计。此功能主要依靠SQL语句查询并在Service层对查询结果进行分析而得出,SQL语句为:selectq.content,opt.content,count(opt)fromvotingjoinoptionsoptjoinquestionqwherevoting.opt=opt.option_idandvoting.question=q.question_idandq.vote=?groupbyopt;此句查询出某个投票主题的题目中所有选项的得票数,但这个查询结果还是数据库中的结果集,不适合直接在页面中输出,必须要重新加工一下,变成Bean对象,便于在Jsp页面中遍历显示。这个过程的核心代码如下:List<String[]>list=voteDao.getVotingResult(vid); Map<String,List<String>>map=newHashMap<String,List<String>>(); for(String[]strings:list){ if(map.containsKey(strings[0])){ List<String>temp=map.get(strings[0]); temp.add(strings[1]);temp.add(strings[2]); map.put(strings[0],temp); }else{ List<String>temp=newArrayList<String>(); temp.add(strings[1]); temp.add(strings[2]); map.put(strings[0],temp); } } Set<Entry<String,List<String>>>entrys=map.entrySet(); List<VotingResult>vs=newArrayList<VotingResult>(); for(Entry<String,List<String>>entry:entrys){ VotingResultvotingResult=newVotingResult(); List<String>opts=map.get(entry.getKey()); votingResult.setQuestion(entry.getKey()); List<VotingResultOption>vsopt=newArrayList<VotingResultOption>(); for(intidx=0;idx<opts.size();){ vsopt.add(newVotingResultOption(opts.get(idx++),Integer.parseInt(opts.get(idx++)))); } votingResult.setOptions(vsopt); vs.add(votingResult); }前端页面查看到的效果如图4.5所示。图4.5投票结果4.7文件共享模块详细设计文件共享是本系统一个重要的模块,可以为班级管理提供非常实用的价值,比如班长要下发电子表格给同学们填写时,学习委员要将老师提供的文档分发给全班同学时,都可以使用本系统中的文件共享模块,将文件上传,供所有同学下载。此模块的关键位置是文件上传,由于使用了Struts2框架,因此一部分的工作已经由框架封装好了,需要写的代码如下:FileOutputStreamfos=null;FileInputStreamfis=null;try{//获得文件存储的物理路径StringrealPath=ServletActionContext.getServletContext().getRealPath("/");fos=newFileOutputStream(realPath+"\\share\\"+getFileFileName());fis=newFileInputStream(getFile());byte[]buf=newbyte[1024];//创建缓冲区intlen=0;while((len=fis.read(buf))>0){ fos.write(buf,0,len);//写入文件}}catch(IOExceptione){ e.printStackTrace();}finally{try{//关闭输入输出流 if(fos!=null)fos.close(); if(fis!=null)fis.close(); }catch(IOExceptione){ e.printStackTrace(); }}Studentstudent=(Student)session.get("currStudent");shareFile.setStudent(student);shareFile.setFileName(getFileFileName());try{ fileService.saveShareFile(shareFile);//将文件信息保存到数据库}catch(Exceptione){ e.printStackTrace(); status=-1;//出现异常时,状态码为-1,前端javascript代码会作相应提示 return"savedProduct";}status=1;//文件上传成功return"savedProduct";4.8通知模块详细设计 通知模块也是本系统的实用功能之一,与其它模块类似,不同的用户也具有不同的使用权限。管理员、班导师拥有此模块的所有权限,可以查看、发布、修改、删除通知信息,学生的权限为:发布通知、查看所有通知、修改及删除自己发布的通知。 本模块的后台部分,与其它模块类似,都是增删改查操作,唯一比较特别的是前端显示时的css样式,为了让列表显示更美观,当单元格中的文本过长时,以省略号代替剩余的文本。为了实现这样的效果,有两种方法,一种是在服务端把文本准备好,使用字符串的相应API将文本截成相应的格式,再发送到jsp;另一种方法是将所有文本转发到jsp生成html,最终在浏览器显示时,能过css控制样式。对比两种方法,后者更优,可以减少服务端的负担,因为字符串操作比较耗费系统资源,使用css控制则更灵活更“轻量级”。显示结果如图4.6所示。图4.6通知管理列表对应的css样式如下:.notice{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-o-text-overflow:ellipsis;width:316px;border:none;}4.9系统的整体结构 根据以上的详细设计,将工程命名为cims(ClassInformationManagementSystem),整个工程分为5个包,结构如图4.7所示。其中,biz包存放的是业务层的类;dao包存放数据访问类的接口,其下有一个子包impl,存放DAO接口的实现类;entity包则存放所有的实例类;action包里的是Action,隶属于控制层。图4.7工程结构图 由于本系统使用了Strust2、Hibernate、Spring三个框架,因此必须有相应的配置文件,所有的配置文件将存放在config的源包下,其结构如图4.8所示。该源包有三图4.8配置文件结构图个目录,分别存放其名字对应的框架配置文件。 前端方面,为了安全起见,不能让用户直接请求jsp文件,因此所有的jsp文件都放入WEB-INF目录,此外,样式文件、脚本文件、图片等文件也放在相应的目录下,其结构如图4.9所示。错误页面等公有文件放在common目录下,样式文件存放在css目录下,图片则存放在images目录,脚本文件(js文件)存放在js目录,所有的jsp文件放在WEB-INF的jsp目录下,存放该模块的jsp文件。lib目录存放所有的jar包。图4.9web应用目录结构5设计中遇到的问题及解决方案5.1单元测试 在开发过程中,单元测试是一种重要的调试手段,可以在错误发生的源地发现,避免在上层调用时才发现问题,从而减少了调试排错的时间并降低了复杂度。本设计采用了Junit4工具进行单元测试,它是一种开源的java测试框架,特征有:用于测试这期望结果的断言;用于共享测试数据的测试工具;方便组织和运行的测试工具。 在DAO层,每一个方法写完之后必须用Junit进行测试,保证本方法正确无误,这样在请求Action出错时,可以排除DAO的问题,便于缩小debug的范围。5.2前端脚本测试 本系统大量使用了JavaScript脚本,以更好的提升用户体验,因此测试前端脚本是非常必要的。在做前端脚本测试时,使用了火狐浏览器的Firebug工具,可以看到所有脚本的错误信息,以便快速定位进行代码修改。5.3数据库的并发问题(事务) 由于在开发本系统时,笔者只能一个人用浏览器访问测试,没有考虑到事务并发问题,在本系统即将完成之时,发现了一个问题:如果某个教师正在对某个学生进行信息修改操作,而与此同时,超级管理员正在对此学生执行删除操作,那么当教师完成了学生信息修改做提交操作时,系统将找不到对应的学生,则会抛出异常。为了避免这类事情的发生,必须进行事务处理。 事务处理有多种途径,但由于我们的系统集成了Spring,那么为了整个系统的统一性,则直接使用Spring进行数据库事务管理。通过查阅相

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论