VFP数据库系统Visual FoxPro程序设计基础_第1页
VFP数据库系统Visual FoxPro程序设计基础_第2页
VFP数据库系统Visual FoxPro程序设计基础_第3页
VFP数据库系统Visual FoxPro程序设计基础_第4页
VFP数据库系统Visual FoxPro程序设计基础_第5页
已阅读5页,还剩85页未读 继续免费阅读

下载本文档

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

文档简介

第六章 VFP程序设计基础6.1 程序设计地基本概念6.1.1 VFP程序设计地概念程序:能够完成一定任务地命令地有序集合。这组命令被存放在一个称为程序文件或命令文件地文本文件中。当运行程序时,系统会根据一定地次序自动执行包含在程序文件中地命令。6.1.2 算法介绍算法概述算法:是解决"做什么"与"怎么做"地问题。广义地说,为解决一个问题而采取地方法与步骤,就称为"算法"。一个程序可以描述如下:程序=算法+数据结构+程序设计方法+语言工具与环境2.简单算法举例例6.1求半径为2地圆地面积步骤1:假设半径用R,面积用S表示。令R=2步骤2:S=3.14^R2步骤3:输出S地值 程序清单如下:SETTALKOFFCLEARr=2s=3.14*r^2?"面积s=",sSETTALKONRETURN算法地特性(1)有穷性。(2)确定性。(3)有零个或多个输入。(4)有一个或多个输出。(5)有效性。算法地表示(1)自然语言例6.5将两个变量X与Y地值互换。用自然语言描述如下:步骤1将X值存入中间变量Z中:X→Z步骤2将Y值存入变量X中:Y→X步骤3 将中间变量Z地值存入Y中:Z→Y(2)伪代码(pseudocode)一般介于自然语言与程序设计语言之间,它具有自然语言灵活地特点,同时又接近于程序设计语言地描述。例6.6将两个变量x与y地值互换,可以用伪代码描述如下:BEGINX→ZY→XZ→YEND(3)流程图流程图是用一些图框,流程线以及文字说明来表示算法。用图来表示算法,直观,形象,容易理解。①传统流程图

起止框输入输出处理框判断框流程线n连接点 n注释②结构化流程图A语句1语句2B(A)

A成立不成立条件?语句序列1语句序列2B(B)顺序结构与选择结构流程图循环结构流程图A条件 不成立?成立语句序列1BA

A语句序列1条件成立 ?不成立BB判断一个数是否是素数地算法用流程图6.2 VFP6程序设计步骤对问题进行说明。分解问题。编制各模块。测试并完善各模块。组装全部模块。整体测试。

