第八章 程序设计基础1_第1页
第八章 程序设计基础1_第2页
第八章 程序设计基础1_第3页
第八章 程序设计基础1_第4页
第八章 程序设计基础1_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第八章 程序设计PRG的文件中,即为程序文件(又叫命令文件)。以Enter结束,书写不完时加上“;”号换行继续书写;行首加入 注释符“*”开头的注释语句,也可以 ,行尾添加以注释符“&”开头的注释,注明每条语句的功能及含义。 QUIT(退出程序回到Windows状态)、CANCEL(退出程序到VFP命令输入状态)、RETURN(退出程序到上一层调用程序)。2.程序文件的建立、编辑与执行 建立和编辑程序文件 【命令】MODIFY COMMAND 执行程序文件【命令】DO 三、程序中的常用命令 1.交互式输入命令 【命令】WAIT TOTIMEOUT 【命令】ACCEPT TO 【命令】INPUT

2、 提示信息 TO 输入字符型、逻辑型、日期型常量时,要加相应的定界符。 【例】在学生表中按姓名查找某学生的情况。use 学生accept “请输入查询姓名:” TO xm &输入姓名的值存人内存变量xm中 loca for姓名=xm disp &以上两个命令也可用disp for 姓名=xm 一句代替;wait “按任意键继续”? “查询完毕”cancel2.文本输出命令【命令】TEXT ENDTEXT 【例】显示提示信息。 SET TALK OFF CLEAR TEXT*欢迎使用VisualFoxPr06.0系统* ENDTEXT SET TALK ON CANCEL3.格式输入输出命令【命

3、令】 SAY GETFUNCTIONPICTURERANGE,VALID READ【功能】在屏幕的指定行列位置显示输入/输出提示信息,如输入则在GET显示处输入数据。【说明】.是指光标在屏幕窗口的位置。 . SAY 表输出,输出提示信息。此时无GET子句。.有GET子句时表输入,GET中的变量可以是字段变量或内存变量。如是字段变量,必须打开相应的表文件;如果是内存变量,必须先赋初值。.GET子句中的(GET变量)必须使用READ命令激活,也就是说,在多个带有GET子句的输入语句命令后,必须遇到一个READ命令才能激活GET变量,此时光标出现在GET变量显示处,可编辑、输入数据。 【例】编程求长

4、方形的面积。 CLEAR &清屏 X=0 &X为内存变量,赋初值 Y=0 1,5 SAY “计算长方形的面积”2,5 SAY “输入长方形的长:” GET X &第2行5列显示提示信息并等待输入3,5 SAY “输入长方形的宽:” GET Y &第3行5列显示提示信息并等待输入 READ &从键盘输入X,Y的值 S=X*Y &计算长方形的面积 ? “长方形的面积:”,S &显示长方形的面积 CANCEL4.其他程序运行命令 清屏命令 CLEAR-清除屏幕上的内容 返回命令 RETURN-结束程序并返回调用该程序的上一层程序去执行,如无上一层程序,则返回到命令窗口。行,返回到调用该程序的上级程序

5、中执行。终止命令 CANCEL-终止程序执行,关闭所有打开的文件,返回到系统的命令窗门。退出系统 QUIT-终止程序的运行,关闭所有打开的文件,正常退出Visual 5.系统设置命令Visual FoxPro提供许多SET命令来设置系统工作状态(如工作环境参数屏幕背景颜色打印机状态等)。SET TALK ON/OFF 非输出性结果(提示信息中间结果等)是否显示或打印出来。SET ECHO OFF/ON 执行的每条命令是否显示或打印出来。SET ESCAPE ON/OFF 按ESC键是否中断程序的执行SET STAT ON/OFF 当前状态(如执行命令工作区名文件名等)是否在底部显示。SET S

6、ONF OFF/ON 在屏幕编辑状态下,一个光标区输完后,光标自动/回车到下一光标区SET SONS ON/OFF 开/关屏幕显示其它SET 命令可参见附录。四、结构化程序1、顺序结构程序设计【例】 求圆面积的程序 CLEAR &清屏 INPUT “输入半径值:” TO R &从键盘输入半径值 S=PI()*R*R &计算圆面积,PI()是圆周率函数,表示3.1416 ?“圆半径是:”,R &显示半径的值 ?“圆面积是:”,S &显示圆面积的值 RETURN 【例】在屏幕上显示今天的日期CLEAR &清屏 RQ=DATE() &将系统日期存人内存变量中 y=STR(YEAR(RQ),4) &从

