程序设计课件_第1页
程序设计课件_第2页
程序设计课件_第3页
程序设计课件_第4页
程序设计课件_第5页
已阅读5页,还剩157页未读 继续免费阅读

下载本文档

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

文档简介

第七章

程序设计基础1第七章

程序设计基础1

本章要点VisualFoxPro的工作方式程序文件的建立与编辑程序的基本结构分支结构循环结构过程2本章要点VisualFoxPro的工作方式2VisualFoxPro的工作方式

VisualFoxPro系统提供有三种工作方式:即单命令方式、菜单方式及程序文件方式。

1.单命令方式VisualFoxPro单命令方式是利用Command窗口来实现的。用户通过Command窗口输入命令,并执行操作。在Command窗口中,可以输入单个的操作命令和系统命令,完成对数据库的操作管理和系统环境的设置;也可以建立命令文件及运行命令文件。Command窗口不仅是VisualFoxPro命令的执行窗口,也是VisualFoxPro命令文件的编辑窗口。所谓单命令方式,即输入一条命令,完成一个操作的工作方式。3VisualFoxPro的工作方式Vis

2.菜单方式在VisualFoxPro环境下,也可以通过系统提供的菜单选项,对数据库资源进行操作管理和对系统环境进行设置;并通过菜单建立命令文件及运行命令文件。所谓菜单方式,即通过打开不同的菜单选择并完成不同的操作。我们在以前各章所讲的内容其实都可说是菜单方式。

3.程序文件方式程序文件(简称程序)也叫做命令文件。运用程序文件方式进行数据库管理,是通过程序文件编辑工具,将对数据库资源进行操作管理的命令和对系统环境进行设置的命令,集中在一个以(.PRG)为扩展名的命令文件中,然后再通过菜单方式或命令方式运行该命令文件。所谓命令方式,即通过程序文件中的命令完成不同的操作。42.菜单方式4*功能说明:求圆形的面积。*文件名:L501.PRGCLEARCTALK=SET("TALK")SETTALKOFFINPUT"请输入圆的半径,半径="TORS=PI()*R*R?"半径为"+ALLTRIM(STR(R))+"的圆,面积=",SSETTALK&CTALKRETURN

5*功能说明:求圆形的面积。56.1.1程序的概念

有关此VisualFoxPro程序的几点说明:1.注释语句【格式1】NOTE<注释内容>【格式2】*<注释内容>【格式3】&&<注释内容>【功能】增强程序文件的易读性或放弃<注释内容>中语句的执行

2.对话开关语句【格式】SETTALKOFF|ON【功能】关闭或打开命令执行时的对话开关,许多命令在执行时会返回一些有关执行状态的信息,这些信息通常会显示在VF主窗口、状态栏或用户自定义窗口里。SETTALK命令用以设置是(ON)否(OFF)显示这些信息。默认值为ON。3.命令的分行(续行符);66.1.1程序的概念有关此Visual6.1.2程序文件的建立、修改与执行

1.建立或修改程序文件可用两种方式调用系统内置的文本编辑器建立或修改程序文件:命令方式MODIFYCOMMAND[<盘符>][<路径>]〈程序文件名〉菜单方式打开“文件”菜单,选择“新建”;在“新建”窗口,选择“程序”,再选择“新建文件”76.1.2程序文件的建立、修改与执行1.建立或修改程程序文件的建立与执行一.建立建立:文件新建程序保存:文件保存命令:MODIFYCOMMAND<文件名>注:若指定文件存在,则打开修改;否则系统认为是要建立一个指定了名字的文件。8程序文件的建立与执行注:若指定文件存在,则打开修改;否则系统(2)运行程序下面的任一方法均可运行程序:■选择【程序】菜单下的“运行”菜单,利用“运行”对话框选择要运行的程序;■在命令窗口中输入如下命令:DO<程序文件名>

系统就会运行这个程序。如果文件不加扩展名,系统会假定它具有.PRG的扩展名,如果想运行一个具有其它扩展名的命令文件时,在输入命令时必须给出这个命令文件的全名。如:要运行上例中编辑的程序,可以在命令窗口中输入:

DOL501然后按回车键执行。9(2)运行程序下面的任一方法均可运行程序:DO<程序文件2.保存程序程序输入、编辑完毕,单击【文件】|【保存】菜单项,在“另存为”对话框中指定程序文件的存放位置和文件名,并单击“保存”按钮保存程序文件并退出文本编辑器。程序文件的默认扩展名是.PRG。

102.保存程序103.执行程序程序文件建立后,可以用多种方式、多次执行它。下面是两种常用的方式。(1)菜单方式①

单击【程序】|【运行】菜单项,打开“运行”对话框;②

从文件列表框中选择要运行的程序文件,并单击“运行”命令按钮,启动运行该程序文件

(2)命令方式【格式】DO[<盘符>][<路径>\]<文件名>【功能】执行指定<盘符>、<路径>下的程序文件

113.执行程序11执行程序文件时,将依次执行文件中的命令,直到所有命令执行完毕,或者执行到以下命令:①CANCAL:终止程序运行,清除所有的私有变量,返回命令窗口;③RETURN:结束程序执行,返回调用它的上级程序,若无上级程序则返回命令窗口;④QUIT:结束程序执行并退出VisualFoxPro系统,返回操作系统

12执行程序文件时,将依次执行文件中的命令,直到所有命令执行完毕6.1.3简单的输入输出命令6.1.3简单的输入输出命令1.字符接收语句ACCEPT命令【功能】在程序执行过程中,将用户交互式输入的内容作为字符串赋值给指定内存变量。该命令只接受字符型数据,输入的字符串不需要加定界符,否则,系统会把定界符作为字符串本身的一部分。

格式:ACCEPT[<字符表达式>]TO<内存变量名>

