交叉安排学生考场设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Java环境下交叉编排考场的实现
2015/5/5
安龙一中贺永利
摘要:许多学校在正式考试场合中常用年级交叉方式编排考场,这样可以降低学生彼此抄袭试卷的可能性,同时可以节约时间、空间和人力。这里所指的交叉编排考场要实现两个目的:一是年级分隔,二是班级分隔。同时,必须有一些条件:一是分科属性保持一致,也就是说,文科与理科不能分在一个考场;二是考场人数要和班级人数一致,目的是不用增加配置桌凳。实现的核心是算法。本文阐述在java环境下用程序设计的方法实现交叉编排考场。
关键字:交叉编排考场java
正式考试场合,许多学校常用年级交叉方式编排考场,这样可以降低学生彼此联合作弊的可能性,同时可以节约时间、空间和人力。这里所指的交叉编排考场要实现两个目的:一是年级分隔,二是班级分隔。与此同时,必须满足两个条件:一是分科属性保持一致,也就是说,文科与理科不能分在一个考场;二是考场人数要和班级人数一致,目的是不用增加配置桌凳。究竟如何实现这种想法呢?
我们来看看这个算法:
下面,我们需要用Java语言来实现这一算法。
定义函数
//考试管理
public static List
addTestStudent(List
hashclass,String gname1,String gname2) throws SQLException{ 传递参数说明:
1、stulist是由Hashtable组成的学生对象列表,由jsp文件传入;
2、hashclass是班级名称与班级编号对应的哈希表;
3、gname1和gname2年级名称字符串。
函数体:
//从学生列表中提取年级分科名称列表
List
//班级名称列表
List
以上两句调用了自定义的函数,该函数有List
字符串类型的字段参数field,返回一个List。Subnamelist将获得带有唯一年级分
科信息的链表,用于识别和区别年级分科;clnamelist将获得带有唯一班级名称
信息的链表,用于识别和区别班级名称;该函数体如下:
public static List gettype(List
//返回的班级学科成绩汇总链表
List
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 //存储年级分科链表的链表 List //班级数计数 int count=0; 以上cllist和wholelist里的每一个元素都是List。接下来将是根据获取班级名称组织班级学生: while(count String clname=(String)clnamelist.get(count).get("班级名称"); //年级分科链表 List 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 //班级学生分散 for(int i=0;i //重组链表 List //年级分科链表 List //类学生数计数 int subcount=0; for(int j=0;j List subcount+=list.size(); } print(subcount); //类学生数计数 int stucount=0; //班级学生指向 int m=0; //重组学生 for(int j=0;stucount //得到一个班级对象 List 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++; cllist=new ArrayList();
wholelist=new ArrayList();
wholereformlist=new ArrayList();
sublist=wholelist.get(i);
list=sublist.get(j);
list=sublist.get(j);