1.17k likes | 1.53k Views
第 5 章 结构化程序设计 基础. 课题一: 创建和运行程序文件 课题二: 结构化编程 —— 顺序结构 课题三: 结构化编程 —— 选择结构 课题四: 结构化编程 —— 循环结构 课题五: 自定义函数和过程 课题六: 结构化编程示例. 课题一: 创建和运行程序文件 教学目的: 1. 理解程序的概念和程序文件书写规则 2. 掌握程序文件的建立、修改、运行 教学重点:程序文件的建立和运行 教学难点:程序文件的建立.
E N D
课题一: 创建和运行程序文件课题二: 结构化编程——顺序结构课题三: 结构化编程——选择结构课题四: 结构化编程 ——循环结构课题五: 自定义函数和过程课题六: 结构化编程示例
课题一: 创建和运行程序文件教学目的:1.理解程序的概念和程序文件书写规则2.掌握程序文件的建立、修改、运行教学重点:程序文件的建立和运行教学难点:程序文件的建立
前言: 前面各章都是以交互式方式工作,即在命令窗口中逐条输入命令或通过选择菜单来执行VISUAL FOXPRO命令的。学习VISUAL FOXPRO的目的就是要使用它的命令来组织和处理数据、完成一些具体任务。许多任务单靠一条命令是无法完成的,而是要执行一组命令来完成。如果采用在命令窗口逐条输入命令的方式进行,不仅非常麻烦,而且容易出错。特别是当该任务需要反复执行或所包含的命令很多时,这种逐条输入命令执行的方式几乎是不可行的。这时应该采用程序的方式。
步 骤:一、程序的概念程序:是能指够完成一定任务的命令的有序集合。这组命令被存放在称为程序文件或命令文件的文本文件中。当运行程序时,系统会按照一定的次序自动执行包含在程序文件中的命令。 与在命令窗口逐条输入命令相比,采用程序方式有如下好处:1)可以利用编辑器,方便地输入、修改和保存程序。2)可以用多种方式、多次运行程序。3)可以在一个程序中调用另一个程序。
程序举例: 本章许多例子要用到数据库XSDA,此数据库包含学生.DBF与选课.DBF两个表。 例:假定学号的前两位为入学年份,第3、4位为专业代码。编写命令文件TEXT1,分别统计所有学生和2001年入学,专业代码为03的学生选修课程号为101课程的平均成绩。
在命令窗口中输入:DO TEXT1,程序运行结果如下: 所有学生的平均分:77.00指定学生的平均分:81.33上面是一个简单的结构化程序,用于显示指定表中纪录某些属性值,这比通过单独的命令来完成相关操作要简单的多,后面我们将具体来学习程序的设计。
二、程序书写规则:1.命令注释: 程序中可以插入注释,以提高程序的可读性。 以NOTE或*开头的代码行为注释行。命令行后也可添加注释,这种注释以符号&&开头。注释为非执行代码,不会影响程序的功能。2. SET TALK OFF/ON许多数据处理命令(如AVERAGE、SUM、SELECT-SQL等)在执行时都会返回一些有关执行状态的信息,这些信息常会显示在VISUAL FOXPRO主窗口、状态栏或用户自定义窗口里。SET TALK 用以设置是(ON)、否(OFF)显示这些信息。默认值是ON。
3. 命令分行 程序中每条命令都以回车键结尾,一行只能写一条命令。若命令需要分行书写,应在一行终了时键盘入续行符“;”,再按回车键。在VISUAL FOXPRO中,程序代码除了可以保存在程序文件中,还可以出现在报表设计器和菜单设计的过程代码窗口中、表单设计器和类设计器的事件或方法代码窗口中。 另外,还可以在命令窗口中像执行程序一样一次执行多条命令。方法是:1)在命令窗口中选择需要执行的多条命令。2)按ENTER键,或单击鼠标右键并在弹出的快捷菜单中选择“运行 所选区域性”。
三、程序文件的建立与执行1、程序文件的建立与修改 程序文件的建立与修改一般是通过调用系统内置的文本编辑器来进行的。 要建立文件,可按以下步骤操作:1)打开文本编辑窗口。从“文件”菜单中选择“新建”命令,然后在 “新建”对话框中选择单选按钮,并单击“新建文件”命令按钮。2)在文本编辑窗口中输入程序内容。这里的编辑操作与普通文本文件的编辑操作没有什么不同。当然,这里输入的是程序内容, 是一条条命令以。与在命令窗口输入命令不同。这里输入是不会被马上执行的。
3)保存程序文件。从“文件”菜单中选择“保存”命令或按CTRL+W键,然后在“另存为”对话框中指定程序的存放位置和文件夹,并单击“保存”命令按钮。 程序文件的默认扩展名是prg。如果指定其他的扩展名,那么以后在打开或执行程序文件时都要指定扩展名。 要打开、修改程序文件,可按下列方法操作:1)从“文件”菜单中选择“打开”命令,弹出“打开”对话框。2)在“文件类型”列表框中选择“程序”。3)在文件列表框中选定要修改的文件,并单击“确定”按钮。4)编辑修改后,从“文件”菜单中选择“保存”命令或按CTRL+W键保存文件。若要放弃本次修改,可从“文件”菜单中选择“还原”命令或按ESC键。
也可以用命令方式建立和修改程序文件。命令格式为:MODIFY COMMAND <文件名>这里,文件名前可以指定保存文件的路径。如果没有给定扩展名,系统自动加上默认扩展名prg. 执行该命令时,系统首先检索磁盘文件。如果指定文件存在,则打开修改;否则,系统认为是要建立一个指定了名字的文件。
2.执行程序文件 一旦建立好程序文件,就可以用多种方式、多次执行它。下面是两种常用的方式。 菜单方式:1)从“程序”菜单中选择“运行”命令,打开“运行”对话框。2)从文件列表框中选择要运行的程序文件,并单击“运行”命令按钮。 采用此方式运行文件时,系统会自动将默认的盘和目录设置为程序文件所在的盘和目录。
命令方式:DO <文件名>该命令既可以在命令窗口发出,也可以出现在某个程序文件中,这种就得一个程序在执行的过程中还可以调用执行另一个程序。
当程序文件被执行时,文件中包含的命令将被依次执行,直到所有的命令被执行完毕,或者执行到以下命令:1)CANCAL:终止程序运行,清除所有的私有变量,返回 命令窗口。2)DO :转去执行另一个程序。3)RETURN:结束当前程序的执行,返回到调用它的 上级 程序,若无上级程序则返回到命令窗口。4)QUIT:退出VISUAL FOXPRO系统,返回到操作系统。
Visual FoxPro程序文件通过编译、连编,可以产生不同的目标代码,这文件具有不同的扩展名。当用DO命令执行程序文件时,如果没有指定扩展名,系统将按下列顺序寻找该程序的源代码或某种目标代码文件执行:.exe(Visual FoxPro可执行文件)→.app(Visual FoxPro应用程序文件) →.fxp(编译文件) →.prg(源程序文件)。 如果用DO命令执行查询文件,菜单文件,那么<文件名>中必须要包括扩展名(.qpr、.mpr).
课堂小结: 这一节内容是程序设计基础,学习了怎样创建和运行程序文件,以及在VISUAL FOXPRO中一些常用相关命令的使用方法。在VISUAL FOXPRO中程序的创建和运行方法多样,希望同学们能够灵活运用。牢记程序书写规则,这对以后编写程序有很大的帮助。
作业:1.在VISUAL FOXPRO中,用于建立或修改过程文件的命令是 _______________。2.VISUAL FOXPRO程序是命令行的序列,每个命令都以____________结束,一行可以写________条命令;也可以分行书写,并在分行外加上续行符__________,再按回车键。3.仔细阅读下程序,分析每条指令的功能及整个程序的作用。Set talk off &&__________________ Clear &&__________________ Open database xsda &&___________________ Use 选课 in 0 &&___________________ Displaly &&___________________ Use &&___________________ Close database &&___________________ Set talk on &&___________________ Return &&___________________
课题二: 结构化编程——顺序结构教学目的:掌握顺序结构及输入语句和输出语句的使用方法教学重点:输入输出语句的应用教学难点:应用顺序结构进行程序设计
前言: 上节课我们给同学们讲授了程序文件的建立、修改和运行,程序文件的内容是怎样编写的呢?从这节课开始我们将逐步给同学们介绍程序文件内容编写的方法即程序设计,今天讲授结构编程中的顺序结构以及程序中输入和输出语句的使用。
步 骤: 程序结构是指程序中命令或语句执行的流程结构。顺序结构、选择结构和循环结构是程序的三种基本结构。 顺序结构是最简单的程序结构,它按命令在程序中出现的先后次序依次执行。 例如上节课我们留给大家的最后一题,就是一个典型的顺序结构程序。Set talk off Clear Open database xsda Use 选课 in 0 Displaly Use Close database Set talk on Return
一个程序一般都包含数据输入、数据处理和数据输出三部分。数据的输入和输出代码设计是编写许多都要面临的工作。这里介绍的输入和输出命令,在练习编写小程序时是非常有用的。
一、简单输入输出命令1、INPUT命令:命令格式:INPUT [<字符表达式>] TO <内存变量>该命令等待用户从键盘输入数据,用户可以输入任意合法的表达式。当用户以回车键结束输入时,系统将表达式的值存入指定的内存变量,程序继续运行。 功能注释:1)如果选用<字符表达式>,那么系统会首先显示该表达式的值,作为提示信息。2)输入的数据可以是常量、变量,也可以是更为一般的表达式。但不能不输入任何内容直接按回车键。3)输入字符串时必须加定界符,输入逻辑型常量时要用圆点定界(如.T.、.F.),输入日期时间型常量时要用大括号(如{^2001-03-01})。
例:编写命令文件,查找指定日期以后出生的学生。Open database xsda Use 学生 in 0 ClearInput “请输入日期:” to name Select 学号、姓名、出生日期 from 学生; where 出生日期>name Nowait Close database return
2、ACCEPT命令:命令格式:ACCEPT [<字符表达式>] TO <内存变量>该命令等待用户从键盘输入字符串。当用户以回车键结束输入时,系统将该字符串存入指定的内存变量,程序继续运行。 功能注释:1)如果选用<字符表达式>,那么系统会首先显示该表达式的值,作为提示信息。2)该命令只能接收字符串,用户在输入字符串时不需要加定界符;否则,系统会把定界符作为字符串本身的一部分。3)如果不输入任何内容而直接回车键,系统会把空串赋给指定的内在变量。
3、WAIT命令:命令格式:WAIT [<字符表达式>] [TO <内存变量>][WINDOW[AT<行>, <列>]][NOWAIT][CLEAR|NOCLEAR][TIMEOUT<数值表达式>]该命令显示字符表达式的值作为提示信息,暂停程序的执行,直到用户按任意键或单击鼠标时继续程序的执行。 功能注释:1)如果<字符表达式>值为空串,那么不会显示任何提示信息。如果没有指定<字符表达式>,则显示默认的提示信息“按任意键盘 继续···”。2)<内存变量>用来保存用户键入的字符,其类型为字符型。若用户按的是ENTER键或单击了鼠标,那么<内存变量>中保存的将是空串。若不选TO<内存变量>短语,输入的单字符不保留。
3) 一般情况下,提示信息被显示在VIUSAL FOXPRO主窗口或当前用户自定义窗口里。如果指定了WINDOW子句,则会出现一个WAIT提示窗口,用以显示提示信息。提示一般定位于主窗口的右上角,也可用AT短语指定其在主窗口中的位置。4)若同时选用NOWAIT短语和WINDOWS子名,系统将不等待用户按键,直接往下执行。5)若选用NOCLEAR短语,则不关闭提示窗口,直到用户执行下一条WAIT WINDOW命令或WAIT CLEAR命令为止。6)TIMEOUT子句用来设定等待时间(秒数)。一旦超时就不等待用户按键,自动往下执行。
例:WAIT命令使用示例。WAIT “输入无效,请重新输入……”WINDOW ;TIMEOUT 5命令执行时,在主窗口右上角出现一个提示窗口,其中显示提示信息“输入无效,请重新输入……”。之后,程序暂停执行。当用户按任意键或超过5秒钟时,提示窗口关闭,程序继续执行。
二、简单输入输出命令比较1)WAIT命令只能输入一个字符,ACCEPT命令可以输入一个字符串,INPUT命令可以将输入的表达式的值保存到内存变量。因此,WAIT命令和ACCEPT命令中的变量一定是字符型变量,而INPUT命令中的变量的类型由输入表达式值的数据类型决定。2) 使用WAIT命令输入数据时,只需输入一个字符,不需按ENTER键,而使用ACCEPT命令和INPUT命令输入数据时,要按ENTER键表示输入结束。3) 使用WAIT命令和ACCEPT命令输入字符型数据时不用加定界符。而使用INPUT命令输入字符串则必须加业界符。4) ACCEPT命令和INPUT命令只能在屏幕的当前光标下一行开始显示数据,而WAIT命令既可以估屏幕上显示数据,也可以在系统窗口是显示数据。 因此,WAIT命令常用于输入单字符和显示信息,ACCEPT命令常用于输入字符串,INPUT命令常用于输入其他类型的数据。
三、格式化输入/输出命令 简单输入/输出命令按照系统规定的格式输入/输出数据,显示数据的位置不易确定,导致界面不够美观。格式化输入输出命令可以在指定位置输入输出数据,用户可以使用它们设计较为美观的用户界面。1.格式化输出命令: 格式:@<行,列> SAY<显示信息>命令功能:在指定位置输出显示信息。 参数说明:1)“行,列”是一对数值表达式,指定输出数据的起始位置。2)“显示信息”是一个字符表达式,指定输出的数据。
例:Clear @3,30 say “显 示 学 生 档 案 数 据”@3,30 say “学 号:”+学号@3,30 say 照 片:@3,30 say “姓 名:”+姓名@3,30 say “出生日期:”+DTOC(出生日期)@3,30 say “入学成绩:”+STR(入学成绩)@3,30 say “班 级:”+班级@3,30 say “奖 惩:”+奖惩
2. 格式化输入命令。 格式:@<行,列>[SAY 显示信息] GET <变量>命令功能:在指定位置输入数据,并把输入的数据保存在指定的变量。 参数说明:1)“行,列”是一对数值表达式,指定显示数据的起始位置。2)选择“SAY 显示信息”,显示指定的信息。缺省该选项,则没有显示信息。“显示信息”是一个字符表达式。3)“变量”指定存放数据的变量。它可以是内存变更,也可以是字段变量。 格式化输入命令需要与READ命令共同使用,才能激活命令中的变量,接收输入的数据。
例:@5,20 SAY“姓 名:” GET 姓名READ执行以上命令时,VISUAL FOXPRO将从5行20列开始显示“姓 名:”,并在其后显示当前记录姓名字段的值,光标出现在编辑字段值的位置。如果没有执行READ命令,则系统不允许编辑字段的数据。
3.测试行坐标的函数。 格式:ROW() 功能:返回当前光标的行坐标。 返回值类型:字符型。4. 测试列坐标的函数。 格式: COL() 功能:返回当前光标的列坐标。 返回值类型:字符型。
课堂小结: 简单输入输出命令是一个程序的重要组成部分,它们提高了程序的灵活性。同学们必须牢牢掌握其用法,在程序中熟练使用。格式化输入输出作为简单输入输出的补充,它们能够很好地将数据在窗口中指定位置输入输出,填补了简单输入输出命令的不足,也应该掌握其使用方法。
作业:1.下面程序求长方形的面积,试将程序填充完整。SET TALK OFF CLEAR S=0 INPUT “长方形一边的长为:” TO A INPUT “长方形另一条边的长为:” TO B _____________?“长方形的面积为:”,S SET TALK ON _____________
2.查询客户情况,如果查到了就显示客户的存款信息, 查不到就什么都不显示,请将程序填充完整。CLEAR USE KH账号=SPACEA(15)@10,4 SAY“请输入要查询的客户信息:” GET 账号READ LOCATE FOR 账号=ALLTRIM(账号)IF ___________________ @6,10 SAY “账号是”+账号+“的客户存款情况为:” ?金额,存款类型ENDIF USE
课题三: 结构化编程——选择结构教学目的:掌握三种分支结构:if···endif if···else···endif do···case教学重点:分支结构的应用教学难点:应用分支结构进行程序设计
前言: 上一节课我们学习了顺序结构和一些输入输出语句命令。顺序结构只能解决简单的问题,许多问题都需要通过某种条件进行判断后再来执行什么样的操作,这就需要我们学习另外一种程序结构,这一节课主要讲解结构化编程三大结构中的分支结构。
步 骤: 分支结构又称选择结构,是指程序在执行的过程中,根据条件的判断,有选择性的执行程序中的某些代码段。Visual FoxPro支持选择结构的语句包括:1)IF···ENDIF(单分支选择结构)2)IF···ELSE···ENDIF(双分支选择结构) 3)DO CASE···ENDSCAN(多分支选择结构)语句
1.条件语句: 语句格式:IF <条件> <语句序列1. [ELSE <语句序列2>] ENDIF该语句根据<条件>是否成立从两组代码中选择一组执行。 功能注释:1) 有ELSE子句时,两组可供选择的代码分别是<语句序列1>和<语句序列2>。如果<条件>成立,则执行<语句序列1>;否则,执行<语句序列2>。然后转向ENDIF的下一条语句。2) 无ELSE子句时,可看作第二组代码不包含任何命令。如果<条件>成立,则执行<语句序列1>,然后转向ENDIF的下一条命名;否则直接转向ENDIF的下一条语句去执行,如下图。3) IF和ENDIF必须成对出现,IF是本结构的入口,ENDIF是本结构的出口中。4) 条件语句可以嵌套,但不能出现交叉。在嵌套时,为了使程序清晰、易于阅读,可按缩进格式书写。
真 假 有ELSE的选择语句 条件 语句序列1 语句序列2 ENDIF后面语句
条件 假 真 无ELSE 的选择语句 语句序列 ENDIF后面语句
例1:某地至北京的邮路里程为1043KM,通过邮政局向北京城区寄交“特快专递”邮件,应在24小时内到达,计费标准每史为0.05元,但超过100克后,超出数每克为0.02元。试编写程序计算邮费。方法1:根据邮件重量是小于等于100克还是大于100克,用不同的公式计算邮费。Input “请输入邮件重量:” to w If w<=100 F=w*0.05 Else F=100*0.05+(w-100)*0.02 Endif ?”邮费为:”,F
方法2:先按第一个公式计算邮费,若发现邮件重量大 于100克,再第二个公式计算邮费。Input “请输入邮件重量:” to w F=w*0.05 If w>100 F=100*0.05+(w-100)*0.02 Endif ?”邮费为:”,F
例2:编写命令文件TEST2.PRG,请用户输入待查学生的姓名,显示该学生的基本情况。Open database xsda Use 学生 in 0 Select 学生Clear Accept “请输入待查学生的姓名:” to name Locate for 姓名=name If .not.eof() ?”姓名:”+姓名?”性别:”+iif(性别,“男”,“女”) ?”出生日期:”+dtoc(出生日期,1) Else ?”查无此人!”Endif Close database Return
2.分支语句:分支语句是一种实现扩展的选择结构,它可以根据条件从多组代码中选择一组执行。 语句格式: DO CASE CASE <条件1> < 语句序列1> CASE<条件2> <语句序列2> ······ CASE<条件n> <语句序列n> [OTHERWISE <语句序列>] ENDCASE 语句执行时,依次判断CASE后面的条件是否成立。当发现某个CASE后面的条件成立时,就执行该CASE和下一个CASE之间的命令序列,然后执行ENDCASE后面的命令。如果所有的条件都不成立,则执行OTHERWISE与ENDCASE之间的命令序列,然后转向ENDCASE后面的语句。
功能注释:1)不管有几个CASE条件成立,只有最先成立的那个CASE条件的对应命令序列被执行。2)如果所有CASE条件都不成立,且没有OTHERWISE子句,则直接跳出本结构。 3)DO CASE和ENDCASE必须成对出现,DO CASE是本结构的入口中,ENDCASE是本结构的出口。分支语句的控制流程如下图: