基于Java Web的高校考试排座系统

2018-07-28 07:12胡秀梅章宇琦吴迪吴海峰
科技视界 2018年12期

胡秀梅 章宇琦 吴迪 吴海峰

【摘 要】本文基于spring+ struts2+ Hibernate框架,设计实现了一套用于高校考试的排座系统,以替代目前考试过程中的人工排座。该系统具有自动、快速、稳定的特点,既避免了当前人工排座过程中由人工操作失误而引起的各类问题,又大大减轻了教务工作者的工作量,提高了高校信息化水平。

【关键词】Java Web;考试;排座

中图分类号: TP391.13 文献标识码: A 文章编号: 2095-2457(2018)12-0120-003

DOI:10.19694/j.cnki.issn2095-2457.2018.12.052

0 引言

考试是高校教学过程中不可或缺的一环,每学期末在考试前教务工作人员都要结合当前班级、科目、教室使用情况进行考试座位的编排。以笔者所在学校为例,全校有超过200个班级,按每个班级考10门课程计算,需要安排的场次就超过2000次。由此可见该项工作需要耗费大量的人力和时间。

目前有一些学者对考试的自动排座展开了研究。娄清[1]利用VBA在Excel中开发了普通高中的考试排座系统,给出了详细的模块设计和代码参考;李正慧[2]简要的从排课系统数据库中关键性数据表的设计和排课界面功能的实现等方面介绍了整个排课数据库的设计思路;周玉芬[3]等针对高校考试的特点,用VC++编写了一个考场随机排座系统,实现了考场人员座次的随机排序、显示和打印等功能;徐欣[4]等利用Microsoft Visual FoxPro6.0开发了一套考试随机排位系统,实现了考场的分配、学生座位的随机排座、考试时间、场次安排、打印考试座位表等功能,并进行了测试和应用。

由以上调研可以看出,考试的排座问题是每个学校都面临的重要问题,如何使其自动化实现已经得到了学者们的关注,并产生了一些相关研究成果。然而当前对排座系统的研究和应用还不够深入和全面,没有与高校考试安排灵活性高、变化性大的特点相结合,研发的系统也主要以本地测试或者普通桌面软件为主,无法适用于多人集中办公的场景。

针对这个现状,我们利用目前主流的Spring+Struts2+Hibernate三层框架技术,采取面向对象的思想,结合MVC模式实现了一套适用于高校考试的自动排座系统。

1 关键技术

1.1 MySQL数据库

MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。

1.2 三层框架

Spring框架

Spring是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框架。Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性角度而言,绝大部分Java应用都可以从Spring中受益。

Struts2框架

Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts 2可以理解为WebWork的更新产品。

Hibernate框架

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行。Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用。

2 设计与实现

本系统分为三大模块,即超级管理员、教务处和辅导员。超级管理员管理学院表、班级表、课程表、教室详情表、用户表。对这些表中的数据具有增加、修改、删除、查看的权限。这些表都是属于学校固定信息。同时还有对教务处、辅导员的权限的配置功能。教务处管理时间表、考试安排表。主要功能为对考试时间的安排,对全校班级对应课程考试安排的增、删、改、查。辅导员可以查看考试安排表,安排考试排座。

整个系统结构如图1 所示。

2.1 数据库表的设计

如图2为系统的数据库表设计结构图。每一个方块为一个表结构,方块上面一层为表名,下面为表的字段。表与表之间的连线代表表之间的关系。

表关系介绍:

(1)学院表关联班级表,有了学院才会有班级,为一对多的关系;

(2)考试信息表关联班级表、考试时间地点表、课程表,而考试时间地点表是课程和班级表联合主键生成,所以班级与课程是这两者表的主要部分,构成上面的四角关系;

(3)班级课程表则是课程表与班级表映射出来的一张表,因为两者为多对多的关系;

(4)用户表是一张单独的表;

(5)考試时间地点表则从教室表获取教室信息。

表主要字段介绍:

(1)教室详情表中的座位详情:(n1*m1+n2*m2+n3*m3),其中n代表有几排,m表示每排有几个座位,其中m =k1+k2+k3,代表每隔k个有一个过道;

(2)用户表中的标志位:1代表超级管理员,2代表教务处,3代表辅导员;

(3)排座表的设计:学院、班级、课程、教室、人数、座次表。座次表在数据库中以字符串的形式显示,字符串中的书写以键值对的形式书写。例如:“01=学生A ,02=学生B…”。

(2)排座算法

智能排座算法是该系统的核心,该算法利用后端的动态数据,排出最优化的座位方案,算法包含冲突检测功能。算法流程如图3所示。

上述算法思路清晰,结构较为简单,实现起来比较容易,其大致流程为:

第一步,系统读取后端数据库的考试计划、教室信息、班级信息和课程信息,并将这些数据加载到内存;

第二步,将考试计划按照班级人数从小到大顺序排列,教室容纳人数按照从小到大顺序排列,先安排人数少的班级,再安排人数多的班级。

第三步,遍历考试计划中的每一项,找到合理的教室,记录并锁定该时间段的对应教室使用,防止出现一教室多用。

第四步,将排好的每一项考试座次表写入到Excel文件并存储,供后期各学院打印下载。

(3)主要代码

系统的核心代码及相关注释如下所示。

//班级的dao 层

StudentClassDao dao;

public void setDao(StudentClassDao dao) {

this.dao = dao;

}

//教室的dao 层

ClassroomDao dao;

public void setDao(ClassroomDao dao) {

this.dao = dao;

}

//排座功能的实现,两个参数,一个是班级对象,一个是教室对象

public void arraySets(StudentClass studentC,Classroom classroom){

//查询数据库,获取班级人数

StudentClass studentC2=dao.queryStudentClassById(studentC.id);

Integer studentClassNum=studentC2.getNum();

//查询数据库,获取教室容量

Classroom classroom2=dao.queryClassroomById(classroom.id);

Integer roomNum=classroom2.getNum();

//定义一个数组,数组的长度为班级人数,此数组作为班级学生,进行编号

int sR[]=new int[studentClassNum];

for (int i = 0; i < sR.length; i++) {

sR[i]=i+1;

}

//定义一个数组,数组的长度为教室容量,此数组做为教室座位号,进行编号

int cR[] = new int[roomNum];

for (int i = 0; i < cR.length; i++) {

cR[i]=i+1;

}

Random random = new Random();

//定义一个字符串数组,用来存放教室与学生的对应关系,长度为学生数量

String[] classToStu=new String[studentClassNum];

//遍历教室

for (int i = 0,j=0; i < sR.length && j

//产生一个随机编号,编号不大于学生最大编号

int z = random.nextInt(studentClassNum);

for (int k = 0; k < sR.length; k++) {

if(z==sR[k]){

classToStu[j]=i+":"+z;

sR[k]=0;

}else{

//是参数回归,也就是重新这一次操作

i=i-2;

j=j-1;

//跳出for循环

break;

}}}}

3 结果测试

经过测试,系统可以正常运行,部分测试页面截图如下。

4 结语

本系统是根据高校教务管理人员的需求,结合高校学生信息管理的特点开发的,整个系统具有良好的实用性和可扩充性,已经考试应用于考试安排中,能满足院系环境下的考试管理需求。后续研究将从界面的美观性、功能的完整性等方面加以改进,提高系统易用性和普适性,更好的服务于高校信息化工作。

圖4 系统主界面

图5 座次表

【参考文献】

[1]娄青.利用VBA在Excel中开发普通高中考试排座系[J].中国教育信息化,2012.

[2]李正慧.排课系统数据表的设计与功能的实现[J].数字技术与应用,2011.

[3]周玉芬,杜猛,宋明慧.使用VC++开发考场随机排座系统[J].电脑编程技巧与维护,2008.

[4]徐欣,陆阳,金红.考试排位系统[J].电子科技大学学报, 2003.