7、RQ中取出年份,并转换为字符型 m=STR(MONTH(RQ),2) &从RQ中取出月份,并转换为字符型 D=STR(DAY(RQ),2) &从RQ中取出日期,并转换为字符型 ?“今天是:”+Y+“年”+M“月”+D+“日” &在屏幕上显示日期 RETURN2、分支结构程序设计ENDIF条件表达式语句序列NY单向选择(单分支)结构 【命令】 IF ENDIF【功能】当表达式的值为真时,执行,否则执行ENDIF以后的语句。【例】 在数据表学生.DBF中,查询输入学号的学生姓名、出生年月、入校总分情况。USE 学生INPUT “输入查询学号:” TO XH &输入学号到XH中LOCATE FOR学

8、号=XH &查询输入学号的学生记录IF FOUND() &判断LOCATE命令是否查到 ?“姓名:”,姓名?“出生年月:”,出生年月 ?“入校总分:”,入校总分ENDIFUSE双向选择(双分支)语句ENDIFF语句序列1条件表达式语句序列2 2列YN【命令】IF ELSE ENDIF【例】 某城市用电收费标准如下:每月用电100度以下按每度0.45元计算,若超过100度,超过部分按0.35元计算。编程求每户每月应交电费。 问题分析:设用电量为D,应收电费为F,则计算公式为:条件1条件2条件nNN语句序列n+1语句序列1语句序列2语句序列nYYYENDCASE后语句N D*0.45 (D100)

9、 程序如下: INPUT“请输入用电量:”TO D IF D=100 F=0.45*D ELSE F=0.45100+(D-100)*0.35ENDIF?“用电量:”,D,“度”?“电费是:”,F,“元” RETURN程序按照给定的条件选择不同的计算公式自动完成运算,并显示用电量和电费。多向选择(多分支)语句多分支语句是由多个条件表达式组成,执行时是从中选出满足条件的执行。 【命令】 DO CASE CASE CASE . CASE OTHERWISE ENDCASE 【功能】执行多分支语句时,在DOCASE-ENDCASE之间按顺序判断的值是否为真,选择一个条件为真的语句序列进行执行,当所有

10、CASE中的值为假时,如果有OTHERWISE,则执行,然后再执行ENDCASE后面的语句,否则执行条件为真的语句序列后转去执行ENDCASE后面的语句。 【例】输入一考试分数,将该分数转为相应的优、良、中、及格和不及格。(90分以上为优,80-89为良,70-79为中,60-69为及格,60以下为不及格)。CLEARINPUT “输入考试成绩:” CJDO CASE CASE CJ=90 ?“成绩为优” CASE CJ=80 ?“成绩为良” CASE CJ=70 ?“成绩为中” CASE CJ.=60?“成绩为及格” OTHERWISE ?“成绩为不及格” ENDCASE3、循环结构程序设计

11、循环结构的特点是:当给出的循环条件为真时,反复执行一组语句,这组语句通常称之为循环体。当循环条件为假时,则终止循环体的执行。条件循环语句ENDDD后语句LOOPEXIT循环体条件表达式NY条件循环语句是根据的值决定循环体语句的执行次数。这是一种常用的循 环方式,也称为当循环结构,【命令】DO WHILE LOOP EXIT ENDDO【说明】LOOP是转回到循环的入门的语句;EXIT是强行退出循环的语句。【例】例显示学生.dbf中入校总分在600分以上的所有学生。CLEARUSE 学生LOCA FOR 入校总分=600DO WHILE NOT EOF() DISPCONTINUEWAITEND

12、DOUSE? “结束”计数型循环语句【命令】 FOR =TO STEP步长 ENDFORNEXT【说明】 (1)FOR中的循环变量即是内存变量。(2)步长值可是正值、负值,当步长值为l时,可以省略。(3)步长值不能为0,否则会造成死循环。(4)在FOR与ENDFOR中可以使用LOOP和EXIT,方法与前面相同。【例】编程求1+2+3+100的和。 CLEAR S0 &设S为求和的变量,初值为0 FOR X=1 T0 100 &循环的初值为1,终值为100 S=S+X &求和累加 ENDFOR ?“1+2+3+100=”,S &显示计算的结果 RETURN 指针型(扫描)循环语句 指针型循环语句

