看来我们论坛有很多的高手,
,领教了,正在研究代码,看能不能更简单些
,领教了,正在研究代码,看能不能更简单些
程序代码:*我的一个成绩输入表单上的计算总分和名次的按钮里的代码,名次字段为字符型的。仅供参考!
sele bybmk
set filt to
set orde to sczwh
repl tot with iif(km1=-1,0,km1)+iif(km2=-1,0,km2)+iif(km3=-1,0,km3)+iif(km4=-1,0,km4)+iif(km5=-1,0,km5) all
go top
*------------------------------
*计算年级名次
SET ORDER TO tot
GO top
nMc1=1001 &&累计
nMc2=1001 &&同名次
ntot=bybmk.tot
REPLACE bybmk.yjmc with SUBSTR(ALLTRIM(STR(nMc2,4)),2,3)
DO whil not EOF() &&&
SKIP
nMc1=nMc1+1
IF bybmk.tot=ntot
REPLACE bybmk.yjmc with SUBSTR(ALLTRIM(STR(nMc2,4)),2,3)
ELSE
nMc2=nMc1
REPLACE bybmk.yjmc with SUBSTR(ALLTRIM(STR(nMc2,4)),2,3)
ntot=bybmk.tot
ENDIF
ENDDO
GO top
*------------------------------------
*计算班级名次
SELECT 0
USE bjk
DO whil not EOF()
SELECT bybmk
SET FILTER TO bybmk.bj=bjk.bj
GO top
nMc1=1001 &&累计
nMc2=1001 &&同名次
ntot=bybmk.tot
REPLACE bybmk.bjmc with SUBSTR(ALLTRIM(STR(nMc2,4)),3,2)
DO whil not EOF() &&&
SKIP
nMc1=nMc1+1
IF bybmk.tot=ntot
REPLACE bybmk.bjmc with SUBSTR(ALLTRIM(STR(nMc2,4)),3,2)
ELSE
nMc2=nMc1
REPLACE bybmk.bjmc with SUBSTR(ALLTRIM(STR(nMc2,4)),3,2)
ntot=bybmk.tot
ENDIF
ENDDO
SELECT bjk
SKIP
ENDDO
SELECT bjk
USE
SELECT bybmk
SET FILTER TO
GO top
thisform.grid1.readonly=.t.
thisform.refresh
程序代码:USE EE
BLANK ALL FIELDS 年级名次,班级名次
*-----年级排序
INDEX ON -总分 TO ZF
STORE 0 TO MC,ZF,CS
SCAN
IF 总分!=ZF
MC=CS+MC+1
CS=0 && 记录相同总分的次数
ELSE
CS=CS+1
ENDIF
REPLACE 年级名次 WITH MC
ZF=总分
MC=年级名次
ENDSCAN
BROWSE
*-----班级排序
INDEX ON 班级+STR(1000-总分) TO BJZF
BJ=[]
SCAN
IF 班级!=BJ
STORE 0 TO CS,ZF
MC=1
ELSE
IF 总分!=ZF
MC=CS+MC+1
CS=0
ELSE
CS=CS+1
ENDIF
ENDIF
REPLACE 班级名次 WITH MC
ZF=总分
BJ=班级
ENDSCAN
BROWSE
SET INDEX TO
ERASE BJZF.IDX
ERASE ZF.IDX抛砖引玉
