VEP程序设计知识.doc_第1页
VEP程序设计知识.doc_第2页
VEP程序设计知识.doc_第3页
VEP程序设计知识.doc_第4页
VEP程序设计知识.doc_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

第6章 程序设计基础Visual FoxPro 命令的执行分为命令工作方式(或交互工作方式)和程序工作方式。命令工作方式是通过菜单选择的方法或在命令窗口中逐条输入命令的方法来执行的;程序工作方式是根据解决实际问题的需要,将一系列符合Visual FoxPro要求的命令按一定的逻辑结构编排成一个完整的应用程序,然后输入到计算机内自动地、连续地加以执行。在Visual FoxPro中,支持两种类型的编程。一种是早期FoxPro和Xbase语言所支持的过程编程方式,另一种是面向对象的编程方式。过程方式就是用结构化编程语言来编写结构化的程序,它把一个复杂的程序分成较小的过程,每个过程可以单独进行调试。面向对象的编程方式是用面向对象的技术编程,它把编程工作主要集中在描述的对象上,程序是事件驱动的,在执行过程中,等待的是一个事件。一般来说,对于制作简单短小的应用程序,使用过程编程方式比较容易,同时,这也是面向对象编程方式的基础。本章重点介绍面向过程的程序设计,同时也穿插介绍面向对象的一些问题举例(面向对象程序设计能够给用户提供友好的界面),使广大用户能够充满兴趣地学好这一章。进行程序设计一般要经过以下步骤,如图6-1所示。图6-1 程序设计步骤(1)分析问题或任务,总结或抽象出问题的数学模型。(2)根据数学模型确定解决问题的算法思想。(3)根据算法思想确定要建立的数据表或数据库的基本结构及其数据表之间的关系。(4)画出程序流程图。(5)编写程序,实现功能要求,并在计算机上调试通过。(6)用典型数据对所编写的程序进行测试,验证程序的可靠性。发现问题进行修改,修改后再进行调试,直到程序正确运行为止。(7)编写使用说明书,整理有关资料,进行总结。注意,对同一个问题,在计算机上可以用多个方法、多种命令形式来编程解决,用户应选择自己较为熟悉、效率高的命令。另外,本章结合例题,对每一种典型结构给出一个程序流程图,以便于用户理解。对于初学者,应该根据某一问题,画出程序流程图,这样有助于程序的编写。6-1 程序文件建立与运行6-1-1 程序文件建立由于程序是由命令组成的ASCII码文本文件,所以程序文件也称为命令文件。该文件可用任何文本编辑器或字处理软件来建立。Visual FoxPro程序源文件的扩展名是.PRG,程序在运行时,会产生主文件名与.PRG程序文件名相同,扩展名为.FXP的目标文件。在Visual FoxPro中,建立程序最简单的方法是用系统本身提供的编辑器。下面分别介绍菜单方式和命令方式进入程序编辑器窗口编写程序。用户可根据需要选择。1. 菜单方式建立程序文件用菜单建立程序的步骤为:步骤1、单击菜单【文件】【新建】命令或者单击常用工具栏的【新建】按钮,打开【新建】对话框。在【新建】对话框中,单击【程序】单选按钮,如图6-2所示,然后单击【新建文件】大按钮。图6-2【新建】程序对话框步骤2、步骤1操作结束就会打开“程序1”的程序编辑新窗口,如图6-3所示。可以在这个窗口中输入程序代码。图6-3 程序编辑窗口2. 命令方式建立程序文件格式:MODIFY COMMAND |?功能:打开程序编辑窗口,从中可以修改或创建程序文件。说明:(1):指定修改或创建的程序文件名。若省略程序文件名,将打开图6-3所示的程序编辑窗口。(2)如果用MODIFY COMMAND ?,则出现【打开】对话框,如图6-4所示,在“文件类型”下拉列表中选定文件类型为“程序 (*.prg;*.spr;*.mpr;*.qpr)”;在“查找范围”下拉列表中选定相关程序文件所在的文件夹;从选定文件夹中,选择一个已有程序文件或在“文件名”文本框中键入要创建的新程序文件名,单击【确定】按钮,即可在程序编辑窗口修改调出的源程序或输入新程序。图6-4 “打开”对话框在用命令建立程序文件时,最好在命令后加上程序文件名,这样可以直接创建或修改用户给出的程序文件。建好的文件将保存在“默认目录”指定的文件夹下,默认的扩展名是.PRG。如果需要保存在其它文件夹下,还可在命令中指定路径。如:MODI COMM D:excerciseexample3. 程序输入与保存按照以上方式打开程序编辑窗口以后,就可以在该窗口内输入程序命令了。例 6-1 在程序编辑窗口输入如下6条命令。CLEAR&将屏幕输出窗口内容清空a=12&将数值12赋值给变量ab=18&将数值18赋值给变量bc=a+b&将变量a与b和计算出来,赋值给变量c?a,b,c &输出变量a、b、c的值RETURN&表示程序结束。用如下命令打开程序编辑窗口,依次输入上面6条命令。MODI COMM CX1在输入一个程序时,请用户注意以下几点:(1)一个命令语句中只能有一个命令动词。(2)每输入完一个语句按回车键表示该语句结束。(3)程序中用到的所有作为“分隔符号”的标点符号一律用英文半角符号。(4)输入或修改结束按【Ctrl+W】存盘,【Ctrl+Q】取消本次输入或修改结果。可使用【文件】【另存为】命令将编辑好的程序以另外的名称存盘。6-1-2 程序运行1. 菜单方式运行程序单击菜单【程序】【运行】命令,打开【运行】对话框。选定定要执行的程序文件,如选择:cx1 ,单击【运行】按钮,如图6-5所示。图6-5 程序【运行】对话框2. 命令方式运行程序格式:DO 功能:将指定的程序文件调入内存并运行。说明:(1)默认程序扩展名为.PRG,可不必输入;(2)该命令可在命令窗口里输入执行,也可以出现在别的程序文件中,后者可实现在一个程序中调用另一个程序。如在命令窗口里输入:DO cx1执行程序cx1后,将在屏幕输出程序计算结果: 12 18 30除以上两种程序执行的方法以外,也可以在程序打开并且为当前程序的情况下,单击常用工具栏上“!”命令按钮执行程序。另外,在程序执行过程中,如果程序出现运行错误或用户按下了【Esc】键,将弹出【程序错误】对话框,如图6-6所示,单击【取消】按钮可取消程序的执行;单击【挂起】按钮,可暂时停止程序的运行,可在命令窗口里输入命令:RESUME,或单击菜单【程序】【继续执行】命令可继续执行程序;单击【忽略】命令按钮忽略程序的错误继续执行程序;单击【帮助】命令按钮可提示相关帮助信息。图6-6 【程序错误】对话框6-1-3 程序辅助命令以前介绍的所有Visual FoxPro命令都可以用在程序设计中。另外Visual FoxPro还提供了一些辅助命令,如注释命令、程序结束命令、运行环境设置命令等,这些命令能使程序更好地阅读和有效地运行。1. 程序注释命令在程序中加入必要的注释命令(也称为注释语句),可增强程序的可读性,便于日后的修改。程序执行时,注释命令不被执行。Visual FoxPro提供了3种注释命令。格式1: NOTE 格式2: * 功能:使 NOTE或* 后面的内容成为注释内容。格式3: &功能:对&左面的命令做出解释或给出运行结果,又称为行尾注释命令。2. 程序结束命令一个独立的Visual FoxPro程序,可以不用程序结束语句,当程序执行完最后一条语句时,程序自动结束。但一个实用的Visual FoxPro程序往往由多个模块构成,各个模块根据需要可互相调用,一个模块程序结束后可以返回到其上一级调用模块、可以直接返回到最上级模块、可以返回到Visual FoxPro交互命令状态(命令窗口)或者直接关闭Visual FoxPro而返回到操作系统。下面几个命令分别用来完成上述功能。格式1:RETURN功能:返回到上一级模块。如果本程序是以菜单方式或在命令窗口中调用执行的,则返回到命令交互状态。该命令还有一些其它参数,详细情况请参阅“6-3-1 子程序”中的“子程序返回部分”。格式2:CANCEL功能:终止程序运行,清除程序中的私有变量,返回到命令窗口。格式3:QUIT功能:关闭Visual FoxPro,返回到操作系统。对一个独立程序来说,一般在最后一条语句要用RETURN命令,以表示程序的结束。3. 信息对话框函数MESSAGEBOX 在程序设计过程中,经常要显示一些信息,例如提示信息、错误信息等,MessageBox函数就是用于显示这些信息的。格式: MESSAGEBOX(,)功能:供用户定义信息对话框,按下相应的按钮返回一个数值。说明:(1)用于指定在对话框中显示的信息文本。(2)用于根据表6-1的内容设置对话框中的按钮、图标和默认按钮,缺省该参数表示取0。(3)用于指定对话框标题栏的显示文本。缺省该参数表示在标题栏显示“Microsoft Visual FoxPro”。表6-1 MessageBox函数中按钮、图标设置表数值对话框按钮0仅有“确定”按钮1“确定”和“取消”按钮2“放弃”、“重试”和“忽略”按钮3“是”、“否”和“取消”按钮4“是”和“否”按钮5“重试”和“取消”按钮图标16“停止”图标32问号48惊叹号64信息(i)图标默认按钮0第1个按钮256第2个按钮512第3个按钮(4)函数值返回一个数值,用户可根据操作时按下的按钮来获得相应的返回值,返回值见表6-2,用户编程时根据返回值来设置动作。表6-2 返回值表返回数值按下按钮1确定2取消3放弃4重试5忽略6是7否例 6-2 在信息对话框中使用1个按钮“确定”,使用“惊叹号”图标,显示“输入的用户名或密码错误,请重新输入。”,对话框标题为“错误信息”。 程序中执行到下面的语句或在命令窗口里直接输入: a=MESSAGEBOX(输入的用户名或密码错误,请重新输入。,0+48,错误信息) ? a就会显示如图6-7 所示的信息对话框。图6-7 只含有【确定】按钮的信息对话框 当用户按下【确定】按钮时,信息对话框函数返回值1,并赋值给变量a。输出a变量的值为1。例 6-3 在信息对话框中使用2个按钮“是”和“否”,使用“问号”图标,默认按钮为第二个按钮,显示“真的要退出系统吗?”信息,对话框标题为“提示信息”。 在命令窗口里输入: a=MESSAGEBOX(真的要退出系统吗?,4+32+256,提示信息)? a 就会显示如图6-8所示的信息对话框。图6-8 含有【是】和【否】按钮的信息对话框 单击【是】按钮,返回值为6,单击【否】按钮,返回值为7。用户可测试一下。4. 接收单字符命令WAIT格式:WAIT TO WINDOWS AT , TIMEOUT NOWAIT功能:暂停程序,用户按任意键或者时间超过等待的秒数后,程序继续执行。如果包含TO 短语,将用户所按键盘字符赋值给指定的内存变量。说明:(1),指定要显示的自定义信息。若省略该参数,则 Visual FoxPro 显示默认的信息“按任意键继续”。如果该参数为空字符,则不显示信息。(2)WINDOWS:在 Visual FoxPro 主窗口右上角的系统信息窗口中,显示提示信息。如果指定AT ,,则该窗口在指定屏幕坐标位置显示。(3)TIMEOUT :指定在执行 WAIT 命令之后,程序暂停的时间,参数指定等待的时间秒数。(4)NOWAIT子句指在前述指定的Windows窗口中显示WAIT信息的同时,程序继续执行而不暂停。例6-4下列命令将在屏幕18行、18列位置处显示一含有提示信息的小窗口,如图6-9所示,此时单击鼠标按键、按下键盘上任意一个按键或小窗口在屏幕上停留8秒后,从屏幕上消失。WAIT 请稍后,程序将继续执行.。 WINDOWS AT 18,18 TIMEOUT 8图6-9 WAIT命令显示的信息窗口5. 运行环境设置命令在程序中运用一些环境设置命令,可使程序正常而高效地运行。运行环境设置命令大多数是由SET命令设置的,它一般有ON和OFF两个选项,当为ON状态时,设置有效,为OFF状态时设置无效。有的SET命令用TO指定设置值。常用的环境设置命令如表6-3所示。表6-3 常用运行环境设置命令命 令功 能SET TALK ON/OFF设置受控命令执行的结果在屏幕上显示与否SET STATUS ON/OFF设置屏幕下端的状态行显示与否SET SAFETY ON/OFF设置进行文件重写或覆盖操作时是否有提示SET HEADING ON/OFF设置执行LIST或DISPLAY时是否显示字段名SET ESCAPE ON/OFF设置按【ESC】键时是否终止程序的执行SET CONSOLE ON/OFF设置程序中键盘输入的信息是否发送到屏幕上SET CENTURY ON/OFF设置日期年份按4位显示与否SET PRINTER ON/OFF设置输出的结果是否送打印机SET STRICTDATE TO 0设置通常日期格式显示6-2 程序控制结构一个结构化程序是由若干个“基本结构”顺序组成。结构化程序包括三种基本结构,即顺序结构、选择结构、循环结构。下面就来分别介绍这三种基本结构。6-2-1 顺序结构顺序结构是程序设计中最基本的结构,该结构按照程序命令出现的先后顺序依次执行。事实上,如果不进行特殊说明,程序中的命令就自动按其前后排列顺序执行。前面介绍的几个例题都是顺序结构程序。下面再举2个例题。 例 6-5 假设我国2007年国民生产总值为200,000亿元,按每年平均10%的速度递增,编程计算到2020年我国国民生产总值将会达到多少?国民生产总值计算公式为:未来值p1=初值p0(1+速度a)时间间隔n这里,初值 p0=200000 亿元,速度为 a=0.1,时间间隔 n=2020-2007=13,P1为未来待计算的值。Visual FoxPro计算表达式为:p1=p0*(1+a)n 。该程序流程图如图6-10所示。图6-10 顺序结构程序框图程序如下:CLEARp0=200000a=0.1n=13p1=p0*(1+a)n?我国2007年的国民生产总值为:,p0, 亿元。?我国2020年的国民生产总值为:,p1, 亿元。RETURN例 6-6 用表单完成下列任务:在人事数据表中,根据输入的职工姓名,显示该职工的姓名、性别、职称、出生日期、工作日期的内容。操作步骤如下:步骤1、在Visual FoxPro中新建一个表单窗口;步骤2、按上图所示,在该表单窗口中分别创建一个标签对象、一个文本框对象、两个命令按钮对象。调整它们的大小并摆放到表单上方相应的位置;步骤3、设置各控件的属性如表6-1所示。表6-1各控件的属性设置值对象属性属性值说明Form1Caption 顺序结构表单示例设置表单标题Label1Caption 请输入被查询职工的姓名:设置标签的内容Text1AutoSize.T.-真设置标签的大小刚好容纳文字FormatT设置删除输入字段前导空格和结尾空格IMEMode1-打开设置中文输入法被打开SelectOnEntryT-真设置文本框获得焦点时文本框的内容被选中Command1Caption查询Command2Caption退出步骤4、添加数据环境RSB,将RSB的相应字段拖拽到表单,并调整对象的位置如图6-11所示。图6-11 表单设计外观步骤5、输入事件代码在表单Form1的Init事件中输入下列代码:GO BOTTSKIP在命令按钮Command1的Click事件中输入下列代码:LOCATE FOR ALLTRIM(姓名)=Thisform.Text1.ValueThisform.Refresh()Thisform.Text1.setfocus()在命令按钮Command2的Click事件中输入下列代码:Thisform.Release步骤6、保存当前的设计结果并运行,看是否获得预期的结果。6-2-2 选择结构选择结构,是一种常用的基本结构,在一般程序中都要使用到它。按照选择结构执行路径的多少,可分为简单分支结构、双分支选择结构和多分支选择结构。无论是那种类型的选择结构,都是根据所给条件是否为真,选择执行某一分支的相应操作。1. 简单分支结构简单分支结构是由IF语句开头,以ENDIF语句结束的若干条命令组成的。格式:IF 命令序列ENDIF说明:(1)根据的逻辑值进行判断。如果的逻辑值为.T.,就依次执行命令序列,执行完后就转去执行ENDIF之后的命令。如果的逻辑值为.F.,则IF和ENDIF之间的所有命令都不执行,而直接转到ENDIF之后的命令。(2)IF语句和ENDIF语句必须成对出现,且各占一行。(3)为了程序阅读方便,便于以后维护修改,建议对于命令序列部分采取向右缩进书写的方式。 例6-7 设计一个如图6-12所示的计算器,并实现标签中说明的功能。图6-12 计算器的外观操作步骤如下:步骤一、新建一个名为jsqc的表单,设置表单的Caption属性值为:计算器;Icon的属性值为你喜欢的图标文件。步骤二、在表单中添加一个文本框控件,16个命令按钮控件,一个标签控件,两个形状控件,将所有命令按钮的属性Height和属性Width均设置为25,并设置命令按钮及标签的Caption属性值如图3-35所示的外观,调整控件到合适的位置,将形状控件置后,并设置SpecialEffect的属性值为:0。设置命令按钮的Caption属性值为“=”号时,在Caption属性设置处输入:=”=”执行表单,查看外观是否与要求相同?如不合适再作调整。单击命令按钮,没有任何反应,原因在于还没有写代码。步骤三、设置文本框的Format属性的值设置为T,设置除“=”以外所有命令按钮的Click事件的代码如下:This.Parent.Text1.Value=This.Parent.Text1.Value+This.Caption设置“=”命令按钮的Click事件中添加下列代码:y=This.Parent.Text1.Value &获取表达式y=&yThis.Parent.Text1.Value=STR(y,50,6) &显示表达式的值执行表单,输入一个数学式子可以计算出正确的结果,继续输入运算符,连续计算也没有问题,但当输入一个新式子时,新输入的数连在前面计算结果的后面,而不能清除原有的结果,要实现这一功能需使用分支语句。步骤四、定义一个名为x的表单属性。设置所有标有09的命令按钮的Click事件的代码如下:IF Thisform.x &如果刚按过=按钮 This.Parent.Text1.Value= &清除式子 Thisform.x=.F. &表示已按其它按钮ENDIFThis.Parent.Text1.Value=This.Parent.Text1.Value+This.Caption设置所有标有运算符的命令按钮的Click事件的代码如下:IF Thisform.x &如果刚按过=按钮 Thisform.x=.f. &表示已按其它按钮ENDIFThis.Parent.Text1.Value=This.Parent.Text1.Value+This.Caption在“=”命令按钮的Click事件中添加下列代码:y=This.Parent.Text1.Value &获取表达式y=&yThis.Parent.Text1.Value=STR(y,50,6) &显示表达式的值Thisform.x=.T.步骤五、保存并执行表单。2. 双分支选择结构双分支选择结构也是由IF语句开头,以ENDIF语句结束的若干条命令组成的,但其中包含一条ELSE语句。格式:IF 命令序列1ELSE命令序列2ENDIF说明:(1)如果的逻辑值为.T.,就执行命令序列1,执行完后就转到执行ENDIF之后的命令。如果的逻辑值为.F.,就执行命令序列2,完成后,转去执行ENDIF之后的命令。(2)ELSE语句单独占一行,IF语句和ENDIF语句必须成对出现,且各占一行。例6-8 设计一个如图6-34所示的密码输入窗口,要求当用户输入密码,单击【确定】按钮后可判断用户输入的密码是否正确,假设密码是“ABCDEF”。图6-34 密码输入窗口外观操作步骤如下:步骤1、新建一个表单,添加一个标签控件、一个文本框控件、两个命令按钮。步骤2、设置各控件的属性如表6-8所示:表6-8各控件的属性设置值对象属性属性值说明Form1Caption口令设置表单标题Label1Caption请输入密码:设置标签的内容Text1PasswordChar*设置占位符为:*Command1Caption确定设置命令按钮上的文字Command2Caption取消设置命令按钮上的文字步骤3、在Command1的Click事件中输入下列代码:IF This.Parent.Text1.Value=ABCDEF=MessageBox(口令正确!可以进入系统!,48,信息)*DO 系统程序Thisform.ReleaseELSE=MessageBox(口令错误!无权进入系统!,48,错误信息)Thisform.ReleaseENDIF这段代码是判断用户输入的密码是否正确,这里使用了条件分支语句。在Command2的Click事件中输入下列代码:Thisform.Release步骤4、以lt6-10为主文件名保存表单,并执行表单,输入正确密码和错误密码各一次,观察表单的执行情况。例6-9 完善例6-9的计算器功能,当用户输入一个错误式子时,可给出相应的提示,并要求用户重新输入。操作步骤如下:步骤1、打开例6-9的表单,修改“=”命令按钮的代码如下:y=This.Parent.Text1.Value &获取表达式if type(y)=U =MESSAGEBOX(表达式输入错误!请重输!,0+32+0,提示信息) This.Parent.Text1.selectOnEntry=.t. This.Parent.Text1.setfocus()elsey=&yThis.Parent.Text1.Value=STR(y,50,6) &显示表达式的值Thisform.x=.T.Endif步骤2、保存并运行表单。3.分支结构嵌套对于在上述分支结构的中,可以包含任何Visual FoxPro命令语句,也可以包括另外一个或几个合法的分支结构语句,也就是说分支结构可以嵌套。对于嵌套的分支结构语句,一定注意内外层分支结构层次分明,即注意各个层次的IF. ELSE.ENDIF语句配对情况。例 6-10 例6-8的表单只允许用户输入一次口令,如果用户不小心输入错误,就无法进入系统,通常应该给用户多一两次机会,比如给用户三次机会,当用户不小心输入密码错误,允许用户重新输入,当用户三次都输入错误,则不允许用户进入系统。问题分析:这需要有一个表单属性记录用户输入了几次密码,用户每单击一次【确定】按钮,被视为输入了一次密码,所以在Command1的Click事件中的代码应改为:Thisform.nn=Thisform.nn+1 &记录用户输入密码的次数IF This.Parent.Text1.ValueABCDEF IF Thisform.nn=3 =MessageBox( 你已经三次输入口令错误!+CHR(13)+你可能;是个非法入侵者,你无权进入该系统!,48,警告信息) Thisform.Release ELSE =MessageBox(口令错误!请重输!,48,错误信息) This.Parent.Text1.Value= &清空用户已输入的错误密码 This.Parent.Text1.SetFocus &使获取密码的文本框获得焦点 ENDIFELSE =MessageBox(口令正确!可以进入系统!,48,信息) Thisform.ReleaseENDIF同时还需要定义一个名为nn的表单属性,并设该属性的初值为0,将修改后的表单以lt6-12为文件名保存(用另存为实现),执行表单,试着输入错误口令,与前一个表单的执行情况进行比较。4.多分支选择结构虽然上述分支结构嵌套可以解决程序设计中的多重选择问题,但当嵌套的层数较深时,则往往会引起结构的混乱,也使程序的可读性不好。Visual FoxPro提供了多分支结构来解决多种不同情况下的程序选择问题。格式:DO CASECASE CASE .CASE OTHERWISEENDCASE说明:(1)多分支选择结构执行的过程是:系统依次判断各是否满足,若某一为.T.,就执行该 下的,执行后不再判断其它,而转去执行ENDCASE后面的第一条命令。如果没有一个为.T.,就执行OTHERWISE后面的命令序列n+1,直到ENDCASE;如果没有OTHERWISE,则不作任何操作就转向ENDCASE之后的第一条命令。(2)DO CASE语句和ENDCASE语句必须成对出现,各占一行。(3)多分支选择结构中各CASE语句后的是按其先后顺序判断执行的,因此对实际问题进行编程时,应认真考虑各个条件排列的先后顺序。例 6-11 用多分支选择结构编程完成例 6-12的表单功能。步骤1、将Command1的Click事件中的代码改为:Thisform.nn=Thisform.nn+1 &记录用户输入密码的次数do case case ALLTRIM(This.Parent.Text1.Value)=ABCDEF =MessageBox(口令正确!可以进入系统!,48,信息) Thisform.Release case Thisform.nn3 =MessageBox(口令错误!请重输!,48,错误信息) This.Parent.Text1.Value= &清空用户已输入的错误密码 This.Parent.Text1.SetFocus &使获取密码的文本框获得焦点 otherwise =MessageBox(你已经三次输入口令错误!你可能是个非法入侵者,你无权进入该系统!;,48,警告信息) Thisform.ReleaseEndcase步骤2、将表单另存为lt6-13,并执行表单。6-2-3 循环结构在程序设计中,有时需要从某处开始有规律地反复执行某些类似的操作,这些类似的操作一般用循环结构程序设计来解决。在Visual FoxPro中,提供了“当型”、“步长型”和“表扫描型”循环结构。1. 当型循环结构格式:DO WHILE 命令序列 ENDDO说明:(1)当型循环执行的过程是:根据的逻辑值,进行判断。如果的逻辑值为.T.,则执行DO WHILE和ENDDO之间的命令序列(也称为循环体),当命令序列包含的所有命令执行完毕后,程序自动返回到DO WHILE语句,每执行一遍就判断一次DO WHILE语句中的。如果仍然为.T.,则继续执行DO WHILE和ENDDO之间的命令序列,直到的逻辑值为.F.,结束循环,转去执行ENDDO之后的第一条命令。(2)DO WHILE和ENDDO语句应配对使用,各占一行。(3)在命令序列的适当位置可以放置EXIT和LOOP语句,用以对循环过程作特殊处理。EXIT的功能是:结束循环命令,转去执行ENDDO之后的第一条命令。LOOP语句的功能是:终止本次循环命令,返回到循环入口。EXIT和LOOP语句只能在循环结构中使用,并且常常附加条件加以限制。(4)在命令序列中可以嵌套IFENDIF、DO CASEENDCASE、DO WHILEENDDO、FORENDFOR、SCANENDSCAN等程序结构。例 6-12 有一张厚0.5毫米,面积足够大的纸,将它不断地对折。问对折多少次后,其厚度可达到珠穆朗玛峰的高度(8848米)。 问题分析:设用n表示折叠次数,h表示纸的厚度,n与h之间的关系如下:N=012345678H=0.51248163264128反复执行下例两个语句:N=n+1H=2*h可以得出以上序列,结束条件为:h8848000因此这一问题可用循环语句来实现,流程框图如下:开始N=0,h=0.5H8848000N=n+1,h=h*2输出n,h结束YN程序如下:CLEARn=0h=0.5DO WHILE h8848000 n=n+1 h=2*hENDDO?对折的次数为:,n?此时纸张的厚度为:,hRETURN例 6-13 鸡兔同笼问题。设鸡和兔共有头38个,脚138个,问鸡和兔各为多少只?问题分析:设鸡为cocks只,兔为rabbits只,则有:cocks + rabbits=38;2 * cocks+4 * rabbits = 138。可令鸡和兔的头数之和或者脚数之和为一变量,如本题令二者脚数之和foots为变量,开始令cocks=0,foots=0,用循环进行判断是否foots138,如果是,则进行如下运算:cocks=cocks+1; rabbits=38-cocks;foots=2*cocks+4*rabbits;再进行循环判断,直到foots138不成立(即foots=138),循环结束,输出结果。程序框图如图6-12所示。图6-12 循环结构程序框图程序如下:CLEARcocks=0foots=0DO WHILE foots138 cocks=cocks+1 rabbits=38-cocks foots=2*cocks+4*rabbitsENDDO?鸡的数量为:,cocks?兔的数量为:,rabbitsRETURN2. 步长型循环结构格式:FOR = TO STEP 命令序列 ENDFOR|NEXT说明:(1)、都是数值表达式;当是1时,可以省略STEP子句。(2)ENDFOR或NEXT语句为循环终端语句,用以标明本循环结构的终点。该语句必须和FOR语句配对使用。(3)该循环结构的执行过程是:首先将初值赋值给循环变量,然后判断循环变量的值是否超过终值(这里超过终值的含义是:如果步长值为正数,则循环变量的值大于终值为超过,如果步长值为负数,则循环变量的值小于终值为超过),不超过就执行循环体,遇到ENDFOR或NEXT语句,自动使循环变量增加一个步长值,再将循环变量的值与终值比较,如果循环变量的值不超过终值,就再执行循环体,不断循环执行。如果循环变量的值超过终值则不执行循环体,而转去执行ENDFOR或NEXT语句后面的第一条语句。(4)在循环体内的适当位置也可以放置EXIT和LOOP语句,作用和用法与当型循环结构类似。例 6-14 求1+2+3+99+100的值。问题分析:采用累加的办法,用循环变量产生1、2、3、99、100这些数。用s保存累加和,s的初始值为0,每次循环将s加上循环变量的值,再赋值给变量s,循环结束即求得s。 程序为:CLEARs=0FOR x=1 TO 100 s=s+xENDFOR?1-100自然数累加和是:,sRETURN例 6-15 从键盘上输入任何一个自然数,求该自然数的阶乘。问题分析:假设该自然数为n,那么求n的阶乘的公式是: n*(n-1)*(n-2)*.*2*1有了这样的公式,我们就可以用循环程序将该n的阶乘求解出来。将循环变量的初值设为n,终值设为1,步长值设为-1。用factor作为存放阶乘的变量,factor的初始值为1,每次循环都使factor 乘以循环变量的值,循环结束即求得factor的值。用表单设计该问题的程序窗口分别如图6-146-16所示。图6-14 例6-16表单设计时窗口图6-15 例6-16表单运行时窗口图6-16 例6-16表单计算结果窗口图6-14为设计时的表单窗口;图6-15为表单第1次运行时的窗口;图6-16为在文本框输入一个自然数并单击【计算】按钮后的计算结果窗口;单击【重新输入】按钮,回到图6-15;单击【退出】按钮退出表单。表单设计时各个控件的属性设置如表6-4所示,表中未说明的设置,根据图6-146-16自己设置,并进行美观、协调的布局。表6-4 例6-16表单设计各控件属性设置控件属性值Form1Caption计算自然数阶乘窗口Label1Caption请输入自然数Autosize.t.BackStyle0-透明Label2CaptionVisible.f.Label1CaptionVisible.f.Command1Caption计算Command2Caption重新计算Command3Caption退出【计算】按钮的CLICK事件代码如下:n=VAL(ALLTRIM(ThisForm.text1.value)factor=1FOR x=n TO 1 STEP -1 factor=factor*xENDFORThisForm.Label2.Visible=.t.ThisForm.Label3.Visible=.t.ThisForm.Label2.Caption=自然数+ALLTRIM(STR(n,10)+的阶乘是:; +ALLTRIM(STR(factor,20)ThisForm.Label3.Caption=单击“重新输入”按钮可计算其他自然数的阶乘。ThisForm.Refresh【重新输入】按钮的CLICK事件代码如下:ThisForm.Label2.Visible=.f.ThisForm.Label3.Visible=.f.ThisForm.Label2.Caption=ThisForm.Label3.Caption=ThisForm.Text1.Value=ThisForm.Text1.Setfocus()ThisForm.Refresh【退出】按钮的CLICK事件代码如下:ThisForm.Release3.表扫描循环结构格式:SCAN FOR |WHILE 命令序列 ENDSCAN说明:(1)该结构是针对当前打开的数据表进行操作的。它的功能是:对当前打开的数据表中指定范围内符合条件的记录,逐个进行所规定的操作,如果缺省范围和条件子句时,则对所有记录逐个进行规定的操作。(2)表扫描型循环结构每循环一遍,记录指针自动移动到下一条记录,不需要设置SKIP语句。(3)SCAN和ENDSCAN语句要配对使用,且各占一行。(4)在的适当位置也可以放置EXIT和LOOP语句,功能和用法同其他循环结构类似。例 6-16 将人事数据表中基本工资小于1000的姓名、基本工资两个字段输出,并统计这些职工的人数。(用SCAN ENDSCAN结构编程)基本操作步骤为:关闭所有数据表(可选步骤),打开人事数据表,设计一个累加变量n,代表满足条件的记录数,给n 赋初值0,用表扫描循环结构定位满足条件的记录,输出姓名、基本工资两个字段,并对n 进行累加1,循环结束即求得n,输出n。程序如下:CLOSE DATABASECLEARUSE rsbn=0SCAN FOR 基本工资1000 ?姓名,基本工资 n=n+1ENDSCAN ?基本工资在1000元以下的人数有:+STR(N,2)+人。CLOSE DATABASERETURN4. 循环结构嵌套循环结构的嵌套是指在一个循环体内包含其它的循环结构,也称为多重循环结构。同一种类型的循环结构可以嵌套,不同类型的循环结构也可以嵌套。要编好循环结构嵌套程序,必须做到:循环开始语句和循环结束语句配对出现;内外层循环层次分明,不得交叉。Visual FoxPro 最多允许128层嵌套。请看下面的例子。例 6-17 用双重循环打印九九乘法表,即:11=1,21=2,12=4. . .91=9,92=18,99=81问题分析:这是一个有9个行、9个列数据项的矩阵,可以用双重循环解决。外循环用于控制各个行,内循环用于控制每一行的各个列项,一行输出完毕以后,换行输出下一行各个列的数据项。程序如下:*打印乘法九九表。CLEARFOR a=1 TO 9 FOR b=1 TO a p=a*b ?STR(a,1)+STR(b,1)+=+STR(p,2)+ ENDFOR? &注意?和?的区别ENDFORRETURN6-3 多模块程序应用程序一般都是多模块程序,可包含多个程序模块。模块是可以命名的一个程序段,可指主程序、子程序、函数、过程。本节介绍模块的构成及调用的方法、多模块中程序变量的作用域以及程序调试方法。6-3-1 子程序能够完成一定功能的可供其它程序使用(调用)的独立程序段称为子程序。它独立存在,但可以被多次调用,调用子程序的程序称为主程序。在应用系统开发中,把程序完成的主要功能都分配给各子程序去完成,这样主程序可以写得比较简捷,整个应用系统的维护方便,应用系统运行的效率也很高。1. 子程序的调用格式:DO WITH IN 说明: (1)程序文件名1:指定要执行程序的名字。DO 直接执行或调用指定的程序。(2)WITH :指定传递到子程序的参数,在中列出的参数可以是表达式、内存变量、常量、字段或用户自定义函数。(3)当是子句IN 中的一个过程时,DO命令调用该过程。请参阅例6-24。2. 子程序的返回 RETURN TO MASTER | TO 说明:(1)该语句放在一个程序的末尾。(2)不带参数的RETURN语句的功能是将程序控制权返回到调用该子程序的主程序的下一条命令语句。 (3)RETURN TO MASTER:如果有多级程序调用,某一子程序的该语句将使程序控制权返回到最高一级调用程序。(4)RETURN TO :表示将控制权交给指定的程序。3. 子程序的建立建立子程序的方法与建立程序的方法类似。但要注意两个问题,一是每个子程序必须单独使用一个文件名保存起来,二是主程序和子程序之间有关变量值的传递关系。子程序文件名的扩展名也是.PRG。例 6-18 利用主程序调用子程序的方法计算任意3个自然数的阶乘和,即求s = a! + b! + c!建立步骤:先建立好求任一自然数阶乘的程序,如例 6-16

温馨提示

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

评论

0/150

提交评论