标题:面试考场编排
只看楼主
chychychy
Rank: 2
等 级:论坛游民
帖 子:126
专家分:18
注 册:2015-4-18
得分:0 
回复 10楼 sdta
我听了你的建议改的,原始数据必须得排序后才能用,没法直接用,我用笨办法加了两个备注字段(bz1,体现考试日期,bz2,体现考试科目)重新排的序
新数据(上传).zip (20.11 KB)
2023-03-25 17:44
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 



其它的地方自己检查一下吧

坚守VFP最后的阵地
2023-03-25 18:54
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
程序代码:
CLOSE DATABASES 
USE 新数据 ALIAS yssj
BLANK FIELDS 组别, 序号, px ALL && 增加一个PX字段,用于最后排序用
INDEX on 考试日期 + 科目 TAG rqkm
USE 总分组 IN 0 ALIAS msap
SELECT msap
SCAN 
    SELECT yssj
    lnrs = 0
    SCAN FOR ALLTRIM(考试日期) == ALLTRIM(msap.考试日期) AND ALLTRIM(科目) == ALLTRIM(msap.科目) AND (EMPTY(组别) AND EMPTY(序号))
        lnrs = lnrs + 1
        REPLACE 组别 WITH msap.kch, 序号 WITH lnrs, px WITH RECNO("msap")
        IF MOD(lnrs, msap.kcrs) = 0
            EXIT 
        ENDIF
    ENDSCAN 
ENDSCAN
SELECT yssj
SET ORDER TO 
SELECT * FROM 新数据 ORDER BY px, 考试日期, 科目, 组别, 序号 INTO CURSOR tt
BROWSE &&FOR EMPTY(序号)


坚守VFP最后的阵地
2023-03-25 18:56
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
WORD中的数据与总分组表中的数据有几处不相符,请核对!

坚守VFP最后的阵地
2023-03-25 19:05
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 

坚守VFP最后的阵地
2023-03-25 19:16
chychychy
Rank: 2
等 级:论坛游民
帖 子:126
专家分:18
注 册:2015-4-18
得分:0 
回复 15楼 sdta
高手,佩服五体投地。测试完全符合要求。超赞
再请教面试室对应候考室不一定,本次是4个面试室对应一个候考室,共8个,多的放在最后。但我的会出现大于8的,就用笨办法repl替换的,请帮忙优化一下,再跟你学习精简化的程序语言。
i=1
n=1
GO top
do WHILE n<=33
repl 候考室 with n for 组别<=i+4 and 组别>=i&&&&每4个面试室一个候考室,逐渐加
n=n+1
i=i+4
enddo
REPLACE 候考室 WITH 8 FOR 候考室>8 all
2023-03-25 21:13
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:20 
完美解决问题,代码如下
程序代码:
CLOSE DATABASES 
USE 新数据 ALIAS yssj
BLANK FIELDS 组别, 序号, px ALL && 增加一个PX字段,用于最后排序用
INDEX on 考试日期 + 科目 TAG rqkm
USE 总分组 IN 0 ALIAS msap
SELECT msap
ln1 = 0
ln2 = 0
SCAN 
    SELECT yssj
    IF msap.kch = ln1
        lnrs = ln2
    ELSE 
        lnrs = 0
    ENDIF 
    SCAN FOR ALLTRIM(考试日期) == ALLTRIM(msap.考试日期) AND ALLTRIM(科目) == ALLTRIM(msap.科目) AND (EMPTY(组别) AND EMPTY(序号))
        lnrs = lnrs + 1
        REPLACE 组别 WITH msap.kch, 序号 WITH lnrs, px WITH RECNO("msap")
        IF MOD(lnrs, msap.kcrs) = 0
            EXIT 
        ENDIF
    ENDSCAN
    ln1 = msap.kch
    ln2 = msap.kcrs
ENDSCAN
SELECT yssj
SET ORDER TO 
SELECT * FROM 新数据 ORDER BY px, 考试日期, 科目, 组别, 序号 INTO CURSOR tt
BROWSE

坚守VFP最后的阵地
2023-03-25 21:27
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
回复 16楼 chychychy
研究下 CEILING() 函数

坚守VFP最后的阵地
2023-03-25 21:40
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
不用手工修改了


坚守VFP最后的阵地
2023-03-25 21:44
chychychy
Rank: 2
等 级:论坛游民
帖 子:126
专家分:18
注 册:2015-4-18
得分:0 
回复 17楼 sdta
超赞,又增长知识了。不过我看上一次更好理解。当时想这两个变如何关联对应替换,但关联了只会单一替换,不会累加,总之顾此失彼。为了排序增加了两个备注字段。从接触vfp从这个论坛尤其你们几个学到了很多很多!再次感谢!
2023-03-25 22:07



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-511668-1-1.html




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

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