136.1.3简单的输入输出命令6.1.3简单的输入【例6-2】编程从键盘输入某数据库的文件名,要求打开该数据库并显示其内容。程序文件名为PROG2.PRGSETTALKOFFCLEARACCEPT“请输入数据库名:”TOAAAOPENDATABASE&AAAACCEPT“请输入表名”TOBBBUSE&BBBLISTUSESETTALKONRETURN14【例6-2】编程从键盘输入某数据库的文件名,要求打开注:ACCEPT语句只能给字符型内存变量提供数据。如果用户想给其它类型的内存变量提供数据,可以使用下列命令:2.通用数据接收命令----INPUT命令

该命令等待用户从键盘输入数据,用户可以输入任意合法的表达式。当用户以回车键结束输入时,系统将表达式的值存入指定的内存变量,程序继续运行。功能:(1)若选用<字符表达式>,系统会首先显示该表达式的值,作为提示信息。(2)输入的数据可以是常量、变量等,但不能不输入任何内容直接按回车键。INPUT语句与ACCEPT语句的区别是:ACCEPT命令只能接收字符串,而INPUT语句可以接收任意类型的VFP表达式;如果输入的是字符串,ACCEPT语句不要使用字符型定界符,而INPUT语句必须用定界符括起来。格式:INPUT[<字符表达式>]TO<内存变量名>15注:ACCEPT语句只能给字符型内存变量提供数据。如果用户【例6-4】从键盘输入两个任意正数,编程求以两数为边长的长方形面积。程序文件名为PROG4.PRGSETTALKOFFCLEARinput“长方形一边的长为:”TOAINPUT“长方形另一边的长为:”TOBS=A*B?“长方形的面积为:”,SSETTALKONRETURN16【例6-4】从键盘输入两个任意正数,编程求以两数为边长的长方3.输入一个字符语句----WAIT命令【功能】显示提示信息,暂停程序执行,直到用户按任意键或单击鼠标时继续执行程序。若选择可选项[TO<内存变量>],将输入的单个字符作为字符型数据赋给指定的<内存变量>;若用户是按Enter键或单击鼠标,<内存变量>的值为空串。若省略所有可选项,屏幕显示“键入任意键继续……”默认提示信息

格式:WAIT[<字符表达式>][TO<内存变量名>]173.输入一个字符语句----WAIT命令格式:WAIT[例:wait"输入无效,请重新输入!"window timeout5 命令执行时,在主窗口右上角出现一个提示窗口,其中显示提示信息“输入无效,请重新输入!"。之后,程序暂停执行。当用户按任意键或超过5秒钟时,提示窗口关闭,程序继续执行。18例:18【例6-6】在STUDENT数据库的STUD表中显示任意一个系学生的情况。程序文件名为PROG6.PRGSETTALKOFFCLEAROPENDATABASESTUDENTUSESTUDWAIT“请输入待查学生的系号(1—3):”TONIFVAL(N)<1.OR.VAL(N)>3WAIT“输入无效,结束程序运行!”WINDOWTIMEOUT5RETURNELSESTORE“0”+NTOAAALISTFOR系别号=AAAENDIFCLOSEDATABASESETTALKONRETURN19【例6-6】在STUDENT数据库的STUD表中显示任意一个4.三条输入命令的异同ACCEPT命令只能接受字符型数据,不需定界符,输入完毕按回车键结束;WAIT命令只能输入单个字符,且不需定界符,输入完毕不需按回车键;INPUT命令可接受数值型、字符型、逻辑型、日期型和日期时间型数据,数据形式可以是常量、变量、函数和表达式,如果是字符串,需用定界符,输入完毕按回车键结束。

204.三条输入命令的异同20练习:在INPUT、ACCEPT和WAIT三个命令中,必须要以回车键表示输入结束的命令是A)INPUT、ACCEPTB)INPUT、WAITC)ACCEPT、WAITD)INPUT、ACCEPT和WAIT21练习:在INPUT、ACCEPT和WAIT三个命令中,必须要二、结构化的程序设计三大结构:顺序结构、选择结构、循环结构。1、顺序结构 按命令在程序中出现的先后次序依次执行。22二、结构化的程序设计22

分支结构形式有如下三种:1.单向分支单向分支语句,即根据用户设置的条件表达式的值,决定某一操作是否执行。(1)语句格式:IF〈条件表达式〉〈命令行序列〉ENDIF(2)语句功能:该语句首先计算〈条件表达式〉的值,当〈条件表达式〉的值为真时,执行〈命令行序列〉;否则,执行ENDIF后面的第一条命令。分支结构

23分支结构形式有如下三种:分支结构23【例6-7】求一元二次方程AX2+BX+C=0的实根。程序文件名为PROG7.PRG。SETTALKOFFCLEARINPUTTOA2INPUTTOB3INPUTTOC4Z=B^2-4*A*CIFZ>=0X1=(-B+SQRT(Z))/(2*A)X2=(-B-SQRT(Z))/(2*A)?X1,X2ENDIFSETTALKONRETURN24【例6-7】求一元二次方程AX2+BX+C=0的实根。程序文

