| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2573 人关注过本帖
标题:关于处理考试成绩数据问题,急求!
只看楼主 加入收藏
lijihe8866
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2012-9-14
收藏
得分:0 
看来我们论坛有很多的高手,,领教了,正在研究代码,看能不能更简单些
2012-09-16 16:59
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
经常到论坛解答狐友的问题,本身就是提高自身能力的一个途径。
一段代码写完后,要反复推敲,是否有可优化的余地,直到自己满意为止。

坚守VFP最后的阵地
2012-09-16 17:05
lijihe8866
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2012-9-14
收藏
得分:0 
回复 49楼 sdta
版主确实细致,高手中的高手,正在学习,取样确实有局限性。
2012-09-16 17:19
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
以下是引用lijihe8866在2012-9-16 17:19:18的发言:

版主确实细致,高手中的高手,正在学习,取样确实有局限性。
实际上你这个问题,也不是什么难题,关键在于你没有动脑筋。如果通过最笨的办法解决了自己的问题,说明自己编程水平又进了一步。既然能对年级总分进行排名,参考上面两位的代码,肯定能写出自己满意的代码。
你的这个问题,关键在于相同分数数据的处理。

[ 本帖最后由 sdta 于 2012-9-16 17:43 编辑 ]

坚守VFP最后的阵地
2012-09-16 17:31
lijihe8866
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2012-9-14
收藏
得分:0 
经过大量数据的测试,cxzbzgz楼主的代码无问题,就是看能不能再简单些,正在研究,同时谢谢qjbzjp,正在看问题出在什么地方。
2012-09-16 17:32
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
以下是引用lijihe8866在2012-9-16 17:32:47的发言:

经过大量数据的测试,cxzbzgz楼主的代码无问题,就是看能不能再简单些,正在研究,同时谢谢qjbzjp,正在看问题出在什么地方。
按班级排名:
班级->相同
      |-分数->相同
         |-->不相同
|-->不相同
处理流程大概就这样吧

坚守VFP最后的阵地
2012-09-16 17:40
xs591222
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:28
帖 子:682
专家分:1299
注 册:2009-3-1
收藏
得分:3 
程序代码:
*我的一个成绩输入表单上的计算总分和名次的按钮里的代码,名次字段为字符型的。仅供参考!
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
2012-09-16 18:57
lygcw9603
Rank: 5Rank: 5
等 级:职业侠客
威 望:1
帖 子:233
专家分:357
注 册:2006-8-27
收藏
得分:3 
程序代码:
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
抛砖引玉
2012-09-16 19:24
lijihe8866
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2012-9-14
收藏
得分:0 
经过一下午的仔细研究,就像BCCN201203楼主所说,可以用一行代码完全可以实现年级的排名,班级的排名,先与大家分享一下:
UPDATE ee SET 班级名次=(select COUNT(a.学号)+1 from ee as a WHERE a.总分>ee.总分 AND a.班级 =ee.班级)
UPDATE ee SET 年级名次=(select COUNT(a.学号)+1 from ee as a WHERE a.总分>ee.总分)
经大量数据测试,完全满足要求,同时谢谢楼主的指导
2012-09-16 19:46
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
以下是引用lijihe8866在2012-9-16 19:46:17的发言:

经过一下午的仔细研究,就像BCCN201203楼主所说,可以用一行代码完全可以实现年级的排名,班级的排名,先与大家分享一下:
UPDATE ee SET 班级名次=(select COUNT(a.学号)+1 from ee as a WHERE a.总分>ee.总分 AND a.班级 =ee.班级)
UPDATE ee SET 年级名次=(select COUNT(a.学号)+1 from ee as a WHERE a.总分>ee.总分)
经大量数据测试,完全满足要求,同时谢谢楼主的指导
恭喜楼主,贺喜楼主

坚守VFP最后的阵地
2012-09-16 20:07
快速回复:关于处理考试成绩数据问题,急求!
数据加载中...
 
   



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

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