第8章结构化程序设计主讲教师:高骏Emil:704098395@qq.com本章要求:1.掌握VFP程序的建立、修改、运行。2.掌握程序的三种基本结构。3.了解过程和过程文件。本章要点:程序的三种控制结构。学时安排:6学时(理论)+6学时(实践)课程要求结束作业第8章程序设计基础8.1程序文件及其编辑环境8.2程序中几种常用命令8.3程序的基本控制结构8.4过程和用户自定义函数8.1程序文件及其编辑环境在ViusalFoxPro中,程序是由一系列ViusalFoxPro可以理解的命令、函数和操作组成的,这些命令和函数可以在ViusalFoxPro中的命令窗口和以人工方式逐一执行,也可以把它们放在一个程序文件中,以文件的形式来执行。【8.1】假定学号的前四位为入学年份,第5,6位为专业代码.编写命令文件test.prg,分别统计所有学生和2010年入学,专业代码为03的学生选修课程号为101课程的平均成绩.SETTALKOFFSETDEFAULTTOd:\学生管理OPENDATA学生管理SELECTAVG(成绩)FROM成绩WHERE;课程号=“101”INTOARRAYm1SELECTAVG(成绩)FROM成绩WHERE;课程号=“101”ANDLEFT(学号,4)=“2010”;ANDSUBS(学号,5,2)=“03”INTOARRAYm2CLEAR?”所有学生的平均成绩:”font“宋体”,20,m1(1)font“宋体”?”指定学生的平均成绩:”font“宋体”,20,m2(1),font“宋体”CLOSEDATASESETTALKONRETURN(1)以命令方式建立、修改程序文件ModifyCommand程序文件名格式:功能:创建、编辑以“程序文件名”为名的程序文件说明:1.在编辑窗口输入一条条命令。2.^w或关闭窗口存盘、^q或者Esc放弃存盘3.程序文件的扩展名为.prg,可以省略。(2)以菜单方式建立、修改程序文件文件新建文件打开已有的程序文件8.1.1程序文件的建立和运行1.程序文件的建立(2)命令方式(1)菜单方式程序运行Do文件名格式:功能:运行程序文件程序文件建立后,可以用多种方式、多次执行它。下面是两种常用的方式。选中运行2.程序文件的运行、调用8.1.2VisualFoxPro编程特点1.变量不区分大小写类型说明示例类型说明示例a数组型aStudentsf浮点型fInterestc字符型cNamel逻辑型lFlagy货币型yCurrentValuen数值型nCounterd日期型dBirthDayo对象oEmployeet日期时间型tLastModifiedu未知uReturnValueb双精度型bValue建议的变量命名约定2.变量不需预先声明当把一个值保存到某一变量而该变量原先不存在时,VisualFoxPro系统会隐含地声明它,并有初始值存在。用户在变量里放什么数据,变量就是什么类型。3.命令分行程序中每条命令都以回车键结尾,一行只能写一条命令。若需分行书写,可以使用分号“;”表示续行。4.添加注释VisualFoxPro系统对整行注释和行中部分注释有不同的格式。整行注释使用“*”引导,行中部分注释使用“&&”引导。8.2程序中几种常用命令8.2.1基本输入命令1.Wait命令暂停程序的运行,直到用户输入一个字符,也可用于输出一条提示信息WAIT[信息文本][TO内存变量][WINDOW[AT行,列]][NOWAIT][CLEAR][NOCLEAR][TIMEOUT数值表达式]保存键入的字符,省略TO子句不保存省略则显示“按任意键继续….不等待用户输入关闭提示窗口不关闭提示窗口,直到下一个WAIT命令自动关闭WINDOW子句使屏幕出现一个WAIT提示窗口,内容由信息文本确定,位置有AT子句指定.省略AT子句则出现在屏幕右上角TIMEOUT子句设定等待时间(以秒为单位)说明:③若指定WINDOWS子句,则会出现一个WAIT提示窗口,用以显示提示信息.提示窗口在主窗口的右上角,也可以用AT短语指定其在主窗口中的位置.④若同时选用NOWAIT短语和WINDOWS子句,系统将不等待用户按键,直接往下执行.⑤若选用NOCLEAR短语,则不关闭提示窗口,直到用户执行下一条WAITWINDOWS命令或WAITCLEAR命令为止.⑥TIMEOUT子名用来设定等待时间(秒数)。例如执行:Wait“欢迎使用!”Windows在屏幕右上角弹出一个窗口,显示“欢迎使用!”,按任意键后窗口消失。2.Accept命令Accept[提示信息]To内存变量格式:功能:在程序执行过程中,暂停执行,等待用户从键盘输入字符串。当用户以回车键结束输入完数据后,系统将用户输入的内容作为字符串赋值给指定内存变量。然后继续往下执行程序。说明:(1)如果选用提示信息,系统会在屏幕上显示提示信息;(2)输入的数据只能是字符型数据,并且不用定界符;(3)如果用户什么数据都不输,就按下回车键,系统认为是输入了一个空串,自动会把空串赋给指定的内存变量中。【例8.2】编程从键盘输入某数据库的文件名,要求打开该数据库并显示其内容.程序文件名为PROG1.PRG。SETTALKOFFStedefaulttod:\学生管理CLEARACCEPT请输入数据库名:TOAAAOPENDATABASE&AAAACCEPT请输入表名:TOBBBUSE&BBBbrowseUSESETTALKONRETURNDoprog1请输入数据库名:学生管理请输入表名:学生Use人才档案ExclusiveAccept请输入编号:TobhLocateFor编号=bh?编号,姓名Usesetdefaulttod:\人才管理opendata人才管理Accept请输入职称:tozcselect*from专业特长;where职称=zc【例8.3】输入姓名,在人才档案表中查询某编号对应的姓名【例8.4】编写程序,浏览专业特长表中不同职称的记录集。Do8.4请输入职称:教授Do8.3请输入编号:sh01001Sh01001金银桥输入字符串时不加定界符3.Input命令Input[提示信息]To内存变量格式:功能:(1)如果选用提示信息,那么系统会首先显示该提示信息的值,作为提示信息。(2)输入的数据可以是常量、变量,也可以是一般的表达式。但不能不输入任何内容直接按回车键。(3)输入字符串是必须加定界符“”,输入逻辑型常量要用圆点定界符(如.T.,.F.),输入日期时间型常量是要用大括号(如{^2012-03-01})。说明:等待用户从键盘输入数据,用户可以输入任意合法的表达式。当以回车键结束输入时,系统将表达式的值存入指定的内存变量,程序继续运行。【例8.5】编写命令文件test1.prg,查找指定日期以后出生的学生SETDEFAULTTOd:\学生管理OPENDATABASE学生管理INPUT输入日期:TOmrqSELECT学号,姓名,出生日期FROM学生;WHERE出生日期mrq;NOWAITCLOSEDATABASERETURNDotest1输入日期:{^1993-01-01}ClearInput“长方形一边的长为:”TOAInput“长方形另一边的长为:”TOBS=A*B?长方形的面积为:,S【例8.6】从键盘输入两个任意正数,编程求以两数为边长的长方形面积。程序文件名为8.6.prg在命令窗口中输入:ModifyCommand8.6Do8.6长方形一边的长为:5长方形另一边的长为:6运行结果:长方形的面积为:30屏幕显示键盘输入Setdefaulttod:\人才管理Input请输入要删除的人的出生日期:toCsrqDeletefrom人才档案where出生日期=CsrqSelect人才档案BrowClosedata【例8.7】编写程序,将人才档案表中指定的出生日期的记录逻辑删除。请输入要删除的人的出生日期:{^1969-02-03}4.格式输入语句格式:@行,列Say提示信息get变量@行,列Say提示信息get变量…….Read功能:在指定的行、列位置输入一个常量,当执行到Read语句时,将常量赋值给指定的变量。说明:1、多个@语句可以配置一个Read语句。但是中间不能有别的语句。2、Get后面的变量要先赋值。ClearSetdefaulttod:\人才管理Use专业特长ExclusiveAccept请输入职称:tozcLocateAllFor职称=zc@2,10Say编号Get编号@3,10Say专业Get专业@4,10Say毕业学校Get毕业学校@5,10Say专业年限Get专业年限@6,10Say“职称”Get职称ReadClosedata【例8.8】编写程序,在指定的位置显示修改“专业特长”表中指定职称的记录。@行,列Say提示信息[Picture格式描述符]格式:功能:(1)在指定的行、列输出表达式的值。(2)格式描述符用来限定数据输出的类型、长度及格式。8.2.2基本输出语句1.格式输出语句格式字符含义例子9只允许显示数字字符与正负号Picture999.99#一个数值型数字与正负号Picture####.##,千位分隔符Picture“99,999$显示货币符Picture$999.99X允许任意字符Picturexxxxx!将字符转成大写Picturexxxxx常用格式描述符的功能Use人才档案ExclusiveAccept请输入编号:tobhLocatFor编号=bh@13,20Say编号Picture!!!!!!!!@14,20Say姓名PicturexxxxxxxxxUse【例8.9】输入编号,在人才档案表中查询某编号对应的姓名。字符转换成大写任意字符x1=Messagebox(您真的要退出系统吗?,4+16+0,退出系统)Ifx1=6ReturnEndifMessagebox(“提示信息”,对话框类型,“对话框标题“)格式:功能:在屏幕上弹出一个指定格式的对话框。说明:对话框类型是由“按钮个数+显示图标+默认按钮”组成。提示信息对话框标题提示信息对话框标题对话框类型按钮个数显示图标默认按钮2.对话框MessageBox函数P67代码代码的含义0确定按钮1确定、取消按钮2终止、重试、和忽略按钮3是、否和取消按钮4是、否按钮5重试、取消按钮按钮个数代码显示图标代码代码代码的含义16停止图标32问号图标48感叹号图标64信息图标默认焦点按钮的代码代码代码的含义0默认焦点在第一个按钮256默认焦点在第二个按钮512默认焦点在第三个按钮按钮返回值按钮返回值确定1忽略5取消2是6终止3否7单击对话框按钮的返回值4+16+0单击“否”,返回7返回值送到x1如果x1=“是”返回系统单击“是”,返回68.2.3程序结尾命令1、程序的末尾可以使用Return命令,能使程序执行结束,并返回到调用它的上级程序继续执行,若无上级程序则返回到命令窗口。2、使用另一条命令为Cancel,它可以中止程序运行,并返回到命令窗口。3、使用Quit命令可以结束程序运行退出VisualFoxPro系统8.3程序的基本控制结构常见的控制结构如下:1.顺序结构顺序结构是在程序执行时,根据程序中语句的书写顺序依次执行的命令序列。VisualFoxPro系统中的大多数命令都可以作为顺序结构中的语句。2.分支结构分支结构是在程序执行时,根据不同的条件,选择执行不同的程序语句,用来解决有选择、有转移的诸多问题。3.循环结构循环结构则能够使某些语句或程序段重复执行若干次。如果某些语句或程序段需要在一个固定的位置上重复操作,使用循环是最好的选择。8.3.1顺序结构顺序结构是一种线性结构。是程序设计中最简单同时也是最基本的结构。它要求顺序地执行每一个基本的加工处理单位。命令序列1命令序列2【例8.10】计算圆的周长和面积。ClearInput请输入圆的半径:Tor&&输入半径c=2*3.1