2.双向分支双向分支语句,即根据用户设置的条件表达式的值,选择两个操作中的一个来执行。(1)语句格式:IF〈条件表达式〉〈命令行序列1〉ELSE〈命令行序列2〉ENDIF(2)语句功能:该语句首先计算〈条件表达式〉的值,当〈条件表达式〉的值为真时,执行〈命令行序列1〉中的命令;否则,执行〈命令行序列2〉中的命令;执行完〈命令行序列1〉或〈命令行序列2〉后都将执行ENDIF后面的第一条命令。252.双向分支25【例6-10】编写一密码校验程序(假设密码为ABC)。程序文件名为PROG10.PRG。SETTALKOFFCLEARACCEPT“请输入您的密码:”TOAAAIFAAA=”ABC”CLEAR?“欢迎使用本系统!”ELSE?”密码错误!”WAITreturnENDIFSETTALKON26【例6-10】编写一密码校验程序(假设密码为ABC)。程序文例1:从屏幕输入你的身份,如果是学生,则显示“好好学习,天天向上”ClearAccept“请输入你的身份”toSFIFSF=“学生”??“好好学习,天天向上!”Endif例2:从屏幕输入一个数字型数据到变量X中,如果x≤200,则给其加500;如果200<x≤300,则加300;否则加100在屏幕上输出x的值。Clearinput“请输入一个数字型数据:”toxIfx<=200X=x+500ElseIfx>200andx<=300X=x+300ElseX=x+100EndifEndifClear?x27例1:从屏幕输入你的身份,如果是学生,则显示“好好学习,天天P186页一、选择题4、有如下程序:Inputtoa100Ifa=10s=0EndifS=1?s假定在键盘输入的A的值一定是数值型,那么上面条件选择程序的执行结果是:A、0B、1C、由A的值决定D、程序出错28P186页一、选择题28P187页第二填空题1、有一分支程序为:Ifs>100dop1.prgElseifs>10dop2.prgelseifs>1dop3.prgelsedop4.prgendifendifendif分别写出执行P·,P3,P4子程序的条件表达式Dop1.prg条件为S>10Dop2.prg条件为()Dop3.prg条件为()Dop4.prg条件为()29P187页第二填空题Dop1.prg条件为S>1029

3.多向分支

多向分支语句,即根据多个条件表达式的值,选择执行多个操作中的一个对应执行。(1)语句格式:

格式:DOCASECASE<条件表达式1> <语句序列1>[CASE<条件表达式2> <语句序列2> …CASE<条件表达式N> <语句序列N>][OTHERWISE <语句序列N+1>]ENDCASE

303.多向分支格式:DOB)分支语句语句序列1条件1格式: DOCASE CASE<条件1><语句序列2>

CASE<条件2> <语句序列2> ……CASE<条件n> <语句序列n>[OTHERWISE<语句序列>] ENDCASE31B)分支语句31注:(1)不管有几个CASE条件成立,只有最先成立的那个CASE条件的对应命令序列被执行。(2)若所有CASE条件都不成立,且没有OTHERWISE子句,则直接跳出本结构。(3)DOCASE和ENDCASE必须成对出现,DOCASE是本结构的入口,ENDCASE是本结构的出口32注:32【例6-12】假设收入(P)与税率(R)的关系如下表,编程求税金。程序文件名为PROG12.PRG。

0 P<800 R=0.05 800≤P<2000 0.08 2000≤P<5000 0.1P≥5000

SETTALKOFFCLEARINPUT“请输入收入:”TOPDOCASECASEP<800R=0CASEP<2000R=0.05CASEP<5000R=0.08OTHERWISER=0.1ENDCASETAX=P*R?”税金为:”,TAXSETTALKONRETURN33

例:计算分段函数值: 2x-1 (x<0) 3x+5 (0<=x<3) y= x+1 (3<=x<5) 5x-3 (5<=x<10) 7x+2 (x>=10) 若输入5,分析程序如何执行?34例:34SETTALKOFFINPUT"输入X值:"TOXDOCASECASEX<0 F=2*X-1CASEX<3 F=3*X+5CASEX<5 F=X+1CASEX<10 F=5*X-3OTHERWISE F=7*X+2ENDCASE?ySETTALKONRETURN35SETTALKOFF35例:从键盘输入学生成绩,判断输出:优秀,良好,一般,差。ClearInput“请输入你的成绩:”tocjDocaseCasecj>90??“你是优秀学生”Casecj>=80??”你的成绩良好”Casecj>=60??“你的成绩一般,需要继续努力!”Otherwise??“你的成绩太差,赶紧努力!”Endcasereturn36例:从键盘输入学生成绩,判断输出:优秀,良好,一般,差。363、循环结构 循环结构也称为重复结构,是指程序在执行的过程中,其中的某段代码被重复执行若干次。被重复执行的代码段,通常称之为循环体。VF中的循环结构语句包括:DOWHILE-ENDDO、FOR-ENDFOR和SCAN-ENDSCAN语句。373、循环结构37循环结构

1.DOWHILE循环语句【格式1】DOWHILE<条件表达式><语句序列>ENDDO

一个循环结构一般应具备如下的条件:(1)循环的初始条件:一般为给循环控制变量赋初值;(2)循环头:循环语句的起始,设置、判断循环条件;(3)循环尾:循环语句的结尾;(4)循环体:位于循环头和循环尾之间、循环控制重复执行的语句序列38循环结构1.DOWHILE循环语句一个循环结构一般应具【格式2】DOWHILE<条件表达式> <语句序列1>[LOOP]<语句序列2>[EXIT]<语句序列3>

ENDDOLOOP语句:强行返回到循环开始语句。EXIT语句:强行跳出循环,接着执行ENDDO后的语句39【格式2】DOWHILE<条件表达式>LOO功能:

(1)若第一次判断条件时,条件即为假,则循环体一次都不执行。(2)若循环体包含LOOP命令,那么当遇到LOOP时,就结束循环体的本次执行,不再执行其后面的语句,而是转回DOWHILE处重新判断条件。(3)若循环体包含EXIT命令,那么当遇到EXIT时,就结束该语句的执行,转去执行ENDDO后面的语句(4)通常LOOP或EXIT出现在循环体内嵌套的选择语句中,根据条件决定是LOOP回去,还是EXIT出去。【格式2】DOWHILE<条件表达式> <语句序列1>[LOOP]<语句序列2>[EXIT]<语句序列3>ENDDO40功能: 【格式2】DOWHILE<条件表达式>执行该语句时,先判断DOWHILE处的循环条件是否成立,如果条件为真,则执行DOWHILE 与ENDDO之间的命令序列(循环体)。当执行到ENDDO时,返回到DOWHILE,再次判断循环条件是否为真,以确定是否再次执行循环体。若条件为假,则结束该循环语句,执行ENDDO后面的语句。【格式2】DOWHILE<条件表达式> <语句序列1>[LOOP]<语句序列2>[EXIT]<语句序列3>

