您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 第6章结构化与面向对象程序设计基础.
第6章结构化与面向对象程序设计基础6.1结构化程序设计的基本概念6.1.1程序程序是一组能够完成特定任务的命令序列的集合。这些命令按照一定的逻辑顺序有机地结合在一起,并以文件形式存储在磁盘上,这种文件称为程序文件或命令文件,其扩展名为.PRG。执行程序时,计算机按程序的逻辑顺序自动执行程序文件中的命令。与在VFP的命令窗口逐条输入命令相比,采用程序方式的好处有:可利用编辑器方便地输入、编辑和保存程序。可采用多种方式、多次运行程序。可以实现程序代码的复用。【例6.1】编写程序文件exam6_1.prg实现例4.31。*显示学生选课成绩表xkcjb.dbf中当前记录的学号、课程号和成绩字段的值closeall&&关闭所有打开的文件select2usedab&&选择2号工作区打开dab表selectCusekcb&&选择3号工作区打开kcb表usexkcjbIN5&&在5号工作区打开xkcjb表?xkcjb.学号,b.姓名,xkcjb.课程号,xkcjb-成绩closeall&&关闭所有打开的文件return在命令窗口中执行MODICOMMexam6_1命令后,弹出代码编辑窗口,在该窗口中输入上述程序代码并保存。在命令窗口输入:DOexam6_1,程序执行结果为:2005001000138.0从该例子可以看出,在VFP中,程序代码是保存在一个程序文件exam6_1.prg中,可以多次执行。6.1.2算法及算法的表示1)算法的概念及特点要编制一个程序,必须首先构建某问题的算法。所谓算(Algorithm)就是对解决问题所采用的方法和步骤的描述。【例6.2】输入3个数,找出其中的最大值并输出。分析:假如这三个数分别用a,b,c表示,其中的最大值用max表示。由于计算机一次只能比较两个数,我们首先可以将a和b进行比较,把其中大的数放入max中,再将max与c比较,又将大的数放入max中。最后将max输出,此时max中的值就是a,b,c中的最大值。由此可以将求解这一问题的算法描述为:第1步:输入a,b,c。第2步:a,b中大的一个数放入max中。第3步:将c与max中大的数放入max中。第4步:输出max。算法是对一个问题的解决方法和步骤的描述,是一个有穷规则的集合。一个算法应该具有以下特点:(1)确定性:一个算法给出的每个计算步骤都必须是准确的、无二义性。在【例6.2】中每一个步骤的含义都是确定的。(2)有穷性:一个算法必须在执行有穷多个计算步骤后终止。在【例6.2】中执行4个步骤后问题处理结束。(3)有效性:算法中的每一个步骤必须能够有效地执行,并能够得到确定的结果。(4)输入:一个算法可以有0个或1个以上的输入。在【例6.2】中需要输入a,b,c三个数。(5)输出:一个算法有1个或多个的输出,一个算法得到的结果就是算法的输出。在【例6.2】中输出的是max。任何一个问题能否让计算机处理,关键在于能否设计出合理的算法,有了合适的算法,再使用合适的计算机语言来编写程序,VFP就是一种语言工具。因此要用VFP编写出高质量的程序,一方面要构建合理的算法,另一方面要掌握VFP的语法规则,它是实现算法的基础。2)算法的描述算法的描述方法很多,如自然语言、伪代码、流程图等。为直观、准确的表示一个问题的处理方法和步骤,通常采用流程图的方法。流程图是用一些几何图形符号、线条及文字说明来表征一个问题的处理过程。一般采用传统流程图和N-S图来描述算法。3)三种基本结构的表示1966年,Bohra和Jacopini提出了程序的三种基本结构:顺序结构、选择(或分支)结构、循环结构,它们构成了实现一个算法的基本单元。(1)顺序结构顺序结构是一种最基本、最简单的程序结构。先执行A,再执行B,A与B是按照顺序执行。(2)选择(或分支)结构根据条件是否成立而去执行不同的程序模块。在如图6.3中,当条件P为真时,执行A,否则执行B,即要么执行A,要么执行B。(3)循环结构循环结构是指重复执行某些操作,重复执行的部分称为循环体。如图6.4所示为当型循环结构,当条件P为真时,反复执行A,直到条件P为假时才终止循环。其中A就是循环体,A被重复执行的次数称为循环次数。循环结构除当型循环外,还有直到型循环。6.1.3结构化程序设计方法概述结构化程序设计方法是一种自顶向下、逐步求精、模块化的程序设计方法。按照结构化程序设计方法的思想,就是将给定的一个功能较多的复杂问题合理地划分为若干个较简单的子问题,还可以将这些子问题再分解为若干功能更简单的子任务(可将每个子任务看作一个模块),以便于“分而治之”。在模块划分时,应该尽可能地保证数据的独立性和模块功能的唯一性。也就是说,各模块间的耦合性要尽量弱,即一个模块最好像是一个黑盒子,模块间的数据交换要尽量少;模块的内聚性要尽量强,即每个模块只完成单一的功能。采用结构化程序设计方法的好处是:可以使每个模块功能明确,模块间的关系简单、清晰(即可读性强),每个模块内部的修改尽可能不影响其他模块(即独立性好),同时每个模块的正确性容易验证(即可维护性好)。在VFP中,程序模块化是通过编写子程序、过程、函数来实现的。6.2程序文件的建立、编辑、修改与执行6.2.1程序文件的建立、编辑与修改在VFP中,建立和编辑程序文件可以采用多种文本编辑工具实现,这些文本编辑工具可以是VFP系统提供的内部编辑器,也可以是其他常用文本编辑软件。一般在代码编辑窗口中编辑程序代码。在VFP系统环境下,建立和编辑程序文件有多种方法,在此主要介绍以下三种方式。1)在项目管理器中创建程序文件如果要让程序包含在一个项目文件中,可在项目管理器中建立程序文件。2)用菜单方式新建程序文件在【文件】菜单中选择【新建】命令,在出现的“新建”对话框中选择“程序”文件类型,再单击“新建文件”按钮即可进入代码编辑窗口编辑程序代码。3)命令方式新建程序文件命令格式:MODIFYCOMMAND[文件名]|?6.2.2执行程序文件程序文件创建之后便可执行,执行程序的方法有:(1)若程序文件包含在一个项目中,则在“项目管理器”中,打开“代码”选项卡,展开“程序”项,选定程序文件,单击“运行”按钮。(2)在【程序】菜单中选择【运行】菜单项,在弹出的对话框中选定想要运行的程序文件,单击“运行”按钮。(3)在“命令窗口”中,输入命令:DO程序名[WITH参数表]6.3程序中常用命令6.3.1基本的输入/输出命令输入输出处理是计算机和用户打交道的接口,是程序设计过程中不可缺少的组成部分。处理过程中的原始数据或用户的要求都需要通过输入语句来输入,而处理结果又通过各种形式的输出语句来输出。在VFP中用于输入、输出的命令很多,在此只介绍几个常用的命令。1)INPUT命令命令格式:INPUT[提示信息]TO内存变量功能:在屏幕上显示[提示信息],并等待用户通过键盘输入表达式,再把表达式的值赋给指定的内存变量。2)ACCEPT命令格式:ACCEPT[提示信息]TO内存变量功能:该命令和INPUT类似,不同的是它会把输入内容作为字符串常量赋值给指定的内存变量。3)WAIT命令格式:WAIT[[提示信息]TO内存变量][WINDOW[AT行,列]][NOWAIT][CLEAR|NOCLEAR][TIMEOUT数值表达式]功能:该命令的作用是暂停程序的执行,直到用户按任意键或单击鼠标或等待输入一个字符(可存入指定的内存变量)或在指定时间内继续程序的执行。说明:在该命令中,若选用WINDOW,则会出现一个用以显示提示信息的WAIT提示窗口,该提示窗口通常位于主窗口的右上角。若需指定提示窗口的位置时,可使用AT实现;若同时选用NOWAIT和WINDOW,则程序不等待用户按键就继续执行;若选用NOCLEAR,则不关闭提示窗口,直到执行下一条WAITWINDOW或WAITCLEAR为止;若选用TIMEOUT,则在超过设定等待时间后程序自动继续执行。6.3.2程序文件中的辅助命令在程序中,有一些专门用于程序开始和结束、对程序进行注释以及环境设置的命令,常用的有:1)注释命令为了提高程序的可读性,编写程序时可在程序中适当加上一些注释。注释命令在执行时不做任何操作,也不影响程序的功能。格式1:NOTE[注释内容]格式2:&&[注释内容]格式3:*[注释内容]功能:用于在程序中加入说明,以增加程序的可读性。其中NOTE和*命令用于行首注释,而&&命令通常用于行尾注释。2)程序结束命令VFP的应用程序可以根据需要终止执行并返回命令窗口,或返回操作系统或返回到调用它的上一级程序或主程序格式1:CANCEL功能:结束当前VisualFoxPro程序的执行。格式2:RETURN[TOMASTER]功能:结束当前程序的执行,返回到调用它的上一级程序。带TOMASTER选项表示直接返回到主程序。格式3:QUIT功能:关闭所有文件,退出VFP系统,返回到操作系统。3)清屏命令命令格式:CLEAR功能:清除屏幕内容。4)SETTALKON/OFF功能:控制非输出性的结果是/否在屏幕上显示出来。其中系统默认值为ON。5)SETSAFETYON/OFF功能:确定在改写已有文件前,是/否显示提示对话框。其中系统默认值为ON。6.4VFP程序的三种基本结构6.4.1顺序结构顺序结构始终按照程序中语句的先后顺序逐条执行。【例6.3】鸡兔同笼,已知鸡兔的总头数为H,总脚数为F,求鸡兔各有多少只?鸡兔同笼问题的算法如图6.9所示。其程序文件exam6_3.prg的代码为:INPUT“请输入鸡兔总头数:”TOHINPUT“请输入鸡兔总脚数:”TOFX=(4*H-F)/2&&X为鸡的只数Y=(F-2*H)/2&&X为兔的只数?”共有鸡:”,X?”共有兔:”,YCANCEL6.4.2选择结构应用程序在进行数据处理时需要根据不同的条件选择执行不同的操作,使程序的流程根据不同条件来决定程序的走向,这种程序结构称为选择结构。在VFP中是用IF…ELSE…ENDIF和DOCASE…ENDCASE来实现的。1)IF语句格式:IF条件表达式语句序列1[ELSE语句序列2]ENDIF功能:执行该语句时,若条件表达式的值为.T.,则执行语句序列1,否则执行语句序列2,然后再执行ENDIF之后的语句,如图6.10所示。说明:在IF语句中,ELSE选项可缺省,此时在如图6.10所示的图中去掉语句序列2即可。当ELSE缺省时,如果条件表达式为.F.,则执行ENDIF后面的语句。IF和ENDIF必须成对出现,否则程序将无法执行。该语句可以嵌套使用,但是在嵌套使用时不能出现交叉现象。【例6.4】输入球的半径,计算球的体积其程序文件exam6_4.prg的代码为CLEARINPUT请输入球的半径:torIFr0v=(4/3)*3.1416*r^3?球的体积是:,ROUN(v,2)&&保留两位小数ELSEMESSAGEBOX(输入半径不能为负数!)ENDIFCANCEL2)多路分支语句格式:DOCASE图6.11多分支选择CASE条件表达式1语句序列1[CASE条件表达式2语句序列2…CASE条件表达式N语句序列N][OTHERWISE语句序列Q]ENDCASE功能:从第一个CASE的条件开始判断,若条件表达式I(I=1、2、3…n)的值为.T.,则执行语句序列I(I=1、2、3…n),然后执行ENDCASE之后的语句。所以在一个DOCASE结构中,最多只能执行一个CASE语句后面的语句序列。如果所有CASE语句后的条件表达式的值均为.F.,则执行OTHERWISE之后的语句序列Q。OTHERWISE子句可以缺省,此时如果所有条件表达式的值均.F.,就退出该结构执行EDNCASE语句后面的语句,如图6.11所示。6.4.3循环结构循环是按照给定的条件去重复执行一段具有特定功能的程序。循环结构是一种重要的程
本文标题:第6章结构化与面向对象程序设计基础.
链接地址:https://www.777doc.com/doc-3358938 .html