| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 875 人关注过本帖
标题:我的程序有缺点请指出!谢谢!!!
只看楼主 加入收藏
jinanshui
Rank: 2
等 级:论坛游民
帖 子:294
专家分:67
注 册:2009-10-6
结帖率:93.88%
收藏
已结贴  问题点数:20 回复次数:8 
我的程序有缺点请指出!谢谢!!!
表f091.dbf中有学号、语文、数学、英语、物理、化学、生物、历史、地理、政治。
其中学号规律为:
年级--班级--号码
09  --01  --01
09  --01  --02
09  --02  --01
09  --03  --13
.。。。。。。。
。。。。。。。。

如何快速的求出每班的每学科前40名的学科平均分?并将其存放在09pingjun.dbf中,我的程序太乱
数据.rar (42.96 KB)


[ 本帖最后由 jinanshui 于 2010-3-5 14:41 编辑 ]
搜索更多相关主题的帖子: 缺点 
2010-03-05 14:39
cnfarer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:179
帖 子:3330
专家分:21157
注 册:2010-1-19
收藏
得分:0 
确实够乱!源程序也没有!两个表都一样!

★★★★★为人民服务★★★★★
2010-03-05 15:29
cnfarer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:179
帖 子:3330
专家分:21157
注 册:2010-1-19
收藏
得分:0 
编个这样的程序并不难啊,只要思路理清了就行!

★★★★★为人民服务★★★★★
2010-03-05 15:32
jinanshui
Rank: 2
等 级:论坛游民
帖 子:294
专家分:67
注 册:2009-10-6
收藏
得分:0 
两个表不一样,麻烦你仔细看一下,谢谢
2010-03-05 16:06
panpende
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:528
专家分:963
注 册:2009-4-27
收藏
得分:4 
看了你的表f091.dbf,其中有个字段是'班号'。从表f091.dbf看,是09年级16个班。
那么可以精减你的程序。
可以这样:
DIMENSION P( 9 )
.
.
FOR X=1 TO 16
USE f091.dbf
    SORT ON 语文 /D TO (temp) FOR VAL(班号)=X
USE temp
    AVERAGE FOR RECNO() <= 40 TO P( 1 ) 语文
.
.
.
.
.
.

USE f091.dbf
    SORT ON 地理 /D TO (temp) FOR VAL(班号)=X
USE temp
    AVERAGE FOR RECNO() <= 40 TO P( 9 ) 地理

USE 09pingjun.dbf
APPEND FROM ARRAY P

ENDFOR


如果字段'班号'有错误,那么可以先  REPL ALL 班号  WITH SUBS(学号,3,2)


以上意见,请参考。
2010-03-05 16:56
panpende
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:528
专家分:963
注 册:2009-4-27
收藏
得分:0 
如果有不同年级不同班级的话,可以
REPL ALL 班号  WITH SUBS(学号,1,4)
SELE DISTINCT 班号 FROM f091 INTO TABLE LA
ALTER TABLE LA ADD XH N(4)
REPL ALL XH WITH RECN()
Y=RECCOUNT()

然后把‘班号’的代号 (XH) ,替换到 f091 的 ‘班号’字段。

执行 FOR X=1 TO Y
.
.
.
ENDFO
2010-03-05 17:12
茵梦湖
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:31
帖 子:545
专家分:2180
注 册:2009-4-25
收藏
得分:15 
代码如下:

sele dist left(学号,4) 班级 from f091 into tabl pingjun
scan
   ls班级 =班级
   for kk=1 to 9
       kkc =subs("语文 数学 外语 物理 化学 生物 政治 历史 地理",kk*5-4,4)
       sele top 40 &kkc from f091 where left(学号,4)=ls班级 orde by &kkc desc into curs tmp
       aver(&kkc) to ls
       sele pingjun
       if recn()=1
          alte dbf pingjun add &kkc n(6,2)
       endif
       repl &kkc with ls
   endfor
endscan
brow titl " >> 各班各科前40名平均分~"
retu

测试结果:
图片附件: 游客没有浏览图片的权限,请 登录注册
2010-03-05 20:01
qingfameng
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:35
帖 子:964
专家分:3019
注 册:2010-2-6
收藏
得分:1 
   7楼程序做得很精干!思路逻辑清晰,很好!
   但是,vfp6.0 与 vfp9.0 有点小差异会导致如下这一句的结果有点小差别  

   sele top 40 &kkc from f091 where left(学号,4)=ls班级 orde by &kkc desc into curs tmp

   vfp6.0 时,当第41,或42 条记录的值,与第 40 条相同时,记录条数则出现 41或42条记录。
   导致平均数偏低一点点。是top 所致 改为如下则是正40条
   sele &kkc from f091 where left(学号,4)=ls班级 and recno()<41 order by &kkc desc into curs tmp
   vf9.0 无差别。
   这个例子中的数据不一定有这种情况,不影响大局,只是顺便一说,7楼的程序还是很好的!


[ 本帖最后由 qingfameng 于 2010-3-8 12:55 编辑 ]
2010-03-05 23:13
panpende
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:528
专家分:963
注 册:2009-4-27
收藏
得分:0 
程序在8.0中出错。
2010-03-11 15:37
快速回复:我的程序有缺点请指出!谢谢!!!
数据加载中...
 
   



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

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