资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,二级,三级,四级,五级,*,第六章,程序设计基础,在前面的章节中介绍了基本的数据库管理操作命令,它们基本上都是以单个命令方式来实现的,这种,交互方式,虽然简单,但对于某些经常执行的操作,需要反复地输入命令再执行,工作量大、效率低。为解决以上问题,可采用,vf,提供的,。,Vf,程序设计包括,面向过程程序设计,和,面向对象程序设计,,前者是后者的基础。,6.1 程序文件的建立与运行,1.程序文件的概念,程序是为实现某一具体任务而按照一定的控制结构编制的命令序列。将程序以文件的形式存储在磁盘上,这种文件称为“程序文件”。,程序一般由以下要素组成:,(1)变量:参与运算,用于记录、存储程序的中间及最终结果。,(2)普通语句:操作数据库的命令(含SQL命令)和专用于程序设计的输入输出等语句。,(3)程序流程语句:控制程序走向的语句,如选择、循环等。,(4)过程与函数:完成特定功能或计算的子程序模块。,2.程序文件的建立与编辑,三种建立方法:,1)从项目管理器新建程序文件,2)从“文件”菜单新建程序文件。,3)在命令窗口中执行命令:,MODIFY COMMAND,2.程序文件的保存,程序输入完毕后,从“文件”菜单选择“保存”或按CTRL+W保存程序文件。,3.程序文件的修改,方法1)若程序文件已建在某一项目中,则从项目管理器中选定它并单击“修改”按钮。,方法2)从“文件”菜单选择“打开”,或者单击常用工具栏上的“打开”按钮,在“打开”对话框选定要修改的程序文件后单击“确定”按钮。,方法3)在命令窗口中执行:,MODIFY COMMAND,程序文件名,4.程序文件的运行,方法1)若程序文件已建在某一项目中,则从“项目管理器”中选定它并单击“运行”按钮。,方法2)从“程序”菜单中选择“运行”,选定要运行的程序文件后单击“运行”按钮。,方法3)在命令窗口中执行命令:,DO 程序文件名,例6.1,请编写一程序文件,名为:学生人数.prg,实现统计student表中奖学金在 200300元之间的学生人数,并与书中例5.4(p88)进行比较。,6.2 结构化程序设计初步,1.算法及流程图,(1)算法的概念:根据问题要求拟定用计算机求解的策略和步骤,并把它用某种工具描述出来,称之为“算法设计”。,(2),算法的流程图描述,:用一些简单的几何框图表示各种类型的操作,然后用带箭头的有向流线将各个框图连结起来,以表示其执行的先后顺序,这种框图称为“流程图”。,例6.2,试写出算法,以交换变量x 和y的值。,例6.3,试画出流程图,以计算自然数1100的和。(如下图),2.结构化程序设计方法,结构化程序指整个程序由顺序、选择、循环三种基本结构组成。,半圆框称为起止框,用来表示程序的开始和结束;,矩形框称为处理框,用来表示数据的输入、输出及加工等问题;,菱形框称为判断框,用来表示条件判断;,箭头即指向线,用来表示程序的流向或途径。,最常用的流程图符号如下所示:,计算123100。,的流程图,S:存储每次累加的部分和,n:表示每次应加的数,6.3 顺序结构程序设计,1.顺序结构,程序运行时,按照命令(语句)的排列顺序逐条执行,这种结构就称为顺序结构。,2.简单的输入输出语句,(1),数据输入语句:INPUT,1)格式:INPUT TO,2)功能:暂停程序运行,显示提示信息,等待用户从键盘上输入数据,用户可以输入任意合法的表达式。,例6.4,运行下段程序:,input“请输入一个数字:”to a1,input “请输入一个字符串:”to b1,(4),简单输出语句:?、?,1)格式:?/?,2)功能:依次计算并显示表达式表中各表达式的值,所显示的值与值之间间隔一个空格。,例6.5,运行下段程序,input“a=?”to a,?A*5,a+8,(5)信息显示函数:MESSAGEBOX(),1)格式:MESSAGEBOX(,),2)功能:暂停程序运行,在对话框中显示提示信息,等待用户单击按钮,并返回一个整数表示单击的是哪个按钮。,由三个数码相加产生,即:+,例6.6,:,MESSAGEBOX函数举例,MESSAGEBOX,函数举例,对话框图示,MESSAGEBOX(,“欢迎使用本系统!”,),MESSAGEBOX(,“删除记录?”,1+48+256,),MESSAGEBOX(,“继续执行吗?”,3,”请确认”,),3.环境设置语句,(1)清屏语句:CLEAR,1)格式:CLEAR,2)功能:清空屏幕或当前窗口中显示的内容。,(2)环境设置语句:SET,设置系统环境和状态的语句为 SET语句,SET语句实际上是一个语句组,分为两种格式:,格式 SET ON/OFF,格式 SET TO,常用的几个SET语句:,(1)SET DEFAULT TO 功能:设置默认的工作目录。,(2)SET PATH TO 功能:设置搜索路径。,(3)SET TALK,ON,/OFF 功能:控制是否使某些命令产生屏幕显示(P131提示),(4)SET PRINT ON/,OFF,功能:控制屏幕上的输出内容是否同时送打印机打印。,例6.7,编程显示下列三角形图案,*,*,*,程序:,clear,?“*”,?”*”,?”*”,return,作业,:,编程显示下列平行四边形图案:,*,*,*,4.注释,(1)注释语句,1)格式,*,/NOTE,2)功能,注释语句是非执行语句,它们不对计算机产生任何操作,仅仅对程序起注解作用。,(2)行末注释,行末注释用在语句(命令)末尾,以“,&,”起头,后跟本行的注释内容。,6.4 程序的选择结构,选择结构是指在程序执行过程中,根据指定条件的当前值在,两条或多条程序路径,中选择一条执行。通常选择结构有,三种形式,。,1.单分支选择结构,(1)格式,IF ,ENDIF,(2)功能:执行该语句,先判断条件的值是否为真,然后决定程序运行的走向。,(3)注意:成对出现。(P133提示),例:从键盘接收两个数,在屏幕输出大数。,INPUT X=TO X,INPUT Y=TO Y,IF XY&如果Xy,?“最大数是:”,x,else,?“最大数是:”,y,endif,retu,3.多分支选择结构,(1)格式:,DO CASE,CASE,CASE,CASE,OTHERWISE,ENDCASE,(2)功能:执行该语句,系统,依次,检查每一个CASE中条件的值,视其真假决定程序的走向。,P135功能说明及提示,条件n,条件2,条件1,语句序列1,语句序列n+1,语句序列n,语句序列2,ENDCASE的下一语句,多分支选择结构流程图,例:,当输入06之间的整数时,系统便显示星期日、星期一星期六的英语单词,否则显示“输入数据出错”的信息,试编程实现之。,clear,input“请输入一个整数”to n,do case,case n=0,?“Sunday”,case n=1,?“Monday”,case n=2,?“Tuesday”,case n=3,?“Wednesday”,case n=4,?“Thursday”,case n=5,?“Friday”,case n=6,?“Saturday”,otherwise,?“输入数据出错”,endcase,retu,作业,:书本P161 三.操作题 2(参考学习指导书),6.5 循环结构,循环结构是指根据指定条件的当前值来决定一行或多行语句(命令)是否要重复执行。VFP6.0提供了三种循环结构。,1.DO WHILE循环,(1)DO WHILE循环结构,(1)格式,DO WHILE,ENDDO,(2)功能,执行DO WHILE语句时,首先计算判断条件的值,若条件的值为真,则顺序执行循环体,然后再返回到do while,再次计算判断条件的值,若条件为真,则重复上述过程;若条件为假,则执行enddo的下一个语句。,(3)注意:do while与enddo必须成对出现;防止死循环,DO WHILE循环流程图,例:,计算自然数1100的和。,S=0&存放累加和的变量S初值为0,N=1&取第一个自然数,DO WHILE N=90,dj=“A”,case cj=80,dj=“B”,case cj=70,dj=“C”,case cj=60,dj=“D”,otherwise,dj=“E”,endcase,?“成绩是“,cj,?“等级是“,dj,return,例3.依次显示student表中1980年出生的学生记录。,clear,use student,scan all for year(出生日期)=1980,display,messagebox(“按任一键继续”),endscan,use,return,作业,:用FOR循环编写程序,求1100的奇数和。,输入一个成绩等级,要求输出相应的分数段。等级为“A”、“”、“”、“”、“”。90分以上为“A”,8089分为“”,7079分为“”,6069分为“”,60分以下为“”。,4.循环的嵌套,例:,某学生食堂采购员带1000元钱去市场买鸡,已知每只小鸡5元,每只公鸡20元,每只母鸡30元,现在要求1000元钱正好买100只鸡且品种齐全,请编程序帮助采购员制订采购方案。,CLEAR,FOR I=1 TO 33&最多可以买33只母鸡,FOR J=1 TO 50&最多可以买50只公鸡,FOR K=1 TO 100&最多可以买100只小鸡,IF 30*I+20*J+5*K=1000 AND I+J+K=100,?I,J,K,ENDI,ENDF,ENDF,ENDF,6.6 过程,1.过程的定义,(1)外部过程的定义,1)格式,PARAMETERS,RETURN TO MASTER,2)功能,用一个程序文件单独定义一个过程,,该过程名就是该程序文件名。,例,:,定义一个外部过程JS.PRG,该过程能接收外部参数R,并计算园的面积S。,PARAMETERS R,S=PI()*R*R,?”园的面积=”,S,RETURN,一个大的应用程序通常包含数据的输入、修改、查询、打印等相对独立的,程序段(模块),,可分别用一个过程或自定义函数来实现,再通过模块间的调用实现整个程序的功能。习惯上称调用其他程序的程序为,主程序,,被其他程序调用的程序为,子程序(过程)。,(2)内部过程的定义,1)格式,PROCEDURE ,PARAMETERS,RETURN TO MASTER,ENDPROC,2)功能:将一个语句系列定义为以为名的过程。,(3)过程文件的定义,过程文件也是个.PRG文件,由若干个过程组合而成。,(P147,例6.24),2.过程的调用,(1)调用程序文件中的过程,1)格式:DO WITH,2)功能:调用指定的过程。,3)过程调用关系P148图6-15,例,:,编一主程序,实现调用独立文件过程JS.PRG。,SET TALK OFF,CLEAR,DO WHILE.T.,INPUT 请输入园的半径输入零时结束:TO BJ,IF BJ=0,EXIT,ENDIF,DO JS WITH BJ&调用JS,传递参数BJ,ENDDO,RETURN,(2)调用过程文件中的过程,操作步骤:打开过程文件调用过程关闭过程文件。,1)打开指定的过程文件,格式:SET PROCEDURE TO,2)调用已打开过程文件中的过程,格式:DO WITH,3)关闭当前打开的过程文件,格式:SET PROCEDURE TO 或 CLOSE PROCEDURE,例:P149 例6.27,6.7 参数传递与变量作用域,1.参数的传递,1格式,传递参数语句格式:DO WITH,接收参数语句格式:PARAMETERS,2规则,(1)DO语句可以用在调用程序中的任何,位置,,而PARAMETERS语句必须放在过程的第一个可执行语句之前。,(2)调用过程时系统会将实参按排列顺序一一,传递,给对应的形参。,(3)形参,形式,上同内存变量,而实参可以是常量、内存变量或表达式。,3,两种传递机制,(1)按值传递:调用程序向过程的单向传递(当实参是常量或表达式时),(2)按地址传递:双向传递(当实参是变量时),例:p151 例6.27,Vf在调用过程时,常需要在调用程序与过程之间实现数据传递。实现它有两种方法:参数传递、变量作用域。,例:,分析下列程序的执行结果。,CLEAR,STORE BOYS!TO X,Y,?调用前:,X+Y,DO SUB1 WITH X,(Y),?调用后:,X+Y,RETURN,PROC SUB1,PARA X1,Y1,?过程中:,X1+Y1,STORE GIRLS!TO X1,Y1,RETURN,ENDP,分析:这是一个主程序调用一个内部过程SUB1,内存变量X、Y为实参,调用SUB1时X按地址传递到X1,Y按值传递给Y1,故在SUB1中输出X1+Y1结果仍是”BOYS!BOYS!”,随后在SUB1中把X1、Y1的值改为”GIRLS!,实参X的值也就改成GIRLS!,实参Y不受影响;所以返回主程序后输出X+Y结果是”GIRLS!BOYS!”。,2.变量作用域及其定义,1.变量作用域的含义,内存变量的有效作用范围称为内存变量的作用域。根据作用域的不同,内存变量可分为全局变量、私有变量和局部变量三种类。,(p152表6-4,),2.含作用域的变量定义,(1)全局变量的定义,1)在命令窗口创建的变量和数组将自动成为全局变量。,2)用PUBLIC语句定义:,格式:PUBLIC,功能:定义全局内存变量和数组。,参数说明:逐一列出作为全局变量的内存变量和数组,其中数组用数组名或数组说明均可。若用数组说明,其格式如下:数组名(,)。,例:P153 例6.29,(2)局部变量的定义,局部变量只能用LOCAL语句定义。,格式:,LOCAL,功能:定义局部内存变量和数组,并,屏蔽,来自上级过程(含主程序)中与当前局部变量同名的全局或私有变量,使在当前过程中对局部变量的操作,不影响上级过程中同名变量的值。,(3)私有变量的定义,1)在一个程序或过程中建立的内存变量,如果未加任何说明,默认为私有变量。,2)用PRIVATE语句定义:,格式:,PRIVATE,格式:PRIVATE ALL LIKE/EXCEPT,功能:定义私有内存变量和数组,并,屏蔽,来自上级过程(含主程序)中与当前私有变量同名的全局或私有变量,使在当前过程中对私有变量的操作,不影响上级过程中同名变量的值。,例:p154例6.30 (简析),格式中的参数说明:,ALL:表示当前所有的内存变量均为私有变量。,ALL LIKE:表示所有与相匹配的变量均为私有变量。,ALL EXCEPT:表示所有不与相匹配的变量均为私有变量。,全局(PUBLIC)变量,局部(LOCAL)变量,私有(PRIVATE)变量,作用,域,整个系统的所有程序。,当前程序(过程),。,当前程序(过程)及其下属过程。,变量,寿命,即使所有程序运行结束,内存中也仍然保存该变量。,当前程序(过程)运行结束后,该变量被自动清除。,数据,传递作用,任意一对调用程序与被调过程间双向传递。,无。,从当前程序(过程)到其下属过程之间双向传递。,例:,若有程序文件如下:,CLEAR,PUBLIC A,PRIVATE B,LOCAL C,STORE 10 TO A,B,C,DO SUB1,?A,B,C,RETURN,PROC SUB1,?A,B,A=A+5,B=B+10,RETURN,本例中,全局变量A和私有变量B在主程序和内部过程SUB1之间双向传递数据,局部变量C的作用域是主程序本身,不能传递数据。如果在内部过程SUB1中增加?C语句,程序执行时就会报错,因为在SUB1中找不到变量C。,6.8 定义函数,1.自定义函数的定义,自定义函数的定义也有两种形式,一是存放在调用程序所在文件或过程文件中的自定义函数,称作“,内部自定义函数,”;二是单独存放在一个程序文件中的自定义函数,称作“,外部自定义函数”或“独立文件函数”。,1.内部自定义函数的定义,(1)格式,FUNCTION ,PARAMETERS,RETURN,ENDFUNC,(2)功能,定义个以为名的自定义函数,该函数以中所列的形参为自变量,RETURN后的值为函数的返回值。若无PARAMETERS语句,则该自定义函数为无参函数。,2.外部自定义函数的定义,(1)格式,PARAMETERS,RETURN,(2)功能,用一个程序文件单独定义一个函数,该程序文件名就作为自定义函数名,该函数以中所列的形参为自变量,RETURN 后的值就是函数的返回值。,2.自定义函数的调用,自定义函数的调用方式与过程不同,它不能用D0命令调用而只能像标准函数一样调用并出现在表达式中。调用格式如下:,(),3.自定义函数的参数传递(,了解,),(1)如果实参以,常量或表达式,形式出现,那么实参,按值传递,给形参,被调函数只能通过RETURN语句返回一个函数值。,(2)如果实参以,内存变量,形式出现,那么有,两种可选择,的参数传递方式:值传递方式与地址传递方式,由命令 SET UDFPARMS TO VALUE/REFERENCE确定。,SET UDFPARMS TO VALUE,设置变量实参按值传递给形参。这是系统默认的传递方式。,SET UDFPARMS TO REFERENCE,设置变量实参按地址传递给形参。,此课件下载可自行编辑修改,供参考!,感谢您的支持,我们努力做得更好!,
展开阅读全文