ENDDO41执行该语句时,先判断DOWHILE处的循例:计算S=1+2+…+100。(test5.prg)分析:(1)引进变量s和i。s用来保存累加的结果,初值为0;i既作为被累加的数据,也作为控制循环条件是否成立的变量,初值为1。(2)重复执行命令s=s+i和i=i+1,直至i的值超过100。每一次执行,s的值增加i,i的值增加1

42例:计算S=1+2+…+100。(test5.prg)424343【例6-20】逐条显示在STUDENT数据库的STUD表中性别为“男”的所有记录。程序文件名为PROG20.PRG。SETTALKOFFCLEAROPENDATABASESTUDENTUSESTUDDOWHILE.NOT.EOF()IF性别=”男”DISPLAYENDIFSKIPENDDOCLOSEDATABASESETTALKONRETURN44【例6-20】逐条显示在STUDENT数据库的STUD表中性B)步长型循环语句:FOR-ENDFOR语句 该语句通常用于实现循环次数已知情况下的循环结构。格式:FOR<循环变量>=<初值>TO<终值>[STEP<步长>] <循环体>ENDFOR|NEXT45B)步长型循环语句:45

2.FOR循环语句格式:FOR<内存变量>=<1>TO<10>step2 <语句序列> [EXIT] [LOOP] ENDFOR/NEXT

462.FOR循环语句格式:FOR<内存变量>=<1>T功能: (1)<步长>的默认值为1。(2)<初值>、<终值>和<步长>都是数值表达式。但这些表达式仅在循环语句执行开始时被计算一次。在循环语句的执行过程中,初值、终值和步长是不会改变的。(3)可以在循环体内改变循环变量的值,但这会影响循环体的执行次数。(4)EXIT和LOOP命令同样可以出现在该循环语句的循环体内。当执行到LOOP命令时,结束循环体的本次执行,然后循环变量增加一个步长值,并再次判断条件是否成立。47功能: 47求1到100中偶数的和48求1到100中偶数的和48例:从键盘输入10个数,然后找出其中的最大值和最小值。CLEAR &&(test9.prg)INPUT“请输入一个数:”TOaA=5 STOREaTOma,miMa=5mi=5 FORi=2TO10A=4mi=4 INPUT“请输入另一个数:”TOaA=6ma=6 IFma<a ma=a ENDIF IFmi>a mi=a ENDIF ENDFOR ?“最大值:”,ma ?“最小值:”,mi RETURN

49例:从键盘输入10个数,然后找出其中的最大值和最小值。49P1883、写出下列程序的运行结果SettalkoffDIMENSIONA(6)FORK=1TO6A(K)20-2*KENDFORK=5DOWHILEK>=1A(K)=A(K)-A(K+1)K=K-1ENDDO?A(1),A(3),A(5)SETTALKON运行结果:?50

C)数据表扫描循环语句:SCAN-ENDSCAN语句格式:SCAN[<范围>][FOR<条件1>][WHILE<条件2>] <循环体>ENDSCAN 执行该语句时,记录指针自动、依次地在当前表的指定范围内满足条件的记录上移动,对每一条记录执行循环体内的命令。2)语句功能:该语句在指定的范围内,默认范围为ALL,用数据记录指针来控制循环次数。执行语句时,首先判断函数EOF()的值,若其值为“真”,则结束循环,否则,结合〈条件表达式1〉或〈条件表达式2〉,执行〈命令行序列〉,记录指针移到指定的范围和条件内的下一条记录,重新判断函数EOF()的值,直到函数EOF()的值为真时结束循环。51C)数据表扫描循环语句:51【例6-30】输出STUDENT数据库的STUD表中所有团员的姓名和地址。程序文件名为PROG30.PRG。SETTALKOFFCLEAROPENDATABASESTUDENTUSESTUDSCANFOR是否团员?姓名,地址ENDSCANCLOSEDATABASESETTALKONRETURN52【例6-30】输出STUDENT数据库的STUD表中所有团员多重循环结构程序设计在一个循环体中再包含有循环结构,称之为二重循环结构(或二重循环嵌套);在二重循环结构的循环体中,若还包含循环结构,称为三重循环结构。二重及其以上的循环结构统称为多重循环结构。这里我们主要介绍二重循环结构。53多重循环结构程序设计53多重循环的基本结构DOWHILE<条件1><循环体1>DOWHILE<条件2> <循环体2> ENDDO<循环体3> ENDDO A=0ForI=1to3 Forj=1to3 A=A+1 Endforendfor答案为:954多重循环的基本结构54FOR<变量1>=<初值1>TO<终值1>STEP<步长1><循环体1> FOR<变量2>=<初值2>TO<终值2>STEP<步长2> <循环体2> ENDFOR <循环体3> ENDFOR55FOR<变量1>=<初值1>TO<终值1>STEP多重循环的执行过程执行过程的总体原则是:外层循环变量每取一次值,内层循环要完整地循环一遍。若<循环体1>、<循环体2>或<循环体3>中包含有LOOP或EXIT命令,它们会改变循环程序的执行顺序。56多重循环的执行过程执行过程的总体原则是:56i=0dowhilei<10ifint(i/2)=i/2?"偶数"else?"奇数"endifi=i+1enddo57i=0576.3过程及过程调用

