标签:
考场编排 |
分类: 考生号考场号座位号 |
&& 表b1为原表,给b1增加一新列 Sjh,生成新表b2
Select Rand() As Sjh,* From B1 Into Table B2
&& 按 Sjh 排序,生成新表b3
Select * From B1 Order By Sjh Into Table B3
&& 给b3增加一新列 Xh,生成新表b4 (结果表)
Select Recn() As Xh,* From B2 Order By Xh Into Table B4
Drop Table B2 &&删除表b1
Drop Table B3 &&删除表b2
** 根据人数多少搭配相等的五组数据,生成五个临时表
Sele * From Bmk Where Bmxh In([01]) Into Cursor B1
Sele * From Bmk Where Bmxh In([03],[04]) Into Cursor B2
Sele * From Bmk Where Bmxh In([02]) Into Cursor B3
Sele * From Bmk Where Bmxh In([06]) Into Cursor B4
Sele * From Bmk Where Bmxh In([07],[05]) Into Cursor B5
** 把五个临时表合并,按第一列‘Xh’排序,即生成五组插花排序的数据
Sele Recn() Xh,* From B1;
Union Sele Recn() Xh,* From B2;
Union Sele Recn() Xh,* From B3;
Union Sele Recn() Xh,* From B4;
Union Sele Recn() Xh,* From B5 Order By 1 Into Table B6
(1)、在表中有记录的情况下使用函数recn(),生成数值型准考证号命令如下:
Select 2007020000+Recn() As 编号,* From 报名表
或增加一列编号用: Update报名表 Set 编号=2007020000+Recn()
(2)、利用函数生成字符型序列(0000---9999)
Select Right(Str(90000+Recn()),4) As Bmxh;
From 报名表 Into Table 报名表2
(3)、生成开头为'0'的字符型准考证号(07140001-07149999)
Select '0714'+Right(Str(90000+Recn()),4) As Bmxh;
From 报名表 Into Table报名表3
(4)、字符型准考证号也可以用以下方法(在考场_kc、座号_zh生成后使用)
准考证号=[0714]+Alltrim(Kc)+Alltrim(Zh)
(1)、数值型考场号、座号(如1 2 3 ...10 11 12)
Select Ceiling(Recn()/30) 考场号,;
Recn()-(Ceiling(Recn()/30)-1)*30 座号,* From 报名库
(2)、字符型考场号、座号(如01 02 03 ...10 11)
Select Right(Str(9000+Ceiling(Recno()/30)),3) 考场号,;
Right(Alltrim(Str(900+Recn()- (Ceiling(Recn()/30)-1)*30)),2) 座号,* From 报名库
【注意】这样添加考场与座号列,必须用插花排序法排好顺序。
**========================================================================
** 程序名称:利用随机函数排考场程序
** 程序设计:侯进录
** 编程时间:2006年12月25日
**=========================================================================
** 生成随机号列
Select Round(Rand(),9) Sjh,* From Bmk Into Cursor B1
** 按随机号排序
Select * From B1 Order By Sjh Desc Into Cursor B2
** 生成字符型准考证号
Select[07]+Alltrim(Str(140000+Recn())) As 准考证号,;
** 生成字符考场号 (这里是每场30人,必要时改为40、50都可以)
Right(Alltrim(Str(9000+Ceiling(Recn()/30))),3) As 考场号,; ** 生成字符型座号
Right(Alltrim(Str(900+Recn();
-(Ceiling(Recn()/30)-1)*30)),2) As 座号,* From B2 ;
Into Table 考场编排表
**=======================================================================
** 程序名称:排序
** 程序功能:多组插花
** 编程人员:侯进录
**======================================================================
** 根据人数多少搭配相等的五组数据,生成五个临时表
Sele * From Bmk Where Bmxh In([01]) Into Cursor B1
Sele * From Bmk Where Bmxh In([03],[04]) Into Cursor B2
Sele * From Bmk Where Bmxh In([02]) Into Cursor B3
Sele * From Bmk Where Bmxh In([06]) Into Cursor B4
Sele * From Bmk Where Bmxh In([07],[05]) Into Cursor B5
** 把五个临时表合并,按第一列‘Xh’排序,即生成五组插花排序的数据
Sele Recn() Xh,* From B1;
Union Sele Recn() Xh,* From B2;
Union Sele Recn() Xh,* From B3;
Union Sele Recn() Xh,* From B4;
Union Sele Recn() Xh,* From B5 Order By 1 Into Table B6
** 编排准考证号
Select[07]+Alltrim(Str(140000+Recn())) As 准考证号,;
** 编排考场号 (这里是每场30人,必要时改为40、50都可以)
Right(Alltrim(Str(9000+Ceiling(Recn()/30))),3) As 考场号,; ** 编排座号号
Right(Alltrim(Str(900+Recn();
-(Ceiling(Recn()/30)-1)*30)),2) 座号,* From As B2;
Into Table 考场编排表 &&存成结果表
标签:
总分与平均分的计算it |
分类: 数据的统计 |
各科成绩表
学号 |
姓名 |
语文 |
数学 |
英语 |
综合 |
1 |
|
45 |
87 |
99 |
98 |
2 |
|
47 |
85 |
95 |
94 |
3 |
|
49 |
83 |
91 |
90 |
4 |
|
51 |
81 |
87 |
86 |
5 |
|
53 |
79 |
83 |
82 |
总成绩表
学号 |
姓名 |
语文 |
数学 |
英语 |
综合 |
总分 |
平均 |
1 |
|
45 |
87 |
99 |
98 |
329 |
329 |
2 |
|
47 |
85 |
95 |
94 |
321 |
321 |
3 |
|
49 |
83 |
91 |
90 |
313 |
313 |
4 |
|
51 |
81 |
87 |
86 |
305 |
305 |
5 |
|
53 |
79 |
83 |
82 |
297 |
297 |
命令如下:
Select *,语文+数学+英语+综合 As总分,;
(语文+数学+英语+综合)/4 As 平均 From各科成绩表;
Into Table总成绩表
标签:
教育 |
分类: 考生号考场号座位号 |
河南省滑县招生办公室 侯进录
经常组织考试的同志都需要进行考生号、考场号和座位号的编排,其方法各有不同,我通过多年的经验和学习总结出一种这三个号的编排方法。因为大多情况是报名后有现成的报名数据表,所以这里主要使用SQL查询语言及函数,分步骤在原报名表的基础上进行考生号、考场号和座位号的生成,程序运行环境主要在VFP环境当中。
首先,我们把考生报名表命名为:bmb,在此表基础上,经过编程方式给它进行随机混合后,增加上考生号(ksh),考场号(kch)和座位号(zwh)三列,最后生成考场表为:kcb。具体方法和思路如下:
我们利用随机函数Recn()给报名表bmk增加一列随机数并命名为随机号Sjh,然后再利用取舍函数Round()将其取6位小数(小数位数越多越好)。为不干涉原表数据我们利用“*”保留原表所有列,最后生成临时表B1。在临时表B1的基础上按随机号列sjh进行从小到大排序,从而打乱原来报名表排序,产生出按随机号Sjh排序的临时表B2,这给以后添加考场号、座位号和考生号奠定基础。
程序代码书写如下:
&& 增加随机编号列(Sjh)生成临时表B1
Select Round(Rand(),6) As Sjh,* From Bmb Into Cursor B1
&& 按随机编号列(Sjh)进行从小到大排序生成临时表B2
Select * From B1 Order By Sjh Into Cursor B2
每考场安排30人,这样考生人数除以30并向上取整(数学上叫过剩近似值)就是考场总数了。所以,同样的方法,我们把每一个考生所在的记录号Recn()(即位置顺序序号)除以30并向上取整,就得到每一个考生所在的考场了。这样就产生了一列考场号(Kch)。所以我们在表B2的基础上,利用函数Recn()除以30,然后再利用函数Ceiling()向上取整数(过剩近似值),即Ceiling(Recn()/30)就是每一个考生的考场号了,我们把这一列命名为考场号(Kch)从而产生临时表B3。
一般情况下,为了使考场号位数相同,考场号位数不足的在前边添加‘0’补齐。所以 ,这样以来就得把考场号转换成字符型字段才行。假设考场号为3位数,那么我们采取复合函数Right(Alltrim(Str(1000+Kch)),3)实现了考场号整齐的要求,这一列为字符型考场号,命名为Kch2。从而产生临时表B4。
程序代码书写如下:
&&编排数值考场号(Kch)
Select Ceiling(Recn()/30) As Kch,* From B2 Into Cursor B3
&&把数值考场号(Kch)转化为字符型并添加一列字符型考场号(Kch2)
Select Right(Alltrim(Str(1000+Kch)),3)As Kch2,* From B3 Into Cursor B4
由于每场安排30人,这时在座号列中是以30为周期的一组数列,并且和考生所在的记录号、考场号有一定关系,根据这个规律,我们发现使用函数和公式Recn()-(Kch-1)*30 就能完成座位号的编排,所以在表B4的基础上使用这个公式增加一列座位号并命名为Zwh。从而产生临时表B5。
一般情况下,为了使座位号号位数相同,座位号位数不足的在前边添加‘0’补齐。所以 ,这样以来就得把座位号转换成字符型字段才行,因此我们在表B5的基础上采取复合函数Right(Alltrim(Str(100+Zwh)),2)实现了座位号整齐的要求,这一列为字符型座位号,命名为(Zwh2)。从而产生临时表B6。
程序代码书写如下:
&&编排数值座位号
Select Recn()-(Kch-1)*30 Zwh,* From B4 Into Cursor B5
&&把数值型座位号(Zwh)转化为字符型并添加一列字符型考场号(Zwh 2)
Select Right(Alltrim(Str(100+Zwh)),2) As Zwh,* From B5 Into Cursor B6
考生号是为考试和分数管理提供的唯一性号码,有了考生号在以后考试和分数管理中,不但能起到唯一性还可以根据考生号辨别这个考生,考试的年份、所在的单位或地区、考生类别以及序号等。所以我们在临时表B6的基础上添加一列考生号,并命名为Ksh。从而产生正式结果考场表Kcb。
程序代码书写如下:
&&编排考生号(年份99+地区0714+类别66+顺序号Recn())
Select 990714660000+Recn() As Ksh ,* From B16 Into Table Kcb
考生号要是‘0’开头的,同样需要转为字符型字段。