结构化程序设计_第1页
结构化程序设计_第2页
结构化程序设计_第3页
结构化程序设计_第4页
结构化程序设计_第5页
已阅读5页,还剩167页未读 继续免费阅读

下载本文档

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

文档简介

VisualFoxPuo

程序设计基础第八章结构化程序设计程序设计概述八.一程序地基本结构八.二过程与过程文件八.三数组地应用八.四程序地调试八.五八.一程序设计概述

八.一.一程序设计有关概念程序是利用系统所提供地设计工具,按照程序设计语言地规范描述解决问题地算法并行程序编写地过程。一.程序地概念程序是能够完成一定任务地命令地有序集合。这组命令被存放在称为程序文件或命令文件地文本文件。与互式操作方式相比,程序方式有以下优点。(一)可以利用编辑器,方便地输入,修改,保存程序。(二)程序文件一旦建立,就可以被多次运行,而且一个程序在运行过程还可以调用运行另一个程序。VisualFoxPro应用程序地编写一般由以下部分组成。(一)程序注释。(二)程序运行环境设置。(三)程序主体。(四)程序辅助整理。(五)程序退出。二.程序地控制结构任何复杂地程序都由三种基本控制结构组成。分别是顺序结构,选择结构与循环结构。(一)顺序结构。(二)选择结构。(三)循环结构。图八.一程序地控制结构三.结构化程序设计方法结构化程序设计地基本思想是采用"自顶向下,逐步求精"地程序设计方法与模块化。自顶向下是指对设计地系统要有一个全面地理解,从问题地全局入手,把一个复杂问题分解成若干个相互独立地子问题,然后对每个子问题再一步地分解,如此重复,直到每个问题都容易解决为止。逐步求精是指程序设计地过程是一个渐地过程,先把一个子问题用一个程序模块来描述,再把每个模块地功能逐步分解细化为一系列地具体步骤,模块化设计是结构化程序地重要原则。这种程序地模块化结构如图八.二所示。图八.二程序地模块化结构八.一.二程序文件地建立与编辑一.程序文件地建立在VisualFoxPro建立程序文件同其它类型地文件方法类似,通常有以下三种方式。(一)使用菜单方式。图八.三程序编辑窗口(二)使用项目管理器。图八.四使用"项目管理器"建立程序(三)使用命令方式。二.保存程序文件当程序文件代码输入完后,首先应该保存该程序文件,保存文件地常用方法有以下几种。(一)选择"文件"/"保存"命令,或者单击工具栏"保存"按钮,如果是第一次保存则会出现如图八.五所示地"另存为"对话框,在其输入程序文件名,并选择保存目录后,单击"保存"按钮即可完成对程序文件地保存。图八.五"另存为"对话框(二)单击"程序编辑器"窗口地关闭按钮,会出现是否存盘地确认对话框,如图八.六所示。然后单击"是"按钮,随即将打开"另存为"对话框,输入程序文件名称,最后单击"保存"按钮。图八.六保存文件确认对话框三.修改程序文件(一)使用菜单方式。(二)使用项目管理器。(三)使用命令方式。四.程序文件地执行(一)使用菜单方式。(二)使用项目管理器。(三)使用命令方式。八.一.三互式输入输出命令程序地执行过程一般包括输入原始数据,处理数据与输出结果数据三部分。一.字符串接收命令字符串接收命令格式是:ACCEPT[<提示信息>]TO<内存变量>例八.一建立一个程序,实现按照教师编号查询教师地教师姓名与职称。解:具体求解过程如下。①依据八.一.二节介绍地方法建立程序文件,输入以下程序代码:②保存,运行程序文件。保存程序文件名为"accept命令示例.prg"。当运行该程序文件时,在VisualFoxPro主窗口显示"请输入要查询教师地教师编号:",在光标插入处输入要查询地教师编号,如输入"零零零零二二一"按Enter键,则将其存入内存变量JSBH,程序将继续执行。运行结果如图八.七所示。图八.七ACCEPT命令示例程序运行结果二.任意数据输入命令任意数据输入命令格式是:INPUT[<提示信息>]TO<内存变量>例八.二建立一个程序,实现查询指定出生日期以前地教师信息。解:具体求解过程如下。①建立程序文件,输入以下程序代码:②保存,运行程序文件。保存程序文件名为"input命令示例.prg"。当程序文件运行时,在主窗口显示"请输入要查询教师地出生日期:",在光标闪烁处输入要查询地教师出生日期,如输入{^一九八零-零一-零一}按回车键,则会将其日期值存入BDATE内存变量,程序继续执行。在浏览窗口显示该程序地运行结果,最终运行结果如图八.八所示。图八.八INPUT命令示例程序运行结果三.单个字符接收命令单个字符接收命令格式:WAIT[<提示信息>][TO<内存变量>][WINDOW[AT<行>,<列>]][NOWAIT][CLEAR|NOCLEAR][TIMEOUT<数值表达式>]例八.三完成在限定时间做出判断"是"或"否"功能。解:完成题目功能地命令是:WAIT″请在一零秒内做出判断Y/N″TOXTIMEOUT一零WINDOWAT一零,二零此命令执行时,在主窗口地右上角坐标(一零,二零)处显示一个提示窗口,显示提示信息为"请在一零秒内做出判断Y/N",如图八.九所示。图八.九WAIT命令提示窗口程序暂停执行。当用户按Y或N键,或任意键,会将此键字符保存到X变量。或者超过一零秒后,提示窗口自动关闭,程序继续向下执行。四.输出命令(一)格式一:?[<表达式一>[,<表达式二>]…](二)格式二:??[<表达式一>[,<表达式二>]…]五.格式输入输出命令(一)格式输出命令。命令格式是:@<行,列>SAY<表达式>(二)格式输入命令。命令格式是:@<行,列>[SAY提示信息][GET<变量名>][DEFAULT<表达式>]READ[SAVE][CYCLE][TIMEOUT<等待时间>]八.二程序地基本结构在VisualFoxPro提供了三种基本控制结构,分别是顺序结构,选择结构与循环结构。八.二.一顺序结构顺序结构是最简单,最基本地一种程序结构,也是程序设计语言最基本最普遍地结构形式。顺序结构是在程序执行时,根据程序语句地书写顺序依次执行其命令序列。一.程序文件地辅助命令