13、是在数据表中建立的循环,在指定范围内对满足条件的记录作循环,它是Visual FoxPro中特有的一种循环语句。【命令】SCAN FORWHILE ENDSCAN【功能】该语句是在数据表中循环,用记录指针控制循环次数。在执行该语句时,首先将记录指针指向第一条记录,判断记录指针是否指向末尾;如果函数EOF()的值为“真”.则转到ENDSCAN后面的语句执行;否则,判断表中是否有满足FOR或WHILE条件的记录,若满足条件,则将指针指向满足条件的第一个记录上,执行循环语句;若不满足条件,则不执行循环语句。当执行ENDSCAN时,记录指针自动移到SCAN命令指定的下一个记录。 【说明】 SCAN与E

14、NDSCAN循环语句中隐含了EOF()和SKIP处理。无选项时,则表示所有记录。LOOP和EXIT选项,与前面使用方法相同。【例】查询学生.dbf中入学总分大于570的所有女生情况。 SET TALK OFF CLEAR USE 学生 SCAN ALL FOR 入校总分570 IF 性别=“男” LOOP ENDIF DISP ENDSCAN USE 4.多重循环在多重循环中,首先从外循环进入内循环,执行内循环中的语句,当内循环执行结束后,返回到外循环,判断外循环的条件是否为真,是真时又进入内循环,当外循环执行完后,整个循环结束。 【例】在屏幕上输出下面形式的九九表。 1*1=11*2=2 2

15、*2=41*3=3 2*3=6 3*3=9 程序如下: CLEAR ENDFOR FOR A= T0 9 FOR B= TO A T=A*B ? STR(,1)+“*”+STR(A,1)+“=”+STR(T,2)+“ ” ENDFOR?ENDFORRETURN 五、数组的应用 数组中的下标若用变量来表示时,可通过循环语句来进行操作,达到简化程序结构、提高程序效率的目的。【例】将1、2、3、10顺序输入一维数组,实现顺序输出和逆序输出。DIME A(10)FOR I=1 TO 10 A(I)=IENDFORFOR I=1 TO 10 ?A(I) ENDFORFOR J=10 TO 1 STEP

16、1 ?A(J)ENDFOR【例】教材P162例4.45五、子程序、过程和自定义函数 1.子程序子程序的建立独立的程序文件名.PRG形式存盘。主程序CANCEL为结束语句。子程序RETURN为结束语句。子程序的调用【命令】DO 【说明】.主程序可以调用任何子程序,子程序不能调用主程序;.子程序可以调用下一级子程序,子程序可以返回被调用的子程序,也可以直接返回主程序中。 子程序的返回【命令】RETURN TO MASTER【说明】子程序中RETURN语句,可自动返回到上一级调用程序的下一个语句执行。在RETURN语句中使用了TO MASTER短语,则子程序直接返回主程序。主程序可以调用子程序,子程

17、序还可以调用另外的程序,这就是子程序的嵌套。子程序3RETURN子程序2DO 子程序3RETURN子程序1DO 子程序2RETURN主程序DO 子程序1CANCEL【例】子程序应用例*学生.dbf中的记录定位子程序CLEAR DO WHILE .T. WAIT “以记录号(H)还是学号(T)进行定位?” TO KDOCASE CASE K= “H” OR K=“h”INPUT “请输入记录号:” TO HGO HEXIT CASE K=“T” OR K=“t”ACCE “请输入学号:” TO TLOCA FOR &TEXIT OTHER ?“选择错误!请重新选择”ENDCASEENDDDORE

18、TURN *查询学生记录子程序CLEARUSE 学生DO DWDISPWAIT “按任意键继续”RETURN*学籍管理主程序CLEARUSE 学生DO WHILE .T. CLEAR TEXT* 学籍管理系统1输入数据 2删除数据3查询数据 4修改数据5统计数据 6结束 * ENDTEXT INPUT “请输入16进行选择:” TO C DO CASECASE C=”1” DO A1CASE C=”2” DO A2CASE C=”3” DO CX &调用查询学生记录子程序CASE C=”4” DO A4CASE C=”5” DO A5CASE C=”6” EXITOTHER ?”选择错误!请重

19、新输入” ENDCASEENDDOUSECANCEL 带参调用子程序主程序在调用子程序时,有时要在主程序和子程序之间进行数据的传递,称为参数传递。此时用DO命令调用子程序时可带一个WITH子句,用来进行参数传递。【命令】DO WITH 【功能】调用子程序并向子程序传递参数。【说明】.中的参数称为实参,可以是表达式,若为内存变量时须有初值。.与主程序向子程序传递参数相对应,被调用的子程序,必须用语句接收参数。【命令】PARAMETERS 【功能】参数表中的参数(内存变量)接收DO命令发送的参数,返回时把内存变量的值回送给主程序中相应的内存变量实参。【说明】.在参数表中指定的参数称为形参,为内存变

