设计一个
考场编排vb程序 [ 标签:考场,程序,师范生 ] 一、设计题目: 设计 一个考场编排程序 二、目的与要求 1. 目的 培养学生综合利用VB语言进行程序设计的能力,主要是利用扩展控件进行设计。 2. 基本要求 n 读取文件中的学生
信息和考场信息 ,并保存在数组中 。 n 在窗口中显示读入的所有学生信息。 n 在窗口中显示读入的考场的信息 n 根据考场信息和学生信息,顺序编排
准考证号。 n 显示编排了准考证号的学生信息 3. 创新要求 在基本要求达到后,进行创新设计,创新方向提示如下: ★ 对 准考证号进行随机编排 。 ★ 实高旦现查询功能, 根据给定条件(准考证号、学号、姓名),查询考生信息; 如未查询到,也应给出相应提示信息。 ★ 其它方面的创新(功能实用,有一定的代码量)。 三、设计方法和基本原理 1 .问题描述 程序主界面见第一部分的示例图。设计时可以通过运行随同本任务书一起提供的参考程序得知程序的一些特性。 ①在程序界面中单击“读入数据”按钮,从数据文件中将学生信息及考场桐答信息读入,此时可以在屏幕上显示读入了多少学生的信息和考场信息(例如:读入了40名学生、10个考场的信息)。 ② 在程序界面中单击“显示学生情况”按钮,在文本框中显示所有学生信息;在程序界面中单击“显示考场信息”按钮,在文本框中显示考场信息。 ③单击“编排考场”按钮,按照每个考场人数自动编排准考证号。 ④单击“显示考场编排”按钮,在文本框中显示编排了准考证号的学生信息。 ⑤单击“查询”按钮,根据给定条件(准考证号、学号、姓名),查询考生信息。 2. 问题的解决方案 ①定义数组分别用于存放学生信息、考场代号、考场人数。 ②单击“读入数据”按钮后,将数据文件中的记录依次读入到相应数组中。 ③单击“显示学生情况”、“显示考场信息”按钮后,将已经保存在数组中的相应信息以合适的方式在文本框中显示。 ④单击“编排考场”按钮后,按照“考场代号+座位号” 规则编排准考证号(例如:0121表示01考场的21号),并保存到准考证号数组中。 ⑤单击“查询”按钮后,以文本框中输入的内容为查询条件,根据选定的查询部分(单选框中选择准考证号、学号或姓名)进行查询,并将结果显示。 四、主要技术问题的描述: 本题技术问题不多,主要是搞清楚编排考号的算法。 ①由于单击各按钮时,都要对学生信息、考场信息、准考证号数组及相应变量进行 *** 作,因此这些数组和变量应定义为模块级的。 ②考场编排的算法: 01 30 02 25 03 35 04 30 05 25 06 40 如果以一个二维数组kch(1 tov 2,1 to 6)表示考场信息,则编排考场的基本思路就是:先取出第一行信息kch(1,1),kch(1,2),kch(1,1)是01,表示考场代号,用来作为准考证号的前两位;kch(1,2)是30,表示01考场的人数是30人,此时,就要建立一个循环,循环变量依次由1变化到30,每循环一次,就由考场代号kch(1,1)与循环变量(即考场代号+座位号)构造了一个考号。当第一个考场排完后,依次排余下的考场。 由此可见,编排考场就是构建循环,依次从考场信息数组kch(1 tov 2,1 to 6)中取出考场信息,再根据考场的人数,决定循环次数,生成一个一个的戚轮扰考号。 在生成了每个考号后,还要将其保存到与学生信息相对应的数组中。此外,需要注意:生成考号还要受到学生人数的限制,即当超过学生人数时,就要终止考号的编排。 另外一点需要注意的是:在上面由考场代号kch(1,1)与循环变量构造考号时,由于考场代号是字符型,而循环变量是数值,所以不能直接相连,需要将循环变量先转化成字符才行,即kch(1,1)+str(i) 还有一点需要考虑的是,当座位号小于10时,形成的考号可能就是018的形式(应该是0108),为此要在座位号前加"0",即kch(1,1)+"0"+str(i) 也就是在构造考号时,要随时对座位号的大小进行判断,以决定是否在其前面加"0"。 五、参考资料 ★ Visual Basic 程序设计教程 及 Visual Basic 实验教程 ★ VB6.0程序员指南 ★ VB6.0控件参考手册 ★ MSDN中文版,课程设计网站上提供的其它资料。
两个考点,一个考点又有汉授考生、有蒙授考生,蒙汉不在一个考场考试,但汉在前考场数,蒙在后考场数。每个考场30人,同悉并班考生无领近。第一步, 编写好睁物迹考试号[每个蚂旁学生的考试号不同]
把汉学生编写在前面,蒙学生编写在后
第二步,按照人数分考场,三十人一个考场,把汉学生
编写在前面的考场,蒙学生编写在后面的考场
汉学生人数除于30得到汉学生考场个数,从而获得汉考场人数
蒙学生类似
第三步,每个考场里面编写座位考务管理的代码,其中计算机等级考试考务管理与你的类似。那是一个大系统中的一部分,给你没有用。相关其中部分改了下,看看能不能用。因为没有数据,没法调试。自已看看吧。
程序代码:
** ksxxb 考生信息表** kmdm 科目代码** xh 学号*!* zkzh 准考证号
*!* bj 班级(可以用班号代替)*!* kch 考场号 整数*!* zwh 座位号 整数(1-30)**SELECT distinct kmdm,COUNT(*) as kmrs FROM ksxxb INTO CURSOR kmtj ORDER BY kmdm asc &&如果BM大的在前用 desc 代替 ASCFOR i=1 TO RECCOUNT('kmtj') SELECT kmtj GO i
ckmdm=ALLTRIM(kmdm)
nkcs= INT(kmrs,30)
nfb=MOD(kmrs,30) &&非标考场人数 SELECT bj,COUNT(*) as bjrs FROM ksxxb GROUP by bj ORDER BY bjrs DESC INTO CURSOR bjtmp FOR ibjs=1 TO RECCOUNT('bjtmp') SELECT bjtmp GO ibjs
cbj=ALLTRIM(bj)
cbjrs=PADL(ALLTRIM(STR(bjrs)),3,'0') SELECT ksxxb
REPLACE zkzh WITH cbjrs FOR ALLTRIM(bj)==cbj AND kmdm=ckmdm
ENDFOR SELECT zkzh,xh,kch,zwh FROM ksxxb INTO CURSOR zkztmp WHERE kmdm=ckmdm ORDER BY zkzh desc,bj READWRITE SELECT zkztmp GO 1
FOR j=1 TO nfb FOR k=1 TO nkcs+1
REPLACE kch WITH k,zwh WITH j
skip
ENDFOR
ENDFOR FOR j=nfb+1 TO 30
FOR k=1 TO nkcs REPLACE kch WITH k,zwh WITH j
skip
ENDFOR
ENDFOR SELECT zkztmp REPLACE zkzh WITH ckmdm +PADL(ALLTRIM(STR(kch)),3,'0')+PADL(ALLTRIM(STR(zwh)),2,'0') all
irecc=RECCOUNT() FOR j=1 TO irecc SELECT zkztmp GO j
cxh=ALLTRIM(xh)
czkzh=zkzh
ikch=kch
izwh=zwh SELECT ksxxb
LOCATE FOR ALLTRIM(xh)==cxh IF FOUND() REPLACE zkzh WITH czkzh,kch WITH ikch,zwh WITH izwh ELSE
=MESSAGEBOX('程序出错!')
ENDIF
ENDFOR
ENDFOR
评论列表(0条)