2,722
社区成员
发帖
与我相关
我的任务
分享
Set Safety Off
Close Databases
*定义试场坐位号次序串
zwh_cx='010711152127030917250513192329021016222604081418243006122028'
*设置标准满试场人数
scbzrs=30
*记录各年级总人数
Use scb Alias scb In 0
Select scb
Count For nj='1' To r1
Count For nj='2' To r2
Count For nj='3' To r3
*计算各年级共需要的试场总数,不同年级不混排
scs1=Ceiling(r1/scbzrs)
scs2=Ceiling(r2/scbzrs)
scs3=Ceiling(r3/scbzrs)
*计算各年级尾数试场人数
wscrs1=r1-Int(r1/scbzrs)*scbzrs
wscrs2=r2-Int(r2/scbzrs)*scbzrs
wscrs3=r3-Int(r3/scbzrs)*scbzrs
*建立一个中间表,并利用这个中间表进行编排
Create Dbf lsscb (sch c(3),zwh c(2),xxh c(4))
**************************************************
* lsscb字段说明
*sch:三位字符,第一位代表年级,后两位代表试场号 *
*zwh:两位字符代表座位号 *
*xxh:第一位代表年级,第二位代表单双号,1单2双 *
* 最后两位表示按照坐位号次序串重新生成的顺序 *
**************************************************
Select lsscb
If r1>0
s=1
z=1
For i=1 To r1
Append Blank
If Mod(z,2)=1
Replace sch With Chrtran('1'+Str(s,2,0),' ','0'),zwh With Chrtran(Str(z,2,0),' ','0'),xxh With '11'+Substr(zwh_cx,2*z-1,2)
Else
Replace sch With Chrtran('1'+Str(s,2,0),' ','0'),zwh With Chrtran(Str(z,2,0),' ','0'),xxh With '12'+Substr(zwh_cx,2*z-1,2)
Endif
If z<scbzrs
z=z+1
Else
z=1
s=s+1
Endif
Endfor
Endif
If r2>0
s=1
z=1
For i=1 To r2
Append Blank
If Mod(z,2)=1
Replace sch With Chrtran('2'+Str(s,2,0),' ','0'),zwh With Chrtran(Str(z,2,0),' ','0'),xxh With '21'+Substr(zwh_cx,2*z-1,2)
Else
Replace sch With Chrtran('2'+Str(s,2,0),' ','0'),zwh With Chrtran(Str(z,2,0),' ','0'),xxh With '22'+Substr(zwh_cx,2*z-1,2)
Endif
If z<scbzrs
z=z+1
Else
z=1
s=s+1
Endif
Endfor
Endif
If r3>0
s=1
z=1
For i=1 To r3
Append Blank
If Mod(z,2)=1
Replace sch With Chrtran('3'+Str(s,2,0),' ','0'),zwh With Chrtran(Str(z,2,0),' ','0'),xxh With '31'+Substr(zwh_cx,2*z-1,2)
Else
Replace sch With Chrtran('3'+Str(s,2,0),' ','0'),zwh With Chrtran(Str(z,2,0),' ','0'),xxh With '32'+Substr(zwh_cx,2*z-1,2)
Endif
If z<scbzrs
z=z+1
Else
z=1
s=s+1
Endif
Endfor
Endif
Index On xxh To lsscb
Copy To ls
Zap
Append From ls
Select scb
Index On nj+bj To scb
Copy To ls
Zap
Append From ls
*给scb.dbf增加两个字段
If Type("scb.sch")='U'
Alter Table scb Add Column sch c(3)
Endif
If Type("scb.zwh")='U'
Alter Table scb Add Column zwh c(2)
ENDIF
*将编排的结果更新到scb新增的两个字段中
Select lsscb
Scan
jlh=Recno()
sc=sch
zw=zwh
Select scb
Go jlh
Replace sch With sc,zwh With zw
Select lsscb
ENDSCAN
SELECT lsscb
USE
DELETE FILE lsscb.*
SELECT scb
INDEX on sch+zwh TO scb
COPY TO ls
ZAP
APPEND FROM ls
Delete File ls.Dbf
*******************************************
*生成考号的代码就省略,毕竟考号的规则很多 *
*******************************************
CLOSE DATABASES
Set Safety On
Return
Set Safety Off
Close Databases
*定义试场坐位号次序串
zwh_cx='010711152127030917250513192329021016222604081418243006122028'
*设置标准满试场人数
scbzrs=30
*记录各年级总人数
Use scb Alias scb In 0
Select scb
Count For nj='1' To r1
Count For nj='2' To r2
Count For nj='3' To r3
*计算各年级共需要的试场总数,不同年级不混排
scs1=Ceiling(r1/scbzrs)
scs2=Ceiling(r2/scbzrs)
scs3=Ceiling(r3/scbzrs)
*计算各年级尾数试场人数
wscrs1=r1-Int(r1/scbzrs)*scbzrs
wscrs2=r2-Int(r2/scbzrs)*scbzrs
wscrs3=r3-Int(r3/scbzrs)*scbzrs
*建立一个中间表,并利用这个中间表进行编排
Create Dbf lsscb (sch c(3),zwh c(2),xxh c(4))
**************************************************
* lsscb字段说明
*sch:三位字符,第一位代表年级,后两位代表试场号 *
*zwh:两位字符代表座位号 *
*xxh:第一位代表年级,第二位代表单双号,1单2双 *
* 最后两位表示按照坐位号次序串重新生成的顺序 *
**************************************************
Select lsscb
If r1>0
s=1
z=1
For i=1 To r1
Append Blank
If Mod(z,2)=1
Replace sch With Chrtran('1'+Str(s,2,0),' ','0'),zwh With Chrtran(Str(z,2,0),' ','0'),xxh With '11'+Substr(zwh_cx,2*z-1,2)
Else
Replace sch With Chrtran('1'+Str(s,2,0),' ','0'),zwh With Chrtran(Str(z,2,0),' ','0'),xxh With '12'+Substr(zwh_cx,2*z-1,2)
Endif
If z<scbzrs
z=z+1
Else
z=1
s=s+1
Endif
Endfor
Endif
If r2>0
s=1
z=1
For i=1 To r2
Append Blank
If Mod(z,2)=1
Replace sch With Chrtran('1'+Str(s,2,0),' ','0'),zwh With Chrtran(Str(z,2,0),' ','0'),xxh With '21'+Substr(zwh_cx,2*z-1,2)
Else
Replace sch With Chrtran('1'+Str(s,2,0),' ','0'),zwh With Chrtran(Str(z,2,0),' ','0'),xxh With '22'+Substr(zwh_cx,2*z-1,2)
Endif
If z<scbzrs
z=z+1
Else
z=1
s=s+1
Endif
Endfor
Endif
If r3>0
s=1
z=1
For i=1 To r3
Append Blank
If Mod(z,2)=1
Replace sch With Chrtran('1'+Str(s,2,0),' ','0'),zwh With Chrtran(Str(z,2,0),' ','0'),xxh With '31'+Substr(zwh_cx,2*z-1,2)
Else
Replace sch With Chrtran('1'+Str(s,2,0),' ','0'),zwh With Chrtran(Str(z,2,0),' ','0'),xxh With '32'+Substr(zwh_cx,2*z-1,2)
Endif
If z<scbzrs
z=z+1
Else
z=1
s=s+1
Endif
Endfor
Endif
Index On xxh To lsscb
Copy To ls
Zap
Append From ls
Select scb
Index On nj+bj To scb
Copy To ls
Zap
Append From ls
*给scb.dbf增加两个字段
If Type("scb.sch")='U'
Alter Table scb Add Column sch c(3)
Endif
If Type("scb.zwh")='U'
Alter Table scb Add Column zwh c(2)
ENDIF
*将编排的结果更新到scb新增的两个字段中
Select lsscb
Scan
jlh=Recno()
sc=sch
zw=zwh
Select scb
Go jlh
Replace sch With sc,zwh With zw
Select lsscb
ENDSCAN
SELECT lsscb
USE
DELETE FILE lsscb.*
SELECT scb
INDEX on sch+zwh TO scb
COPY TO ls
ZAP
APPEND FROM ls
Delete File ls.Dbf
*******************************************
*生成考号的代码就省略,毕竟考号的规则很多 *
*******************************************
CLOSE DATABASES
Set Safety On
Return