您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 销售管理 > VFP第9部分(查询统计及扫描循环)
1.顺序查询(条件定位)locate[范围]for条件命令格式:继续查找命令命令格式:continue配对使用不能单独使用(教科书P67)数据表的查询2.查询find字符|数字|&内存变量seek表达式|内存变量命令格式:可以不加引号只能是字符、数值和日期表达式索引找什么索引什么(教科书P79)【例】:逐条显示学生表中87年出生的学生的信息。clearuse学生dowhile.not.eof()ifyear(出生日期)=1987dispendifskipenddousecancel循环体改变条件取值的命令循环条件方法一:clearuse学生Locateforyear(出生日期)=1987dowhile.not.eof()dispcontinueenddousecancel方法二:改变条件取值的命令clearuse学生Indexonyear(出生日期)tagcsnfSeek1987dowhileyear(出生日期)=1987dispskipenddousecancel方法三:改变条件取值的命令扫描循环(scan…endscan循环)格式:(见教科书146页)该循环只对数据表中的指定记录逐个进行某种处理方法四:clearuse学生scanforyear(出生日期)=1984dispendscanusecancel当循环gotopdowhilnoteof()处理一个记录skipendd扫描循环scan处理一个记录ends例:在student.dbf中输入学生姓名,查询该学生的信息。(实验14任务1(1))方法一:clearusestudentaccept请输入学生姓名:toxmlocatefor姓名=xmiffound()displayelse?查无此人endifusereturn方法二:clearusestudentindexon姓名tagsxmaccept请输入学生姓名:toxmseekxmiffound()dispelse?查无此人endifusereturn例:在student.dbf中统计江苏籍学生的人数。(实验14任务1(1))方法一:clearusestudentstore0tors,zfdowhilenoteof()if籍贯=江苏rs=rs+1endifskipenddo?rsusereturn方法二:clearusestudentrs=0locatefor籍贯=江苏dowhilefound()rs=rs+1continueenddo?rsusereturn方法三:clearusestudentrs=0scanfor籍贯=江苏rs=rs+1endscan?rsusereturn例:对学生表逐条统计560分以上的学生人数,并显示。数据表的统计运算统计:主要是对于数据表中的记录数、数字型字段进行纵向统计。1.统计记录个数count[范围][for条件][to内存变量]命令格式:(教科书P79-81)3.数值字段求平均值命令格式:average[表达式清单][to内存变量列表][for条件]2.数值字段求和命令格式:sum[表达式清单][to内存变量列表][for条件]4.多功能计算命令命令格式:calculate表达式表to内存变量表[for条件]CNT()、SUM(数值表达式)、AVG(数值表达式)、MAX(表达式)、MIN(表达式)C、N、D学生成绩表cj.dbf姓名语文数学英语综合总分张三12198145215李四13511598230王五11214585270赵六1409296231练习1、统计各门课程的总分、平均分2、统计每位学生的总分,并填入字段总分中3、统计语文成绩高于120分的人数4、统计各门课程的最高、最低分5.分类汇总命令格式:totalon关键字段to汇总表文件名[fields字段名表]……汇总字段,必须是数值型字段必须索引或排序关闭的表文件编号姓名性别年龄积分001张三男3020002李四女2510003王五男4050004赵七男2230005孙六女5020例:有如下数据表jf.dbf,按性别汇总积分。usejfindexon性别tagxbtotalon性别tohzfields积分usehzbrowse学号姓名性别年龄积分001张三男30100002李四女2530例:现有学生成绩表XSCJ.DBF,表结构及部分记录如下:XSCJ.DBF表结构:学号(C/10),课程号(C/6),成绩(N/7/1);XSCJ.DBF的部分记录:学号课程号成绩S01CA0188S01CA0265S02CA0172S02CA0251S01CA0334......设该程序的文件名为cx4_1.PRG.应用分类求和(TOTAL)与统计(COUNT)命令,根据用户输入的学号,计算对应学号的学生的平均成绩。屏幕显示格式如下:学生的学号平均成绩最高成绩最低成绩XXXXXXXXXXXXXXXXXXXXXXXXX(实验14任务2(1))usexscjAccept“输入学生学号:”toxhCalculatecnt(),max(成绩),min(成绩)toks,zd,zxfor学号=xhindexon学号tagxhtotalon学号tohzfields成绩usehzLocatefor学号=xh?”学生的学号平均成绩最高成绩最低成绩”?学号,成绩/ks,zd,zxreturn例:已知某单位教师工资表JS.dbf有如下记录:Record#编号姓名年龄工资13001李丽珍3669023002刘苏51168033003末言2282043004魏虎豹4696053005罗山40110063006甘甜3092073007丰潇潇471200下列程序用于统计工资表JS.DBF中40岁以上(包括40岁)的教师的平均工资。请填空完成。USEJSS=0N=0LOCATEFOR①DOWHILE②S=S+工资N=N+1③ENDDO?S/NUSE①年龄=40②noteof()③continue例:设有数据库STUDENT.DBF的结构的内容如下:记录号姓名(C)性别(C)出生日期(D)总分(N)1王青川男06/08/80586.002李凤女08/09/82532.003张方男05/06/81618.004赵雯女07/08/82609.005孙笑女06/23/80589.00阅读下列程序,写出运行结果:CLEARUSESTUDENTSCANIF性别=女SKIPELSE?总分ENDIFENDSCANUSERETURN586.00下列程序统计银行客户关系表中,客户代码的第3、4位的字符是“F8”或“V7”,并且存款金额大于250000元的客户信息和人数。请填空完成。USE银行客户关系表GOTOTOP____(1)_____SCAN____(2)____IF(SUBS(客户代码,3,2)=”F8”ORSUBS(客户代码,3,2)=”V7”)NUM=NUM+1DISPLAYENDIF______(3)_____?”满足条件的客户人数有:”,numUSE(1)num=0(2)存款金额250000(3)endscan(1)有一工资管理表GZ0705.DBF编号姓名基本工资接上月附加工资奖金水电费实发工资转下月9801王洪1005.005.67125.0075.8025.839402杨柳986.607.67145.0070.7021.238607陈洁1985.506.98244.0057.6020.408904吴晓梅1557.605.43175.7068.5030.129308刘江1045.703.56155.472.6041.80编写程序计算“实发工资”、“转下月”的值,并填入GZ0705.DBF中。“实发工资”仅取值到十位,(如:基本工资+接上月+附加工资+奖金-水电费=1185.62,则1180为“实发工资”,“转下月”的值为5.62)。程序代码:ClearUsegz0705Replaceall实发工资withint((基本工资+接上月+附加工资+;奖金-水电费)/10)*10,转下月with基本工资+接上月+附加工资+;奖金-水电费-实发工资ListUsereturn(2)某少年宫举办各种兴趣班,学生报名情况表如下(说明:每个学生可以参加1个以上的兴趣班)表1:XF.DBF姓名兴趣班名称学费张颖舞蹈280.00汪韵绘画350.00欧阳红舞蹈280.00李力绘画350.00李力钢琴840.00刘欣绘画350.00汪韵钢琴840.00张颖绘画350.00汪韵跆拳道420.00周扬跆拳道420.00编写程序,输入学生姓名,查询其参加兴趣班名称,输出格式如下:姓名:***参加的兴趣班:*********程序代码:ClearUsexfAccept”请输入学员姓名:”toxm?”姓名”+xm?”学习班名称”Scanfor姓名=xm?学习班名称EndscanUsereturn下周实验•实验5任务1(4)~(6)任务2(4)~(10)•实验14任务1作业P114~1222.4.4自主练习预习SQL查询命令
本文标题:VFP第9部分(查询统计及扫描循环)
链接地址:https://www.777doc.com/doc-3369413 .html