| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1355 人关注过本帖, 1 人收藏
标题:请大家帮我看下这个程序排准考证的,哪里出错了,排到倒数第二个考时,都会 ...
取消只看楼主 加入收藏
hjf1218
Rank: 1
等 级:新手上路
帖 子:56
专家分:0
注 册:2013-1-20
结帖率:78.57%
收藏(1)
已结贴  问题点数:10 回复次数:5 
请大家帮我看下这个程序排准考证的,哪里出错了,排到倒数第二个考时,都会丢倒数第二考室后一个号码
请大家帮我看下这个程序排准考证的,哪里出错了,排到倒数第二个考室时,都会丢倒数第二考室后一个号码

例如:排58个考室,第57考室,尾数是5730这个号码就会没掉

程序代码:
GO TOP

 KDRS = RECCOUNT()

 KCS = IIF(INT(KDRS / 30) = KDRS / 30,INT(KDRS / 30),INT(KDRS / 30) + 1)

 WKCRS = KDRS - (KCS - 1) * 30

 BZ = 'f'

 FOR Y = 1 TO 30 STEP 2
    FOR X = KCHS TO KCHS + KCS - 1
       DO CASE 
       CASE X < 10
          KCH = '00' + STR(X,1)
       CASE X >= 10 AND X < 100
          KCH = '0' + STR(X,2)
       CASE X >= 100
          KCH = STR(X,3)
       ENDCASE 
       DO CASE 
       CASE Y < 10
          ZH = '0' + STR(Y,1)
       CASE Y >= 10
          ZH = STR(Y,2)
       ENDCASE 
       REPLACE ZKH WITH '372' +KCH + ZH
       SKIP 
    ENDFOR 
    DO CASE 
    CASE (WKCRS / 2) <> INT(WKCRS / 2)
       IF Y >= WKCRS AND BZ = 'f'
          KCS = KCS - 1
          BZ = 't'
          LOOP 
       ENDIF 
    CASE WKCRS = 30
       IF Y = 29 AND BZ = 'f'
          KCS = KCS - 1
          BZ = 't'
          LOOP 
       ENDIF 
    CASE (WKCRS / 2) = INT(WKCRS / 2)
       IF Y >= WKCRS - 2 AND BZ = 'f'
          KCS = KCS - 1
          BZ = 't'
          LOOP 
       ENDIF 
    ENDCASE 

 ENDFOR 

 BZ = 'f'

 FOR Y = 2 TO 30 STEP 2
    FOR X = KCHS TO KCS + 1 + KCHS - 1
       DO CASE 
       CASE X < 10
          KCH = '00' + STR(X,1)
       CASE X >= 10 AND X < 100
          KCH = '0' + STR(X,2)
       CASE X >= 100
          KCH = STR(X,3)
       ENDCASE 
       DO CASE 
       CASE Y < 10
          ZH = '0' + STR(Y,1)
       CASE Y >= 10
          ZH = STR(Y,2)
       ENDCASE 
       REPLACE ZKH WITH '372' + KCH + ZH
       SKIP 
       IF EOF()
          EXIT 
       ENDIF 
    ENDFOR 
    IF EOF()
       EXIT 
    ENDIF 
    DO CASE 
    CASE WKCRS = 30
       LOOP 
    CASE (WKCRS / 2) <> INT(WKCRS / 2)
       IF Y >= WKCRS - 2 AND BZ = 'f'
          KCS = KCS - 1
          BZ = 't'
          LOOP 
       ENDIF 
    CASE (WKCRS / 2) = INT(WKCRS / 2)
       IF Y >= WKCRS AND BZ = 'f'
          KCS = KCS - 1
          BZ = 't'
          LOOP 
       ENDIF 
    ENDCASE 

 ENDFOR 

 IF WKCRS = 30
    KCHS = KCHS + KCS + 1

 ELSE 
    KCHS = KCHS + KCS + 2

 ENDIF 

 RETURN 
搜索更多相关主题的帖子: 号码 准考证 倒数 
2013-05-20 10:48
hjf1218
Rank: 1
等 级:新手上路
帖 子:56
专家分:0
注 册:2013-1-20
收藏
得分:0 
11.rar (520 Bytes)


说明:按bmh表中的字段,第3起,取4位,就是substr(bmh,3,4)这个相同的,认为是同一学校,按这个来排,生成一个临时表,然后写到总表中,

zkh,是生成的准考号,aaaa是随机生成的数字,schoolname,是考点,可以选择多个,另外还有一点,有时候是中间的考室断了,就是有2和4考室,结果没有3考室
2013-05-20 11:13
hjf1218
Rank: 1
等 级:新手上路
帖 子:56
专家分:0
注 册:2013-1-20
收藏
得分:0 
程序代码:
select 3
count for zkh#' ' to zkhc
if  zkhc=reccount()
messagebox("准考号已编排",0+48,"提示")
return
endif
select 2
if reccount()=0
return
endif
if csh=0&&初始化=0
messagebox("请进行初始化操作",0+48,"提示")
return
endif
set safety off
kchs=1&&考场号数,下一考场号数为上一考点考场号数——1
select 2&&中考考点安排库
count for 标识='考点' to kdnum&&考点个数
go top
kd=1
for kd=1 to kdnum step 1
    select 4
    use 准考号生成库
    zap
    select 2
    do while .t.
    if 标识='考点'
        schoolabc=学校名称&&考点名称
    endif
        skip
        codeabc=代码
        select 3&&zkxxk.dbf
        set filter to substr(bmh,3,4)=codeabc
        replace all schoolname with schoolabc&&考点名称
        *rand.prg
        *对该校随机
        set decimals to 0
        go top
        do while .not. eof()
              replace aaaa with rand()*50000
              skip
        enddo
        set decimal to
        sort on aaaa to temp
        select 4&&准考号生成库
        append from temp
        select 2&&考点安排库
        if 标识='考点'.or.eof()
            exit
        endif
    enddo
    select 4&&准考号编排库
    do 准考号生成.prg
    index on bmh tag bmh additive
    select 3
    set filter to 
    update on bmh from d replace zkh with d.zkh
endfor
select 3
index on zkh tag zkh additive
set safety on
messagebox("准考号生成完毕!",0+48,"提示")
2013-05-20 11:16
hjf1218
Rank: 1
等 级:新手上路
帖 子:56
专家分:0
注 册:2013-1-20
收藏
得分:0 
后面的代码是调用前面的准考号生成.prg
2013-05-20 11:22
hjf1218
Rank: 1
等 级:新手上路
帖 子:56
专家分:0
注 册:2013-1-20
收藏
得分:0 
这样说吧,我第二次发的代码是,调用第一次代码的,第二次中的确  do 准考号生成.prg  这句话是调用第一次发的代码  我要的结果就是,考室要连的排下去,schoolabc=学校名称&&考点名称,这个名称可以不同,但教室要连的排下去
2013-05-20 11:35
hjf1218
Rank: 1
等 级:新手上路
帖 子:56
专家分:0
注 册:2013-1-20
收藏
得分:0 
这个不是我写的,我也不是很明白排号的原则,只是拿来用而已,就是想弄明白是什么意思,方便以后自己改
2013-05-21 00:37
快速回复:请大家帮我看下这个程序排准考证的,哪里出错了,排到倒数第二个考时, ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.031084 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved