《毕业设计(论文)基于J2EE的试卷库管理系统的设计与实现.doc》由会员分享,可在线阅读,更多相关《毕业设计(论文)基于J2EE的试卷库管理系统的设计与实现.doc(31页珍藏版)》请在三一办公上搜索。
1、基于J2EE的试卷库管理系统的设计与实现理工学院 计算机科学与技术专业 050308008指导教师 副教授 【摘要】试卷库管理系统是基于为泉州师范学院提供便捷而优质的试卷库管理的背景而进行开发的。本系统采用B/S开发模式,遵循J2EE规范,结合当今流行的框架组合Struts、Hibernate、Spring进行项目开发。该系统用户界面精美,性能稳定,为本校的试卷管理工作提供一个良好的解决方案,减轻工作人员负担。基于B/S结构的WEB服务,实现客户端零维护,基于网络,信息共享性好。【关键词】Ajax、J2EE、Struts、Spring、Hibernate、Jacob目 录引言4第一章系统综述4
2、1.1系统简介41.2系统架构41.3 系统目标5第二章系统设计52.1 需求分析52.1.1 主要问题52.1.2 基本功能62.1.3系统用例62.2 系统数据库设计72.3 系统访问权限控制82.4 开发环境9第三章系统实现93.1 系统界面93.2 系统中文乱码的解决方案123.3 整合Struts、Spring、Hibernate框架133.3.1 Struts整合Spring143.3.3 Hibernate整合Spring163.3.3 WEB系统加载Spring163.4 上传试卷到数据库163.5 批量安排课程183.6 系统定时更新试卷193.7 抽卷算法设计与实现203.
3、8 JACOB操作WORD文档243.9 批量打印试卷263.10基于角色的访问权限控制27第四章系统部署284.1 部署环境284.2 系统部署284.3 注意事项30第五章总结30致谢31参考文献31引 言近年来随着学校的不断发展扩招,各级学院的专业和生源不断发生变化,造成学校的试卷管理工作很繁琐,如果没有相应的系统,而仅仅以传统的方式进行管理,不但效率低下,而且往往得不到很好的效果。同时也给教师增加了额外的负担,不能实现试卷的重复利用。而在计算机普及的今天,人人都明白优秀的管理离不开计算机的支持,教育也不外如此。基于J2EE的试卷库管理系统就是针对此需求而开发的,这套系统可以使工作人员轻
4、松有条理的完成试卷管理的工作,而且其性能也十分稳定,实现了高校试卷管理自动化。第一章 系统综述1.1 系统简介选择J2EE构建信息化平台是一种长远的规划,对于信息化而言这是一个不断整合的过程,在未来的日子里可能会有不同的平台、不同系统的异构系统需要整合,J2EE应用提供的跨平台性、开放性及各种远程访问的技术,为异构系统的良好整合提供了保证。而轻量级J2EE应用是对经典J2EE应用的简化,在保留经典J2EE应用的架构、良好的可扩展性、可维护性的基础上,简化了J2EE应用的开发,降低了J2EE应用的部署成本。本系统是建立在互联网基础上的应用系统。客户端只需要一个有浏览器的终端就可以使本校的试卷库管
5、理不受地域和时间的限制,是基于轻量级J2EE框架进行开发的一套B/S系统。系统主要流程:1、安排课程:管理员导入Excel表格批量安排每学期的课程。2、上传试卷:教师根据专业和课程添加试卷,等待试卷被管理员审核。3、审核试卷:管理员审核教师上传的试卷,只有审核通过的试卷才能参与每一门课程的抽卷,每份试卷都有一个相应的抽卷参与系数。4、手动抽卷:管理员可以对每学期的课程进行抽卷以作为期末试卷,手动抽卷程序中可以先手动修改每份试卷的参与系数大小,然后再根据参与系数的大小从已经审核通过的试卷中进行抽卷,系数大的试卷被抽到的概率比较大,反之则比较小。5、自动抽卷:管理员可以对每学期的课程进行自动抽卷,
6、试卷参与系数大小取默认值。6、重新抽卷:管理员查看已经被抽取的试卷的历史记录,不满意则可以重新抽卷。7、批量打印试卷:打印员查询已经抽卷完毕的课程,然后批量打印该课程的试卷。8、自动打包试卷:管理员根据学年、学期、学院打包下载期末试卷,然后送往教务科存档。1.2 系统架构表示层Struts-MVCStrutsAction、ActionForm、JSP 、Struts-config.xml业务层Spring事务TransactionsHibernate Session管理业务逻辑类Business Services持久层DataSource连接池SQL语句Hibernate ServicesHi
7、bernateMySQLDomain Model Business Objects数据库数据存储DAOServiceSQL图1.1系统架构图l 表示层:管理用户的请求,做出相应的响应提供一个控制器,委派调用业务逻辑和其它上层处理异常,抛给Struts Action,为显示提供一个模型;l 业务层:一个典型Web应用的中间部分是业务层或者服务层,这层容易与程序代码紧密偶合而使用Spring可以很好的解偶;l 持久层:利用Hibernate 为Java提供的OR持久化机制和查询服务,其对象是基于POJO和Java Collections;l 域模型层:Hibernate允许你将数据库中的信息存入由
8、实际需求中的业务组成的对象,也可以将对象中的信息存入数据库中;l 数据库:在本系统中采用MySQL作为数据存储服务器。1.3 系统目标基于B/S模式的试卷库管理系统可以使用户在网上随时对试卷库进行管理。管理员能在网上对本校的试卷库和各部门信息进行管理,无时间和地域限制。教师可以及时添加试卷作为期末考试抽卷使用。打印员可以轻松地批量打印试卷。本项目的设计与实现,可以实现自动化管理试卷库。希望它能够在本校的试卷管理中发挥高效、便捷的作用,把老师、管理人员从繁重的工作中解放出来。第二章 系统设计2.1 需求分析2.1.1 主要问题(1)用户身份级别要求即根据身份的不同对系统的使用权限有所不同。从权限
9、大小大致可以分为:管理员、教师、打印员。系统提供灵活的角色设定和权限的分配功能。l 管理员:是权限最大的管理员,拥有本系统的所有权限,主要负责管理学院、专业、班级、课程以及用户,具有审核试卷的权限,可以针对课程进行抽卷操作等。l 教师:查询课程表信息,选择专业和课程添加试卷,并可以对自己的试卷进行管理。l 打印员:主要负责打印试卷,其中批量打印试卷对此项工作非常重要。(2)上传试卷要求在高校考试中,试卷的保密性是必须的,在普通的文件上传下载中,通常是把试卷直接放在服务器目录下面,这样导致试卷泄露率会比较大。为了更好的实现对试卷的保密措施,要求将试卷WORD文档直接转换成二进制流存入Mysql数
10、据库的Blob字段中,这样就确保了只有获取了系统的相应权限后才能对试卷进行查看。(3)抽取试卷算法要求抽卷算法对于如何合理的在一套试卷库中抽取试卷,在以往的考试中,都是从A、B、C三份试卷中随机抽取一份作为期末考试用。现在为了实现试卷的重用性,往年的试卷也可以参与抽卷,这样就有多份试卷参与抽卷,需要设计一个算法按每份试卷的概率大小进行抽卷。(4)系统定时更改试卷参与系数在抽卷过程中,如果某份试卷被抽到作为考试用,则把该份试卷的参与系数设置成最小。但是为了更好的确保试卷的重用性,确保在以后的抽卷过程中,也能够抽到它,要求系统定时增加每份试卷的参与系数大小,这样就确保了试卷库中每份试卷的重用性。2
11、.1.2 基本功能我们主要构建一个基于B/S模式的试卷库管理系统,为本校的试卷库管理提供一个良好的解决方案。系统的主要功能包括:(1)根据登录者的身份提供不同的服务。(2)教师:管理个人信息、添加试卷及管理个人试卷、查询用户、查询课程;(3)打印员:管理个人信息、查询用户、查询课程、打印试卷管理(批量打印);(4)管理员: 管理个人信息、专业配置、班级配置、课程配置、审核试卷、查看试卷、删除试卷、手动抽卷、自动抽卷、管理用户、打包下载试卷。2.1.3系统用例图1.2 系统用例图2.2 系统数据库设计该系统使用Mysql数据库,数据库名称是sjgl,以下是各个数据表的结构表及说明。(1) 教师信
12、息表(teacher),用来记录各系统用户的基本信息。其中字段teaId为教师信息表的关键字,系统就是使用teaId来区分判断用户权限的。表2-1 teacher结构序号字段含义字段名类型宽度是否非空关键字备注1教师工号teaIdVarchar12YY2密码teaPwdVarchar32Y3姓名teaNameVarchar20Y4性别teaSexVarchar12Y5学院teaInsVarchar30Y6专业teaDeptVarchar30Y7邮箱teaEmailVarchar50Y8电话teaPhoneVarchar20Y9职称teaTitleVarchar20Y10用户级别teaLevel
13、Varchar30Y(2) 学院表(ins),用来记录各二级学院编号和名称。表2-2 ins结构序号字段含义字段名类型宽度是否非空关键字备注1学院编号ins_codeVarchar12YY2学院名称ins_nameVarchar50Y(3) 专业表(dept),用来记录各二级学院隶属专业的编号和名称。表2-3 dept结构序号字段含义字段名类型宽度是否非空关键字备注1专业编号dept_codeVarchar12YY2专业名称dept_nameVarchar50Y3学院编号ins_codeVarchar12Yins.ins_code(4) 班级表(classgrade),用来记录各专业隶属班级的
14、编号和名称以及班级人数。表2-4 classgrade结构序号字段含义字段名类型宽度是否非空关键字备注1班级编号class_codeVarchar12YY2班级名称class_nameVarchar50Y3专业编号dept_codeVarchar12Ydept.dept_code4班级人数classpersonInt11Y默认为0(5) 课程信息表(course),记录各个专业所有课程信息。表2-5 course结构序号字段含义字段名类型宽度是否非空关键字备注1课程编号course_codeVarchar12YY2课程名称course_nameVarchar50Y3所属专业dept_codeV
15、archar12Ydept.dept_code4考核方式exammethodVarchar10Y5选课属性propertyVarchar4Y6抽卷标志remarkVarchar8Y(6) 课程表(classcourse),记录详细的课程表信息,包括班级、课程、学年、学期等等信息。表2-6 classcourse结构序号字段含义字段名类型宽度是否非空关键字备注1编号IdInt11YY自动增一2课程编号course_codeVarchar12Ycourse.course_code3班级编号class_codeVarchar12Yclassgrade.class_code4学年yearVarchar
16、8Y5学期termVarchar4Y6上课人数paperCountInt11Y7抽卷标志remarkVarchar12N8打印标志remark2Varchar12N9试卷内容paperContentLongBlobN10试卷名称paperNameVarchar100N11抽卷历史historyTextN(7) 试卷表(paper),记录试卷详细信息,包括学院、专业、课程、上传时间、指导老师等等。表2-7 paper结构序号字段含义字段名类型宽度是否非空关键字备注1编号IdInt11YY自动增一2学院paperInsVarchar50Y3专业paperDeptVarchar50Y4课程paper
17、CourseVarchar50Y5试卷套数paperNumInt11Y6上传时间paperTimeVarchar30Y7试卷内容paperContentLongBlobY8指导老师paperTeaVarchar20Y9审核标志remarkVarchar8Y10参与系数factorDouble4,2Y11抽卷历史historyTextN12审核意见remarkideaTextN2.3 系统访问权限控制系统根据用户权限进入不同的管理后台,权限控制图详细描述了这个过程。图1.3 权限控制图2.4 开发环境 JDK版本:1.5.0_04 J2EE容器:Tomcat 5.0.28 数据库:MySQL 5
18、.1.23 系统:Windows XP Profession 开发工具:Eclipse 3.2.1、MyEclipse 5.1、Dreamweaver8.0、Fireworks8.0 本系统使用的框架版本:Struts1.2、Spring2.0、Hibernate3.0第三章 系统实现3.1 系统界面图3.1 系统登录界面图3.2 管理员界面图3.3 管理员打包下载试卷图3.4 管理员手动抽卷图3.5 教师查询个人试卷图3.6 打印员批量打印试卷3.2 系统中文乱码的解决方案Java的内核和class文件是基于unicode的,这使Java程序具有良好的跨平台性,但也带来了一些中文乱码问题的麻
19、烦。主要有两方面,Java和JSP文件本身编译时产生的乱码问题和Java程序于其他媒介交互产生的乱码问题。首先Java(包括JSP)源文件中很可能包含有中文,而Java和JSP源文件的保存方式是基于字节流的,如果Java和JSP编译成class文件过程中,使用的编码方式与源文件的编码不一致,就会出现乱码。对于JSP:在文件头加上就能解决乱码问题。对于交互产生的乱码问题(例如:表单提取过程中的乱码),解决步骤如下:1、对于Servlet应该加上:response.setCharacterEncoding(GBK);2、为系统添加一个过滤器(EncodingFilter)代码如下:public c
20、lass EncodingFilter implements Filter private String charset = null;public void destroy() public void doFilter(ServletRequest req, ServletResponse resp,FilterChain chain) throws IOException, ServletException req.setCharacterEncoding(this.charset);chain.doFilter(req, resp);public void init(FilterConf
21、ig arg0) throws ServletException this.charset = arg0.getInitParameter(charset);3、在web.xml中做如下设置:encodingqztc.paper.filter.EncodingFiltercharsetgbkencoding/*4、对数据库进行相应设置(MySQL) 修改MySql数据库的my.ini配置文件中client下的设:default-character-set=GBK 在建表的时候设置:ENGINE=InnoDB DEFAULT CHARSET=GBK3.3 整合Struts、Spring、Hibe
22、rnate框架3.3.1 Struts整合Spring1、在Struts配置文件struts-config.xml中主要配置: 配置ActionForm Bean 配置全局转发关系 配置Action映射 配置消息资源 配置Validator插件 略略 2、在Spring中注册动作(applicationContext.xml)3.3.2 Hibernate整合Spring1、配置数据源java:comp/env/jdbc/sjgl2、配置sessionFactoryorg.hibernate.dialect.MySQLDialecttruetrueqztc/paper/vo/Classcour
23、se.hbm.xml略 3、装配DAO在Spring中注册DAO4、装配Service层3.3.3 WEB系统加载SpringcontextConfigLocation/WEB-INF/applicationContext.xmlcontextorg.springframework.web.context.ContextLoaderServlet13.4 上传试卷到数据库本系统中为了实现试卷的保密性,需要把试卷WORD文档转换成二进制流存在数据库Blob字段中,在这里用三个框架SSH整合实现。1、在applicationContext.xml配置文件中PROPAGATION_REQUIREDP
24、ROPAGATION_REQUIRED,readOnlyfileServicetransactionInterceptor2、在Action中处理上传的文件/ 上传试卷public ActionForward addpaper(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response)throws Exception FileForm fileForm = (FileForm) form;/ 保存试卷this.fileService.save(fileForm)
25、;return mapping.findForward(addpaperdo);3、调用的fileService实现方法/ 用于将上传的文件信息保存到数据库public void save(FileForm fileForm) throws Exception String paperCourse = fileForm.getPaperCourse();String paperDept = fileForm.getPaperDept();String paperIns = fileForm.getPaperIns();Integer maxpaperNum=this.fileDAO.query
26、MaxPaperNum(paperIns, paperDept, paperCourse);if(maxpaperNum=null)maxpaperNum=0;Integer paperNum=maxpaperNum+1;Paper paper=new Paper();String paperTea = fileForm.getPaperTea();SimpleDateFormat format = new SimpleDateFormat(yyyy-MM-dd HH:mm:ss);Date d = new Date();String paperTime = format.format(d);paper.setPaperCourse(paperCourse);paper.setPaperDept(paperDept);