总体来讲,VFP应用程序设计地步骤包括:应用程序地建立,应用程序地运行与应用程序地修改调试。6.2.1 应用程序地建立菜单方式下应用程序地建立在"文件"菜单中选择"新建"命令,在"新建"对话框中选择"程序",选择"新建文件"按钮,便进入到程序编辑窗口,命令方式下应用程序地建立格式:MODIFYMAND[<程序名>]在程序编辑窗口中,输入并编辑程序内容,输入完毕后,可以单击"文件"菜单下地"关闭"选项退出,或按Ctrl+Esc键放弃当前编辑地文件退出,也可按Ctrl+W或Ctrl+End键存盘退出6.2.2 应用程序地运行在"程序"菜单中选择"运行"菜单项。在程序列表中,选择想要运行地程序,单击"运行"按钮。在"命令"窗口中,按如下方式键入DO以及要运行地程序名:格式:Do<应用程序名>[WITH<参数表>]功能:将指定文件调入内存并运行。6.2.3 应用程序地修改在"命令"窗口中按如下方式键入要修改地程序名。MODIFYMAND[程序名]按下Ctrl+W或Ctrl+End键存盘退出。同时系统自动将修改前地程序内容复制到一个同名地备份文件(.Bak)中。按下Esc键或CTRL+Q,即放弃本次修改操作。6.3 VFP程序设计语言基础工作方式VFP系统支持两种工作方式:交互方式,程序方式。语言类型既是一种解释型语言,也是一种编译型语言。程序结构可使用结构化地程序结构,面向对象地程序结构。程序功能提供了大量地命令,系统变量与函数,预装地类库6.3.2 源程序地组成前 言:多为一组注释语句。设置区:用以指出设置程序地运行环境。程序体:包含数据地输入输出,数据地处理以及结果输出等有关命令。整理部分:如关闭各种文件,使系统状态恢复到其标准预定值。程序地退出:设置有关命令关闭文件返回到系统地命令窗口状态或操作系统状态。常用地输入语句(1)INPUT命令格式:INPUT[<提示信息>]TO<内存变量>功能:暂停程序地执行,等待用户从键盘上键入表达式并将表达式地值赋给指定地内存变量,待按回车键后,继续运行程序。说明:①若选用提示信息,系统将先显示提示信息地值作为提示信息,并将输入地数据赋值给<内存变量>。②可以输入字符型,数值型,逻辑型,日期型与日期时间型等类型数据,而且可以是常量,变量,函数或表达式等形式,按回车键结束输入。③输入非数值型数据要加定界符。如输入逻辑型常量时要用圆点定界(.T.),输入日期型常量要用大括号{^2007-05-10}等。例:在命令窗口输入命令:INPUT"请输入教师地姓名:"TOxm运行上述命令时,屏幕上显示提示信息:请输入教师地姓名:用户键入数据:"张三"检查上述命令地执行结果,在命令窗口输入命令:?xm屏幕显示:张三(2) ACCEPT命令格式:ACCEPT[<提示信息>]TO<内存变量>功能:暂停程序地运行,等待用户从键盘上输入字符型常量以赋给指定地内存变量。说明:①若选用提示信息,系统将先显示提示信息地值作为提示信息,并将输入地字符串赋值给<内存变量>。②该命令只能接收字符串,而不需加定界符,③若不输入任何字符而直接按回车键,系统将把空串赋值给指定地内存变量。(3) WAIT命令系统提供地单字符输入命令,即等待命令。格式:WAIT[<提示信息>][TO<内存变量>][WINDOW[AT<行>,<列>]][NOWAIT][CLEAR|NOCLEAR][TIMEOUT<数值表达式>]功能:暂停程序地执行,等待用户从键盘上单击某键或单击鼠标后继续程序地执行。说明:①若选用提示信息,系统将先显示提示信息地值作为提示信息,并将输入地单字符赋值给<内存变量>。若不选用提示信息,则显示默认地提示信息"按任意键继续……"。②<内存变量>用来保存用户键入地单字符,其类型只能是字符型。若不选TO<内存变量>短语,键入地单字符不保留。③如果指定WINDOW子句,则会出现一个WAIT提示窗口常用地输出语句(1)格式:?|??表达式1[,表达式2]…功能:计算表达式地值,输出计算结果。(2)格式输入输出命令格式:@<行,列>[SAY表达式1][GET<内存变量>][DEFAULT表达式2]功能:在指定地行,列位置显示或打印输出结果,也可接受数据地输入。常用地辅助命令(1)注释命令帮助其它用户读者了解程序地结构及命令地功能格式1:NOTE<注释内容>格式2:*<注释内容>功能:作为一个独立地语句行注明程序地名称,功能,提示说明或其它备忘标记。格式3:……&&<注释内容>功能:置于某命令行之后.例:SETCONSOLEOFF &&取消窗口地输出显示注释命令是非执行语句。(2)环境命令状态转换开关,当命令置为"On"时,开启指定地某种状态;而置为"OFF"时则关闭该种状态。SETTALKON/OFF设置是否将所有命令地执行结果显示到主窗口地状态栏中SETCONSOLEON/OFF设置是否将输出信息在窗口上显示SETPRINTERON/OFF设置是否在打印机上输出信息SETSAFETYON/OFF设置在改写文件时,VFP是否显示对话框以确认改写有效SETHEADINGON/OFF设置在执行LIST,DISPLAY等命令时是否显示字段名SETSTATUSON/OFF设置是否显示屏幕下端地状态行SETDEFAULTTO<盘符>设置默认地驱动器(3)清除命令格式1:CLEAR功能:清除当前屏幕上地所有信息,并将光标置于屏幕地左上角,同时从内存中释放指定项。格式2:CLEARALL功能:关闭所有文件,释放所有内存变量,将当前工作区置于1号工作区。格式3:CLEARTYPETHEAD功能:清除键盘缓冲区,以便正确地接收用户键入地数据。(4)关闭文件命令格式1:CLOSEALL功能:关闭所有工作区中以打开地数据库,表以及索引文件,将工作区置于1号工作区。格式2:CLOSE<文件类型>功能:关闭<文件类型>指定地所有文件。说明:<文件类型>地可选标识符及其所代表地文件类型(5)运行中断与结束命令格式1:QUIT功能:关闭所有文件,结束当前VFP工作器,将控制权交还给操作系统。格式2:CANCEL功能:中断程序运行,关闭所有文件,释放所有局部变量,将控制权交还给命令窗口或操作系统。格式3:RETURN[TOMASTER]功能:将程序控制权交还给调用它地上一级程序或最高一级地主程序。格式4:RELEASE<THISFORM>功能:终止表单地运行。(6)文本显示命令格式:TEXT<文本内容>ENDTEXT功能:将<文本内容>原样显示输出。说明:<文本内容>中地信息无论是什么,系统都将它们作为文本内容地进行显示,而不将它们作为特定地语句处理。6.4顺序结构程序地基本结构包括:顺序结构,分支(选择)结构,循环结构。顺序结构是在程序执行时,根据程序中语句地书写顺序依次执行地命令序列。VFP系统中地大多数命令都可以作为顺序结构中地语句。例6.11从键盘上输入圆地半径,求圆地面积程序清单如下:SETTALKOFFCLEARINPUT"enter半径r:"TOrs=3.14*r^2"面积S=",sSETTALKONRETURN例6.12从教师情况表当中查获姓名为王小强地人,并显示其信息。程序清单如下:SETTALKOFFCLEARUSEe:\xly\jsgl\jsqk.DBFLOCATEFORxm="王小强"DISPLAYUSESETTALKONRETURN6.5选择(分支)结构6.5.1 单分支结构格式:IF<条件表达式><语句序列>ENDIF功能:首先计算<条件表达式>地值,然后对其值进行判断,若其值为真(.t.),则顺序执行<语句序列>;若其值为假(.f.),则跳过<语句序列>(即不执行<语句序列>),执行Endif语句之后地后续语句例6.13从键盘上输入任意x地值,求x地绝对值程序清单如下:SETTALKOFFCLEARINPUT"enterx:"TOxIF x<0x=-xENDIF"x地绝对值为",xSETTALKONRETURN例6.14修改教师情况表中查找王小强地教师,将其职称由"副教授"改为"教授"。程序清单如下:SETTALKOFFCLEARUSEe:\xly\jsgl\jsqk.DBFLISTLOCATEALLFORxm="王小强"IFzc="副教授"REPLACEzc WITH"教授"ENDIFLISTUSE6.5.2 双分支结构格式:IF<条件表达式><语句序列1>ELSE<语句序列2>ENDIF例6.15从键盘输入一年份,判断是否是闰年。根据前面算法分析,程序清单如下:SETTALKOFFCLEARINPUT"enter年份:"TOYIFMOD(Y,4)=0ANDMOD(Y,100)<>0ORMOD(Y,100)=0ANDMOD(Y,400)=0Y,"是闰年"ELSEY,"不是闰年"ENDIFSETTALKONRETURN例6.17在教师工资表中查找编号为40001号地教师,如果其基本工资大于1700元,显示其编号与基本工资,否则将其基本工资改为1700,并计算其增加地工资额。程序清单如下:SETTALKOFFCLEARUSEe:\xly\jsgl\jsgz.DBFLISTLOCATEFORbh="40001"IFjbgz>1700?"编号:"+bh?"基本工资:"+STR(jbgz)ELSEjbgz1=jbgzREPLACEjbgzWITH1700addgz=1700-jbgz1"编号:"+bh"增加工资额:"+STR(addgz,6,2)ENDIFUSESETTALKONRETURN6.5.3 多分支结构功能:依次判断多个条件表达式,选择执行第一个逻辑值为真地<条件表达式>所对应得到语句序列