VisualFoxPro与其他高级语言一样,支持结构化程序设计方法,允许将若干命令或语句组合在一起作为整体调用,这些可独立存在并可整体调用的命令语句组合称为过程。

1.调用过程语句,即执行已有的过程。语句格式:DO〈过程名〉WITH<参数表>WITH用于主程序和子程序间参数的传递。语句功能:执行以〈过程名〉为名的过程。

2.过程返回语句,即返回过程的调用处。语句格式:RETURN语句功能:将控制返回到调用程序中调用命令的下一语句。586.3过程及过程调用VisualFox6.3.1外部过程

外部过程也叫子程序,和主程序一样是以程序文件(.PRG)的形式单独存储在磁盘上【例】分别建立如下程序文件,*MAIN.PRGSETTALKOFF?”正在执行主程序”DOSUB1SETTALKON

*SUB1.PRG?”正在执行SUB1”RETURN

596.3.1外部过程外部过程也叫子程序,和将若干个过程按一定的规定放在一个大文件中,这个文件称为过程文件。(1)过程文件的建立命令格式与建立程序文件一样:格式:MODIFYCOMMAND<过程文件名>

过程文件的格式要求每个过程文件的开头必须用下列语句:格式:PROCEDURE<过程名>

功能:标明是一个过程。参数描述:<过程名>:指定过程名称。命名方法与文件名的命名方法相同。2、过程与过程文件

60将若干个过程按一定的规定放在一个大文件中,这个文件称为过程文6.3.2内部过程

内部过程:把多个过程组织在一个文件中(这个文件称之为过程文件),或者把过程放在调用它的程序文件的末尾。VisualFoxPro为了识别过程文件或者程序文件中的不同过程,规定过程文件或者程序文件中的过程必需用PROCEDURE语句说明。其格式为:PROCEDURE<过程名><命令序列>[RETURN[<表达式>]]

616.3.2内部过程内部过程:把多个过程组织在一个文件过程放在程序文件中【例】建立如下程序文件,*MAIN.PRGSETTALKOFF?”正在执行主程序”DOSUB1SETTALKON

ProcedureSUB1?”正在执行SUB1”RETURN62过程放在程序文件中【例】建立如下程序文件,62例: 下面是一个模块定义和调用的程序。涉及三个文件:程序文件f1.prg,其中的代码为主程序,另外包含一个过程p1;程序文件f2.prg作为子程序被主程序调用;过程文件f3.prg包含两个过程p2和p3。63例:63setprocetof3?"主程序开始“f2()dop1?"主程序结束“*过程procep1?"过程p1开始“?"调用p3()“?"返回值:",p3()?"过程p1结束“endproc?"子程序f2开始“?"调用p2()“x=p2()?"返回值:",x?"子程序f2结束“returnprocep2returnprocep3return100

f1.prg

f2.prgf3.prg

64?"子程序f2开始“procep2f1.prgf2.p过程文件的建立过程文件的建立方法与程序文件相同。可用MODIFYCOMMAND<过程文件名>命令或调用其他文字编辑软件来建立。过程文件的结构一般为:PROCEDURE<过程名1><命令序列1>RETURN

PROCEDURE<过程名2><命令序列2>RETURN…PROCEDURE<过程名N><命令序列N>RETURN65过程文件的建立过程文件的建立方法与程序文件6.3.3过程调用中的参数传递

1.有参过程中的形式参数定义有参过程中的形式参数定义语句为:

【格式】PARAMETERS<参数表>该语句必需是过程中第一条语句。<参数表>中的参数可以是任意合法的内存变量名

666.3.3过程调用中的参数传递1.有参过程中的形式参【例5-11】计算圆面积的主程序为MYMAIN.PRG,子程序为MYSUB.PRG*MYMAIN.PRGCTALK=SET("TALK")SETTALKOFFCLEARSTORE0TORR,AREADOWHILE.T. INPUT"请输入圆的半径:"TORR DOMYSUBWITHRR,AREA ?"半径为"+ALLTRIM(STR(RR))+"的圆的面积是:",AREA WAIT"还要继续计算吗(Y/N)?"TOANSWER IFUPPER(ANSWER)="Y" LOOP ELSE EXIT ENDIFENDDOSETTALK&CTALK调用过程并向过程传递参数该过程接收参数并计算*MYSUB.PRGPROCEDUREMYSUBPARAMETERSRS=PI()*R^2RETURN接收参数语句67【例5-11】计算圆面积的主程序为MYMAIN.PRG,子程【例6-34】用参数传递编程,计算圆的面积。*主程序名PROG34SETTALKOFFCLEARS=0INPUT”请输入圆的半径:”TORdoAREAwithr,s?”圆的面积为:”,SSETTALKON

PROCEDUREAREA &&计算面积的过程PARAMETERX,Y &&形参说明Y=3.1416*X**2RETURN68【例6-34】用参数传递编程,计算圆的面积。68变量的作用域程序设计离不开变量。一个变量除了类型和取值之外,还有一个重要的属性就是它的作用域,变量的作用域指的是变量在什么范围内是有效或能够被访问的。在VF中,若以变量的作用域来分,内存变量可分为公共变量、私有变量和局部变量三类。69变量的作用域691、公共变量在任何模块中都可使用的变量称为公共变量。公共变量要先建立后使用,公共变量可用PUBLIC命令建立。PUBLIC<内存变量表>该命令的功能是建立公共的内存变量,并为它们赋初值逻辑假.F.。

