基于JAVA的在线考试系统的设计与实现
摘 要:基于Java的在线考试系统的设计与实现采用MyEclipse 6.5作为开发工具,使用MVC开发模式,框架使用了目前流行的Struts,数据库使用Oracle 10i。该系统主要有三大模块:管理员模块对试题进行管理;教师模块负责对试题批阅;学生模块主要是在线考试。
关键词:Java设计;Struts框架;在线考试;B/S
中图分类号:TP316 文献标识码:A 文章编号:2095-1302(2015)01-00-02
0 引 言
在分析了现有考试系统,结合实际情 ϡ况的基础上,利用Java语言设计并实现了一个基于Web的在线考试系统设计。系统包含了登录、注册、教师和学生信息管理、在线考试、试卷管理、题库管理、学生成绩管理等能功能。
1 采用技术
模型-视图-控制器(MVC)是Xerox PARC在八十年代为编程语言Smalltalk-80发明的一种软件设计模式,至今已被广泛使用。最近几年被推荐为Sun公司J2EE平台的设计模式。
Struts最早是作为Apache J☤akarta项目的组成部分问世运做,Struts的目的是为了帮助开发者减少在运ฎ用MVC设计模型来开发Web应用的时间。如果想混合使用Servlet和JSP的优点来建立可扩展的应用,Struts是一个不错的选择。Struts 是MVC的一种实现,它将Servlet和JSP标记(属于J2EE规范)用作实现的一部分。Struts继承了MVC的各项特性,并根据J2EE的特点,做了相应的变化与扩展。Struts的核心是ActionSevlฏet,ActionSevlet的核心是Struts-config.xml配置文件。
2 系统可行性分析
可行性研究(Feasibility Study)是为了弄清所定义的项目是不是可能实现并值得进行。下面从三个方面分析本系统的可行性。
本系统是在Windows XP操作系统下开发的基于B/S体系结构的Struts框架的MVC模式的系统,采用MyEclipse 6.5、Tomcat 5.5、DreamWeaver、PLSQL作为开发工具。本系统后台采用Oracle 10i数据库,其具有跨平台性、可靠性、易用性。软件运行环境:终端支持运行Windows的计算机、数据库支持各种流行的大型关系数据库,数据库服务器支持Windows等各种操作系统;开发本系统的经济成本低,使用Java开发维护费用不高、开发的周期短;网络化已经成为社会的趋势,本系统操作简单方便。
3 系统设计模式
基于B/S的在线Web考试模式的物理模型:一方是管理员在一端通过Internet与服务器进行连接,另一方是学生分别从不同的地方,也通过Internet与考试服务器连接,图1为系统的网络原理图。
图1 系统的网络原理图
在线考试系统从概念上看,是一个典型的数据库应用Web系统,采用三层B/S体系结构。三层体系结构相对较为简单,表示层展现给最终用户UI界面,中间业务逻辑层处理用户请求并访问数据库,底层❅为持久层数据库实现;而多层体系结构则将业务逻辑层进一步细化,使系统更加灵活。本系统采用了多层体系结构(系统体系结构如图2在线考试系统网络部署图)。
图2 在线考试系统网络部署图
4 系统总体设计及部分模块实现
该系统具有用户登录、参加考试、以及教师进行试题维护、成绩查询等功能的ASP应用程序,应具有开放性、方便性和灵活性。登录用户可以是学生、教师和系统管理员,每类用户有不同的操作权限。考生通过用户验证后进入考试系统,并在规定的时间内进行答题,考生交卷后,其分数将被存入数据库中以供以后的查阅。为了保证系统运行的效率和可靠性,系统服务器端应具有较高的软硬件配置,客户端的要求不是很高。
详细设计阶段的任务是在总体设计的基础上进一步确定如何实现目标系统,包括以下内容:确定每一模块使用的数据结构,确定每个模块实现的功能,确定流程图,为每个模块确定采用的算法,写出模块的详细过程性描述。
下面将系统试题抽取模块实现时的关键技术及代码进行说明。
在进入到该页面之前,所抽取的题目是在题库中随机抽取的,不能有重复的题目,部分代码如下所示:
publicstatic ListIntegergetRandoms(int size, intnum) {
ListIntegerlistInt = newArrayListInteger
Random ran = new Random();
int k = 0;//初始的数据个数为0;
while (true) {
//这里可以有两种方法来处理:一种是重新遍历数组找出不重复,另一种是直接用Set 集合
if (listInt.size() == 0) {
listInt.add(new Integer(ran.nextInt(size)));
k++;
} else {
int t = ran.nextInt(size);
boolean result = false;
for (int j = 0; j listInt.size(); j++) {