我在用VF处理学生的成绩册时,需要统计每个学生每科分数在年级的排名是多少,我在电子表格中是用rank命令进行的,但是VF中没有这个命令,不知道如何给学生排名次,往高手指教!感谢先!!!!!!!!!
比如:有一个学生成绩表,有考号、姓名、语文、数学、英语、总分字段,我会统计总分,但是不会排名次,怎么办?
[此贴子已经被作者于2007-7-8 20:53:19编辑过]
非常感谢版主的帮助,不过程序经过调试出现了一个小问题:经过运行程序,我发现所有的名次都是1,经过认真查找,原来是版主把一个变量lnRankIndex错写成了lnRandIndex,呵呵!特此订正。
修改过的程序如下:
Close All
Use 成绩
*(1)根据语文成绩排名次
Index On -语文 To Temp.Idx
Go Top
lnRank=1
lnRankIndex=1
lnScore=语文
Do While !Eof()
If 语文!=lnScore
lnScore=语文
lnRank=lnRankIndex
EndIf
Replace 语文名次 With lnRank
lnRankIndex=lnRankIndex+1
Skip
EndDo
*(2)根据数学成绩排名次
Index On -数学 To Temp.Idx
Go Top
lnRank=1
lnRankIndex=1
lnScore=数学
Do While !Eof()
If 数学!=lnScore
lnScore=数学
lnRank=lnRankIndex
EndIf
Replace 数学名次 With lnRank
lnRankIndex=lnRankIndex+1
Skip
EndDo
*(3)根据英语成绩排名次
Index On -英语 To Temp.Idx
Go Top
lnRank=1
lnRankIndex=1
lnScore=英语
Do While !Eof()
If 英语!=lnScore
lnScore=英语
lnRank=lnRankIndex
EndIf
Replace 英语名次 With lnRank
lnRankIndex=lnRankIndex+1
Skip
EndDo
*(4)根据总分成绩排名次
Replace All 总分 With 语文+数学+英语
Index On -总分 To Temp.Idx
Go Top
lnRank=1
lnRankIndex=1
lnScore=总分
Do While !Eof()
If 总分!=lnScore
lnScore=总分
lnRank=lnRankIndex
EndIf
Replace 总分名次 With lnRank
lnRankIndex=lnRankIndex+1
Skip
EndDo
Set Index To
ERase Temp.Idx
Browse NoAppend NoModify NoDelete
经过运行,这一次得到了正确的结果。谢谢了。
还有个小要求,就是每科计算完毕后总提示temp.idx已经存在,是否改写,很是烦人,不知有没有办法让程序不提示,直接确认覆盖?望版主指教。