例如:PUBLICx,y,s(10)建立了三个公共内存变量;简单变量x和y以及一个含10个元素的数组s,它们的初值都是.F.。701、公共变量70注:公共变量一旦建立就一直有效,即使程序运行结束返回到命令窗口也不会消失。只有执行CLEARMEMORY、RELEASE、QUIT等命令后,公共变量才被释放。在命令窗口中直接使用而由系统自动隐含建立的变量也是公共变量。71注:公共变量一旦建立就一直有效,即使程序运行结束返回到命令窗2、局部变量局部变量只能在建立它的模块中使用,不能在上层或下层模块中使用。当建立它的模块程序运行结束时,局部变量自动释放。局部变量用LOCAL命令建立:LOCAL<内存变量表> 该命令建立指定的局部内存变量,并为它们赋初值逻辑假.F.。由于LOCAL与LOCATE前四个字母相同,所以这条命令的命令动词不能缩写。局部变量也要先建立后使用。722、局部变量723、私有变量 在程序中直接使用(没有通过PUBLIC和LOCAL命令事先声明)而由系统自动隐含建立的变量都是私有变量。私有变量的作用域是建立它的模块及其下属的各层模块。一旦建立它的模块程序运行结束,这些私有变量将自动清除。733、私有变量73*14.prg clearPUBLICX1 &&公共变量:在所有模块均有效x1=”aaa”LOCALX2&&局部变量:仅在本模块有效(不能在上层或下层模块中使用)x2="bbb"STORE"ccc"TOX3 &&私有变量:仅在本模块及其下属模块DOP6?"X1=",X1?"X2=",X2?"X3=",X3RETURN*过程P6PROCEDUREP6?"主程序中…"?"X1=",X1?"X3=",X3RETURN在命令窗口输入下列命令:RELEASEALL&&清除所有用户定义的内存变量DO14?”返回命令窗口时:”?”x1=”,x174*14.prg 在命令窗口输入下列命令:746.3.6内存变量的作用域

1.全局变量全局变量是指在所有程序模块中都有效的内存变量

在程序或过程中定义全局变量的语句为:【格式】PUBLIC<内存变量表>756.3.6内存变量的作用域1.全局变量75【说明】(1)当定义多个变量时,各变量名之间用逗号隔开;(2)用PUBLIC语句定义过的内存变量,在程序执行期间可以在任何层次的程序模块中使用;(3)变量定义语句要放在使用此变量的语句之前,否则会出错;(4)任何已经定义为全局变量的变量,可以用PUBLIC语句再定义,但不允许重新定义为局部变量;(5)使用全局变量可以增强模块间的通信,但会降低模块间的独立性。

76【说明】762.局部变量局部变量是指在建立它的程序以及被此程序调用的程序中有效的内存变量

在程序中没有被说明为全局变量的内存变量都被看作是局部变量。局部变量也可以用PRIVATE说明,命令格式为:【格式1】PRIVATE<内存变量表>【格式2】PRIVATEALL[LIKE|EXCEPT<通配符>]【说明】(1)用PRIVATE语句说明的内存变量,只能在本程序及其下属过程中使用,退出程序时,变量自动释放;(2)用PRIVATE语句在过程中说明的局部变量,可以与上层调用程序出现的内存变量同名,但它们是不同的变量,在执行被调用过程期间,上层过程中的同名变量将被隐藏。

772.局部变量77例:P179*1114.prgPUBLICx1LOCALx2STORE‘F’TOx3DOp6?’主程序中…’?‘x1=’,x1?‘x2=’,x2?‘x3=’,x3RETURN*过程P6PROCEDURE怕?’子程序中…’?‘x1=’,x1?‘x3=’,x3Return然后在命令窗口中输入:Do111478

5、表文件图书。DBF如下记录号总编号书名出版单位单价1113388高等数学清华大学出版社24。002445501数据库导论科学出版社27。903332211计算机基础高等教育出版社23。004665544VFP6。0电子工业出版社28。605456788操作系统原理电子工业出版社25。006456728操作系统概论高等教育出版社21。007375666计算机网络清华大学出版社37。008245682计算机原理高等教育出版社25。00use图书Update图书set单价=单价+5where出版单位=“科学出版社”Select出版单位,avg(单价)as平均价from图书groupby出版单位intocursorlsbSelect*fromlsbwhere平均价<30orderby平均价intocursorlsb1Gobottom?left(出版单位,8)ClosedatabaseA、清华大学 高等教育 电子工业 出错信息79 5、表文件图书。DBF如下79CLEARSETTALKOFFcloseallmx="VisualFoxPro"my="二级"DOsum1withmy?my+mxRETURN*子程序:sum1.prgPROCEDUREsum1parametersmymy="计算机等级"+myRETURN执行命令dotest后,屏幕的显示结果为A)二级VisualFoxProB)计算机等级二级VisualFoxProC)计算机等级VisualFoxProD)计算机等级二级80CLEAR执行命令dotest后,屏幕的显示结果为80s=0forn=1to10p=1fori=1ton

endfors=s+pendfor?"sum=",ss=1!+2!+......+10!81s=0s=1!+2!+......+10!81第七章

程序设计基础82第七章

程序设计基础1

本章要点VisualFoxPro的工作方式程序文件的建立与编辑程序的基本结构分支结构循环结构过程83本章要点VisualFoxPro的工作方式2VisualFoxPro的工作方式

VisualFoxPro系统提供有三种工作方式:即单命令方式、菜单方式及程序文件方式。

1.单命令方式VisualFoxPro单命令方式是利用Command窗口来实现的。用户通过Command窗口输入命令,并执行操作。在Command窗口中,可以输入单个的操作命令和系统命令,完成对数据库的操作管理和系统环境的设置;也可以建立命令文件及运行命令文件。Command窗口不仅是VisualFoxPro命令的执行窗口,也是VisualFoxPro命令文件的编辑窗口。所谓单命令方式,即输入一条命令,完成一个操作的工作方式。84VisualFoxPro的工作方式Vis

2.菜单方式在VisualFoxPro环境下,也可以通过系统提供的菜单选项,对数据库资源进行操作管理和对系统环境进行设置;并通过菜单建立命令文件及运行命令文件。所谓菜单方式,即通过打开不同的菜单选择并完成不同的操作。我们在以前各章所讲的内容其实都可说是菜单方式。

