资源描述
1第第6章章FoxPro 程序设计程序设计2程序文件的建立与编辑程序文件的建立与编辑程序文件的建立程序文件的建立命令方式:命令方式:格式:格式:MODIFY COMMAND MODIFY COMMAND 功能:建立、编辑以功能:建立、编辑以 为名为名的程序文件。的程序文件。3程序文件的建立与编辑程序文件的建立与编辑程序文件的建立程序文件的建立菜单方式:菜单方式:文件文件新建新建程序程序新建文件新建文件 输入程输入程序序关闭关闭文件文件打开打开选择程序文件选择程序文件确定确定4使用使用MODIFY COMMANDMODIFY COMMAND命令时注意:命令时注意:(1)键入该命令后键入该命令后,系统首先在指定的目录系统首先在指定的目录中查找该文件,如果文件不存在中查找该文件,如果文件不存在,就建就建立之立之,否则对已经存在的文件进行编辑。否则对已经存在的文件进行编辑。(2)输入一行命令结束后,按回车键。输入一行命令结束后,按回车键。5使用使用MODIFY COMMANDMODIFY COMMAND命令时注意:命令时注意:(3)一条命令可以占一行,也可以分为多行,一条命令可以占一行,也可以分为多行,但除最后一行按回车键外,每行结尾处要但除最后一行按回车键外,每行结尾处要有分号;,表明下行继续。有分号;,表明下行继续。(4)输入完程序后,按输入完程序后,按Ctrl+WCtrl+W或或Ctrl+EndCtrl+End存盘存盘退出,或单击退出,或单击“关闭关闭”按钮退出。若按按钮退出。若按Ctrl+QCtrl+Q或或ESCESC则不存盘,输入的程序作废。则不存盘,输入的程序作废。6程序文件的修改程序文件的修改程序文件的增删或修改,仍然可以使用程序文件的增删或修改,仍然可以使用MODIFY COMMAND命令来完成。计算机收到此命令来完成。计算机收到此命令后命令后,系统首先在指定的目录中查找该文件,如系统首先在指定的目录中查找该文件,如果文件存在果文件存在,就为此文件建立一个备份文件就为此文件建立一个备份文件,然后将然后将此文件调入内存,在屏幕上显示出来,供用户修改。此文件调入内存,在屏幕上显示出来,供用户修改。修改时,可使用剪贴板命令修改时,可使用剪贴板命令Ctrl+X、Ctrl+C、Ctrl+V。修改完后按。修改完后按Ctrl+WCtrl+W或或Ctrl+EndCtrl+End存盘,按存盘,按Ctrl+Q不存盘,系统回到命令状态。不存盘,系统回到命令状态。7程序文件的运行程序文件的运行命令方式:命令方式:格式:格式:DO 功能:执行指定的程序文件。功能:执行指定的程序文件。说明:说明:文件名不带扩展名,系统默认为文件名不带扩展名,系统默认为PRGPRG。菜单方式:菜单方式:程序程序运行运行8程序的基本结构程序的基本结构1.顺序结构顺序结构顺序结构是把命令顺序结构是把命令(语句语句)按一定的顺序,按一定的顺序,一个命令一个命令的排列下去,执行时按先一个命令一个命令的排列下去,执行时按先后顺序,一条一条的依次执行,顺序结构是后顺序,一条一条的依次执行,顺序结构是程序设计中最基本的、最常用的结构。程序设计中最基本的、最常用的结构。9程序的基本结构程序的基本结构2.分支结构分支结构分支结构程序是根据给定条件的不同分支结构程序是根据给定条件的不同逻辑条件,转向执行不同的程序方向,逻辑条件,转向执行不同的程序方向,这些不同的转向就构成了分支结构。这些不同的转向就构成了分支结构。10程序的基本结构程序的基本结构3.3.循环结构循环结构顺序、分支结构在程序执行时,每个语句只执顺序、分支结构在程序执行时,每个语句只执行一次。循环结构则能够使某些语句程序段重行一次。循环结构则能够使某些语句程序段重复执行若干次。复执行若干次。11程序的基本结构程序的基本结构4.4.过程结构过程结构程序设计时,常常有些运算或处理程序是相同的,程序设计时,常常有些运算或处理程序是相同的,只是每次以不同的参数参与程序的执行。在一程序中只是每次以不同的参数参与程序的执行。在一程序中如果重复写入相同的程序段,将是一种时间和空间上如果重复写入相同的程序段,将是一种时间和空间上的浪费。同样,对于常见问题的实用程序,也不应由的浪费。同样,对于常见问题的实用程序,也不应由每个使用者自己来设计。将上述重复出现的程序段独每个使用者自己来设计。将上述重复出现的程序段独立出来,需要时直接调用它,这种程序称为过程,将立出来,需要时直接调用它,这种程序称为过程,将调用过程的程序称为主程序。调用过程的程序称为主程序。12顺序结构程序设计顺序结构程序设计顺序结构是把命令顺序结构是把命令(语句语句)按一定的顺序,按一定的顺序,一个命令一个命令的排列下去,执行时按先一个命令一个命令的排列下去,执行时按先后顺序,一条一条的依次执行,顺序结构是后顺序,一条一条的依次执行,顺序结构是程序设计中最基本的、最常用的结构。程序设计中最基本的、最常用的结构。13顺序结构程序设计顺序结构程序设计注释语句注释语句格式格式1 1:NOTE NOTE 格式格式2 2:*只能放在一行的开始只能放在一行的开始.14顺序结构程序设计顺序结构程序设计注释语句注释语句格式格式3 3:&可以放在一行的任意位置。可以放在一行的任意位置。15顺序结构程序设计顺序结构程序设计状态设置命令状态设置命令1.SET TALK ON/OFF会话状态开关会话状态开关,ON开开 OFF关关16顺序结构程序设计顺序结构程序设计状态设置命令状态设置命令2.CLEAR清屏幕清屏幕17键盘输入语句键盘输入语句 1.INPUT命令命令 格式:格式:INPUT INPUT TO TO 功能:执行此语句时,暂停程序的运行,等待用功能:执行此语句时,暂停程序的运行,等待用户从键盘输入一个表达式,并把表达式的值存入户从键盘输入一个表达式,并把表达式的值存入内存变量中。内存变量中。说说明明:命命令令中中的的 可可以以是是一一个个用用于于文文字字说说明明的的字字符符型型内内存存变变量量或或字字符符串串,若若为为字字符符串串时时,必必须须用用定定界界符符括括起起来来。如如果果使使用用该该选选项项,则原样显示提示信息,如缺省,就没有提示。则原样显示提示信息,如缺省,就没有提示。18键盘输入语句键盘输入语句 1.INPUT命令命令 说明:说明:输入的表达式值的类型决定了内存变量的输入的表达式值的类型决定了内存变量的类型。表达式可以是数值型、字符型、逻辑型、类型。表达式可以是数值型、字符型、逻辑型、日期型表达式。日期型表达式。输入数据时要用特定的符号以区分数据的输入数据时要用特定的符号以区分数据的类型。字符串用双引号、单引号、或方括号括类型。字符串用双引号、单引号、或方括号括起来;日期型数据需用花括号起来;日期型数据需用花括号 括起来或使括起来或使用用CTOD()CTOD()函数;逻辑型数据需用园点括起来。函数;逻辑型数据需用园点括起来。19键盘键盘输入语句输入语句 2.ACCEPT命令命令 格式:格式:ACCEPT ACCEPT TO TO 功能:执行此语句时,暂停程序的运行,等待功能:执行此语句时,暂停程序的运行,等待用户从键盘输入一串字符并赋给内存变量。用户从键盘输入一串字符并赋给内存变量。20键盘键盘输入语句输入语句2.ACCEPT命令命令说明:说明:ACCEPTACCEPT只接受字符串数据,且输入的字符串只接受字符串数据,且输入的字符串不需要加任何定界符(如单引号、双引号、方括不需要加任何定界符(如单引号、双引号、方括号)而自动作为字符串常量,字符串长度最长号)而自动作为字符串常量,字符串长度最长254254个字符个字符。含义同上。含义同上。用户输入时,也可以用回车键作为输入的字用户输入时,也可以用回车键作为输入的字符,则此时内存变量中的值为空串。符,则此时内存变量中的值为空串。21键盘键盘输入语句输入语句 3.程序暂停语句程序暂停语句 WAIT 格式:格式:WAIT TO WINDOW NOWAIT TIMEOUT 功功能能:暂暂停停程程序序的的执执行行,等等待待用用户户从从键键盘盘按按下下任一键任一键后再继续执行。后再继续执行。22键盘键盘输入语句输入语句3.程序暂停语句程序暂停语句 WAITWAIT说明:说明:命命令令中中的的 可可以以是是一一个个用用于于文文字字说说明明的的字字符符型型内内存存变变量量或或字字符符串串,若若为为字字符符串串时时,必必须须用用定定界界符符括括起起来来。如如果果使使用用该该选选项项,则则原原样样显显示示提提示示信信息息,如如缺缺省省,系系统统自自动动显显示示“Press Press any any key key to to continuecontinue”。23键盘键盘输入语句输入语句3.程序暂停语句程序暂停语句 WAITWAIT说明:说明:如如选选TO TO ,则则按按下下的的一一键键做做为为一一个个字字符符送送内内存存变变量量。当当按按下下的的是是回回车车键键或或非非打打印印字字符符时时,内内存存变变量量的的内内容容是是一一个个空空字字符符。如如缺缺省省,通通常常只只是是用用于暂停程序的执行,以便查看程序运行的情况。于暂停程序的执行,以便查看程序运行的情况。243.程序暂停语句程序暂停语句 WAITWAITWINDOW:在在执执行行时时,FoxProFoxPro在在主主窗窗口口的的左左上上角角开开辟辟一一个个提提示示信信息息窗窗口口,并并把把提提示示信信息息的的内内容容在在此此窗窗口口显显示示出出来来,这这样样不不会会破破坏原来的屏幕。坏原来的屏幕。键盘键盘输入语句输入语句253.程序暂停语句程序暂停语句 WAITWAITNOWAIT:必必须须与与WINDOWWINDOW可可选选项项连连用用才才有有效效。NOWAITNOWAIT表表示示在在执执行行WAITWAIT时时不不暂暂停停程程序序的的执执行行,仅仅在在FoxProFoxPro主主窗窗口口的的左左上上角角提提示示信信息息窗窗口口中中把把显显示提示信息。示提示信息。TIMEOUT:用来限定WAIT命令暂停程序执行的时间。键盘键盘输入语句输入语句26分支结构分支结构是计算机科学用来描述自然界和是计算机科学用来描述自然界和社会生活中分支现象的重要手段。社会生活中分支现象的重要手段。其特点是:其特点是:根据所给定的条件为真(即条件成立)与否,根据所给定的条件为真(即条件成立)与否,而决定执行某一分支的相应操作,并且任何情而决定执行某一分支的相应操作,并且任何情况下况下“必择其一必择其一”。分支结构程序设计分支结构程序设计27条件选择语句条件选择语句1.单条件选择语句单条件选择语句IF格式为:格式为:IF条件条件 ELSE ENDIF T TF F条件语句序列语句序列1 1语句序列语句序列2 2IF语句的下一句语句的下一句分支结构程序设计分支结构程序设计28条件选择语句条件选择语句 说明:说明:(1)如如果果条条件件为为真真(.T.),就就执执行行语语句句序序列列1。如如果果条条件件为为假假(.F.),若若有有ELSE子子句句,则则程程序序会会执执行行ELSE部部分分的的语语句句序序列列2;若若无无ELSE子子句句,则则程程序序会会直直接接转转到到ENDIF之之后后的语句继续执行。的语句继续执行。分支结构程序设计分支结构程序设计29条件选择语句条件选择语句 说明:说明:(2)语语句句序序列列1和和语语句句序序列列2中中还还可可以以包包含含IF语语句句,称称为为IF语语句句的的嵌嵌套套。要要注注意意,每每次嵌套中的次嵌套中的IF语句必须与语句必须与ENDIF成对出现。成对出现。分支结构程序设计分支结构程序设计30 如果在如果在IF语句的语句的语句序列语句序列1或或语句语句序列序列2中又包含一个中又包含一个IF语句,则称为语句,则称为IF语句的嵌套。语句的嵌套。IF语句的嵌套语句的嵌套分支结构程序设计分支结构程序设计31 INPUT INPUT 输入第一个数输入第一个数:TO X:TO X INPUT INPUT 输入第二个数输入第二个数:TO Y:TO Y IF XY IF XY?Y,X?Y,X ELSE ELSE?X,Y?X,Y ENDIF ENDIF 例例:从键盘上输入两个数,然后按从小到大的从键盘上输入两个数,然后按从小到大的顺序输出。顺序输出。32例如:使用例如:使用IF ENDIF 语句计算语句计算Y的值的值,X由键盘输入由键盘输入 X X0 Y=2X-1 0=X=1033INPUT “X=?”TO XIF X0 Y=XELSE IF X10 Y=2*X-1 ELSE Y=3*X+1 ENDIFENDIF?”Y=“,Y 34多分支条件选择语句多分支条件选择语句DO CASEDO CASE 多多分分支支选选择择结结构构的的特特点点是是:从从多多个个分分支支中中,选选择择第第一一个个条条件件为为真真的的路路线线作作为为执行的路线。执行的路线。分支结构程序设计分支结构程序设计35DO CASEDO CASE语句的语法格式为:语句的语法格式为:DO CASE CASE条件条件1 语句序列语句序列1 CASE条件条件2 语句序列语句序列2 .OTHERWISE 其他语句序列其他语句序列 ENDCASE 36 说明:说明:(1)在在执执行行DO CASE语语句句时时,依依次次判判断断各各是是否否满满足足。若若的的值值为为真真(.T.),就就执执行行相相应应的的,直直到到遇遇到到下下一一个个CASE、OTHERWISE或或ENDCASE。37 说明:说明:(2)相相应应的的执执行行后后不不再再判判断断其其他他,直直接接转转向向ENDCASE后后面面的的语语句句。因因此此,在在一一个个DO CASE结构中,最多只能执行一个结构中,最多只能执行一个CASE子句子句。38 说明:说明:(3)如如 果果 没没 有有 一一 个个 条条 件件 为为 真真,就就 执执 行行OTHERWISE后后面面的的,直直到到ENDCASE。如如果果没没有有OTHERWISE,则则不不作作任任何操作就转向何操作就转向ENDCASE后面的语句。后面的语句。39例如:例如:INPUT X=?TO XDO CASECASE X10?OK1CASE X20?OK2 OTHERWISE?OK3 ENDCASE运行时输入:运行时输入:23输出结果为:输出结果为:OK1运行时输入:运行时输入:25输出结果为:输出结果为:OK2运行时输入:运行时输入:5输出结果为:输出结果为:OK340 在在Visual FoxPro中,提供了三种循环语句:中,提供了三种循环语句:DO WHILE.ENDDO(当型循环)(当型循环)FOR.ENDFOR(步长型循环步长型循环)SCAN.ENDSCAN(表扫描型循环)(表扫描型循环)。无论何种类型的循环结构,其特点都是:循环体无论何种类型的循环结构,其特点都是:循环体执行与否及其执行次数多少都必须视其循环类型与条执行与否及其执行次数多少都必须视其循环类型与条件而定,且必须确保循环体的重复执行能在适当的时件而定,且必须确保循环体的重复执行能在适当的时候得以终止(即非死循环)。候得以终止(即非死循环)。循环结构程序设计循环结构程序设计41当型循环语句当型循环语句DO WHILEDO WHILE 如如果果需需要要在在某某一一条条件件满满足足时时反反复复执执行行某某一一操操作作,可以使用当型循环(可以使用当型循环(DO WHILE)结构)结构。当型循环的语法格式为:当型循环的语法格式为:DO WHILE条件条件 EXIT LOOP ENDDO 条件语句序列语句序列T TF FENDDOENDDO下一句下一句42 说明:说明:(1)如如 果果 的的 值值 为为.T.,则则 执执 行行 DO WHILE和和ENDDO之之间间的的循循环环体体;如如果果的的值值为为.F.,则则结结束束循循环环,转转去去执执行行ENDDO之之后后的的命命令。令。每每执执行行一一遍遍循循环环体体,程程序序自自动动返返回回到到DO WHILE语句,判断一次语句,判断一次条件条件。(2)EXIT是无条件结束循环命令。是无条件结束循环命令。(3)LOOP是无条件循环命令。是无条件循环命令。当型循环语句当型循环语句DO WHILEDO WHILE 43 当当型型循循环环结结构构的的特特点点是是:当当所所给给定定循循环环条条件件为为真真时时,就就反反复复执执行行其其循循环环体体;当当该该条条件件为为假假时时,终终止止执执行行其其循循环环体体,执执行行其其后后继继命命令令。循环体执行次数最少可为零。循环体执行次数最少可为零。当型循环语句当型循环语句DO WHILEDO WHILE 44程序设计中常用的三种循环结构:程序设计中常用的三种循环结构:DO WHILE .T.绝对循环形式,绝对循环形式,一般使用一般使用EXIT结束循环结束循环DO WHILE .NOT.EOF()访问数据库记录的循环形式访问数据库记录的循环形式 循环体内一定要有循环体内一定要有SKIPDO WHILE N=100 循环次数固定循环次数固定(已知已知)的循环形式的循环形式 当型循环语句当型循环语句DO WHILEDO WHILE 45 SET TALK OFF STORE 0 TO S STORE 1 TO N DO WHILE N=100 S=S+N N=N+1 ENDDO?”S=“,S SET TALK ON例例1:1:编程计算编程计算S=1+2+3+S=1+2+3+100+10046 S=0 FOR X=2 TO 10 STEP 2 P=1 FOR I=1 TO X P=P*I ENDFOR?X,!=,P S=S+P ENDFOR?S=,S 例例:求求2!+4!+6!+2!+4!+6!+10!+10!S=0X=2DO WHILE X=10 P=1 I=1 DO WHILE I=X P=P*I I=I+1 ENDDO?X,!=,P S=S+P X=X+2ENDDO?S=,S47 USE XS CLEAR DO WHILE .T.ACCEPT 请输入查询的姓名:请输入查询的姓名:TO XM1 LOCATE FOR XM=XM1 IF EOF()()WAIT 查无此人!按任意键继续查无此人!按任意键继续 ELSE DISPLAY ENDIF例例2:2:对对XS.DBFXS.DBF表文件,按给出的姓名,查询人表文件,按给出的姓名,查询人员的情况。员的情况。48 WAIT 继续查询吗?(继续查询吗?(Y/N)TO YN IF UPPER(YN)Y EXIT ENDIF ENDDO USE 例例2 2 对对XS.DBFXS.DBF表文件表文件,按给出的姓名按给出的姓名,查询人员的查询人员的情况。情况。49SET TALK OFFUSE XSSTORE 0 TO X1,X2,X3DO WHILE .NOT.EOF()DO CASE CASE SJK60 X1=X1+1 CASE SJK=90 X3=X3+1 例例3:3:统计表文件统计表文件CJ.DBFCJ.DBF中,数据库成绩在中,数据库成绩在6060以下、以下、60-8960-89、9090以上的各有多少人。以上的各有多少人。50 ENDCASE SKIP ENDDO USE?“60分以下的有分以下的有+STR(X1,3)+人人?“60-89之间的有之间的有+STR(X2,3)+人人?“90分以上的有分以上的有+STR(X3,3)+人人SET TALK ON例例3:3:统计表文件统计表文件CJ.DBFCJ.DBF中,数据库成绩在中,数据库成绩在6060以下、以下、60-8960-89、9090以上的各有多少人。以上的各有多少人。51步长型循环语句步长型循环语句FOR FOR 步步长长型型循循环环可可以以根根据据给给定定的的次次数数重重复复执执行行循循环环体体。其语法结构为:其语法结构为:FOR=TO STEP LOOP EXIT ENDFOR|NEXT 52 说明:说明:(1)EXIT跳出跳出FOR.ENDFOR循环。循环。(2)LOOP将控制直接转回到将控制直接转回到FOR子句。子句。(3)在使用循环嵌套时要注意:内外循环的循在使用循环嵌套时要注意:内外循环的循环变量不能同名,并且内外循环不能交叉。环变量不能同名,并且内外循环不能交叉。步长型循环语句步长型循环语句FOR FOR 53 开开始始时时首首先先把把、和和读读入入,然然后后的的值值与与比比较较,如如果果的的值值在在与与范范围围内内,则则执执行行FOR与与ENDFOR之之间间的的命命令令,然然后后按按增增加加或或减减小小,重重新新比比较较,直直到到的的值值不不在在与与范范围围内内,结结束束循循环环,转转去去执执行行ENDFOR后面的第一条命令。后面的第一条命令。步长型循环步长型循环语句语句的执行过程的执行过程54 S=0 P=1 FOR X=1 TO 100 P=P*X S=S+P ENDFOR?S=,S 例例:求求1!+2!+3!+1!+2!+3!+10!+10!S=0STORE 0 TO X,PDO WHILE X100P=P*XS=S+PX=X+1ENDDO?”S=“,S55 1 1*1=1*1=1 2*1=2 2*2=4 2*1=2 2*2=4 3*1=3 3*2=6 3*3=9 3*1=3 3*2=6 3*3=9 4*1=4 4*2=8 4*3=12 4*4=16 4*1=4 4*2=8 4*3=12 4*4=16 9*1=9 9*2=18 9*3=27 9*1=9 9*2=18 9*3=27 9*9=81 9*9=81 程序如下:程序如下:例例:在屏幕上显示如下的九九乘法表在屏幕上显示如下的九九乘法表56 CLEAR FOR I=1 TO 9 FOR J=1 TO I P=I*J?STR(I,1)+“*+STR(J,1)+=+STR(P,2)+ENDFOR?ENDFOR 例例:在屏幕上显示如下的九九乘法表在屏幕上显示如下的九九乘法表57SCANSCANENDSCANENDSCAN语句语句格式:格式:SCAN FOR LOOP EXIT ENDSCAN功能:在当前数据库中对指定范围内且满足条功能:在当前数据库中对指定范围内且满足条件的记录执行语句序列中的语句。件的记录执行语句序列中的语句。58SCANSCANENDSCANENDSCAN语句语句 说明:说明:只有处在只有处在 内的记录才被扫描,省内的记录才被扫描,省略为略为ALLALL。选选FORFOR,则扫描范围内所有满足条则扫描范围内所有满足条件的记录。件的记录。选选LOOPLOOP时不执行其后至时不执行其后至ENDSCANENDSCAN的语句的语句序列而返回判别条件;选序列而返回判别条件;选EXITEXIT时跳出循环。时跳出循环。59USE CJUSE CJSCAN FOR ZF240SCAN FOR ZF240 DISPLAY XH,XM DISPLAY XH,XMENDSCANENDSCANUSEUSE例例:用用SCANSCAN.ENDSCAN.ENDSCAN语句编写程序用于语句编写程序用于输出输出CJ.DBFCJ.DBF文件中总分大于文件中总分大于240240分的学号和分的学号和姓名。姓名。USE CJUSE CJDO WHILE ZF240DO WHILE ZF240 DISPLAY XH,XM DISPLAY XH,XM SKIP SKIPENDDOENDDOUSEUSE60 过程是一段程序,由一个或多个语句构成,过程是一段程序,由一个或多个语句构成,最后以最后以RETURNRETURN结束。过程是过程文件的一部分,结束。过程是过程文件的一部分,可以把多个过程组合成为一个过程文件。可以把多个过程组合成为一个过程文件。过程文件即把多个过程组织在一个文件中过程文件即把多个过程组织在一个文件中,每每个过程指定一个过程名,使用过程文件可减少打个过程指定一个过程名,使用过程文件可减少打开文件的个数,同时也节省了磁盘空间。开文件的个数,同时也节省了磁盘空间。过程与过程文件过程与过程文件611.过程的结构过程的结构过程均以过程均以PROCEDUREPROCEDURE开始,以开始,以RETURNRETURN结束。结束。其格式为:其格式为:PROCEDURE PROCEDURE ENDPROCENDPROC说明说明:是一个命令序列是一个命令序列,是完成某是完成某个功能的程序段。个功能的程序段。过程与过程文件过程与过程文件622.2.过程调用语句过程调用语句格式:格式:DO DO 功能:执行指定的过程。功能:执行指定的过程。3.3.返回语句返回语句 格式:格式:RETURN TO MASTERRETURN TO MASTER功能:返回到调用程序中调用语句的下一个语功能:返回到调用程序中调用语句的下一个语句。句。TO MASTER TO MASTER 直接返回到主程序。直接返回到主程序。过程与过程文件过程与过程文件63过程文件的结构过程文件的结构 MODI COMM PROCEDURE RETURNENDPROC PROCEDURE RETURN ENDPROC PROCEDURE RETURN ENDPROC64说明:说明:建建立立和和编编辑辑一一个个过过程程文文件件与与编编制制其其它它程程序序文文件一样件一样,使用使用MODIFY COMMAND命令。命令。过过程程文文件件名名和和过过程程名名是是两两个个不不同同的的概概念念,它它们们的的关关系系是是整整体体与与局局部部的的关关系系。它它们们的的命命名名与与文文件件的的命命名名方方法法相相同同,只只是是过过程程文文件件名名有有扩扩展展名名.PRG,而过程名是不带扩展名的。,而过程名是不带扩展名的。过程文件的结构过程文件的结构65过程文件的使用过程文件的使用 使用一个过程文件时,必须要打开它,否则无法使用一个过程文件时,必须要打开它,否则无法调用其中的过程。打开过程文件的命令格式是:调用其中的过程。打开过程文件的命令格式是:SET PROCEDURE TO 过程文件打开后,若要调用其中的某一个过程时,过程文件打开后,若要调用其中的某一个过程时,可以用调用命令:可以用调用命令:DO 使用完过程文件后,需及时地关闭,使用完过程文件后,需及时地关闭,其命令格式是:其命令格式是:CLOSE PROCEDURE 或或 SET PROCEDURE TO66数组数组 在在FoxPro中中,把把名名字字相相同同、用用下下标标区区分分的的内内存存变变量量称称为为数数组组。在在一一个个数数组组中中可可以以存存放放多多个个数数据据,这这些些数数据据可可以以是是数数值值型型、字字符符型型、日日期期型型或或逻逻辑辑型型,这这些些数数据据可可以以单单独独存存取取,也也可可以以集集体体存存取取。在在FoxPro系系统统中可以使用一维数组和二维数组。中可以使用一维数组和二维数组。67数组数组 数组必须使用数组必须使用DECLARE或或DEMENSION或或PUBLIC或或LOCAL声明,声明,例如例如:DECLARE a(3)或或DEMENSION b(5,6)系统自动将数组初始化为逻辑型。系统自动将数组初始化为逻辑型。68例如:编程实现一组数例如:编程实现一组数从大到小从大到小排序排序cleardime x(8)for i=1 to 8 input 输入第输入第+STR(I,1)+个数个数 TO x(i)endfor69for i=1 TO 7 k=i for j=i+1 TO 8 if x(j)x(k)k=j endif endfor if k!=i t=x(i)x(i)=x(k)x(k)=tendifendfor for i=1 TO 8?x(i)endfor70变量声明变量声明 单个变量只要直接赋值,就会在赋值的同单个变量只要直接赋值,就会在赋值的同时由系统自动声明,并自动确定类型。时由系统自动声明,并自动确定类型。变量声明时可以没有类型,但在任一时刻变量声明时可以没有类型,但在任一时刻进行运算时必须有确定而且合适的类型。进行运算时必须有确定而且合适的类型。71变量的作用域变量的作用域 变变量量的的作作用用域域包包括括定定义义它它的的过过程程以以及及该该过过程程所所调调用用的的子子过过程程范范围围。在在Visual FoxPro中中,还还 可可 以以 使使 用用 LOCAL、PRIVATE和和PUBLIC命令强制规定变量的作用范围。命令强制规定变量的作用范围。72变量种类变量种类 全局变量全局变量:在:在Foxpro的运行期间都存在,的运行期间都存在,对任何程序都可见,都可以使用。用对任何程序都可见,都可以使用。用PUBLIC命令进行声明。命令进行声明。73变量种类变量种类 私有变量:私有变量:在程序及其子程序中可见,在程序及其子程序中可见,在上级程序中不可见,用在上级程序中不可见,用PRIVATE命命令进行声明。令进行声明。74变量种类变量种类 局部变量:局部变量:仅在声明的程序中可见,仅在声明的程序中可见,在上级程序和下级程序中都不可见,在上级程序和下级程序中都不可见,用用LOCAL命令进行声明。命令进行声明。75在过程调用中要定义好内存变量的属性,搞清主在过程调用中要定义好内存变量的属性,搞清主程序与过程中各变量的关系,以便准确地传递各参程序与过程中各变量的关系,以便准确地传递各参数值。数值。1.1.过程中出现的内存变量若未经定义,则有两种过程中出现的内存变量若未经定义,则有两种可能:可能:主程序中没有同名变量,那么返回主程序时,主程序中没有同名变量,那么返回主程序时,该变量被释放。该变量被释放。主程序中有同名变量,那么这两个同名变量主程序中有同名变量,那么这两个同名变量实质上是一个变量,返回主程序时,其值被带回主实质上是一个变量,返回主程序时,其值被带回主程序。程序。76在过程调用中要定义好内存变量的属性,搞清在过程调用中要定义好内存变量的属性,搞清主程序与过程中各变量的关系,以便准确地传递主程序与过程中各变量的关系,以便准确地传递各参数值。各参数值。2.2.若在过程中出现的内存变量被定义为全局变若在过程中出现的内存变量被定义为全局变量,则该变量在程序执行期间和执行终止后始终量,则该变量在程序执行期间和执行终止后始终有效。有效。77在过程调用中要定义好内存变量的属性,搞清主在过程调用中要定义好内存变量的属性,搞清主程序与过程中各变量的关系,以便准确地传递各参程序与过程中各变量的关系,以便准确地传递各参数值。数值。3.3.若在过程中出现的内存变量被定义为局部变量,若在过程中出现的内存变量被定义为局部变量,那么它与主程序中的同名变量毫无关系。过程执行那么它与主程序中的同名变量毫无关系。过程执行期间主程序中的同名变量被隐蔽起来,以便不受影期间主程序中的同名变量被隐蔽起来,以便不受影响。返回程序时,过程中的变量被释放,而主程序响。返回程序时,过程中的变量被释放,而主程序中的同名变量保持调用过程以前的值不变中的同名变量保持调用过程以前的值不变。78CLEARINPUT 输入数据的个数:输入数据的个数:TO NDIMENSION X(N)FOR I=1 TO N INPUT 输入第输入第+STR(I,2)+个数:个数:TO X(I)ENDFOR例:从键盘上输入例:从键盘上输入N N个数个数,找出其中最大的数找出其中最大的数79MAX=X(1)FOR I=2 TO N IF X(I)MAX MAX=X(I)ENDIFENDFOR?“这这”+STR(N,2)+“个数中最大的数是个数中最大的数是:”,MAX例:从键盘上输入例:从键盘上输入N N个数个数,找出其中最大的数找出其中最大的数80MAIN.PRGMAIN.PRGPUBLIC X1,X2PUBLIC X1,X2LOCAL X3LOCAL X3X1=3X1=3X2=10X2=10STORE F TO X3STORE F TO X3DO SUBDO SUB?X1=,X1?X1=,X1?X2=,X2?X2=,X2?X3=,X3?X3=,X3SUB.PRGSUB.PRGPRIV X1PRIV X1X1=100X1=100X1=X1+1X1=X1+1X2=X2+1X2=X2+1?”X1=X1=“,X1,X1?”X2=X2=“,X2,X2RETURNRETURN执行命令执行命令:DO MAIN:DO MAIN运行结果运行结果:X1=101 X2=11 X1=101 X2=11 X1=3 X2=11 X3=FX1=3 X2=11 X3=F例:写出下列程序的运行结果例:写出下列程序的运行结果
展开阅读全文