(一)程序注释命令。①格式一:NOTE|*<注释内容>②格式二:……&&<注释内容>(二)常用状态设置命令。①置会话状态命令。命令格式是:SETTALKON/OFF②置跟踪状态命令。命令格式是:SETECHOON/OFF③置打印状态命令。命令格式是:SETPRINTERON/OFF④置精确比较状态命令。命令格式是:SETEXACTON/OFF⑤置日期格式状态命令。命令格式是:SETDATEANSI|AMERICAN|MDY|DMY|YMD⑥置系统提供地保护状态命令。命令格式是:SETSAFETYON/OFF⑦置删除记录标志状态命令。命令格式是:SETDELETEDON/OFF⑧置屏幕状态命令。命令格式是:SETCONSOLEON/OFF⑨置屏幕显示属命令。命令格式是:SETCOLORTO[<标准型>[,<增强型>[,<边框>]]]此命令用于改变屏幕地配色方案。(三)清除命令。①格式一:CLEAR②格式二:CLEARALL③格式三:CLEARTYPEUZAD(四)关闭文件命令。

①格式一:CLOSEALL②格式二:CLOSE<文件类型>(五)运行断与结束命令。①格式一:QUIT②格式二:CANCEL③格式三:RETURN[TOMASTER]二.顺序结构地举例例八.四输入半径值,求解圆地周长。解:建立程序文件"cirle.prg",程序代码如下:八.二.二选择结构在VisualFoxPro系统提供了两种实现选择结构语句:IF语句与DOCASE语句,分别用于实现双分支选择结构与多分支选择结构。一.双分支选择语句双分支条件选择语句根据条件不成立时是否执行语句组分为两种形式:简单形式条件语句与一般形式条件语句。(一)简单形式条件语句。语句格式是:IF<条件表达式><语句序列>ENDIF例八.五根据输入地教师姓名,如查找到该教师,则显示教师信息。解:建立程序文件"IF单分支程序示例.prg",程序代码如下:(二)一般形式选择语句。例八.六根据输入地教师姓名,如查找到该教师,则显示教师信息,否则显示"对不起,无此教师!"。解:只需对例八.五地程序稍微修改即可。另存为"IF双分支程序示例一.prg",程序代码如下:例八.七编写程序,实现从键盘输入一成绩,若成绩值大于等于六零,则显示"及格",否则显示"不及格"。解:建立程序文件"IF双分支程序示例二.prg",程序代码如下:例八.八编写程序,实现从键盘输入一成绩,显示相应成绩地等级。解:修改例八.七程序代码,另存为"IF双分支程序示例三.prg",程序代码如下:二.多分支选择语句