3.程序文件方式程序文件(简称程序)也叫做命令文件。运用程序文件方式进行数据库管理,是通过程序文件编辑工具,将对数据库资源进行操作管理的命令和对系统环境进行设置的命令,集中在一个以(.PRG)为扩展名的命令文件中,然后再通过菜单方式或命令方式运行该命令文件。所谓命令方式,即通过程序文件中的命令完成不同的操作。852.菜单方式4*功能说明:求圆形的面积。*文件名:L501.PRGCLEARCTALK=SET("TALK")SETTALKOFFINPUT"请输入圆的半径,半径="TORS=PI()*R*R?"半径为"+ALLTRIM(STR(R))+"的圆,面积=",SSETTALK&CTALKRETURN

86*功能说明:求圆形的面积。56.1.1程序的概念

有关此VisualFoxPro程序的几点说明:1.注释语句【格式1】NOTE<注释内容>【格式2】*<注释内容>【格式3】&&<注释内容>【功能】增强程序文件的易读性或放弃<注释内容>中语句的执行

2.对话开关语句【格式】SETTALKOFF|ON【功能】关闭或打开命令执行时的对话开关,许多命令在执行时会返回一些有关执行状态的信息,这些信息通常会显示在VF主窗口、状态栏或用户自定义窗口里。SETTALK命令用以设置是(ON)否(OFF)显示这些信息。默认值为ON。3.命令的分行(续行符);876.1.1程序的概念有关此Visual6.1.2程序文件的建立、修改与执行

1.建立或修改程序文件可用两种方式调用系统内置的文本编辑器建立或修改程序文件:命令方式MODIFYCOMMAND[<盘符>][<路径>]〈程序文件名〉菜单方式打开“文件”菜单,选择“新建”;在“新建”窗口,选择“程序”,再选择“新建文件”886.1.2程序文件的建立、修改与执行1.建立或修改程程序文件的建立与执行一.建立建立:文件新建程序保存:文件保存命令:MODIFYCOMMAND<文件名>注:若指定文件存在,则打开修改;否则系统认为是要建立一个指定了名字的文件。89程序文件的建立与执行注:若指定文件存在,则打开修改;否则系统(2)运行程序下面的任一方法均可运行程序:■选择【程序】菜单下的“运行”菜单,利用“运行”对话框选择要运行的程序;■在命令窗口中输入如下命令:DO<程序文件名>

系统就会运行这个程序。如果文件不加扩展名,系统会假定它具有.PRG的扩展名,如果想运行一个具有其它扩展名的命令文件时,在输入命令时必须给出这个命令文件的全名。如:要运行上例中编辑的程序,可以在命令窗口中输入:

DOL501然后按回车键执行。90(2)运行程序下面的任一方法均可运行程序:DO<程序文件2.保存程序程序输入、编辑完毕,单击【文件】|【保存】菜单项,在“另存为”对话框中指定程序文件的存放位置和文件名,并单击“保存”按钮保存程序文件并退出文本编辑器。程序文件的默认扩展名是.PRG。

912.保存程序103.执行程序程序文件建立后,可以用多种方式、多次执行它。下面是两种常用的方式。(1)菜单方式①

单击【程序】|【运行】菜单项,打开“运行”对话框;②

从文件列表框中选择要运行的程序文件,并单击“运行”命令按钮,启动运行该程序文件

(2)命令方式【格式】DO[<盘符>][<路径>\]<文件名>【功能】执行指定<盘符>、<路径>下的程序文件

923.执行程序11执行程序文件时,将依次执行文件中的命令,直到所有命令执行完毕,或者执行到以下命令:①CANCAL:终止程序运行,清除所有的私有变量,返回命令窗口;③RETURN:结束程序执行,返回调用它的上级程序,若无上级程序则返回命令窗口;④QUIT:结束程序执行并退出VisualFoxPro系统,返回操作系统

93执行程序文件时,将依次执行文件中的命令,直到所有命令执行完毕6.1.3简单的输入输出命令6.1.3简单的输入输出命令1.字符接收语句ACCEPT命令【功能】在程序执行过程中,将用户交互式输入的内容作为字符串赋值给指定内存变量。该命令只接受字符型数据,输入的字符串不需要加定界符,否则,系统会把定界符作为字符串本身的一部分。

格式:ACCEPT[<字符表达式>]TO<内存变量名>

946.1.3简单的输入输出命令6.1.3简单的输入【例6-2】编程从键盘输入某数据库的文件名,要求打开该数据库并显示其内容。程序文件名为PROG2.PRGSETTALKOFFCLEARACCEPT“请输入数据库名:”TOAAAOPENDATABASE&AAAACCEPT“请输入表名”TOBBBUSE&BBBLISTUSESETTALKONRETURN95【例6-2】编程从键盘输入某数据库的文件名,要求打开注:ACCEPT语句只能给字符型内存变量提供数据。如果用户想给其它类型的内存变量提供数据,可以使用下列命令:2.通用数据接收命令----INPUT命令

