硬盘“假死”修复记 用Visual FoxPro实现名次排定 和我一起“玩”视频之——会声会影X4特效的应用
技术拾萃 上一版 下一版

《江苏科技报·教育周刊》(双周刊,国内统一刊号CN32-0019),是江苏省唯一以社会立场透析当代中国教育的报纸。秉承“科技推动教育,教育改变人生”的理念,《江苏科技报·教育周刊》一直注意保持与教育前沿工作的密切联系,定位于教育宏观研究,兼顾微观探讨,注重教育文化生态的构建与引导,时刻关注鲜活的教育实态,着眼于教育文化的深层构建,努力赋予教育以深厚的文化内涵,致力打造中国最好的教育媒体。

国内统一刊号:CN32—0019
编辑部地址:江苏省南京市鼓楼区中山路55号新华大厦48楼

第239期 总第4526期 2012年11月13日 星期二
返回首页
作者 内容  上一期  当前第239期  下一期
用Visual FoxPro实现名次排定
来源:泗洪县电化教育办公室 作者:肖明华 发布日期:2012-11-13 13:52:27

     根据某一值进行名次排定是实际工作中经常遇到的问题,相对于人工计算,电脑编程的思路要省事得多,现将用Visual FoxPro(以下简称VFP)编写的程序整理出来,供大家参考,当然您也可改换一下表名、字段,在不同的场合使用。
     1.需求分析
     以学生考试总分的名次排定为例,假设我们有一个包含有编号、姓名、总分、排名等字段的VFP成绩表xxk.dbf存放在D盘根目录,对应的字段名为bh、xm、zf、pm,其中zf和pm字段为数值型。我们需要对其总分进行名次排定,排定的名次保存到pm(排名)字段。
     总分排名在排出名次顺序的同时还有两个关键性的要求:一是总分相同的名次应该相同;二是在出现相同名次后的下一个名次应做相应调整,即达到如下效果:
     bh(编号) xm(姓名) zf(总分) pm(排名)
     BH0024 张山  384  1
     BH0153 李肆  381  2
     BH0074 王伍  381  2
     BH0231 赵陆  379  4
     2.编程思路
     将成绩表按总分由高到低排序,并循环遍历一次。用变量i做循环的计数器,每次循环增加1,在无相同总分时,i的值就是各学生的名次。为保证相同总分名次相同,用变量f保存当前记录的总分,变量m保存当前记录的名次,循环到下一记录时,先比较变量f中的总分与该记录的总分是否相同。如果总分相同,该记录的名次应与之前记录相同,即等于变量m的值。如果总分不同,该记录的名次应与计数器i的值相同。
     3.解决方案
     以VFP编写的排名程序代码如下:
     SELECT * FROM d:\xxk.dbf ORDER BY zf DESC INTO CURSOR tmp READWRITE
     STORE 0 TO i, f, m  &&使各变量的初值为0
     SCAN 
     i=i+1
     IF zf<>f 
     m=i     &&总分不同时名次与计数器相同
     f=zf    &&总分不同时保存新的zf字段值
     ENDIF
     REPLACE pm WITH m  &&将名次保存到pm字段
     ENDSCAN
     COPY TO d:\pmb
     CLOSE ALL     &&关闭所有打开的表
     第1行中的d:\xxk.dbf是VFP成绩表的完整路径和文件名,zf是要排序的字段名。倒数第2行,将排名结果保存到D盘根目录下的pmb.dbf文件中。当然也可以不要倒数第2行,并将第1行改为用USE d:\xxk命令(下转第12版)(上接第11版)先打开VFP表,再用INDEX ON -zf TO d:\tmp命令建立索引,将排名结果直接保存在xxk.dbf中。
     从打开成绩表,到完成排名,总计12行,近乎于编程教学中最简单的循环语句范例,却解决了我们工作中经常遇到的问题。简洁、易懂、高效,是我将这段程序推荐给大家的理由。
     4.其它应用
     如果你平时使用Excel来处理学生成绩,没有VFP的使用经验,想要达到如此排名效果,只要你的计算机中安装了VFP,就可以通过以下步骤完成排名工作。
     第一步,打开Excel成绩表,删除表头中多余的行,使其第一行为各列的标题(字母、汉字均可),其它行均为学生成绩行;在需要排名的列(数值型)旁插入一空列,并在其第一行中输入列标题pm,在第二行中输入0,用以存放排名结果。
     第二步,从Excel菜单中选择“文件→另存为”;在“另存为”对话框中的“保存类型”下拉列表框中选择“DBF 4 (dBASE IV) (*.dbf)”,选择保存路径和文件名后单击“保存”按钮。在出现“是否保持工作簿的这种格式?”对话框时,选择“是”,关闭Excel。
     第三步,打开VFP,在工具栏中选择“新建”按钮(白纸图标),在“新建”对话框中的“文件类型”选项组中选择“程序”,单击“新建”;将VFP的排名程序代码复制到“程序1”窗口中,并做如下改动:
     (1)第1行的d:\xxk.dbf改为从Excel中“另存为”的实际路径和文件名;(2)第1、5、7行中的zf改为Excel表中要排名的列名(可以是中文);(3)将倒数第2行改为:COPY TO d:\pmb.xls。
     第四步,选择VFP工具栏中的“保存”按钮(磁盘图标),在对话框中修改文件名后单击“保存”;再选择VFP工具栏中的“运行”按钮(感叹号),程序运行结束后会在D盘根目录下产生一个pmb.xls文件,双击打开该文件,排名结果已保存在其pm列中了。

发表评论
评论标题:
评论内容:
(500字符)
验证码: 看不清楚,请点击我
    
本网站所有内容属《江苏科技报·教育周刊》所有,未经许可不得转载
编辑部地址:江苏省南京市鼓楼区中山路55号新华大厦48楼
ICP备案编号:ICP备案编号:苏ICP备05076602号