| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4217 人关注过本帖, 2 人收藏
标题:成绩排名 程序优化
只看楼主 加入收藏
qjbzjp
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:尧的故乡
等 级:贵宾
威 望:48
帖 子:1914
专家分:4397
注 册:2007-3-14
收藏
得分:0 
再看这次结果如何:
n=0
cjbak=200
USE cjk
INDEX ON cj to cj
SET ORDER TO cj DESCENDING
GO top
FOR i=1 to RECCOUNT()
    REPLACE pm with IIF(cj=cjbak,n,i)
    cjbak=cj
    n=pm
    skip
NEXT
BROWSE
2008-09-13 11:56
szy345
Rank: 4
来 自:江苏——南京
等 级:贵宾
威 望:14
帖 子:336
专家分:14
注 册:2008-8-6
收藏
得分:0 
这次应该是好的!
果然要好点!

ibmlang_002的也不错,都比我的要简单!
哈哈
2008-09-13 12:52
szy345
Rank: 4
来 自:江苏——南京
等 级:贵宾
威 望:14
帖 子:336
专家分:14
注 册:2008-8-6
收藏
得分:0 
前2天,没时间,今天看了一下,
ibmlang_002的效率最高!

只是有那么一点点遗憾,就是产生了新表!
2008-09-16 09:36
ibmlang_002
Rank: 5Rank: 5
来 自:浙江-嘉兴
等 级:贵宾
威 望:18
帖 子:437
专家分:176
注 册:2008-8-30
收藏
得分:0 
呵呵
2008-09-16 10:13
szy345
Rank: 4
来 自:江苏——南京
等 级:贵宾
威 望:14
帖 子:336
专家分:14
注 册:2008-8-6
收藏
得分:0 
刚有位兄弟,留言给我,问我关于多个科目成绩排名如何做。
首先,我说下,有什么问题,可以直接拿出来,大家讨论讨论。没人会说你什么!真的!当然留言也可以!
下面是我对我的程序进行适当修改,由单科目排名,到多科目排名的代码。

close data
use E:\学习\VFP\排名分段统计\中考成绩.dbf  alias cjk in 0
public w_max,n,i

***********************************    cj1,cj2,cj3 字段(建立索引)          && 以3个科目为例
for j=1 to 3  && 3 个科目
         n=1    && 成绩相同的人数
         i=0    && 排名序号
    cj = 'cj'+ allt(str(j))
    pm = 'pm'+ allt(str(j))    && cj1,cj2,cj3 分别对应pm1,pm2,pm3
    
    select cjk
    set order to &cj
    go top

    w_max = cjk.&cj
    repl &pm with 1

    skip    
    do while !eof()
        if w_max = cjk.&cj
            n = n + 1
        else
            if n>0
                i = i + n + 1
                n = 0
            else
                i = i + 1
            endif
        endif

        repl &pm with i
        w_max = cjk.&cj
        skip
    enddo
endfor

close data

[[it] 本帖最后由 szy345 于 2008-9-16 15:42 编辑 [/it]]
2008-09-16 15:37
zi584
Rank: 2
等 级:论坛游民
帖 子:12
专家分:10
注 册:2008-6-26
收藏
得分:0 
这个程序不能自动加入名次字段吧!那其不是每次用时很麻烦呢?并且还一直还提示没有索引标志,可我都把成绩建立索引了呀!这是为什么呢?另外,cjk是代表着各科吧!

[[it] 本帖最后由 zi584 于 2008-9-18 07:58 编辑 [/it]]
2008-09-18 07:43
szy345
Rank: 4
来 自:江苏——南京
等 级:贵宾
威 望:14
帖 子:336
专家分:14
注 册:2008-8-6
收藏
得分:0 
你试下看看

close data
use E:\学习\VFP\排名分段统计\中考成绩.dbf  alias cjk in 0
public w_max,n,i
                           
 for j=1 to 3  &&      以3个科目为例
    n=1    && 成绩相同的人数
    i=0    && 排名序号
    cj = 'cj'+ allt(str(j))
    pm = 'pm'+ allt(str(j))    && cj1,cj2,cj3 分别对应pm1,pm2,pm3
     
    select cjk
    *****************************
    aa = .f.
    for f=1 to fcount()
        if field(f) = &pm
            aa = .t.
        endif
    endfor   
    if aa = .f.
       alter table cjk
       add column &pm  N(5)
    endif   
    index on &cj tag &cj desc
    ******************************
    set order to &cj
    go top

    w_max = cjk.&cj
    repl &pm with 1

    skip   
    do while !eof()
        if w_max = cjk.&cj
            n = n + 1
        else
            if n>0
                i = i + n + 1
                n = 0
            else
                i = i + 1
            endif
        endif
        repl &pm with i
        w_max = cjk.&cj
        skip
    enddo
endfor
close data

[[it] 本帖最后由 szy345 于 2008-9-18 09:21 编辑 [/it]]
2008-09-18 09:06
zi584
Rank: 2
等 级:论坛游民
帖 子:12
专家分:10
注 册:2008-6-26
收藏
得分:0 
我运行了,科目你是按cj1,cj2,名次是pm1,pm2,可我按你的这些字段修改后,里面有一句提示说语法错误!顺便问一句,你编这个程序的运行环境是哪个?
2008-09-18 11:44
szy345
Rank: 4
来 自:江苏——南京
等 级:贵宾
威 望:14
帖 子:336
专家分:14
注 册:2008-8-6
收藏
得分:0 
VFP6 ,这个我试过了

close data
use E:\学习\VFP\排名分段统计\中考成绩.dbf  alias cjk in 0
public w_max,n,i
                           
for j=1 to 3  &&      以3个科目为例
    n=1    && 成绩相同的人数
    i=0    && 排名序号
    cj = 'cj'+ allt(str(j))
    pm = 'pm'+ allt(str(j))

    select cjk
    *****************************
    aa = 0
    for f=1 to fcount()
        if lower(field(f)) = 'pm'+ allt(str(j))
            aa = 1
        endif
    endfor   
    if aa == 0
       alter table cjk  add column &pm  N(5,0)
    endif   
    index on &cj tag &cj desc
    ******************************
    set order to &cj
    go top

    w_max = cjk.&cj
    repl &pm with 1

    skip   
    do while !eof()
        if w_max = cjk.&cj
            n = n + 1
        else
            if n>0
                i = i + n + 1
                n = 0
            else
                i = i + 1
            endif
        endif
        repl &pm with i
        w_max = cjk.&cj
        skip
    enddo
endfor
close data

[[it] 本帖最后由 szy345 于 2008-9-18 13:12 编辑 [/it]]
2008-09-18 12:35
zi584
Rank: 2
等 级:论坛游民
帖 子:12
专家分:10
注 册:2008-6-26
收藏
得分:0 
到这提示语法错误!alter table cjk  add column &pm  N(5,0)
cjk 是各科的成绩吗?
2008-09-18 12:51
快速回复:成绩排名 程序优化
数据加载中...
 
   



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

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