交叉安排学生考场设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Java环境下交叉编排考场的实现

2015/5/5

安龙一中贺永利

摘要:许多学校在正式考试场合中常用年级交叉方式编排考场,这样可以降低学生彼此抄袭试卷的可能性,同时可以节约时间、空间和人力。这里所指的交叉编排考场要实现两个目的:一是年级分隔,二是班级分隔。同时,必须有一些条件:一是分科属性保持一致,也就是说,文科与理科不能分在一个考场;二是考场人数要和班级人数一致,目的是不用增加配置桌凳。实现的核心是算法。本文阐述在java环境下用程序设计的方法实现交叉编排考场。

关键字:交叉编排考场java

正式考试场合,许多学校常用年级交叉方式编排考场,这样可以降低学生彼此联合作弊的可能性,同时可以节约时间、空间和人力。这里所指的交叉编排考场要实现两个目的:一是年级分隔,二是班级分隔。与此同时,必须满足两个条件:一是分科属性保持一致,也就是说,文科与理科不能分在一个考场;二是考场人数要和班级人数一致,目的是不用增加配置桌凳。究竟如何实现这种想法呢?

我们来看看这个算法:

下面,我们需要用Java语言来实现这一算法。

定义函数

//考试管理

public static List

addTestStudent(List stulist,Hashtable

hashclass,String gname1,String gname2) throws SQLException{ 传递参数说明:

1、stulist是由Hashtable组成的学生对象列表,由jsp文件传入;

2、hashclass是班级名称与班级编号对应的哈希表;

3、gname1和gname2年级名称字符串。

函数体:

//从学生列表中提取年级分科名称列表

List subnamelist=gettype(stulist,"年级分科");

//班级名称列表

List clnamelist=gettype(stulist,"班级名称");

以上两句调用了自定义的函数,该函数有List类型的参数和一个

字符串类型的字段参数field,返回一个List。Subnamelist将获得带有唯一年级分

科信息的链表,用于识别和区别年级分科;clnamelist将获得带有唯一班级名称

信息的链表,用于识别和区别班级名称;该函数体如下:

public static List gettype(List list,String field) throws SQLException{

//返回的班级学科成绩汇总链表

List resultlist = new

ArrayList();

//标记链表:保存已经计算过的信息

List strlist=new ArrayList();

for(int i=0;i

Hashtable hash =list.get(i);

String str=dealstring((String)hash.get(field));

if(strlist.contains(str)) continue;

else{

strlist.add(str);

resultlist.add(hash);

}

}

//返回结果汇总链表

return resultlist;

}

接下来的操作:

//班级链表

List cllist=new ArrayList();

//存储年级分科链表的链表

List wholelist=new ArrayList();

//班级数计数

int count=0;

以上cllist和wholelist里的每一个元素都是List。接下来将是根据获取班级名称组织班级学生:

while(count

String clname=(String)clnamelist.get(count).get("班级名称");

//年级分科链表

List sublist=new ArrayList();

for(int i=0;i

//一个班级链表,存一个班级学生

Hashtable hash=stulist.get(i);

String cl=(String)hash.get("班级名称");

//比较相同时,添加

if(cl.contains(clname)){

//print(clname+learnno+sub);

sublist.add(hash);

}

}

cllist.add(sublist);

count++;

}

下面是重新组织学生,也就是班级学生交叉起来。操作过程是分别从同类班级中取出第一、第二、第三……直到班级学生结束。

//存储年级分科链表的链表

List wholereformlist=new ArrayList();

//班级学生分散

for(int i=0;i

//重组链表

List reformlist=new ArrayList();

//年级分科链表

List sublist=wholelist.get(i);

//类学生数计数

int subcount=0;

for(int j=0;j

List list=sublist.get(j);

subcount+=list.size();

}

print(subcount);

//类学生数计数

int stucount=0;

//班级学生指向

int m=0;

//重组学生

for(int j=0;stucount

//得到一个班级对象

List list=sublist.get(j);

if(m

Hashtable hash=(Hashtable)list.get(m);

String clname=(String)hash.get("班级名称");

String sub=(String)hash.get("年级分科");

String learnno=(String)hash.get("学号");

reformlist.add(hash);

stucount++;

}

j++;

相关文档
最新文档