在VFP中用循环语句添加记录?
姓名 成绩 名次
李四 98
李那 98
王林 96
赵凡 95
孙欣 95
房卓 88
祝晴 88
请问:如何根据成绩添加名次字段的记录?并且相同的成绩名次要相同?
这个表格中有两个98分的,那么96分的名次应该是3。
可能是我没说清。针对这个表格,第一名是并列两个人,在名次中就不应该再出现2,我想名次字段出现的结果是:1,1,3,4,4,6,6.请问这个程序该怎样写? 展开
*** 假设一:〔成绩〕〔名次〕皆为数字型字段;
*** 假设二:你没有进行过索引。
CLOSE ALL
CLEAR ALL
CLEAR
SET SAFETY OFF
USE YourTable
INDEX ON 成绩 TAG Achievem ADDITIVE DESCENDING
GO TOP
nLastAchievement = 0
nSequence = 0
DO WHILE NOT EOF()
IF NOT 成绩 = nLastAchievement
nSequence = nSequence + 1
ENDIF
REPLACE 名次 WITH nSequence
nLastAchievement = 成绩
SKIP
ENDDO
GO TOP
BROWSE LAST
CLOSE ALL
CLEAR ALL
SET SAFETY ON
补充一:
*** ===================================================
&&& 你这个小妹妹还真难侍候!给了你一个同成绩同名次的处理方法,你还不满意?!
&&& 要是你当老师,同成绩却不同名次,那排在后一名的学生或家长跑来问你:
&&& 〔凭什么相同的成绩,会是不同的名次?〕你怎么回答呢???嘿嘿嘿。。。
&&& 好了,言归正传,你仔细对比一下下面的语句与上面的语句有何不同:
CLOSE ALL
CLEAR ALL
CLEAR
SET SAFETY OFF
USE YourTable
INDEX ON 成绩 TAG Achievem ADDITIVE DESCENDING
GO TOP
nLastAchievement = 0
nSequence = 0
DO WHILE NOT EOF()
* IF NOT 成绩 = nLastAchievement &&& 这一套 〔IF...ENDIF〕就是处理〔同成绩同名次〕的,把它删除了或注释了就不起作用了!
nSequence = nSequence + 1
* ENDIF
REPLACE 名次 WITH nSequence
nLastAchievement = 成绩
SKIP
ENDDO
GO TOP
BROWSE LAST
CLOSE ALL
CLEAR ALL
SET SAFETY ON
补充二:
*** ===================
你的前言:
。。。并且相同的成绩名次要相同? 。。。
===================
baihualin1 2009-12-19 19:27:28
非常谢谢你给出的程序!在这个表格中,有两个98分的,96分的就应该是第三名,可按你写出的程序,96分的是第二名,这和要求不太相符。请问有没有解决的方法?
你的后语:
。。。这和要求不太相符。。。。
===================
看图写成语:
[前言不搭后语],嘿嘿嘿。。。是吧?
补充三:
===================
不是做不到,是因为我这个人比较懒。。。
你自己动一下脑筋看看!
补充四:
===================
I 服了 You!!!
*** 好了,这下应该不会再有补充了吧,呵呵...
*** Begin
CLOSE ALL
CLEAR ALL
CLEAR
SET SAFETY OFF
USE YourTable
INDEX ON 成绩 TAG Achievem ADDITIVE DESCENDING
GO TOP
nLastAchievement = 9999
nSequence = 0
nSameTimes = 0
nReplNo = 0
DO WHILE NOT EOF()
nSequence = nSequence + 1
IF 成绩 = nLastAchievement
nSameTimes = nSameTimes + 1
nReplNo = nSequence - nSameTimes
ELSE
nSameTimes = 0
nReplNo = nSequence
ENDIF
REPLACE 名次 WITH nReplNo
nLastAchievement = 成绩
SKIP
ENDDO
GO TOP
BROWSE LAST
CLOSE ALL
CLEAR ALL
SET SAFETY ON
RETURN
*** End