vfp的一个编程问题

来源:百度知道 编辑:UC知道 时间:2024/06/07 21:01:53
我编了一个数据排序的程序

情况如下:
一个数据表chengji.dbf,包括两个字段chengji(这个字段是数值型,存放学生成绩)和mingci字段(这个字段用来存放学生成绩的名次)。chengji字段中成绩是任意存放的,没有大小排序。程序的最终目标是在mingci字段中填入对应成绩的名次。

程序(chengxu.prg)如下:
set talk off
clear
use chengji.dbf &&打开数据表
copy to array ab field chengji &&把表chengji.dbf中字段chengji各个记录的值存入数组ab中
count to cn &&统计表chengji.dbf记录的个数
for i=1 to cn-1 &&对数组ab中的各个元素进行排序
for j=i+1 to cn
mins=i &&mins为最小值下标
if ab(mins)>ab(j)
mins=j
endif
endfor
t=ab(i)
ab(i)=ab(mins)
ab(mins)=t
endfor
k=1
for i=1 to cn-1 &&这个程序段用来在字段mingci中填入名次
if ab(i)!=ab(i+1)
go top
locate for yw=ab(i)
if found()
do while not eof()
repl mingci with k
k=k+1
continue
enddo
endif
else
loop
endif
endfor
use
set talk on
return

可是

* 我的天!有这么复杂吗?
* 看你的程序眼花,干脆我花了十几分钟,给你整了个简单的。
* vfp6调试通过

use chengji
index on chengji tag TMPIDX desc
goto top
mc=1
js=1
do while !eof()
cj=chengji
replace mingci with mc
skip
js=js+1
mc=iif(cj=chengji,mc,js)
enddo

你解答的太复杂了吧!
简单步骤:
1、在原表中添加一列记录号并按照成绩从高到低排序生成临时表。
2、在临时表中添加一列名次。
3、按照原表记录号排序(恢复原表顺序)