您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 第8章程序设计基础2
VisualFoxpro程序设计第8章程序设计基础本章主要内容8.1程序设计的基本概念与步骤8.2程序中的常用命令8.3程序控制结构8.4多模块程序设计总页第2页8.3.3循环结构程序设计在程序设计中,经常需要对某一个程序段(即一条或多条命令)反复执行,这种程序结构称为循环结构。循环结构的特点是:当给出的循环条件为真时,反复执行一组命令,这组被重复执行的命令序列称为循环体。当循环条件为假时,则终止循环体的执行。循环结构也就是由循环条件控制循环体是否重复执行的一种语句结构,它可以简化程序,提高程序效率。常用的循环语句有以下几种形式:条件型循环:DOWHILE—ENDDO计数型循环:FOR—TO—ENDFOR扫描型循环:SCAN—ENDSCAN总页第3页一、条件循环条件循环是根据条件表达式的值,决定循环体内语句的执行次数,也称为当型循环。一般用于未知循环次数的循环。【格式】DOWHILE条件表达式命令行序列[LOOP][EXIT]ENDDO【功能】语句执行时,先判断条件表达式的值,若为真,则执行循环体内的命令,即DO与ENDDO之间的命令;若为假,则执行ENDDO后面的命令。总页第4页【说明】1.DOWHILE和ENDDO要配对使用;2.DOWHILE是循环语句的入口,条件表达式一般为逻辑型,ENDDO是循环语句的出口,中间命令行序列是重复执行的循环体;3.LOOP和EXIT只能在循环体中使用,是循环跳转和控制语句。其中LOOP是转到循环的入口语句,EXIT是强行退出循环的语句,它们一般都放在分支结构中;4.循环结构允许嵌套。这种嵌套不仅限于循环结构自身的嵌套,而且还可以是和选择结构的相互嵌套;5.循环一般要有退出机制,否则,会形成死循环。总页第5页条件循环流程图无跳转流程图跳转及控制流程图总页第6页例:编写程序,其功能是循环查找学生姓名,并根据用户选择确定是否继续查找。Cleause学生Dowhile.t.cleatext根据姓名查找记录endtext?accep请输入查询学生姓名:toxmLocafor姓名==xmiffound()@row()+1,15say学号get学号@row(),30say姓名get姓名@row()+1,15say性别get性别@row(),30say出生日期get出生日期else?查无+xm+姓名!Endifwait是否继续查询?(Y/N)tocxwindowat20,10ifuppe(cx)=YloopelseexitendifenddouseSettalkonreturn总页第7页二、计数型循环语句计数型循环语句适用于循环次数已知的情况下,它是根据用户设置的循环变量的初值、终值和步长来决定循环体的执行次数。计数型循环语句又称FOR循环语句。【格式】FOR内存变量=初值TO终值[STEP步长]命令行序列[LOOP][EXIT]ENDFOR|NEXT【功能】通过比较内存变量与终值来决定是否执行命令行序列。执行FOR语句时,首先将循环初值赋给循环变量,然后将循环变量与循环终值比较,当步长为正数时,若内存变量的值不大于终值,执行循环体;当步长为负数时,若内存变量的值不小于终值,执行循环体。一旦遇到ENDFOR或NEXT语句,内存变量值自动加上步长,然后返回到FOR语句,重新与终值进行比较。直到循环变量大于或小于循环终值时,结束循环。步长的默认值为1。总页第8页【说明】1.步长值省略时,系统默认步长值为1。当初值小于终值时,步长值为正值;当初值大于终值时,步长值为负值。步长值不能为0,否则造成死循环;2.在循环体内不要随便改变循环变量的值,否则会引起循环次数发生改变;3.[LOOP]和[EXIT]命令的功能和用法与条件循环中该命令的用法相同。总页第9页计数循环流程图总页第10页例:编写程序,其功能是用计数循环统计学生表中入校总分在570分以上的学生人数。CleaSettalkoffuse学生countozrsrs=0listfor入校总分=570gotopfori=1tozrsif入校总分=570rs=rs+1endifskipendfor?入校总分不低于570的学生人数是:,rsusesettalkonretu总页第11页三、指针型循环语句指针型循环语句是在数据表中建立的循环,它是根据用户在表中设置的当前记录指针来对一组记录进行的循环操作,是VisualFoxPro中特有的一种循环语句。【格式】SCAN[范围][FOR条件表达式1][WHILE条件表达式2]命令行序列[LOOP][EXIT]ENDSCAN【功能】针对当前表进行循环操作,用记录指针控制循环次数。在指定的范围中依次寻找满足FOR条件或WHILE条件的记录,并对找到的记录执行命令行序列中的命令。总页第12页【说明】1.SCAN…ENDSCAN循环语句中隐含函数EOF()和命令SKIP的处理;2.执行SCAN语句时,首先判断函数EOF()的值,若为“真”,则结束循环,执行ENDSCAN后面的语句;否则,结合条件表达式1或条件表达式2,记录指针移到指定的范围和条件内的第一条记录,执行命令行序列中的命令;3.执行ENDSCAN时,记录指针自动移到下一条记录,转到SCAN重新判断,直到EOF()函数值为真或到指定范围末尾,退出循环,执行ENDSCAN后面的语句;3.无范围选项时,则表示对所有记录进行处理;4.[LOOP]和[EXIT]命令的功能和用法与条件循环中该命令的用法相同。总页第13页指针循环流程图总页第14页例:编写程序,其功能是用指针循环统计学生表中入校总分在570分以上的学生人数。CleaSettalkoffuse学生listfor入校总分=570rs=0scanfor入校总分=570rs=rs+1endscan?入校总分不低于570的学生人数是:,rsusesettalkonretu总页第15页四、多重循环多重循环是指在一个循环语句内又包含另一个循环语句,多重循环也称为循环嵌套。下面以条件循环为例,进行说明。【格式】DOWHILE条件表达式1命令行序列11DOWHILE条件表达式2命令行序列21……ENDDO命令行序列12ENDDO总页第16页【功能】在多重循环中,首先从外循环进入内循环,执行内循环的语句。当内循环的条件为假时,返回到外循环;当外循环的条件为真时,又进入内循环;否则,退出循环。【说明】1.循环嵌套层次不限,但内循环的所有语句必须完全嵌套在外层循环之中。否则,就会出现循环的交叉,造成逻辑上的混乱;2.循环结构和分支结构允许混合嵌套使用,但不允许交叉。其入口语句和相应的出口语句必须成对出现。总页第17页例:编写程序,其功能是使用多重循环打印一个九九乘法口诀表。SETTALKOFFCLEARFORI=1TO9&&I循环为外层,共循环九次,控制“九九表”的行FORj=1TOI&&J循环为内层,共循环45次(I从1到9),控制列??SPACE(2)+STR(j,1)+×+STR(I,1)+=+STR(I*J,2)+SPACE(2)&&??输出不换行ENDFOR?&&每输出九九表一行要换行ENDFORSETTALKONRETURN思考:如果改用条件循环,程序应作如何修改?总页第18页相关概念模块化是结构化程序的重要原则,所谓模块化就是把大程序按照功能分为较小的程序,具有一定功能的每个小程序即为模块。一般来讲,一个程序是由一个主控模块和若干子模块组成的,主控模块用来完成某些公用操作及功能选择,而子模块用来完成某项特定的功能。这种设计风格便于分工合作,将一个庞大的模块分解为若干个子模块分别完成,然后用主控模块调用子模块。这种程序的模块化结构如下图所示。结构化程序的设计过程就是将问题求解由抽象逐步具体化的过程。这种方法符合人们解决复杂问题遵循的普遍规律,可以显著提高程序设计的效率。8.4多模块程序设计总页第19页程序的模块化结构总页第20页总39页第20页在编制程序时,经常会遇到有些运算或某段程序在程序运行中被多次调用的情况,为了有效解决上述重复调用,有必要设计相对独立并能完成特定功能的程序段,这种程序段称为子程序(该程序段单独保存为一个程序文件)或过程(该程序段附在调用程序末尾或放在过程文件中)。调用子程序的程序称为调用程序。对于一个子程序来说,除了被调用以外,还可以调用其他子程序(子程序的嵌套调用)。此时,该子程序便成为其被调用程序的调用程序。在一个应用系统中,处于最高层次的调用程序称为主程序。总页第21页总39页第21页在应用系统的开发中,一般会根据实际的需要将整个系统划分成若干个模块,然后在主控模块的控制下,调用各个功能模块以实现系统的各种功能操作,通常将这些可调用的功能模块也设计成过程或子程序。特点:(1)过程或子程序一般不单独运行,而是通过上级程序调用;(2)过程可以附在调用程序的末尾,也可以放在单独的文件中(过程文件);(3)子程序可以嵌套调用。总页第22页总39页第22页8.4.1子程序1.子程序的建立子程序作为一个独立程序,与其他程序一样可以用MODIFYCOMMAND命令、菜单或项目管理器等多种方法建立和调试,也是以程序文件名.PRG的形式独立存盘。总页第23页总39页第23页2.子程序的调用子程序的调用是通过调用语句实现的。【格式】DO子程序文件名或子程序文件名()【功能】执行DO调用命令时,将指定的子程序调入内存并执行,当执行到RETURN命令时,返回到该命令指定位置。【说明】调用程序可以调用任何子程序。子程序还可以调用下一级子程序,但子程序不能调用自己上层的调用程序。子程序可以返回到调用它的调用程序中,也可以直接返回到主程序中。总页第24页总39页第24页子程序调用嵌套调用总页第25页总39页第25页3.子程序的返回子程序执行后,可以采用下面语句返回到调用程序。【格式】RETURN[表达式|TO程序文件名|TOMASTER]【功能】该语句终止子程序执行,返回到调用程序中调用语句的下一个语句执行(或到指定位置)。如无调用程序,则返回命令窗口。总页第26页总39页第26页【说明】(1)子程序的一个重要标志是:以RETURN语句作为结束语句,而一般在主程序和无上一级调用程序的程序尾部用CANCEL语句作为结束语句;(2)在返回语句中,若选择可选项表达式,将表达式的值返回给调用程序。选择可选项[TO程序文件名],可直接返回指定的程序文件。选择可选项[TOMASTER],则不论前面有多少级调用而直接返回到主程序。总页第27页总39页第27页8.4.2过程及过程文件把多个子程序合并成一个大的文件,在该文件中,每个子程序仍然是独立的,这个大的公用程序文件被称作过程文件。其中的每个子程序模块称为过程。在系统执行过程中,只需打开相应的过程文件即可调用其中的多个过程,从而大大减少了访问磁盘的次数,可提高程序运行效率。过程文件的扩展名仍然是.PRG。【格式】PROCEDURE过程名[PARAMETERS参数表]命令行序列[RETURN]ENDPROC总页第28页总39页第28页1.过程定义【命令】MODIFYCOMMAND过程文件名过程文件的基本书写格式:PROCEDURE过程名1命令序列1[RETURN]ENDPROC……PROCEDURE过程名N命令序列N[RETURN]ENDPROC总页第29页总39页第29页【功能】建立过程。【说明】过程名和过程文件名是两个不同的概念,每个过程是具有独立功能的一段程序,过程名是一个没有扩展名的过程名称。一个过程文件可以由一个或多个过程构成,扩展名是.PRG。在PROCEDURE与ENDPROC之间如果使用RETURN命令,可以返回到上一层程序。2.调用(执行)过程【格式】DO过程名【功能】用于调用过程名指定的过程。总页第30页总39页第30页3.过程文件的打开和
本文标题:第8章程序设计基础2
链接地址:https://www.777doc.com/doc-599638 .html