该命令等待用户从键盘输入数据,用户可以输入任意合法的表达式。当用户以回车键结束输入时,系统将表达式的值存入指定的内存变量,程序继续运行。功能:(1)若选用<字符表达式>,系统会首先显示该表达式的值,作为提示信息。(2)输入的数据可以是常量、变量等,但不能不输入任何内容直接按回车键。INPUT语句与ACCEPT语句的区别是:ACCEPT命令只能接收字符串,而INPUT语句可以接收任意类型的VFP表达式;如果输入的是字符串,ACCEPT语句不要使用字符型定界符,而INPUT语句必须用定界符括起来。格式:INPUT[<字符表达式>]TO<内存变量名>96注:ACCEPT语句只能给字符型内存变量提供数据。如果用户【例6-4】从键盘输入两个任意正数,编程求以两数为边长的长方形面积。程序文件名为PROG4.PRGSETTALKOFFCLEARinput“长方形一边的长为:”TOAINPUT“长方形另一边的长为:”TOBS=A*B?“长方形的面积为:”,SSETTALKONRETURN97【例6-4】从键盘输入两个任意正数,编程求以两数为边长的长方3.输入一个字符语句----WAIT命令【功能】显示提示信息,暂停程序执行,直到用户按任意键或单击鼠标时继续执行程序。若选择可选项[TO<内存变量>],将输入的单个字符作为字符型数据赋给指定的<内存变量>;若用户是按Enter键或单击鼠标,<内存变量>的值为空串。若省略所有可选项,屏幕显示“键入任意键继续……”默认提示信息

格式:WAIT[<字符表达式>][TO<内存变量名>]983.输入一个字符语句----WAIT命令格式:WAIT[例:wait"输入无效,请重新输入!"window timeout5 命令执行时,在主窗口右上角出现一个提示窗口,其中显示提示信息“输入无效,请重新输入!"。之后,程序暂停执行。当用户按任意键或超过5秒钟时,提示窗口关闭,程序继续执行。99例:18【例6-6】在STUDENT数据库的STUD表中显示任意一个系学生的情况。程序文件名为PROG6.PRGSETTALKOFFCLEAROPENDATABASESTUDENTUSESTUDWAIT“请输入待查学生的系号(1—3):”TONIFVAL(N)<1.OR.VAL(N)>3WAIT“输入无效,结束程序运行!”WINDOWTIMEOUT5RETURNELSESTORE“0”+NTOAAALISTFOR系别号=AAAENDIFCLOSEDATABASESETTALKONRETURN100【例6-6】在STUDENT数据库的STUD表中显示任意一个4.三条输入命令的异同ACCEPT命令只能接受字符型数据,不需定界符,输入完毕按回车键结束;WAIT命令只能输入单个字符,且不需定界符,输入完毕不需按回车键;INPUT命令可接受数值型、字符型、逻辑型、日期型和日期时间型数据,数据形式可以是常量、变量、函数和表达式,如果是字符串,需用定界符,输入完毕按回车键结束。

1014.三条输入命令的异同20练习:在INPUT、ACCEPT和WAIT三个命令中,必须要以回车键表示输入结束的命令是A)INPUT、ACCEPTB)INPUT、WAITC)ACCEPT、WAITD)INPUT、ACCEPT和WAIT102练习:在INPUT、ACCEPT和WAIT三个命令中,必须要二、结构化的程序设计三大结构:顺序结构、选择结构、循环结构。1、顺序结构 按命令在程序中出现的先后次序依次执行。103二、结构化的程序设计22

分支结构形式有如下三种:1.单向分支单向分支语句,即根据用户设置的条件表达式的值,决定某一操作是否执行。(1)语句格式:IF〈条件表达式〉〈命令行序列〉ENDIF(2)语句功能:该语句首先计算〈条件表达式〉的值,当〈条件表达式〉的值为真时,执行〈命令行序列〉;否则,执行ENDIF后面的第一条命令。分支结构

104分支结构形式有如下三种:分支结构23【例6-7】求一元二次方程AX2+BX+C=0的实根。程序文件名为PROG7.PRG。SETTALKOFFCLEARINPUTTOA2INPUTTOB3INPUTTOC4Z=B^2-4*A*CIFZ>=0X1=(-B+SQRT(Z))/(2*A)X2=(-B-SQRT(Z))/(2*A)?X1,X2ENDIFSETTALKONRETURN105【例6-7】求一元二次方程AX2+BX+C=0的实根。程序文

2.双向分支双向分支语句,即根据用户设置的条件表达式的值,选择两个操作中的一个来执行。(1)语句格式:IF〈条件表达式〉〈命令行序列1〉ELSE〈命令行序列2〉ENDIF(2)语句功能:该语句首先计算〈条件表达式〉的值,当〈条件表达式〉的值为真时,执行〈命令行序列1〉中的命令;否则,执行〈命令行序列2〉中的命令;执行完〈命令行序列1〉或〈命令行序列2〉后都将执行ENDIF后面的第一条命令。1062.双向分支25【例6-10】编写一密码校验程序(假设密码为ABC)。程序文件名为PROG10.PRG。SETTALKOFFCLEARACCEPT“请输入您的密码:”TOAAAIFAAA=”ABC”CLEAR?“欢迎使用本系统!”ELSE?”密码错误!”WAITreturnENDIFSETTALKON107【例6-10】编写一密码校验程序(假设密码为ABC)。程序文例1:从屏幕输入你的身份,如果是学生,则显示“好好学习,天天向上”ClearAccept“请输入你的身份”toSFIFSF=“学生”??“好好学习,天天向上!”Endif例2:从屏幕输入一个数字型数据到变量X中,如果x≤200,则给其加500;如果200<x≤300,则加300;否则加100在屏幕上输出x的值。Clearinput“请输入一个数字型数据:”toxIfx<=200X=x+500ElseIfx>200andx<=300X=x+300ElseX=x+100EndifEndifClear?x108例1:从屏幕输入你的身份,如果是学生,则显示“好好学习,天天P186页一、选择题4、有如下程序:Inputtoa100Ifa=10s=0EndifS=1?s假定在键盘输入的A的值一定是数值型,那么上面条件选择程序的执行结果是:A、0B、1C、由A的值决定D、程序出错109P186页一、选择题28P187页第二填空题1、有一分支程序为:Ifs>100dop1.prgElseifs>10dop2.prgelseifs>1dop3.prgelsedop4.prg

温馨提示

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

评论

0/150

提交评论