单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,VFP程序设计基础,VFP程序设计基础,1,要 点,Visual FoxPro的工作方式,程序文件的建立与编辑,程序的基本结构,分支结构,循环结构,要 点 Visual FoxPro的工作方式,2,Visual FoxPro的工作方式,Visual FoxPro系统提供有三种工作方式:即单命令方式、菜单方式及程序文件方式。,1.单命令方式,Visual FoxPro的工作方式 Vis,3,2.菜单方式,2.菜单方式,4,3.程序文件方式,程序文件(简称程序)也叫做命令文件。运用程序文件方式进行数据库管理,是通过程序文件编辑工具,将对数据库资源进行操作管理的命令和对系统环境进行设置的命令,集中在一个以(,.PRG,)为扩展名的命令文件中,然后再通过菜单方式或命令方式运行该命令文件。所谓命令方式,即通过程序文件中的命令完成不同的操作。,程序:,是多条命令按一定规则组织成的一个有机的序列,3.程序文件方式程序: 是多条命令按一定规则组织成的一个有机,5,注释语句,NOTE,*,&,注释整一行,NOTE后至少有一个空格,可以注释在某条语句之后,注释语句注释整一行,NOTE后至少有一个空格可以注释在某条语,6,对话开关语句,【格式】,SET TALK OFF|ON,clear,&清屏,set talk off,&关闭对话显示,open data student,&打开数据库,use sc,&打开SC表(学号,课程号,成绩),list,sum to array a,&求和,?总成绩:,a,&输出,set talk on,&开启对话显示,close data,对话开关语句clear &清屏,7,VFP,源程序,是用VFP命令或程序中专用语句编写的文本文件,其扩展名是,PRG,。,VFP专用程序编辑器,建立源程序文件,方法一:,“文件”菜单项“新建”选择“程序”“新建文件”。,方法二:,使用常用工具栏的“新建”按钮。,VFP源程序是用VFP命令或程序中专用语句编写的文本,8,说明1:,此方法可以,建立,新程序文件,又可,修改,已有的程序文件。,方法三:,在命令窗口中执行命令:,Modify Command,说明2:,文件的扩展名可缺省,系统默认扩展名为,.PRG,。,说明1:此方法可以建立新程序文件,又可修改已有的程序文件。方,9,方法四:,在项目管理器中,进入“代码”选项卡,选择“程序”,单击“新建”。,说明3:,一个命令行中只能写一条命令,若一行写不下,需使用分行符,“,;,”,。,方法四:在项目管理器中,进入“代码”选项卡,选择“程序”,单,10,保存程序文件,方法一:,单击“文件”菜单项“保存”。,方法二:,单击“常用”工具栏里的“保存”按钮。,方法三:,按 Ctrl+W 。,方法四:,关闭程序编辑器,系统提示是否保存文件。,保存程序文件方法一:单击“文件”菜单项“保存”。方法二:,11,方法一,:,“文件”菜单项“打开”“文件类型”为“程序”选择文件“确定”,方法二:,单击“常用”工具栏里的“打开”按钮。,方法三:,在命令窗口中执行命令:,Modify Command,|,?,打开程序文件,方法一:“文件”菜单项“打开”“文件类型”为“程序”选,12,在VFP中,可以执行源程序、编译程序、应用程序和可执行程序种程序文件。,(1)源程序(PRG):,源程序是文本文件,可以对其内容进行修改。只要有源程序文件,就可以生成其他3种程序文件。,执行程序就是按照程序的内部控制结构执行文件中的相关语句序列。,程序文件的类型,在VFP中,可以执行源程序、编译程序、应用程序和可执,13,(2)编译程序(FXP):,每个源程序文件都有对应的编译程序文件,执行编译程序比执行源程序的速度快。,(3)应用程序(APP):,由多个文件(包括程序、表单和菜单等)连接成一个应用程序文件。,注意:,以上三,种文件都是在VFP环境下运行。,(2)编译程序(FXP):每个源程序文件都有对应的编译程序文,14,(4)可执行程序(EXE):,将多个文件(包括程序、表单和菜单等)连接成一个可执行程序文件,此种文件可以,脱离,VFP环境运行。,编译程序,当执行一个源程序时,系统自动将其编译为编译程序(FXP)。在VFP中允许只编译而不执行程序。,(4)可执行程序(EXE):将多个文件(包括程序、表单和菜单,15,方法一:,在程序编辑器中,单击“程序”菜单项“编译”。,方法二:,单击“程序”菜单项“编译”选择“文件类型”为“程序”选择程序文件“编译”,编译方法为:,方法一:在程序编辑器中,单击“程序”菜单项“编译”。方法二,16,执行程序,方法二:,“程序”菜单“运行”选择“文件类型”为“程序”选择或输入程序文件名“运行”。,方法三,:,在程序或命令窗口中执行:,Do,说明:,当源程序(PRG)和编译程序(FXP)文件同时存在时,系统将执行距当前时间最近的程序文件。,方法一,:,在程序编辑器中,,“程序”菜单“执行”或“运行”常用工具,执行程序 方法二:“程序”菜单“运行”选择“文件类型”为,17,输入字符串语句,语句格式:,Accept,To,“字符表达式”:,作为执行到此语句时的提示信息。若无此项,则不输出任何信息。,内存变量:,用来接收输入的字符串。若不输入任何字符,则将,空字符,赋值给内存变量。,例:,Accept “请输入学号:” To XH,? ”输入的学号是:”+XH,输入字符串语句语句格式:“字符表达式”:作为执行到此语句时的,18,等待语句,语句格式:,Wait, To ,Window At ,Nowait,Clear|NoclearTimeout,“字符表达式”:,提示信息。若无此项,则输出任何信息。,To 内存变量:,用来接收输入的字符。若不输入任何字符,则将,空字符,赋值给内存变量。,等待语句语句格式:“字符表达式”:提示信息。若无此项,则输出,19,说明:,允许输入任何类型的表达式。Input输入字符串时必须加上定界符。,可以输入字符型、数值型、逻辑型、日期型和日期时间型等类型数据,而且可以是常量、变量、函数或表达式等形式,按回车键结束输入,系统将输入的数据赋值给。,输入表达式语句,语句格式:,Input,To,例:,N=2,Input 请输入数据: To M,? M,说明:允许输入任何类型的表达式。Input输入字符串时必须加,20,ACCEPT,命令只能,接受字符型数据,,不需定界符,输入完毕按回车键结束;,WAIT,命令只能输入,单个字符,,且不需定界符,输入完毕不需按回车键;,INPUT,命令可接受,数值型、字符型、逻辑型、日期型和日期时间型数据,,数据形式可以是常量、变量、函数和表达式,如果是字符串,需用定界符,输入完毕按回车键结束。,三条输入命令的异同,ACCEPT命令只能接受字符型数据,不需定界符,输入完毕按回,21,程序的基本结构,1顺序结构,顺序结构是在程序执行时,根据程序中语句的书写顺序依次执行的命令序列。Visual FoxPro系统中的大多数命令都可以作为顺序结构中的语句。,2分支结构,分支结构是在程序执行时,根据不同的条件,选择执行不同的程序语句,用来解决有选择、有转移的诸多问题。,程序的基本结构 1顺序结构,22,3循环结构,循环结构则能够使某些语句或程序段重复执行若干次。,4过程结构,在许多应用程序中,有一些程序段需要反复执行多次,这些程序段不在一个固定的位置上,而是分散在程序的许多位置上重复执行,可将其与嵌入它的程序分开,形成独立的程序序列,待使用时再调入程序中,以实现不同位置上的重复操作。,3循环结构,23,【例】编写程序,在STUDENT数据库的STUD表中查找并显示任意一个学生的情况。,OPEN DATABASE STUDENT,USE STUD,ACCEPT 请输入学生的姓名: TO XM,LOCA FOR 姓名=XM,?学生 +XM+的基本情况如下:,?学号:+学号,?姓别:+性别,?班级名: +班级名,?地址:+地址,?出生日期: +DTOC(出生日期),CLOSE DATABASE,【例】编写程序,在STUDENT数据库的STUD表中查找并显,24,【例】,写程序,P3.PRG:,从键盘输入两个任意整数,计算这两个数的和、差、积、商。,CLEAR,INPUT 请输入第一个数: TO A,INPUT 请输入第二个数: TO B,? 这两个数的和为: , A+B,? 这两个数的差为: , A-B,? 这两个数的积为: , A*B,? 这两个数的商为: , A/B,【例】写程序P3.PRG:从键盘输入两个任意整数,计算这两个,25,【例】从键盘输入两个任意正数,编程求以两数为边长的长方形面积。程序文件名为,PROG4.PRG,SET TALK OFF,CLEAR,INPUT 长方形一边的长为: TO A,INPUT 长方形另一边的长为: TO B,S=A*B,? 长方形的面积为: , S,SET TALK ON,RETURN,【例】从键盘输入两个任意正数,编程求以两数为边长的长方形面积,26,练习:,CLEAR,CREATE TABLE 学生成绩 (姓名 C(8),课程号 C(10),成绩 N(3),INSERT INTO 学生成绩 VALUES (张三,计算机,90),INSERT INTO 学生成绩 VALUES (李四,英语,80),SELECT * FROM 学生成绩,1,编写程序文件P1.PRG,运行程序,观察结果。要求程序完成以下步骤:,(1)用SQL语句中CREATE TABLE创建一个学生成绩表,其中包括如下字段:姓名C(8)、课程名C(10)、成绩N(3),(2)用SQL语句中INSERT INTO 添加如下数据,张三 计算机 90,李四 英语 80,(3)用SELECT查询语句查询所有记录。,练习: CLEAR 1 编写程序文件P1.PRG,运行,27,语句格式:,If, Then,Endif,开始,语句,序列,结束,条件,?,Y,N,分支结构,后面语句,单分支If语句,其中IF-ENDIF必须配对出现。,选择结构,语句格式:开始语句序列结束条件?YN分支结构后面语句单分支I,28,例:,Input 请输入一个N: To N,If N0,N=-N,Endif,? N的绝对值是:, N,例:,29,双分支If语句,语句格式:,If, Then,ELSE,Endif,开始,语句序列1,结束,条件?,Y,N,语句序列2,分支结构,后面语句,双分支If语句 语句格式:开始语句序列1结束条件?YN语句序,30,例,求两个数中较小值:,Input X= To X,Input Y= To Y,If X0),0 (X=0),1 (X0,Y=1,Else,If X=0,Y=0,Else,Y=-1,Endif,Endif,? Y,Input 请输入一个数: To X,33,控制程序是否继续执行,例 6.8:,? DATE() & 输出系统日期,CANCEL & 结束本程序的执行,? TIME() & 此语句得不到执行,(1),Cancel:,结束当前程序的运行。,控制程序是否继续执行 例 6.8:(1)Cancel:结束当,34,控制程序是否继续执行,(2),Suspend:,暂停程序的执行。暂停期间可以在命令窗口中执行交互命令。,(3),Resume:,继续执行Suspend暂停的程序,从Suspend语句的下一条继续。,例:X=1,Suspend,Y=2,? X+Y,控制程序是否继续执行 (2)Suspend:暂停程序的执行。,35,条件函数,函数格式:,Iif,(,),说明:,若条件成立,则表达式1的值作为函数值;否则,表达式2的值作为函数值。,例如:Input 输入一个数N: To N,M,=,Iif(N0,Y=1,Case X=0,Y=0,Otherwise,Y=-1,Endcase,? Y,1 (X0),0 (X=0),1 (X0),40,S=1+2+3+4+5+6,i=0,S=s+i,s,i,S=S+i,i=i+1,0,0,0,1,0,1,1,2,1,2,3,3,3,3,6,4,6,4,10,5,10,5,15,6,15,6,21,S=1+2+3+4+5+6i=0siS=S+ii=i+100,41,循环结构程序设计,循环结构,指在执行程序过程中,重复执行某程序段。,在循环体中,可以利用,Exit,语句提前结束循环,也可利用,Loop,语句提前结束本次循环。,重复执行的程序段称为,循环体,,重复执行的次数称为,循环次数,。,循环结构程序设计 循环结构指在执行程序过程中,重复执行某程序,42,Do While,(当型)循环语句,语句格式:,Do While,Enddo,开始,语句序列,结束,条件?,Y,N,循环前的语句,循环体后的语句,语句序列,Y,说明:Do While与Enddo必须,成对,使用。,Do While(当型)循环语句 语句格式:开始语句序列 结,43,例,求前100个自然数的和:,S=0,N=1,Do While N=100,S=S+N,N=N+1,Enddo,循环条件,循环体,S=1+2+3+4+100,例,求前100个自然数的和:循环条件循环体S=1+2+3+4,44,死循环,如果循环体中没有能执行到的、使条件趋于,不成立,的语句、结束循环或结束程序的语句,将永远执行不完循环体,即出现死循环。语句修改为:,Do While ,Loop, ,Exit, ,Enddo,死循环如果循环体中没有能执行到的、使条件趋于不成立的语句、结,45,Do While,(当型)循环语句,(2),Exit:,一旦执行到Exit语句,就结束整个循环,。,(1),Loop:,一旦执行到Loop语句,就提前结束本次循环。,例,,对键盘输入的每一个正数,输出其算术平方根;当输入的数小于或等于0时,结束程序。,Do While(当型)循环语句(2)Exit:一旦执行到E,46,开始,循环体前语句,循环体条件,Y,分支条件,Y,LOOP,N,分支结构下面的语句,N,循环体下面的语句,结束,无条件转向循环,语句格式,(,以当型循环为例,),DO WHILE ,IF ,LOOP,ENDIF,ENDDO,开始循环体前语句循环体条件Y分支条件YLOOPN分支结构下面,47,例,:,计算,1100,的奇数和。,说明:,int(N):,取整函数,此处用于判断,i,的奇偶性,思考:利用,mod(N1,N2),如何,判断奇偶性?,*Ex3.prg,store 0 to i, t,do while i100,i=i+1,if int(i/2)=i/2,loop,endif,t=t+i,enddo,? 1100奇数和为: , t,例: 计算1100的奇数和。说明:int(N): 取整函,48,开始,循环体前语句,循环体条件,Y,分支条件,N,EXIT,Y,分支结构下面的语句,N,循环体下面的语句,结束,无条件跳出循环,语句格式,(,以当型循环为例,),DO WHILE ,IF ,EXIT,ENDIF,ENDDO,开始循环体前语句循环体条件Y分支条件NEXITY分支结构下面,49,For,(步长型)循环语句,语句格式:,For,=,To, ,Step,Endfor,|,Next, ,说明2:,若步长缺省,默认值为1。,说明1:,初,值、终值和步长应为数值型表达式,For(步长型)循环语句语句格式:说明2:若步长缺省,默,50,例:求前100个自然数的和;,S=0,For N=1 To 100,S=S+N,Endfor,? 1+2+3+98+99+100=,S,例:求前100个自然数的和; S=0,51,Scan,(扫描)循环语句,语句格式:,Scan,For,While,Endscan,说明1:,Scan,和,Endscan,必须成对使用。此循环语句用于处理与数据表有关的循环问题,功能等效于:,Locate,ForWhile,Do While,Found(),Continue,Enddo,Scan(扫描)循环语句语句格式:说明1:Scan和Ends,52,结构嵌套,为实现复杂的功能,VFP允许相互嵌套。但不允许交叉嵌套,即一个结构必须完整地包含在另一个结构中。,例如:,For M=1 To 9,For N=M To 9,? Space(2),Str(M,1),*,?Str(N,1),=,Str(M*N,2),Endfor,?,Endfor,外层循环,内层循环,结构嵌套为实现复杂的功能,VFP允许相互嵌套。但不允许交叉嵌,53,CLEAR ALL,CLEAR,a=1,DO WHILE a=9,b=1,?&用于换行输出,DO WHILE b=a,? SPACE(2)+STR(a, 1)+ STR(b, 1)+=+ STR(a*b, 2),b=b+1,ENDDO,a=a+1,ENDDO,RETURN,CLEAR ALL,54,