1、7.1 7.1 应用程序基本操作应用程序基本操作1)应用程序:为完成某项任务所需执行的命令序列,这些命令按照一定的结构有机地组合在一起,并以文件的形式存储在磁盘上,又称为命令文件。2)应用程序的组成:前言:注释语句 设置区:设置程序的运行环境,多由SET命令实现 程序体:所有命令序列,一般包括数据的输入输出、数据的处理以及结果输出等命令 整理部分:如关闭各种文件 程序的退出:设置有关命令关闭文件返回到命令窗口状态或操作系统状态7.1.1 7.1.1 应用程序的建立应用程序的建立(1)菜单方式(2)命令方式:MODIFY COMMAND 说明:为主文件名,其扩展名的默认值为.PRG 示例:建立名
2、为L1.PRG的应用程序,使其能够打开表文件“VFP 学生表.DBF”,根据键入的学生姓名在该表文件中查找并输出该学生的基本情况,然后关闭该文件。命令窗口:MODI COMM VFPL1.PRG编辑窗口:*L1.PRG SET TALK OFF USE VFPZGDA.DBF ACCEPT“请输入学生姓名:”TO XM LOCATE FOR 姓名=XM?学号,姓名,性别,班级 USE SET TALK OFF RETURN7.1.2 7.1.2 应用程序的运行应用程序的运行1.菜单方式2.命令方式:DO 应用程序名 WITH 说明:1)在程序运行过程中执行到下述命令时将会中断运行而退出,它们退
3、出后返回的系统状态分别是:CANCEL:命令窗口状态。QUIT:操作系统状态。RETURN:调用点或命令窗口状态。2)在程序运行过程中,若按下ESC键可使运行强行中断。这时系统显示警告,并给用户三种选择:取消:中断程序的运行。此为缺省选项。继续执行:忽略ESC的中断作用,继续程序的执行。挂起:暂时中断程序的运行,返回命令窗口。当再次运行时可以从中断处继续运行。7.2.1 7.2.1 常用辅助命令常用辅助命令格式I:NOTE 格式II:*格式III:&说明:1)注释命令为非执行语句 2)注释内容最后一个字符是分号(;),系统默认下一行内容仍为注释内容。示例1:NOTE 打开学生表 USE 学生表
4、.DBF 示例2:SET CONSOLE OFF&取消窗口的输出显示 1.注释命令SET TALK ON/off设置是否在主窗口的状态栏中显示所有命令的执行结果。SET CONSOLE ON/off 设置是否把输出信息在窗口上显示。SET PRINTER on/OFF设置是否在打印机上输出信息。SET SAFETY ON/off设置在改写文件时,VFP是否显示对话框以确认改写有效。SET HEADING ON/off 设置在执行LIST、DISPLAY等命令时是否显示字段名。SET STATUS ON/off设置是否显示状态行。SET DEFAULT TO盘符 指定默认的驱动器。SET DEV
5、ICE TO SCREEN把输出信息发送到VFP的窗口/PRINTER屏幕或打印机。2.环境设置命令格式I:CLEAR说明:清除当前屏幕上的所有信息格式II:CLEAR ALL说明:关闭所有文件,清除所有内存变量格式III:CLEAR TYPEAHEAD说明:清除键盘缓冲区3.清除命令4.关闭文件命令格式I:CLOSE ALL说明:关闭所有的数据库、表以及索引文件格式II:CLOSE 说明:文件类型DATABASE数据库文件、索引文件、格式文件INDEX当前工作区的索引文件FORMAT 当前工作区的格式文件PROCEDURE 当前工作区的过程文件ALTERNATE 文本输出文件5.运行中断和结
6、束命令格式I:QUIT说明:退出VFP,返回到操作系统状态格式II:CANCEL说明:结束本次程序的运行,返回到命令窗口状态格式III:RETURN TO MASTER说明:返回到调用点处。6.文本显示命令格式:TEXT ENDTEXT说明:将文本内容原样输出7.定位输出命令格式:SAY 说明:在指定的行、列处输出数据7.2.2 7.2.2 交互输入命令交互输入命令1.键入字符串命令格式:ACCEPT TO 说明:1)暂停程序的运行,等待用户键入字符型常量以赋给指定的内存变量。2)是显示在屏幕上的、用于提示说明的字符型表达式。3)如果不键入任何字符而只按回车键,则赋给内存变量的值将是一个空字符
7、串。示例:编写可以打开任一数据表文件的通用命令。ACCEPT“请输入要打开的表文件名:”TO BMUSE&BM2.输入单字符命令格式:WAIT TO 功能:暂停程序的运行,等待用户键入单个字符后再恢复程序运行。说明:1)为可选项,其格式、功能与要求同ACCEPT命令。如果命令中无此选项,则系统默认的提示信息是:PRESS ANY KEY TO CONTINUE2)TO 也为可选项,选用时,则键入的单个字符均作为字符型数据赋给内存变量。如果只是按下回车键,则只将一个空字符存入内存变量。示例:试编写一个VFP程序,能够根据键入的系别代号(单字符)在不同系的档案表文件中查找某一职工的情况。*L2.P
8、RGSET TALK OFFCLEARWAIT“请输入系的代号:”TO DHXH=“DH”+DHUSE&XHACCEPT“请输入职工姓名:”TO XMLOCATE FOR 姓名=XM?“职工姓名:”+姓名?“性别:”+性别?“年龄:”+STR(年龄,2)WAIT?“职称:”+职称?“任教课程:”+任教课程?“教研室:”+教研室WAITSET TALK ONRETURN2.输入单字符命令3.键入表达式命令格式:INPUT TO 功能:暂停程序运行,等待键入表达式并将其值赋给指定的内存变量,待按回车键后,继续运行程序。说明:1)为可选项,其格式、功能与要求同ACCEPT命令。2)命令中的的类型决定
9、于键入数据的类型,但不得为M型数据。3)若键入的是表达式,本命令将先计算出表达式的值,然后把其结果赋给。4)若键入字符型常量或逻辑型常量时应带有定界符。5)在响应该命令时,若键入了无效表达式或只按下回车键,系统将会给出“句法错”的提示信息。示例:试运行下述交互输入命令。INPUT“请输入学生姓名:”TO XMINPUT“请输入其班级:”TO BJINPUT“该人性别为:”TO XB7.3 7.3 顺序结构程序设计顺序结构程序设计1)程序设计的过程:分析问题、确定任务、划分模块、建立模型、组织数据、描述操作步骤、编写程序、上机调试、分析运行结果、写出程序说明书。2)流程图:就是运用一些特定的图形
10、符号和必要的文字来描述解题步骤的图示。3)三种基本程序结构流程图:AB条件条件AB条件条件A顺序结构分支结构循环结构7.3 7.3 顺序结构程序设计顺序结构程序设计4)顺序结构程序:自始至终严格按照程序中语句的先后顺序逐条执行,是最基本、最普遍的结构形式。5)示例1:试在表文件中查看某学生的有关情况。*L3.PRG SET TALK OFF CLEAR USE 学生表.DBF LOCATE FOR 姓名=“林天力”DISPLAY USE SET TALK ON7.4 7.4 分支结构程序设计分支结构程序设计7.4.1 7.4.1 两分支结构两分支结构1)简单分支的格式:IF ENDIF注意:I
11、F和ENDIF必须成对出现分支结构:就是按照一定的条件由判断语句或选择语句构成的双重或多重走向的程序1.简单分支语语 句句 行行条件表达式条件表达式语句行序列语句行序列ENDIF后面的语句后面的语句YN例:在“学生表”中查看“李尚清”的基本情况。SET TALK OFF CLEAR USE 学生表 LOCATE FOR 姓名=”李尚清”IF FOUND()DISPENDIF USE SET TALK ON2.选择分支格式:IF ELSE ENDIF语语 句句 行行条件条件语句行序列语句行序列1语句行序列语句行序列2ENDIF后面的语句后面的语句例2:在表文件“分数.DBF”中查找学号为9902
12、0203的学生成绩,若其成绩满60分则显示其学号、课程号和成绩;否则显示此人的学号、课程号并通知其补考。*L6.PRGSET TALK OFFUSE 分数.DBFCLEARLOCATE FOR 学号=“99020203”IF 成绩=60?“学号:”+学号?“课程号:”+课程号?“成绩:”+STR(成绩,6,2)ELSE?“学号为”+学号+“的学生应参加补考的课程号为:”+课程号ENDIF USESET TALK ON3.判断语句嵌套IF语句多重嵌套示意结构如下:IF ELSE IF ELSE IF ELSE ENDIF3 ENDIF2 ENDIF1 注意:(1)IF、ELSE(可不选)、END
13、IF一一 对应、互相匹配 (2)允许简单判断和选择判断语句自我嵌套或相互嵌套,但层次必须清楚,不得交叉 (3)最好采用缩格(锯齿形)的书写方式例:根据键入X的值,计算下面分段函数的值,并显示结果。X2+4X-1 (X0)3X2-2X+1 (0X10)10)+1 (X10)Y=程序如下:SET TALK OFFCLEARINPUT“X=”TO XIF X0 IF X10 Y=X*X+1 ELSE Y=3*X*X-2*X+1 ENDIFELSE Y=X*X+4*X-1ENDIF?”分段函数值为:”+STR(Y,10,2)SET TALK ONRETURN7.4.2 7.4.2 多分支结构多分支结构
14、格式:DO CASE CASE CASE OTHERWISE ENDCASE注释内容例:用DO CASE语句修改上面计算分段函数的例子。SET TALK OFFCLEARINPUT“X=”TO XDO CASE CASE X0.AND.X10 Y=X*X+1ENDCASE?”分段函数值为:”+STR(Y,10,2)SET TALK ONRETURN7.5 7.5 循环结构程序设计循环结构程序设计7.5.1 7.5.1 当型循环结构当型循环结构循环结构程序:按照一定条件重复进行某种特定操作的程序称为循环结构程序。格式:DO WHILE LOOP EXIT ENDDO说明:结构组成:循环起始语句、
15、循环体、循环终端语句注意:在循环体内要设置修改循环条件的语句,避免死循环。ENDDO后面的语句后面的语句语句行序列语句行序列条件表达式条件表达式循环体内语句循环体内语句修改条件表达式修改条件表达式YN例2:编程显示学生表中所有女生的记录。SET TALK OFF CLEAR USE 学生表 INDEX ON 性别 TO 学生表_性别 SEEK“女”/查找首次出现索引的记录 DO WHILE 性别=”女”DISP SKIP ENDDO USE SET TALK ON RETURN 例4:编写程序能根据键盘输入的姓名,从学生表中查找该生的信息。SET TALK OFF CLEAR ACCEPT“请
16、输入姓名:”TO XM USE 学生表 DO WHILE.NOT.EOF()IF 姓名=XM DISP EXIT ELSE SKIP ENDIF ENDDO USE SET TALK ON7.5.2 7.5.2 固定次数的循环结构固定次数的循环结构格式:FOR=TO STEP LOOP EXIT ENDFOR/NEXT注意:步长可为正值和负值例1:编程求和S=1+2+3+100。SET TALK OFFCLEARS=0FOR N=1 TO 100?”S=”,S S=S+N SET TALK ONENDFOR RETURN7.5.3 7.5.3 表扫描循环结构表扫描循环结构格式:SCAN FOR
17、 WHILE LOOP EXIT ENDSCAN例1:编程统计学生表中男学生的人数。SET TALK OFFCLEARN=0USE 学生表SCAN FOR 性别=”男”N=N+1ENDSCAN?”学生表中男学生的人数是:”,NUSESET TALK ONRETURN例2:统计表文件“学生表.DBF”中各个班级的人数。*L1.PRGSET TALK OFFSTORE 0 TO A,BCLEARUSE 学生表.DBFSCAN DO CASE CASE 班级=“注会”A=A+1 CASE 班级=“金融二”B=B+1 ENDCASEENDSCAN?“注会班的人数为:”+STR(A,3)?“金融二的人数
18、为:”+STR(B,3)USESET TALK ON7.5.4 7.5.4 多重循环结构多重循环结构格式(以当型循环结构为例):DO WHILE 条件表达式1 语句行序列11 DO WHILE 条件表达式2 语句行序列21 DO WHILE 条件表达式3 语句行序列31 ENDDO3 语句序列22 ENDDO2 语句行序列12 ENDDO1 例1:试用固定次数循环的嵌套格式编写一个打印九九乘法口诀表的程序。SET TALK OFFCLEARFOR Y=1 TO 9FOR X=1 TO 9 Z=Y*X?STR(Y,1)+“*”+STR(X,1)+“=”+STR(Z,2)+“”ENDFOR?END
19、FOR SET TALK ONRETURN例例3:编程打印如下图形:编程打印如下图形:*SET TALK OFF CLEAR A=1 DO WHILE A8 B=1 DO WHILE B=2*A-1 A,40-B+A SAY“*”B=B+1 ENDDO A=A+1 ENDDOSET TALK ONRETURN7.6 7.6 过程结构程序设计过程结构程序设计7.6.3 7.6.3 内存变量作用域内存变量作用域作用域:内存变量的作用范围。1、全局变量1)全局变量:指在程序的任何嵌套中及在程序执行期间始终有效的变量。2)格式:PUBLIC 例:在过程调用中,运用全局变量传递数据。主程序 过程 *MA
20、IN_3.PRG *SUB_3.PRG SET TALK OFF PUBLIC B,C CLEAR B=2 PUBLIC A D=3 A=1?“在过程中:A,B,C,D=”,A,B,C,D DO SUB_3 RETURN?“返回主程序:A,B,C,D=”,A,B,C,DSET TALK ON 2、局部变量1)局部变量:未经PUBLIC命令定义且只在建立它的过程及其下级过程中有效的内存变量。2)局部变量的定义:隐含定义方式:过程中未经特殊说明的内存变量。显示定义方式:PRIVATE ALL LIKE/EXCEPT 例:在过程调用中局部变量的应用。*主程序MAIN_4.PRG SET TALK O
21、FF A=1 B=2?“主程序中:A=”,A,“B=”,B DO SUB_4?“返主程序后:A=”,A,“B=”,B,“C=”,C,“D=”,D SET TALK ON *过程SUB_4.PRG PRIVATE B PUBLIC C A=10 B=11 C=12 D=13?“在过程中:A=”,A,“B=”,B,“C=”,C,“D=”,D RETURN7.6.1 7.6.1 过程的建立与调用过程的建立与调用过程:可被调用的功能模块或能够完成某种特定功能的独立程序。1、过程的建立:MODIFY COMMAND 2、过程的调用 DO 3、过程中的返回命令 RETURN TO MASETR4、过程的嵌
22、套:一个过程又调用了另一个过程例1:用过程编写一个求和与乘积的程序。*AA.PRG调用过程BB *过程BBSET TALK OFF M=3S=1 N=5P=1 S=M+NDO BB P=S*N?”S=”,S RETURN?”P=”,PSET TALK ONRETURN例例3:有一个名为:有一个名为SCORE的数据表,具有如下的字段:学号的数据表,具有如下的字段:学号(C,5),姓名姓名(C,8),政治政治(N,3),数学数学(N,3),外语外语(N,3),总分总分(N,3),平均分平均分(N,6,2)。编写一程序,分别求出政治课、数学课和外语课的总分。编写一程序,分别求出政治课、数学课和外语课
23、的总分。*主程序主程序CLASS.PRG SET TALK OFF *计算单科总分的过程计算单科总分的过程JSZF.PRGUSE SCORE GO TOPKCM=”政治政治”DO WHILE.NOT.EOF()T=0 T=T+&KCMDO JSZF SKIPT1=T ENDDOKCM=”数学数学”RETURNT=0DO JSZFT2=T KCM=”外语外语”T=0?”政 治 课,数 学 课,外 语 课 的 总 分 分 别政 治 课,数 学 课,外 语 课 的 总 分 分 别是:是:”,T1,T2,T3DO JSZF USET3=T SET TALK ON7.6.2 7.6.2 过程文件过程文件
24、1、过程文件:过程的集合、过程文件:过程的集合2、过程文件的建立和修改、过程文件的建立和修改 MODIFY COMMAND 3、过程文件的一般结构、过程文件的一般结构与程序模块不同的是,过程作为应用程序的一个组成部分被与程序模块不同的是,过程作为应用程序的一个组成部分被包含在调用它的程序文件中包含在调用它的程序文件中 PROCEDURE RETURN PROCEDURE RETURN PROCEDURE RETURN4、过程文件的打开命令、过程文件的打开命令 格式:格式:SET PROCEDURE TO 5、过程文件的关闭命令、过程文件的关闭命令 格式格式I:SET PROCEDURE TO
25、格式格式II:CLOSE PROCEDURE例2:试求3100之间的所有素数并显示之。算法:每产生一个M的值则依次除以3到M的算术平方根之间的所有奇数,若均不能被整除,则M即为素数,然后将其显示输出,否则,M就不是素数。主程序 过程文件*MAIN_2.PRG *SUB_2.PRGSET TALK OFF PROCEDURE JCSET PROCEDURE TO SUB_2FOR M=3 TO 100 STEP 2 RETURN I=3 PROCEDURE QS N=INT(SQRT(M)FOR I=3 TO N STEP 2 DO QS IF INT(M/I)=M/IENDFOR RETURN
26、SET PROCEDURE ENDIF ENDFOR?M RETURN 7.6.4 7.6.4 过程的带参调用过程的带参调用1 1、带参过程调用命令、带参过程调用命令 格式:格式:DO DO WITH WITH 说明:参数表中的参数也称说明:参数表中的参数也称实参实参,可以为,可以为常量常量、已赋值的、已赋值的变量变量或或数值表达式数值表达式。2 2、接收参数命令、接收参数命令 格式:格式:PARAMETERS PARAMETERS 说明:参数表中的参数也称说明:参数表中的参数也称形参形参 形参与实参的数量应相等、类型要一致形参与实参的数量应相等、类型要一致例1:利用带参调用方法计算梯形面积。
27、主程序 *MAIN_5.PRG SET TALK OFF INPUT“输入梯形上底边长:”TO A INPUT“输入梯形下底边长:”TO B INPUT“输入梯形的高:”TO H STORE 0 TO S DO SUB_5.PRG WITH A+B,H,S?“所求梯形面积为:”,S SET TALK ON RETURN 过程 *SUB_5.PRG PARAMETERS P,Q,T T=P*Q/2 RETURN7.7 7.7 数组变量的应用数组变量的应用7.7.1 7.7.1 数组变量的建立数组变量的建立1、数组:一组变量的集合。2、格式:DIMENSION/DECLARE(,),(,)说明:数
28、组一旦被定义之后,该数组的每个元素的初值为逻辑假值。例:DIMENSION AB(3),C2,37.7.2 7.7.2 数组变量的赋值数组变量的赋值三种赋值方式:STORE、=、命令文件例1:给二维数组X和一维数组Y赋值。DIMENSION X(3,4),Y(3)STORE 5 TO XY(1)=325Y(2)=”ABC”Y(3)=.T.例2:用命令文件为数组赋值。SET TALK OFFCLEARDIMENSION A10FOR I=1 TO 10 AI=I?AINEXTSET TALK ONRETURN7.7.3 7.7.3 数组的重新定义数组的重新定义1数组的重定义:数组在定义好之后,可
29、以通过DECLARE或DIMENSION命令对数组的尺寸和维数进行改变。2新旧数组之间数据的复制原则:1)将数组全部看成是一维数组,从序号1开始顺序地复制到对应的新数组中;2)如果新数组的元素个数多于原数组的元素个数,新增加的数组元素取值为逻辑假值;3)如果新数组的元素个数少于原数组的元素个数,只取原数组中的前若干个值。3数组下标的排列规则:数组从下标1开始排列,二维数组的元素排列是先按行排,再按列排。例:CLEARSET TALK OFFDIMENSION B2,3 DIMENSION B8FOR I=1 TO 2 FOR I=1 TO 8 FOR J=1 TO 3?”B(”+STR(I,1
30、)+”)=”,BI BI,J=(I-1)*3+J NEXT NEXT SET TALK ONNEXT RETURN7.7.4 7.7.4 数组与数据表之间的数据交换数组与数据表之间的数据交换1字段变量给数组赋值格式:SCATTER FIELDS/FIELDS LIKE/FIELDS EXCEPT MEMO TO BLANK/MEMVAR/MEMVAR BLANK示例:USE 学生表 GO 2 SCATTER TO A MEMO SCATTER FIELDS 姓名,性别,班级 TO B GO 5 SCATTER MEMO MEMVAR DISP MEMORY2数组对字段变量的对应替换格式:GATHER FROM/MEMVAR FIELDS/FIELDS LIKE/FIELDS EXCEPT MEMO示例:USE 学生表 APPEND BLANK GATHER FROM B FIELDS 姓名,性别,班级 DISP APPEND BLANK GATHER MEMVAR DISP格式1:CLEAR ALL格式2:CLEAR MEMEORY格式3:RELEASE ALL LIKE/EXCEPT 7.7.5 7.7.5 数组的释放数组的释放