20、量;.PARAMETERS 语句必须是子程序中的第一语句;.实参和形参个数、类型必须一致。.若实参不是内存变量(如常量、表达式),则形参不返回。DO WITH PARAMETERS DO js WITH bj,ymj &主程序中用语句调用js,并传参数bj,ymj PARA R, S &子程序中用R,S接收bj,ymj【例】设计一个计算圆面积的子程序,并在主程序中带参调用它。 主程序: *ymj.prg YMJ=0 5,10 SAY “请输入半径:”GET bj DEFAULT 0 READ DO js WITH bj,ymj ? “ymj=”,ymj CANCEL 子程序: * js.prg

21、 PARAMETERS r,s s=pi()*r*r RETURN2.过程和(自定义)函数过程和函数都是子程序,过程指某种操作、处理的子程序,它处理结束后返回主程序即可;而函数一般进行某种计算,返回主程序时要返带回一个计算值。过程和函数的建立与一般子程序或PRG文件的建立方法一样,但格式上它们和子程序有些不同:*子程序js.prg *过程js.prg *函数js.prg FUNCTION js PARAMETERS r,s s=pi()*r*r RETURN s PARAMETERS r,s s=pi()*r*r RETURN PROCEDURE js PARAMETERS r,s s=pi(

22、)*r*r RETURN过程和函数的调用过程和一般子程序的调用方法一样,用DO WITH 命令;函数和系统函数的调用方法一样,(参数)从上可知,过程、函数和一般子程序一样,可单独以.PRG文件形式独立存放在磁盘上,但这样每次执行它们时,必须将其调入内存。为了减少磁盘文件打开的次数,提高系统运行效率,可以在程序中编出过程和函数。主程序1(内含过程) 主程序2(内含函数)Sabc(实参)?abc(实参)FUNCTION abc(形参) RETURN DO abc with DO abc withPROCEDURE abcPARAMETERSRETURNSabc(实参)?abc(实参)FUNCTIO

23、N abcPARAMETERS RETURN 【说明】.过程和函数放入主程序后面时,必须分别以PROCEDURE、FUNCTION开头.多个过程还可以放入一个PRG文件中,这样的文件叫过程文件。它的形式为:*过程文件ABD.PRG PROCEDURE RETURNPROCEDURE RETURN PROCEDURE RETURN 有了过程文件,当用命令SET PROCEDURE TO 打开后,过程文件中的所有过程都进入内存,要调用它们就很方便了。 【例】编一程序,利用自定义函数计算圆面积。 R=0 1NPUT “请输人半径的值:”TO R ? “圆面积;”? S(R) CANCEL FUNCT

24、ION S(R) & 定义S函数,参数为半径 M=PI()*R*R & PI()表示圆周率 RETURN M ENDFUNC3内存变量的作用域内存变量作用域在多模块程序中,某模块中的内存变量是否能在其它模块中也可使用呢?答案是不一定,因为用户定义的内存变量有一定的作用域。这的内存变量在整个程序运行过程中起作用(称为全局变量或公用变量),而有的内存变量仅在某些程序模块及下层模块中起作用(称为局部变量或私用变量),还有的仅在建立它的一个模块中有效(称为本地变量)。全局变量(公用变量)全局变量:在命令窗口中定义的变量或在程序中用命令PUBLIC定义的变量。它们在程序运行中,上下各级程序或任何程序模块

25、中都可以使用。当程序执行完毕,回到命令窗后,其值仍然保存。【命令】 PUBLIC 【功能】将中指定的变量定义为全局变量。【说明】 . 用PUBLIC语句定义的内存变量系统设置初值为逻辑型.F.;. 一个PUBLIC语句可以定义多个内存变量,每个内存变量之间均用“,”隔开; . 全局变量必须先定义后赋值,故称为建立全局型变量;. 在程序中已被定义成全局变量后,可以在下一级程序中进一步定义成局部变量;但已定义成局部变量后,却不可反过来再定义成全局变量;. 不再使用全局型内存变量时,可以使用以下语句清除:【命令】RELEASE 【命令】CLEAR ALL【例】*主程序mcx1.prgCLEARI=1DO SCX1?”主程序中输出的结果:”?“I=”+STR(I,2)+“ J=”+STR(J,2)CANCELPROC SCX1.PRGPUBLIC JI=I*2J=I+1?“子程序中输出的结果:”?“I=”+STR(I,2)+“ J=”+STR(J,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论