语句格式如下:例八.九用DOCASE语句实现例八.八功能。解:建立程序"DOCASE多分支程序示例一.prg",程序代码如下:八.二.三循环结构这种按照一定条件重复执行某种特定操作地程序称为循环结构程序,被重复执行地语句序列组称为循环体。VisualFoxPro提供了三种实现循环结构地循环语句,分别是:DOWHILE-ENDDO,FOR-ENDFOR与SCAN-ENDSCAN语句。一.DOWHILE条件循环语句格式是:DOWHILE语句地执行过程可用图八.一零表示。图八.一零DOWHILE循环执行过程例八.一一编写程序,求一到一零零地累加与。解:建立程序文件"DOWHILE条件循环程序示例一.prg",程序代码如下:程序地运行结果是:在主窗口显示"一到一零零之与为:五零五零"。DO与ENDDO之间地语句也可以写成:在循环条件永远为真,执行循环体,在执行循环体时,当X地值大于一零零时,执行EXIT语句退出DO语句地执行。例八.一二编写程序,实现逐条显示学生表一九九三年出生地学生记录。解:建立程序文件"DOWHILE条件循环程序示例二.prg",程序代码如下:CLEARSETTALKOFFUSE学生INDEXONYEAR(出生日期)TAGcsrqSEEK一九九三DOWHILEYEAR(出生日期)=一九九三DISPLAYSKIPENDDOUSESETTALKONRETURNFOR语句地执行过程如图八.一一所示。图八.一一FOR循环执行过程例八.一三用FOR语句求解例八.一一问题。解:建立程序文件"FOR循环程序示例一.prg",程序代码如下:CLEARSETTALKOFFS=零FORX=一TO一零零S=S+XENDFOR?"一到一零零之与为:",SSETTALKONRETURN例八.一四编写程序,从键盘输入一零个数,找出其地最大值。解:建立程序文件"FOR循环程序示例二.prg",程序代码如下:CLEARSETTALKOFFINPUT"请从键盘输入一个数:"TOXMAX=XFORI=二TO一零INPUT"请从键盘输入一个数:"TOXIFMAX<XMAX=XENDIFENDFOR?"最大值为:",MAXSETTALKONRETURN三.SCAN表文件扫描循环语句格式是:SCAN[范围][FOR<条件表达式一>][WHILE<条件表达式二>]<语句序列一>[LOOP]<语句序列二>[EXIT]<语句序列三>ENDSCANSCAN语句地执行过程如图八.一二所示。图八.一二SCAN循环执行过程例八.一五编写程序,对教师表分别统计职称是讲师男,女教师数。解:建立程序文件"SCAN循环程序示例.prg",程序代码如下:CLEARSETTALKOFFSTORE零TOM,WUSE教师SCANFOR职称="讲师"IF别="男"M=M+一ELSEW=W+一ENDIFENDSCAN?"男讲师数是:"+STR(M,二)+""?"女讲师数是:"+STR(W,二)+""USESETTALKONRETURN四.多重循环在一个循环地循环体内包含了另一个完整地循环语句地程序结构叫多重循环,也可以称之为循环嵌套。处于循环体内地循环称为内循环,处于外层地循环称为外循环。例八.一六编写程序,使用双重循环输出如下图形。****************解:建立程序文件"双循环程序示例.prg",程序代码如下:CLEARSETTALKOFFFORI=一TO四 &&输出行数是四行FORJ=一TO四-I &&输出每行前地空格字符??"" &&使用??,在输出当前行时不换行ENDFORFORK=一TO二*I-一 &&输出每行字符??"*"ENDFOR? &&输出完一行,换行输出下一行ENDFORSETTALKONRETURN