格式:DOCASECASE<条件表达式1><语句序列1>CASE<条件表达式2><语句序列2>……CASE<条件表达式N><语句序列N>[OTHERWISE<语句序列N+1>]ENDCASE例6.18利用多分支语句实现显示当前季节。SETTALKOFFCLEARyue=MONTH(DATE())&&获取当前月份DOCASECASEyue>=3ANDyue<=5season="春"CASEyue>=6ANDyue<=8season="夏"CASEyue>=9ANDyue<=11season="秋"CASEINLIST(yue,12,1,2)season="冬"ENDCASEWAITseasonWINDOW &&当前季节显示在Wait提示窗口内SETTALKONRETURN6.6 循环结构要使某些语句能重复执行若干次,则需要通过循环结构来实现。程序设计中地循环结构是指在程序中,从某处开始有规律地反复执行某一段程序地现象。被重复执行地程序段称为循环体,循环体地执行与否及次数多少视循环类型与条件而定。无论何种类型地循环结构,其共同地特点是需要确保循环体地重复执行能被终止(即不能是无限循环)。6.6.1 条件循环(While循环)格式:DOWHILE<条件表达式><语句序列>[EXIT][LOOP]<语句序列>ENDDO功能:首先计算<条件表达式>地值,若其值为真(.T.),则执行循环体。遇到循环终端语句(或LOOP),就返回循环起始语句重新计算与判断<条件表达式>地值,若其值仍为真(.T.),则重复上述操作,直至其值为假(.F.)或遇到(EXIT语句)为止,则退出循环而执行循环终端语句地后续语句。说明:循环起始语句(DOWHILE<条件表达式>)地作用是判断循环地条件是否满足。满足时则执行循环体,否则退出循环。语句中地<条件表达式>地值需要是逻辑型地数据。循环终端语句地作用是标明循环地终点。它需要与循环起始语句成对出现。循环短路语句(LOOP)为可选项,其作用是迫使程序不再执行其后至ENDDO语句之间地语句序列,而返回到循环起始语句使循环流程短路。循环断路语句(EXIT)也是可选项。其作用是无条件地迫使程序中断而转去执行ENDDO语句地后续语句。SETTALKOFFCLEARs=0i=1DOWHILE i<=100s=s+ii=i+1ENDDO?"总与为",sSETTALKONReturn例6.20:试用DoWhile循环语句设计一个有关教师管理地主控程序,用户通过键盘选择菜单,以实现不同功能模块地调用或退出运行。SETTALKOFFDOWHILE.T.CLEARTEXT&&功能菜单教师管理系统12查询-----统计-----修改-----3退出-----0ENDTEXTWAIT"请键入功能选择代号(0-3):"TOdhDOCASECASEdh="1"DO查询&&调用"查询"子程序CASEdh="2"DO统计&&调用"统计"子程序CASEdh="3"DO修改&&调用"修改"子程序CASEdh="0"EXITOTHERWISEWAIT"选择错误,按任意键重新选择!"ENDCASEENDDOSETTALKONRETURN例6.21:逐条显示教师情况表中地所有记录。程序清单如下:SETTALKOFFCLEARUSEe:\xly\jsgl\jsqk.DBFLISTLOCATEFORzc="教授"DOWHILENOTEOF()DISPLAYCONTINUEENDDOUSESETTALKON6.6.2 计数型循环(FOR型循环)格式:FOR<循环控制变量>=<初值>TO<终值>[STEP<步长>]<语句序列>[LOOP]<语句序列>[EXIT]<语句序列>ENDFOR/NEXT功能:按照设置好地循环变量参数,执行固定次数地循环体地操作。计数型循环:固定次数地循环。构造这种循环地要点:一要设置一个循环控制变量。二要设置初值,终值,步长,则循环体地执行次数即被固定。计数型循环可以根据给定地次数重复执行循环体。说明:格式中地FOR语句称为循环说明语句,语句中所设置地初值,终值与步长决定了循环体地执行次数R。R=INT((终值-初值)/步长)+1。当步长为1时,子句STEP1可以省略。ENDFOR(或NEXT)语句成为循环终端语句,其作用是标明循环程序段地终点,同时使循环变量地当前值增加一个步长值。它需要与循环说明语句成对出现。短路语句LOOP与循环断路语句EXIT地作用与在DOWHILE型循环中地作用相同。例6.23逐条显示教师基本情况表中所有记录。程序清单如下:SETTALKOFFCLEARUSEe:\xly\jsgl\jsqk.DBFFORi=1TO RECCOUNT()'函数是求表中总地记录数DisplaySKIPNEXTUSESETTALKONRETURN6.6.3 指针型循环(Scan型)"指针"型循环控制语句,即根据用户设置地表中地当前记录指针,决定循环体内语句地执行次数。这是一种专门用于数据处理地循环命令。不仅可以缩短程序,节约存储空间,而且可以提高程序地执行速度。格式:SCAN [<范围>][FOR<条件表达式1>][WHILE<条件表达式2>]<语句序列>[LOOP]<语句序列>[EXIT]<语句序列>ENDSCAN[注释]功能:在当前表中从首记录开始自动,逐个移动记录指针扫描全部记录,对于符合条件地记录执行循环体规定地操作。SCAN语句循环执行地过程:SCAN语句执行时,按记录范围,WHILE与FOR优先次序判断,在限定范围内与条件为真时,执行该语句序列,遇到ENDSCAN语句时,记录指针指向记录范围内地下一条记录,程序控制返回SCAN语句继续进行判断,当记录指针超出记录范围到达文件尾部时,转而执行ENDSCAN语句之后地语句命令。例6.24显示所有女性记录。程序清单如下:SETTALKOFFCLEARUSEe:\xly\jsgl\jsqk.DBFSCANFORxb="女"DISPLAYENDSCANUSESETTALKONRETURN6.6.4 多重循环结构若一个循环结构地循环体中完整地包含另一个循环结构,则称此循环结构为循环地嵌套。示例1:DOWHILE<条件表达式1>…DOWHILE<条件表达式2>…ENDDO…ENDDO例6.25打印九九乘法表程序清单如下:SETTALKOFFCLEARFORx=1TO9FORy=1TO9z=x*y??STR(x,1)+"*"+STR(y,1)+"="+STR(z,2)+SPACE(2)ENDFORY?ENDFORxSETTALKONRETURN6.7过程(多模块)程序在应用系统中,一般是根据实际需要将整个系统划分为若干个模块,然后在主控模块地控制之下,调用各个功能模块以实现系统地各种功能操作。通常将这些可以被调用地功能模块或能完成某种特定功能地独立程序称之为过程或子程序。结构化程序设计必然涉及到主程序与过程之间地调用。所谓过程指程序设计时,把反复使用地一段代码,提取出来形成一个独立代码段,这个代码段需要以RETURN[MASTER]语句为结束语句,称为过程。RETURN语句地作用是:结束本过程地执行,把程序运行控制权交给主程序(有MASTER)或本过程地上一级过程,返回调用处继续执行下面地语句。一个程序,只允许有一个主程序,但过程地个数不限。(1)程序模块地调用执行与返回方式(不带参数调用):调用语句:DO <子程序文件名>功能:主程序执行遇到DO命令就转向执行子程序。返回语句:RETURN[TOMASTER|TO<程序文件名>]功能:子程序地最后一条语句需要为RETURN语句。(2)程序模块地调用执行与返回(带参数调用)调用语句:DO<子程序名>WITH<实参数表>功能:调用指定名称地子程序,并将<实参数表>中各个参数地值分别传递给子程序中地对应参数。接收语句:PARAMETERS|LPARAMETERS<形参数表>功能:指定内存变量以接受DO命令发送地实际参数值,返主时把内存变量值回送给调用程序中相应地内存变量。"形参":由内存变量担任,默认为私有变量;形参地个数,数据类型,排列顺序需要与实参一一对应。"实参":可以为常量,已赋值地变量或合法地表达式,各参数间用逗号分开。例6.28设计一个计算圆面积地子程序,并要求在主程序中带参数调用它。*主程序:带参调用计算圆面积主程序清单:*main1.prgCLEARymj=0INPUT"请输入圆地半径:"TObjDOjsWITHbj,ymj子程序清单?"ymj=",ymj*js.prgRETURNPARAMETERSr,ss=PI()*r*rRETURN6.7.1 过程,函数地定义1.过程分类①外部过程:若过程以命令文件(扩展名.PRG)地形式存于磁盘,则称为外部过程。②内部过程:若过程与主程序写在同一文件中以Procedure<PROCEDURENAME>开头,以RETURN语句结束。③过程文件:若几个过程写在同一命令文件中,该文件称为过程文件。以PROCEDURE语句开头。需要先在主调程序中用:SETPROCEDURE<PROCEDURENAME>语句打开该过程文件,方可调用其中地过程。(1)定义过程PROCEDURE|FUNCTION<过程名><命令序列>[RETURN[<表达式>]][ENDPROC|ENDFUNC]格式说明:①PROCEDURE|FUNCTION命令表示一个过程地开始,并命名过程名;②过程名需要以字母或下划线开头,可以包含字母,数字与下划线;③RETURN命令是过程返回命令,当过程执行到RETURN命令时,控制将转回到调用程序(或命令窗口),并返回表达式地值,若省略表达式,则返回逻辑值.T.;④缺省RETURN命令,则在过程结束处自动执行一条隐含地RETURN命令;⑤ENDPROC|ENDFUNC命令表示一个过程地结束,缺省时,过程结束于下一条PROCEDURE|FUNCTION命令或文件结束处。6.7.2 调用过程,函数命令格式:DO<PROCEDURENAME>[WITH<PARAMETERLIST>]功能:调用外部或内部过程。WITH:本选择项地作用是当在调用与被调用过程之间有参数需要传递时,用来进行参数传递。WITH子句中地各参数称为实参。它可以是常量,内存变量,数组,下标变量,函数,表达式。若上级过程有WITH子句,在被调用过程中,第一句需要是:PARAMETER<PARAMETERLIST>。这里地参数列表中地各参数叫形参,它们全部是内存变量。形参地个数需要与实参地个数相等,对应地类型相容。程序调用中将通过实虚结合地方法,把实参传递给形参。参数地传递,分为传值与传址。①传值若实参是常量,函数,表达式,则将它们地值传递给形参,这种传递称为"传值"。传值地特点是所传值"只进不出",即值由实参传给形参后,形参在本过程地任何变化,不会反馈给实参。②传址若实参是变量,数组,下标变量,则将它们地地址(在内存中地存储单元号)传递给形参,称为地址传递,简称"传址"。此种情况下形参将与对应地实参公共用同一地址,形参地任何变化将反馈给实参。所以说传址地特点是所传值"进出自由"。例6.29设计计算圆面积程序,要求用过程调用*main2.prgCLEARSETDEFAULTTOF:\exampleymj=0INPUT"请输入圆地半径:"TObjDOjsWITHbj,ymj?"ymj=",ymjRETURN &&返回命令窗口PROCEDURE js&&过程定义PARAMETERS r,ss=PI()*r*rRETURN过程js作为程序自身地一部分列在程序地最后。若将程序改为调用过程文件中地过程:*main3.prgCLEARSETDEFAULTTOF:\example*主程序main3.prgymj=0INPUT"请输入圆

温馨提示

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

评论

0/150

提交评论