收藏 分享(赏)

VFP(第11章.ppt

上传人:dzzj200808 文档编号:2195883 上传时间:2018-09-05 格式:PPT 页数:66 大小:225KB
下载 相关 举报
VFP(第11章.ppt_第1页
第1页 / 共66页
VFP(第11章.ppt_第2页
第2页 / 共66页
VFP(第11章.ppt_第3页
第3页 / 共66页
VFP(第11章.ppt_第4页
第4页 / 共66页
VFP(第11章.ppt_第5页
第5页 / 共66页
点击查看更多>>
资源描述

1、第11章 程序设计基础,Visual FoxPro的工作方式 程序的基本结构 顺序结构 分支结构 循环结构 过程与过程文件 程序调试,11.1 VFP的工作方式,VFP提供的3种工作方式:命令方式、菜单方式和程序文件方式。前2种方式统称为交互方式。 命令方式利用“命令”窗口输入命令完成特定操作的方式。 菜单方式用户利用菜单选项完成特定操作的方式。 程序文件方式用户利用程序文件完成一系列操作的方式。 程序:用户将预先编好的若干条命令,存放在一个以PRG为扩展名的文件中。通过执行程序,自动得到运行结果。,例11.3 用程序文件方式,逻辑删除“人才档案”表的第7条记录,并显示表的全部数据。操作步骤如

2、下: 用编辑工具创建一个程序文件,文件命名为“程序11-3.PRG”。程序代码如下:USE 人才档案 EXCLDELE RECORD 7BROWSE ALLUSE 使用菜单或命令窗口的命令运行程序文件,程序文件方式的特点,程序文件一旦编成,可供用户多次运行。 程序可被修改并重新运行。 程序可通过命令、菜单、工具栏等运行。 程序可调用其它程序。 程序设计要求用户具有算法设计、数据处理等相关知识,有一定难度。,VFP程序的基本组成,一、优化环境可使用 NOTE、CLEAR、SET等语句。 二、输入数据(给变量赋值)可使用=、INPUT、ACCEPT、STORE等语句。 三、数据处理(计算)可使用

3、=、?/? 等语句。 四、输出结果可使用 ?/?、行,列 SAY 等语句。,程序文件的建立与编辑,1.以命令方式建立、编辑程序文件格式:Modify Command 程序文件名功能:建立、编辑指定名字的程序文件。 2.以菜单方式建立、编辑程序文件 操作:文件新建程序新建文件编辑保存功能:建立、编辑指定名字的程序文件。3.利用设计工具建立程序代码 (后续章节介绍),程序文件的调用,1.用DO命令调用格式:Do 2.用菜单调用操作:程序运行选文件运行3.用工具按钮调用操作:打开程序文件单击工具栏的“运行”按钮,例11.4 创建程序文件“程序11-4.PRG”:程序的功能是先显示“专业特长”表中的全

4、部数据,然后再显示职称是教授的所有记录。程序代码如下:USE 专业特长 EXCLBROWSE ALLLIST ALL FOR 职称=“教授“USE,11.2 程序的基本结构,1、顺序结构 按命令行的先后顺序依次执行。 每条命令执行完后自动执行下一条命令。 2、分支结构 分支结构是在程序执行时,根据不同的条件,选择执行不同的语句。 顺序、分支结构在程序执行时,每个语句至多只能执行一次。,3循环结构 循环结构能够使某些语句或程序段重复执行若干次。 如果某些语句或程序段需要在一个固定的位置上重复执行,就应使用循环语句。 4过程结构 同一程序段需要在程序的不同位置上重复执行多次,这时就需要使用过程结构

5、。 对于两个调用与被调用关系的程序文件,常称调用程序的程序为主程序,被调用的程序称为子程序(或称过程)。,11.3 顺序结构语句,11.3.1 输入语句 1. Input语句格式:Input 提示符 To 功能:暂停程序执行,等待用户从键盘输入数据,赋给指定的内存变量。,例11.5 设计一个程序,将“人才档案”表中指定“出生日期”的记录逻辑删除。程序代码如下:Clearuse 人才档案 exclinput “请输入出生日期:“ TO CSRQDELETE ALL FOR 出生日期=CSRQBROWSE ALLUSE,2. Accept语句格式:Accept 提示符 To 功能:暂停程序执行,等

6、待用户从键盘输入字符串,赋给指定的内存变量。,例11.6 设计一个程序,能够分别浏览“专业特长”表中指定职称的记录集。 程序代码如下:CLEARUSE 专业特长 EXCLACCEPT “请输入职称:“ TO ZCBROWSE FOR 职称=ZCUSE,3. Wait语句格式:Wait 提示符 To Windows At ,Timeout 功能:暂停程序执行,等待用户从键盘输入一个字符的字符串,赋给指定的内存变量。本命令还可以在屏幕的指定位置及规定时间内显示提示信息。说明:屏幕左上角的坐标为(0,0),X轴正向向右,Y轴正向向下。,例11.7 设计一个程序,能够分别显示“专业特长”表中指定职称的

7、记录集。当完成一组记录集显示后,在屏幕的指定位置(15,40)显示提示信息,该信息停留5秒钟。 程序代码如下:CLEARUSE 专业特长 EXCLACCEPT “请输入职称:“ TO ZCLIST ALL FOR 职称=ZCWAIT “职称为“+ZC+“的记录已显示“ Windows At 15,40 Timeout 5USE,4. 格式输入语句( -Read)格式: Say Get Read功能:允许在指定的位置输入一个常量,当执行Read时将常量赋给指定的。,11.3.2 输出语句格式输出语句(语句)格式: Say 功能:在指定的位置开始,按指定的格式输出的值。,例11.8 设计一个程序,

8、能够分别浏览“人才档案”表中指定姓名的记录。 程序代码如下:CLEAR XM=“ “Use 人才档案 Excl 5,10 Say “请输入姓名:“ Get XMRead Locate All For 姓名=xm 8,10 Say “编 号“ 8,20 Say 编号 9,10 Say “姓 名“ 9,20 Say 姓名 10,10 Say “工资现状“ 10,20 Say 工资现状USE,几种给变量赋值语句的比较,11.4.1 单向/双向分支 格式:If ElseEndIf 功能:先计算“条件”的值,当条件为“真”时执行“命令序列1”,条件为“假”时,执行“命令序列2”,执行完“命令序列1”或

9、“命令序列2”后都执行 ENDIF后面的语句。 说明:语句缺少ELSE子句时为单分支,否则为双分支。,11.4 分支结构语句,IF分支语句的流程图,分支程序设计实例之一,例11.9 请编写邮件计费程序:当邮件重量小于等于200克时,邮资费为每克0.06元;当邮件重量超过200克时,其中200克,按每克0.06元计费,超过200克的重量,按每克0.03元计费。,CLEAR INPUT “邮件重量:“ TO X IF X=200Y=X*0.06 ELSEY=200*0.06+(X-200)*0.03 ENDIF ? “邮件重量:“,X ? “邮件资费:“,Y,分支程序设计实例之二,例11.10在“

10、人才档案”表中,查找给定姓名的记录,如果找到把该记录加上删除标记,没有找到则显示提示信息“查无此人”。,CLEAR Use 人才档案 Excl Accept “姓名:“ TO XM Locate All For 姓名=XM If .NOT. EOF()Delete Else 2,30 Say “查无此人“ EndIf Browse USE,格式:Do CaseCase Case Case OtherwiseEndCase,11.4.3 多向分支,功能:系统执行本语句时,依次判断 N 个的条件表达式,当遇到第一个条件表达式为真时,则执行该表达式对应的语句序列,然后转 EndCase 的后续语句去

11、执行;若所有 Case 后面的条件表达式都为假,则执行 Otherwise 后面的语句序列。如果没有Otherwise 的语句,则直接执行 EndCase 的后续语句。,多向分支语句的流程图,例11.11 已知有3个表,分别是“人才档案”、“专业特长”和“成果成就”,编写一个程序,可在不同的选择条件下,分别浏览这些的记录。具体如下:1:浏览“人才档案”表 2:浏览“专业特长”表3:浏览“成果成就”表,多向分支程序设计实例,clear accept “请输入您的选择(13):“ to S DO CASECase S=“1“Use 人才档案 ExclBrowseCase S=“2“ Use 专业特

12、长 ExclBrowse LastCase S=“3“Use 成就成果 ExclBrowse ENDCASE USE,例11.11 的程序清单,(1) IfEndIf和Do Case EndCase必须配对使用。 (2) Do Case与第一个Case 之间不能有任何语句。 (3) Do CaseEndCase命令,在多个Case的值为真时,只执行第一个值为真的,然后执行 EndCase的后面的第一条命令。,11.4.4 分支语句使用说明,11.5 循环结构语句,11.5.1 “当”型循环 格式: Do While EndDo 功能:当Do While 语句中的“条件表达式”为真时,反复执行D

13、o While和EndDo之间的语句,直到“条件表达式”为假时,结束循环,执行EndDo后面的语句。第一次判断由Do While语句执行,其余判断由EndDo语句执行。,“当”型循环语句的流程图,“当”循环程序设计实例,例11.12 统计“人才档案”表中工资超过7000元的人数。,Clear Use 人才档案 Excl N=0 Do While .not. eof()If 工资现状 7000N=N+1EndIfSkip EndDo ? “工资在7000元以上的人数:“+ STR(N) Use,格式:For = To Step EndForNext 功能:执行For语句时,首先将赋给,然后判断是

14、否越过(步长为正数时大于, 步长为负数时小于) ,若结果为“真”,则结束循环,执行ENDFOR 后面的语句;否则,执行后执行ENDFOR语句。执行ENDFOR时,首先加上,然后判断当前的值是否越过(步长为正数时大于, 步长为负数时小于) ,若结果为“假”,则继续执行及ENDFOR语句,直到其结果为“真”才结束循环,执行EndFor后面的语句。,11.5.2 “计数”型循环控制语句,“计数”型循环控制语句(步长0)的流程图,“计数”型循环控制语句(步长0)的流程图,“计数”循环程序设计实例之一,例11.13 计算S=1+2+3+100。编写程序实现并输出结果。,CLEAR S=0 FOR I =

15、 1 TO 100 STEP 1S=S+I ENDFOR ? “S=“,S,例11.13执行过程,CLEAR S=0 执行FOR语句:I=1 100(未超过终值) 第1次执行循环体: S=S+I=0+1执行NEXT语句: I=I+1=1+1=2 100 (未超过终值) 第2次执行循环体:S=S+I=0+1+2执行NEXT语句:I=I+1=2+1=3 100 (未超过终值), 第99次执行循环体:S=S+I=0+1+2+ +99执行NEXT语句: I=I+1=99+1=100 =100 (未超过终值) 第100次执行循环体:S=S+I=1+2+99+100执行NEXT语句: I=I+1=100+

16、1=101100(超过终值!) 此时转NEXT后语句执行: 即显示:S=1+2+3+100 =5050,1、要计算S=1+3+5+99,如何修改程序?计算S=2+4+6+100的程序呢? 2、要计算S=1+2+3+N,如何修改程序? 3、要计算P=1*2*3*30,如何修改程序?计算P= 1*2*3*N的程序呢?,例11.13 的思考与练习,格式:Scan 范围 For EndScan 功能:对当前数据表文件中满足条件的记录逐一进行加工处理(执行循环体语句),直到函数EOF()的值为“真”(即记录指针指向数据表文件结束)时结束循环。,11.5.3 “指针”型循环,“指针”型循环控制语句的流程图

17、,例11.14 用“指针”型循环控制语句,统计人才档案数据表中工资超过7000元的人数。,“指针”型循环程序设计实例,CLEAR USE 人才档案 EXCL N = 0 SCAN ALL FOR 工资现状 7000N= N + 1 ENDSCAN ? “工资超过7000元的人数:“+LTRIM(STR(N) USE,1、要统计“人才档案”数据表性别为“男”的职工人数,如何修改程序? 2、要统计“人才档案”数据表姓“林”的职工人数,如何修改程序? 3、要统计“人才档案”数据表出生日期在“8月份”的职工人数,如何修改程序?,例11.14 的思考与练习, Do While和EndDo、For和End

18、For、Scan和EndScan必须配对使用。 应是数值型的内存变量。 Exit和Loop命令嵌入在循环体内,可以改变循环次数,但是不能单独使用。 Exit的功能是跳出循环,转去执行EndDo、EndFor、EndScan后面的第一条命令; Loop的功能是转回到循环的开始处,重新对“条件”进行判断,相当于执行了一次EndDo、EndFor、EndScan命令,它可以改变“循环体”中部分命令的执行次数,11.5.4 使用循环语句的注意事项,1、概念双重循环是在一个循环的循环体中包含有另一个循环语句。 2、执行过程外循环的循变每取一个值,内循环的循变则取遍所有可能值,执行一个完整的循环。,双重循

19、环的基本概念,例11.16 打印九九乘法表,要求使用双重循环实现。11=1 12=2 19=9 21=2 22=4 29=18 91=1 92=18 99=81,双重循环设计实例之一,clear for I=1 to 9 &外循环控制打印 9 行for J=1 to 9 &内循环控制同一行打印 9个式子? str(I,1)+“+str(J,1)+“=“+str(I*J,2)+“ “next J ? &打完一行后光标换行 next I,例11.16 的程序清单,思考与练习 修改原有程序,打印以下三角形: 11=1 21=2 22=4 91=1 92=18 99=81 或 11=1 18=8 19

20、=9 22=4 29=18 99=81,例11.17 编程输出100以内的所有素数。(注:大于1的整数,如果它只能被1和它自身整除,我们就叫它为素数,也称为质数。如2,3,5,7,11,13,17等都是素数)。,双重循环设计实例之二,引例:判断正整数I(I2) 是否为素数的程序清单CLEARINPUT “I=“ TO IIF I=2? I,“是素数“RETURN &结束程序运行ENDIFFOR J=2 to I-1IF MOD(I,J)=0? I,“不是素数“RETURN &结束程序运行ELSE IF J=I-1 ? I,“是素数“ENDIFENDIFNEXT J,CLEAR FOR I=2

21、to 100 &外循环控制I从2到100取值IF I=2? ILOOP &进入下一次循环,转NEXT I 语句执行ENDIFFOR J=2 to I-1 &内循环求 I 是否为素数IF MOD(I,J)=0EXIT &结束本层循环,转本层NEXT J语句后执行ELSE IF J=I-1 ? IEXITENDIFENDIFNEXT J NEXT I,例11.17 的程序清单,外循环,内循环,当I不能被所有的J值(从2、3、4到I-1取值) 整除时(此时J=I-1成立),此时I为素数,则不换行输出I。,例11.18 从键盘随意输入的10个数,将它们从小到大依次排列后输出。,双重循环设计实例之三,C

22、LEAR DIMENSION A(10) & 定义数组A,含10个数组变量 FOR I=1 TO 10input “输入第“ + STR(I,2)+ “个数:“ to A(I) ENDFOR FOR I=1 TO 10MIN=A(I)IMIN=IFOR J=I+1 TO 10 & 内循环求出第 I 小值并赋给A(I)IF A(J)MIN MIN=A(J) & 确定第 I 小值的下标IMIN=JENDIFENDFORT=A(I)A(I)=A(IMIN)A(IMIN)=T ENDFOR FOR i=1 TO 10? A(i) ENDFOR,例10.18 的程序清单,输入10个数,交换X(I)与第

23、I 小值X(J)的值,在同一行输出10个数,内循环,外循环,例10.18运行过程示意,原始数据:96、67、33、23、8、56、78、65、35、11第 1次循环:8、67、33、23、96、56、78、65、35、11第 2次循环:8、11、33、23、96、56、78、65、35、67第 3次循环:8、11、23、33、96、56、78、65、35、67第 4次循环:8、11、23、33、96、56、78、65、35、67第 5次循环:8、11、23、33、35、56、78、65、96、67第 6次循环:8、11、23、33、35、56、78、65、96、67第 7次循环:8、11、23

24、、33、35、56、65、78、96、67第 8次循环:8、11、23、33、35、56、65、67、96、78第 9次循环:8、11、23、33、35、56、65、67、78、96 第10次循环:8、11、23、33、35、56、65、67、78、96,例10.19 设某班学生VFP成绩已经存入表文件VFP.dbf中,VFP.dbf包含有如下字段:学号(C,7),姓名(C,8),分数(N,3,0)。编写一个程序用于查找此班成绩最高者,并输出姓名和分数。,表查询操作补充举例,CLEAR USE VFP EXCL MAX=分数 & 把1号记录的分数当作临时最高分 N=1 & 记住最高分的位置 S

25、KIP & 下移一个记录 SCAN ALL FOR 分数maxMAX=分数n=recno( ) ENDSCAN list record n fields 姓名 , 分数 USE,例10.19 的程序清单,如有某记录的分数大于临时最高分,则更新MAX的值,并记住最高分所在的记录号。,结构化程序设计总结 1、给变量赋值与输出语句 赋值语句有:=、STORE、INPUT、ACCEPT、WAIT、 -Read等。 输出语句有:?、?、 X,Y SAY 表达式 2、分支语句的选择: IF / ENDIF 用于单分支结构。 IF / ELSE / ENDIF 用于双分支结构。 DO CASE / ENDC

26、ASE 用于多分支结构(结束语句不是 ENDDO)。 3、循环语句的选择: DO WHILE / ENDDO可用于组织各种循环。 FOR / ENDFOR常用于组织初值、终值、步长值确定的循环。 SCAN / ENDSACN常用于组织对数据表操作的循环。 4、循环体中语句的选择: 统计个数:T=T+1,进入循环前应先执行T=0。 求累加和:S=S+I,I为循环变量或累加项,进入循环前应先执行S=0。 求边乘积:P=P*I,I为通常为循环变量,进入循环前应先执行P=1。,5、条件的构造: 姓“李”:LEFT(姓名,2)=“李” 80年代出生的记录:YEAR(出生日期)=1980 .AND. YE

27、AR(出生日期)=1989 1980年以前出生:YEAR(出生日期)=1980 也可用:出生日期=1980/12/31 判断 I 是否被J整除:MOD(I,J)=0也可用:INT(I/J)= I/J 判断表文件未结束: .NOT. EOF( ) 也可用:EOF( ) = .F. 6、几个技巧输入命令时除汉字外都要在纯英文方式下输入;各命令动词之间用空格分隔;一行只能输入一个命令,输完一个命令后按回车结束。 ?用于不换行打印;?用于换行打印或打印空行。不显示数字N前的空白(符号位):?LTRIM(STR(N) 对数据表编程应先用USE打开,操作完毕应用USE关闭。,10.6 过程与过程文件 过程

28、是由一个或多个语句构成,以返回语句(Return)结束的独立程序段。 过程文件是以过程说明语句开头,以返回语句结束的多个过程的集合。 一个过程文件可以存储若干个过程,打开一个过程文件后(用SET PROC TO语句),就可以调用(用DO语句)其中每个过程。 过程文件的建立与使用方法与程序文件相同,且使用相同的扩展名(.PRG)。 过程文件中的过程名没有扩展名,过程名由18个字符组成。,过程文件的格式Procedure PARAMETERS RETURNProcedure PARAMETERS RETURN Procedure PARAMETERS RETURN,第n个过程,第2个过程,第1个过

29、程,1、过程调用语句格式:Do 功能:调用指定的过程,并将参数表中的参数值传递给过程中的相应参数。2、过程返回语句格式:Return To Master | To 功能:返回到调用程序中调用语句的下一语句执行。,主程序 Proc A Proc B Proc C Do A Do B Do C Return Return Return,主程序 Proc A Proc B Proc C Do A Do B Do C Return Return Return To Master,主程序 Proc A Proc B Proc C Do A Do B Do C Return Return Return T

30、o A,11.7 程序调试,操作步骤如下: 在Visual FoxPro主菜单下,打开“工具”菜单,选择“调试器”命令,进入“调试器”窗口。 在“调试器”窗口,打开“工具”菜单,选择“断点”命令,进入“断点”窗 口。 在“断点”窗口,可设置程序的断点,使程序在执行时,遇到该断点则被挂起。用户可以根据程序的运行情况找出错误并决定是否继续执行。 在“调试器”窗口,打开“窗口”菜单,选择“监视”命令,进入“监视”窗口。 在“监视”窗口,可以监视程序执行时的内存变量、表达式、记录指针或监控变量的值。 在“调试器”窗口,选择“跟踪”命令,进入“跟踪”窗口。 在“跟踪”窗口,可以“跟踪”程序的运行过程。,上机实验与作业布置,第九周上机实验:1、实验九 结构化程序设计(1题)2、历年统考试题 第十周上机实验:1、实验九 结构化程序设计(24题)2、历年统考试题 第十一周上机实验:1、实验九 结构化程序设计(59题)2、历年统考试题,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 实用文档 > 往来文书

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报