您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 数据通信与网络 > 第9讲 结构化程序设计基础
第9讲结构化程序设计9.1结构化程序设计9.2程序的控制结构9.3多模块程序9.4变量的作用域9.5程序调试方法9.6模块化设计9.7结构化窗口设计9.8习题9.1结构化程序设计结构化程序设计方法面向对象的程序设计方法传统方法,可以开发多模块DBAS,层次清楚。面向对象,可以利用辅助工具设计界面,自动生成应用程序,只需编写少量过程代码。VFP程序和其它高级语言编写的程序一样,是一个文本文件(.prg)。程序由若干行命令语句构成,编写程序即建立一个称为源程序的文本文件,只有建立了程序文件才能执行该程序。程序执行方式是将多条命令按一定的结构编写成一个程序,然后命令机器去执行这个程序。9.1结构化程序设计程序文件的建立1)菜单方式:“文件”菜单→“新建”命令→选择“程序”选项→点击“新建文件”按钮→打开程序编辑器→输入命令序列;2)在“项目管理器”中创建程序:打开项目管理器→选择“代码”选项→选择“程序”选项→点击“新建”按钮→打开程序编辑器→输入命令序列;3)命令方式:MODIFYCOMMAND程序文件名&&打开文本编辑窗口,建立或修改程序文件。后缀名为.PRG。注:本编辑窗口也可以编辑ASCII字符组成的非.PRG文件,但是只能读,不能运行。9.1结构化程序设计程序文件的保存与修改9.1结构化程序设计1)按Ctrl+w键:将文件立即存盘并且退出编辑;2)按ESC键:出现是否放弃修改的信息框;3)单击“关闭”按钮:要否保存更改的信息框,单击“是”按钮文件存盘且退出编辑,单击“否”按钮表示文件不存盘且退出编辑,单击“取消”按钮则不退出编辑。9.1结构化程序设计程序书写规则1)一条命令最长可达8192个字符,一行写不下时,需用续行符“;”,按回车键在下一行书写;2)以“*”开头表示注释行,命令后以“&&”开头也是注释作用。例:*本程序用于修改表的指定记录SETDATEUSA&&日期格式置为MM-DD-YY程序文件的执行功能:执行由文件名表示的程序。对于程序文件,可以省略后缀名,但是其他程序,必须包括后缀名,比如查询和表单文件。程序运行以后,会获得编译后的目标程序(紧凑的非文本文件,后缀名为.FXP),可以加快运行速度,起到加密源程序的作用。DO文件名例:DOQH&&默认执行.prg文件DOMCZZ.QPR&&执行查询文件程序专用命令9.1结构化程序设计1.程序结尾专用命令RETURN命令:使程序结束执行,返回调用它的上级程序继续执行,若无上级程序则返回命令窗口,该命令一般允许省略。CANCEL命令:终止程序运行,清除程序的私有变量,返回命令窗口;QUIT命令:正常退出VFP系统,自动删除磁盘临时文件,返回Windows。9.1结构化程序设计2.输入输出专用命令输入命令:INPUT[提示信息]TO内存变量│@行,列[SAY表达式1][GET变量名][DEFAULT表达式2]READ功能:首先在窗口显示提示信息,随后等待用户输入数据。变量的类型随输入数据类型而定。字符型数据须加定界符,逻辑型常量两侧用小圆点括起来,日期型或日期时间型常量两端加花括号{},货币型常量需在数字前加标识符$,数值型常量可直接输入。定位输出:@行,列[SAY表达式1]功能:在窗口的指定行列输出SAY子句的表达式。行与列都是数值表达式,行自顶向下编号,列自左向右编号(从0开始)。9.1结构化程序设计*e4-1.prgclearusesb@10,5say“修改设备的价格“&&定位输出提示信息?&&换行input“请输入记录号:”tojlh&&用户交互输入后执行display价格recordjlhinput请重新输入第+str(jlh,1)+个设备的价格:tojgreplace价格withjgdisplay价格use例1:试编一程序,能通过指定记录号修改设备的价格。9.1结构化程序设计3.运行暂停命令WAIT[信息文本][TO内存变量][WINDOW[AT行,列]][NOWAIT][CLEAR│NOCLEAR][TIMEOUT数值表达式]功能:暂停程序的执行,也可用于输出提示信息(省略信息文本将显示“按任意键继续…”),直到用户输入一个字符或按任一键,立即往下执行命令。CLEAR选项用来关闭提示窗口,设定延时时间关闭提示窗口等功能也较为常用。省略AT选项,信息文本将显示在主屏幕右上角。9.1结构化程序设计clearusesbi=1dowhile!eof()?编号,部门skipi=i+1ifmod(i,10)=0wait按任意键继续windowclearendifenddouse例2.WAIT命令演示。9.2程序的控制结构与其它高级语言程序相似,VFP程序也有3种基本控制结构:顺序结构、分支结构与循环结构。顺序结构顺序结构的程序在运行时按照语句排列的先后顺序,一条接一条地依次执行,是程序设计中最基本的结构。9.2程序的控制结构例3.按9万元以上,1~9万元,1万元以下三级价格分档统计SB.DBF中设备的台数。*解法一:selectcount(价格)fromsbwhere价格90000intoarraygs?9万元以上设备台数:+str(gs)selectcount(价格)fromsbwhere价格=10000and价格=90000intoarraygs?1万元~9万元以上设备台数:+str(gs)selectcount(价格)fromsbwhere价格10000intoarraygs?1万元以下设备台数:+str(gs)use注:采用SQL-SELECT语句可以完成按某种条件查询结果的功能。store0tok1,k2,k3closeallusesbdowhilenoteof()docasecase价格90000k1=k1+1case价格10000k3=k3+1otherwisek2=k2+1endcaseskipenddo?9万元以上设备个数:+str(k1)?1~9万元设备个数:+str(k2)?1万元以下设备个数:+str(k3)*解法二(循环+分支结构):分支结构9.2程序的控制结构分支结构是根据指定条件的当前值从两条或多条程序路径中选择一条执行。计算机的判断功能一般采用条件语句或多分支语句实现。A.条件语句(二分支)IF逻辑表达式语句序列1[ELSE语句序列2]ENDIF逻辑表达式为真?语句序列2语句序列1ENDIF后面的语句YN9.2程序的控制结构例4.将SB.DBF中第一个非主要设备的价格减少10%。解:USESBLOCATEFORNOT主要设备?RECNO()IFFOUND()DISPLAY名称,价格REPLACE价格WITH价格*(1-0.1)DISPLAY名称,价格[ELSEWAIT“无此设备!”WINDOW]ENDIFUSERETURN9.2程序的控制结构例5.建立程序,功能是判断某年是不是闰年。解:SETTALKOFF&&关闭程序运算的显示过程INPUT“请输入年份:”TOnYearIFMOD(nYear,4)=0.AND.MOD(nYear,100)0.OR.;MOD(nYear,400)=0?nYear,“年是闰年”ELSE?nYear,“年不是闰年”ENDIFSETTALKON注:闰年的条件是年份能被400整除,或者年份能被4整除但不能同时被100整除。9.2程序的控制结构B.多分支语句DOCASECASE逻辑表达式1语句序列1CASE逻辑表达式2语句序列2…CASE逻辑表达式n语句序列n[OTHERWISE语句序列n+1]ENDCASE逻辑表达式1语句序列1语句序列2CASE命令的后续命令NY逻辑表达式2语句序列nNY逻辑表达式nNYOTHERWISE语句序列nY例6.显示当前季节程序。9.2程序的控制结构解:YUE=MONTH(DATE())DOCASECASEINLIST(YUE,3,4,5)JJ=春CASEINLIST(YUE,6,7,8)JJ=夏CASEINLIST(YUE,9,10,11)JJ=秋CASEINLIST(YUE,12,1,2)JJ=冬ENDCASEWAITJJWINDOW注意:①IF和EDNIF必须配对出现。DOCASE和ENDCASE必须配对出现。②为使程序清晰易读,对分支、循环结构应使用缩格书写格式。③分支、循环语句不允许在一个命令行中输入完毕,必须应该分行输入,按回车符。例7.建立程序,功能是判断输入的一个字符是属于字母、数字或特殊符号(字母、数字之外的符号)。9.2程序的控制结构解:SETTALKOFFACCEPT“请输入一个字符:”TOcVarDOCASECASEUPPER(cVar)=“Z”.AND.UPPER(cVar)=“A”?cVar,“是字母”CASEcVar=“9”.AND.cVar=“0”?cVar,“是数字”OTHERWISE?cVar,“是一个特殊符号”ENDCASESETTALKON9.2程序的控制结构宏代换函数格式:&字符型内存变量[.字符表达式]功能:替换出字符型内存变量的值。例:m=5X=‘m’&&X为字符型内存变量?X&&显示m?&X&&显示5,得到了变量X值的值9.2程序的控制结构例8.试编一个程序,能打开任意一个表来浏览。解:INPUT请输入表名:TOBMBM=ALLTRIM(BM)IFFILE(“&BM..DBF”)&&文件存在返回.T.,&bm后面用一个.来连接扩展名.dbfUSE&BMBROWSEELSEWAIT该文件不存在WINDOWENDIF9.2程序的控制结构循环结构由指定条件的当前值控制循环体中的语句(或)命令序列是否重复执行。A.条件循环DOWHILE逻辑表达式&&(循环条件)语句序列&&(循环体)ENDDO说明:若循环条件为假,结束循环,执行ENDDO子句后面的语句;若为真则执行循环体,遇到ENDDO自动返回到DOWHILE重新判断循环条件是否成立。9.2程序的控制结构例9.试编一程序,显示SB.DBF中所有单价超过10000元的设备名称。解:CLEARUSESBDOWHILENOTEOF()IF价格10000?名称ENDIFSKIP&&关键之处ENDDOUSE9.2程序的控制结构例10.试编一程序,要求计算并输出1~100中整数的平方根,要求每屏显示20个数。解:SETTALKOFFCLEARnNum=1DOWHILEnNum=100?nNum,SQRT(nNum)IFMOD(nNum,20)=0.AND.nNum100WAIT“继续吗(Y/N)?”TocAnswerWINDOWSIFUPPER(cAnswer)=“N”EXITENDIFENDIFnNum=nNum+1ENDDOSETTALKON9.2程序的控制结构B.步长循环FOR内存变量=数值表达式1TO;数值表达式2[SETP数值表达式3]语句序列ENDFOR│NEXT说明:内存变量称为循环变量,数值表达式1│2│3分别称为初值、终值、步长。语句执行时,通过比较循环变量值与终值来决定是否执行语句序列。执行一旦遇到ENDFOR或NEXT,循环变量值即加上步长,然后返回到FOR重新与终值比较。9.2程序的控制结构例11.编写计算S=1+2+3+…+100的程序。解:s=0fori=1to100s=s+inext&&循环变量i加1后,返回与100比较?s=,s9.2程序的控制结构例12.建立程序,功能是显示SB表的所有字段名。解:SETTALKOFFUSESB.DBF&&打开表,此时当前记录号为1FORnCnt=1TOFCOUNT()&&循环次数与表中的字段数一致?FIELD(nCnt)&&显示第nCnt个字段的字段名ENDFORUSESETTALKON9.2程序的控制结构C.扫描循环SCAN[范围][FOR逻辑表达式1];[WHILE逻辑表达式2]语句序列ENDSCAN说明:SCAN
本文标题:第9讲 结构化程序设计基础
链接地址:https://www.777doc.com/doc-3928991 .html