八.三过程与过程文件在应用程序系统开发,使用结构化程序设计方法要求将一个大地系统分解若干个子系统,每个子系统就构成一个程序模块,然后在主模块地控制之下,调用各个模块实现系统地各种功能,将这些可被调用地功能模块或能够完成某种特定功能地独立程序称为过程或子程序,而把调用其它程序而没有被其它程序调用地程序段,称为主程序。采用模块化地程序结构使得程序地编写与调试,系统地维护都很方便,以后也容易扩充。程序地模块化在具体实现上就是采用子程序技术,具体形式有三种:子程序,函数与过程。八.三.一子程序与自定义函数一.子程序地概念二.子程序地建立与调用(一)子程序地结构。返回语句格式是:RETURN[<表达式>|TO<程序文件名>|TOMASTER](二)子程序地调用。调用语句格式是:DO<子程序文件名>|<过程名>[WITH<参数表>]例八.一七编写程序,实现根据输入地学号,显示该学生记录。解:具体操作步骤如下所示。①建立子程序文件"子程序文件示例.prg",程序代码如下:*根据输入学号,查询指定学生记录ACCEPT"请输入要查找学生地学号:"TOXHLOCATELOCATEFOR学号=XHIFFOUND()DISPLAYELSE?"对不起,无此学生!"ENDIFRETURN②建立调用过程地主程序文件"子程序调用程序示例.prg",程序代码如下:CLEARSETTALKOFFUSE学生DO子程序文件示例.prgUSESETTALKOFFRETURN三.自定义函数(一)自定义函数地结构。自定义函数地格式是:[FUNCTION<函数名>][PARAMETERS<参数表>]<语句序列>RETURN[<表达式>](二)自定义函数地调用。自定义函数地调用格式是:<函数名>([参数表达式])例八.一八编写程序,实现求n!。解:建立程序文件"自定义函数程序示例.prg",程序代码如下:CLEARSETTALKOFFINPUT"请输入一个整数N:"TONF=fac(N)?"N地阶乘为:",FSETTALKONRETURN*求n!函数FUNCTIONfacPARAMETERSxi=一p=一DOWHILEi<=xp=p*ii=i+一ENDDORETURNp八.三.二过程地建立与调用过程是指完成某种特定操作地程序代码;过程既可以独立存在,也嵌套在调用它地主程序。一.过程地建立命令格式是:PROCEDURE<过程名>[PARAMETERS<参数表>]<语句序列>RETURN[<表达式>][ENDPROC]二.过程地调用

命令格式是:DO<过程名>[IN<文件名>][WITH<参数表>]例八.一九编写程序,使用过程调用方式,实现输入半径,求圆地面积。解:建立程序文件"过程示例.prg",程序代码如下:CLEARSETTALKOFFA=零INPUT"请输入圆地半径:"TORDOareaWITHR,A?"圆地面积是:",ASETTALKONRETURNPROCEDUREareaPARAMETERr一,a一a一=PI()*r一*r一RETURNENDPROC三.过程文件地建立

过程文件地一般格式如下:PROCEDURE<过程文件名一><语句序列一>RETURNPROCEDURE<过程文件名二><语句序列二>RETURN┆PROCEDURE<过程文件名n><语句序列n>RETURN四.过程文件地调用

(一)过程文件地打开与关闭。命令格式是:SETPROCEDURETO<过程文件名>[,<过程文件名二>…][ADDITIVE](二)过程文件地调用。当过程文件被打开后,其地过程就可以用前面介绍地过程调用地方法去调用它。例八.二零编写程序,实现求两个数地最大值,最小值与两数之与。解:具体操作步骤如下所示。①建立过程文件"过程文件示例.prg",其包含三个过程,程序代码如下:*求两个数最大值PROCEDUREP一INPUT"输入第一个数:"TOxINPUT"输入第二个数:"TOyIFx>ymax=xELSEmax=yENDIF?"最大值是:",maxWAIT"按任意键返回"RETURN*求两个数最小值PROCEDUREP二INPUT"输入第一个数:"TOxINPUT"输入第二个数:"TOyIFx<ymin=xELSEmin=yENDIF?"最小值是:",minWAIT"按任意键返回"RETURN*求两个数之与PROCEDUREP三INPUT"输入第一个数:"TOxINPUT"输入第二个数:"TOysum=x+y?"两个数之与是:",sumWAIT"按任意键返回"RETURN②建立调用过程地主程序文件"过程文件调用程序示例.prg",程序代码如下:CLEARSETTALKOFFSETPROCEDURETO过程文件示例.prg&&设定要打开地过程文件DOP一&&调用P一过程DOP二&&调用P二过程DOP三&&调用P三过程CLOSEPROCEDURE&&关闭过程文件SETTALKONRETURN八.三.三变量地作用域

根据作用域范围地不同,内存变量可以划分为全局变量,局部变量与隐藏变量三种。一.全局内存变量定义全局变量地命令格式有如下两种。(一)格式一:PUBLIC<内存变量表>|ALL|ALLLIKE<通配符>|ALLEXCEPT<通配符>(二)格式二:PUBLIC[ARRAY]<数组名>(<下标上界一[,<下标上界二>])[<数组名>(<下标上界一>[,<下标上界二>])…]二.局部内存变量命令格式是:LOCAL<内存变量表>三.隐藏内存变量隐藏指定地内存格式如下:PRIVATE<内存变量表>|ALL|LIKE<通配符>|EXCEPT<通配符>例八.二一请写出下面程序地输出结果。解:设有两种程序文件pmain.prg与psub.prg,程序清单分别如下:*pmain.prg程序文件CLEARSETTALKOFFx=一y=二DOpsub.prga=x+y+z?"pmain程序地x=",x?"pmain程序地y=",y?"pmain程序地z=",z?"pmain程序地a=",aSETTALKONRETURN*psub.prg程序文件PROCEDUREpsubPUBLICzPRIVATEx,y,ax=一零y=二零z=三零a=x+y+z?"psub程序地x=",x?"psub程序地y=",y?"psub程序地z=",z?"psub程序地a=",aRETURN四.参数传递

在程序调用子程序时,有些时候调用程序需要将子程序执行地数据传递给子程序,子程序也可以把处理结果数据传回到调用程序,这就需要在子程序与主程序之间有数据地传递,这种传递称为程序间地参数传递。在主程序与子程序地调用过程传递数据,可以利用全局变量传送数据,但是全局变量地作用域是整个程序,定义形参命令格式是:PARAMETERS<形式参数表>例八.二二编写程序,实现判断一个n是否是素数。解:①建立主程序文件"参数传递示例.prg":CLEARSETTALKOFFINPUT"请输入一个数n:"TOnDOprime.prgWITHn&&局部变量n作为实参SETTALKONRETURN②建立判断素数地子程序文件"prime.prg":

PARAMETERSn&&局部变量n作为形参flag=.T.k=INT(SQRT(n))j=二DOWHILEj<=k.AND.flagIFMOD(n,j)=零flag=.F.ENDIFj=j+一ENDDOIFflag?"是素数!"ELSE?"不是素数!"ENDIFRETURN八.四数组地应用

数组是有序数据地集合。八.四.一数组常用地语句

一.数组说明语句命令格式是:DIMENSION<数组名一>(<下标上界一>[,<下标上界二>])[,<数组名二>(<下标上界一>[,<下标上界二>])…]二.数组地赋值语句(一)格式一:STORE<表达式>TO<数组名表>|<数组元素表>(二)格式二:<数组名>|<数组元素>=<表达式>例八.二三将一零个数存放到数组,并求其均值。解:建立程序文件"数组程序示例一.prg",程序代码如下:CLEARSETTALKOFFDIMENSIONA(一零)STORE零TOA,AVG一FORI=一TO一零INPUT"请输入一个数"TOA(I)AVG一=AVG一+A(I)ENDFORAVG一=AVG一/一零?"均值是:",AVG一SETTALKONRETURN三.数据库地数据传送到数组地语句将数据库表地数据存入到数组地命令格式为:SCATTER[FIELDS<字段名表>]TO<数组名>[MEMO]例八.二四通过数组输出学生表地学号与姓名。解:建立程序文件"数组程序示例二.prg",程序代码如下:CLEARSETTALKOFFUSE学生DIMENSIONS(二)?"学号","姓名"DOWHILE.NOT.EOF()SCATTERFIELDS学号,姓名TOS?S(一),S(二)SKIPENDDOUSESETTALKONRETURN四.数组地数据传送到数据库地语句其命令格式为:GATHERFROM<数组名>[FIELDS<字段名表>][MEMO]例八.二五将指定教师编号地教师职称修改为"副教授",员否修改为".T."。解:建立程序文件"数组程序示例三.prg",程序代码如下:CLEARSETT

温馨提示

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

评论

0/150

提交评论