ImageVerifierCode 换一换
格式:DOCX , 页数:22 ,大小:52.74KB ,
资源ID:4355569      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4355569.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(第七章 程序设计基础.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

第七章 程序设计基础.docx

1、第七章 程序设计基础任务六 学用Visual FoxPro的编程功能【学习目标】通过本章学习,应熟练掌握程序的建立、修改和运行方法;掌握基本的输入和输出命令,掌握程序的三种基本结构;理解和掌握主程序、子程序和过程的概念和编写;理解和掌握内存变量作用域的定义命令。【重点难点】重点:程序的三种基本结构;多模块结构难点:循环结构的使用;多模块结构中参数传递的两种方式;变量作用域本章主要介绍程序设计及其相关的一些内容,包括程序设计时使用的程序控制语句、程序的基本结构、程序设计调试等方面的内容。该章是开发基于VFP应用系统的基础,掌握学习时,要充分上机操作练习。第十一讲 程序与程序的基本结构子任务一 学

2、习程序的概念程序是能够完成一定任务的命令的有序集合。采用程序方式有如下好处: 可以利用编辑器,方便地输入、修改和保存程序。 可以用多种方式、多次运行程序。 可以在一个程序中调用另一个程序。例2.1 假定学号的前两位为入学年份(如01代表2001年),第3、4位为专业代码。编写命令文件test1.prg,分别统计所有学生和2001年入学,专业代码为03的学生选修课程号为101课程的平均成绩。编写其程序如下:set talk offclear open database xsxk use 选课 in 0 select avg(成绩) from 选课 where 课程号=101 into array

3、 m1select avg(成绩) from 选课 where 课程号=101 and ;left(学号,2)=01 and substr(学号,3,2)=03 into array m2? 所有学生的平均分:,m1(1,1)? 指定学生的平均分:,m2(1,1)use 选课close database set talk onreturn子任务二 建立与执行程序文件1.程序文件的建立程序文件的建立需要调用系统内置的文本编辑器来进行。有三种方法: 用“新建”对话框建立:程序文件的默认扩展名是.prg。 用命令modify command 文件名来建立 用“项目管理器”来建立2.执行程序文件 打开

4、程序文件后使用菜单命令或单击工具栏上的运行按钮。 用命令运行:do 文件名 使用“项目管理器”运行在执行程序的过程中,执行以下命令之一可中止程序的运行:cancel;do 命令;return;quit当用DO命令执行程序文件时,如果没有指定扩展名,系统将按下列顺序寻找该程序文件的源代码或某种目标代码文件执行:exe-app-fxp-prg。故如果要运行指定文件时扩展名不能省略。子任务三 学用简单的输入输出命令1.input命令格式:input 提示信息 to 内存变量名功能:等待从键盘输入表达式赋值给变量。说明:该命令可以输入任意类型的数据。在输入字符串时须加定界符,输入逻辑型常量时要用圆点定

5、界,输入日期及日期时间型数据时要作大括号。不允许不输入任何内容直接按回车键。例2.2 编写命令文件test2.prg,查找指定日期以后出生的学生。CLEAROPEN DATABASE XSXKUSE 学生INPUT 请输入日期: TO MRQSELECT 学号,姓名,出生日期 FROM 学生 WHERE 出生日期MRQ CLOSE DATABASE2.accept命令格式:accept 提示信息 to 内存变量名功能:等待从键盘输入字符串赋值给变量。说明:该命令只接受字符串,用户在输入字符串时不需要加定界符。如果不输入任何内容直接按回车,系统会把空串赋给指定的内存变量。例2.3 检索通过键盘输

6、入的学生的各门课程的成绩。OPEN DATABASE XSXKCLEARaccept 请输入姓名: TO xmSELECT 学生.学号,姓名,课程名,成绩 FROM 学生,选课,课程;WHERE 学生.学号=选课.学号 and 课程.课程号=选课.课程号 and 姓名=xmCLOSE DATABASE3.wait格式:wait 提示信息 to 内存变量名 window at 行,列nowait clear | noclear timeout 秒数例2.4 wait 命令使用示例。 wait 输入无效,请重新输入 windows timeout 5程序结构:是指程序中命令或语句执行的流程结构。有

7、三种基本结构:顺序结构、选择结构、循环结构。子任务四 学用选择结构有条件语句和分支语句两种。1.条件语句格式: if 条件 语句序列1else 语句序列2endif功能:说明: if和endif必须成对出现。 if语句可以嵌套。例2.5 某地至北京的邮路里程为1043 km,通过邮政局向北京城区寄交“特快专递”邮件,应在24小时到达,计费标准每克为0.05元,但超过100克后,超出数每克为0.02元,试编写程序test4.prg计算邮费。方法一:INPUT 请输入邮件重量: TO WIF W100 F=100*0.05+(W-100)*0.02ENDIF? 邮费为:,F例2.6 编写命令文件t

8、est5.prg,请用户输入待查学生的姓名,显示该学生的基本情况。CLEAROPEN DATABASE XSXKACCEPT 请输入待查学生姓名: TO NAMELOCATE FOR 姓名=NAMEIF .NOT. EOF() ? 姓名:+姓名 ? 性别:+IIF(性别,男,女) ? 出生日期:+DTOC(出生日期,1)ELSE ? 查无此人!ENDIFCLOSE DATABASE2.分支语句格式:do case case 条件1 语句序列1 case 条件2 语句序列2 case 条件n 语句序列n otherwise 语句序列n+1 endcase功能:依次判断CASE后的条件是否成立,当

9、发现某个CASE后面的条件成立时,就执行该CASE和下一个CASE之间的命令序列,然后执行ENDCASE后面的命令。如果所的有条件都不成立,则执行OTHERWISE与ENDCASE之间的命令序列,然后转向ENDCASE后面的语句。说明:不管有几个CASE条件成立,只有最先成立的那个CASE条件对应的命令序列被执行;如果所有的CASE条件都不成立,且没有OTHERWISE子句,则直接跳出本结构;DO CASE和ENDCASE必须成对出现。例2.6 将学生成绩分为 “不及格”、“及格”、“良好”和“优秀”等次。clearinput 输入学生成绩: to scoredo case case scor

10、e=0 and score=60 and score=70 and score=85 and score=100 ?优秀 otherwise ?不合法的数据!endcase子任务五 学用循环结构循环结构也称重复结构,是指程序在执行过程中,其中的某段代码被重复执行若干次。被重复执行的代码段,通常称之为循环体。VFP支持循环结构的语句有三种: do while enddo for - endfor 语句 scan-endscan1.do while - enddo语句格式:do while enddo功能:执行该语句时,首先判断DO WHILE处的循环条件是否成立,如果条件成立,则执行DO WHI

11、LE和ENDDO之间的命令序列。当执行到ENDDO时,返回到DO WHILE,再次判断循环条件是否成立,以确定是否再次执行循环体。若条件为假,则结束该循环语句,执行ENDDO后面的语句。循环语句执行过程如上图所示。说明: 如果第一次判断条件即为假,则循环体一次都不执行。 如果循环体中包含LOOP命令,则遇到LOOP时,就结束循环体的本次执行,不再执行其后的语句,而是转回到DO WHILE重新判断条件。 如果循环体中包含EXIT命令,则遇到EXIT时,就结束该语句的执行,转去执行ENDDO后面的语句。 通常LOOP和EXIT出现在循环体内嵌套的选择语句中,根据条件决定是LOOP回去,还是EXIT

12、出去。例2.7 编写程序,计算S=1+2+100。S=0I=1DO WHILE I=100 S=S+I I=I+1ENDDO?S=,S例2.8 求前100个自然数中的偶数和。s=0i=1do while i=100 if mod(I,2)=0 s=s+i i=i+1 else i=i+1 loop endifenddo?前100个自然数中的偶数和为:,sreturn2.for - endfor 语句格式:for 循环变量=初值 to 终值 step 步长 循环体 endfor | next功能:执行时,首先将循环变量初值赋予循环变量,然后判断循环变量是否大于(步长大于0时)或小于(步长小于0时

13、)循环变量终值,若结果为真,则退出循环;否则,执行循环后,循环变量自动按步长增加或减少。说明:该语句用循环计数器来控制循环体的执行次数。常用于实现循环次数已知情况下的结构。例2.9 编写程序test9.prg,找出100999之间的所有“水仙花数”。所谓“水仙花数”是指一个三位数,其各位数字的立方和等于该数本身(153=13+53+33)CLEARFOR I=100 TO 999 A=INT(I/100) B=INT(I-A*100)/10) C=I-A*100-B*10 IF I=A3+B3+C3 ? I ENDIFENDFORRETURN3.scan- endscan语句格式:scan 范

14、围 for 条件 循环体 endscan功能:执行该语句时,记录指针自动、依次地在当前表的指定范围内满足条件的记录上移动,对每一条记录执行循环体内的命令。说明: 范围的默认值是all。 exit和loop命令同样可以出现在该循环语句的循环体内。例2.10 统计专业代码(学号的第3、4位)为03的男、女生人数。OPEN DATABASE XSXKUSE 学生STORE 0 TO M,WSCAN FOR SUBS(学号,3,2)=03 IF 性别=.T. M=M+1 ELSE W=W+1 ENDIFENDSCANCLEAR?男生人数:,M?女生人数:,WCLOSE DATABASE编程举例例2.1

15、1 计算T=1!+2!+10!cleart=0p=1for i=1 to 10 p=p*i t=t+pendfor? t=,t例2.12 编制一个查询学生情况的程序。要根据给定的学号找出并显示该学生的姓名及各门功课的成绩。open database xsxkdo while .t. clear accept 请输入学号: to mxh select 学生.学号,姓名,课程名,成绩 from 学生,选课,课程;where 学生.学号=选课.学号 and 课程.课程号=选课.课程号;and 学生.学号=mxh wait 继续查询?(y/n) to p if upper(p)Y use exit e

16、ndifenddoclose database第十二讲 多模块程序子任务一 认识模块及其定义和调用模块可以是程序文件(命令文件),也可以是过程。过程的建立仍使用MODIFY COMMAND命令,文件的默认扩展名是PRG。过程定义的语法格式如下:PROCEDURE|FUNCTION RETURN ENDPROC|ENDFUNCPROCEDURE|FUNCTION命令表示一个过程的开始,并命名过程名.过程名必须以字母或下划线开头,可以包含字母、数字和下划线。ENDPROC|ENDFUNC命令表示一个过程的结束,如果缺省,过程结束于下一条PROCEDURE|FUNCTION命令或文件结尾处。当过程执

17、行到RETURN命令时,控制将转回到调用程序(或命令窗口)并返回表达式的值。如果缺省RETURN命令,则在过程结束处自动执行一条隐含的RETURN命令。若RETURN语句不带,则回逻辑真.T.。过程可以包含在程序文件中放在程序文件代码的后面,也可以放在称为过程文件的单独文件里。过程文件里只包含过程,这些过程能被任何其它程序所调用。但在调用过程文件中的过程之前首先要打开过程文件。打开过程文件的命令格式为:SET PROCEDURE TO ,ADDITIVE可以打开一个或多个过程文件.一旦一个过程文件被打开,那么该过程文件中的所有过程都可以被调用.如果选用ADDITIVE,那么在打开过程文件时,并

18、不关闭原先打开的过程文件。当使用不带任何文件名的SET PROCEDURE TO命令,将关闭所有打开的过程文件。如果不想一并关闭所有过程文件,而要关闭个别过程文件,可以用下面命令:RELEASE PROCEDURE过程文件1,过程文件2,存放在命令文件里的过程主要被命令文件中的代码所调用,但也可以被其它程序所调用.当命令文件处于执行状态时,包含在其中的过程就可以被直接调用,如果命令文件不处于打开状态,那么要调用其中的过程,就要用SET PROCEDURE命令先打开此命令文件。这与打开过程文件的道理是一样的。总而言之,模块是指过程和命令文件里的代码。而过程的调用需要它所在的文件处于打开状态。模块

19、调用的格式有两种:格式1:DO |格式2:|()在上面两种格式里,如果模块是程序文件的代码,用文件名;否则用。格式2既可以作为命令使用(反回值被忽略),也可作为函数出现在表达式里。这里的文件名不包括扩展名。例2.13 模块定义和调用的程序示例。Cleara=0do p1 &调用过程P1do p2 &调用过程P2do p3 &调用过程P3?a=,aproc p1 &过程P1a=a+1proc p2 &过程P2a=a*aproc p3 &过程P3do p1a=a*a+1return运行结果是:a= 5子任务二 使用参数传递来编程模块程序可以接收调用程序传递过来的参数,并能根据接收到的参数控制程序流

20、程或对接收到的参数进行处理,从而提高模块程序功能设计的灵活性。1.接受参数的命令接收参数的命有如下两种格式:格式1:PARAMETERS 形参变量1,形参变量2,格式2:LPARAMETERS ,,功能:PARAMETERS命令声明的形参变量被看作是模块程序中建立的私有变量,LPARAMETERS命令声明的形参变量被看作是模块程序中建立的局部变量。说明:不管是PARAMETERS命令还是LPARAMETERS命令,都应是模块程序的第一条可执行命令。2.调用模块程序的命令格式1:DO文件名|过程名WITH实参1,实参2,格式2:文件名|过程名(实参1,实参2,)功能:实参可以是常量、变量,也可以

21、是一般形式的表达式。调用模块程序时,系统会自动把实参传递给对应的形参变量。说明:形参的数目不能少于实参的数目,否则系统会产生运行时错误;如果形参的数目多于实参的数目,那么多余的形参取初值逻辑假(.f.)。3.参数传递方式 按值传递:单向传递采用格式1调用模块程序时,如果实参是常量或一般形式的表达式,系统会计算出实参的值,并把它们赋值给相应的形参变量。这种情形称为按值传递。 按引用传递,也称地址传递如果实参是变量,那么传递的将不是变量的值,而是变量的地址。这时形参和实参实际上是同一个变量(尽管它们的名字可能不同),在模块程序中对形参变量的改变,同样是对实参的改变。这种情形称为按引用传递。 设置参

22、数传递方式的命令采用格式2调用模块程序时,默认情况是按值传递参数。如果实参是变量可以通过调用命令SET UDFPARMS命令重新设置参数传递的方式。该命令的格式如下:SET UDFPARAMS TO VALUE|REFERENCETO VALUE:按值传递。形参变量值的改变不会影响实参变量的取值。TO REFERENCE:按引用传递。形参变量值改变时,实参变量也随之改变。例2.14 按值传递和按引用传递示例。CLEARSTORE 100 TO X1,X2SET UDFPARMS TO VALUE & 设置按值传递DO P4 WITH X1,(X2) & x1按引用传递,(x2)按值传递? 第一

23、次:,X1,X2STORE 100 TO X1,X2P4(X1,(X2) & x1、(x2)都按值传递? 第二次:,X1,X2SET UDFPARMS TO REFERENCE & 设置按引用传递DO P4 WITH X1,(X2) & x1按引用传递,(x2)按值传递? 第三次:,X1,X2STORE 100 TO X1,X2P4(X1,(X2) & x1按引用传递,(x2)按值传递? 第四次:, X1, X2PROCEDURE P4 &过程P4PARAMETERS X1,X2STORE X1+1 TO X1STORE X2+2 TO X2ENDPROC运行结果为:第一次: 101 100第

24、二次: 100 100第三次: 101 100第四次: 101 100(x2)用一对圆括号将一个变量括起来使其变成一般形式的表达式,所以不管什么情况,总是按值传递。从运行结果看,用格式1调用模块程序时的参数传递方式并不受UDFPARRMS值的设置影响。子任务三 理解变量的作用域变量的作用域是指变量在什么范围内是有效的或能够被访问的。在VFP里,若以变量的作用域来分,内存变量可分为公共变量、私有变量和局部变量三类。1公共变量在任何模块中都可使用的变量称为公共变量。公共变量要先建立后使用,公共变量可用PUBLIC命令建立:PUBLIC 该命令的功能是建立公共的内存变量,并为它们赋初值逻辑假。例如,

25、命令PUBLIC X,Y,S(10)建立了三个公共内存变量:简单内存变量X和Y以及一个含水量10个元素的数组S,它们的初值都是.F.。公共变量一旦建立就一直有效,即使程序运行结束返回到命令窗口也不会消失。只有当执行CLEAR MEMORY、RELEASE、QUIT 等后,公共内存变量才被释放。在命令窗口中直接使用而由系统自动隐含建立的变量也是公共变量。2私有变量在程序中使用(没有通过PUBLIC和LOCAL命令事先声明)而由系统自动隐含建立的变量都是私有变量。私有变量的作用域是建立它的模块及其下属各层模块。一旦建立它的模块程序运行结束,这些私有变量将自动清除。3局部变量局部变量只能在建立它的模

26、块中使用,不能在上层或下层模块中使用。当建立它的模块程序运行结束时,局部变量自动释放。局部变量用LOCAL命令建立:LOCAL 该命令建立指定的局部变量,并为它们赋初值逻辑假.F.。由于LOCAL与LOCATE前四个字母相同,所以这条命令的命令动词不能缩写。局部变量先建立后使用。例2.15 公共变量、私有变量、局部变量及其作用域示例。PUBLIC X1LOCAL X2STORE F TO X3DO P6 ?主程序中.?X1=,X1?X2=,X2?X3=,X3RETURN*过程P6PROCEDURE P6? 子程序中? X1=,X1? X3=,X3RETURN开发应用程序时,主程序与子程序不一定

27、由同一个人开发,这样就可能出现以下情形:子程序中变量可能已经在主程序中建立(即与主程序中的变量同名),子程序的运行可能会更改主程序中变量的值。为解决这一问题,可以在子程序中使用PRIVATE命令隐藏主程序中的同名变量,使得这些变量在子程序中暂时无效。PRIVATE命令的语法格式为:PRIVATE PRIVATE ALLLIKE|EXCEPT该命令的功能是:隐藏上层模块中的同名变量,使得这些变量在当前模块中暂时无效。这样,这些变量名就可以用来命名在当前模块或其下属模块中的私有变量或局部变量,并且不会改变上层模块中的同名变量的取值。一旦当前模块程序运行结束返回上层模块时,那些被隐藏的内存变量就自动

28、恢复有效性,并保持原有的取值。例2.16 变量的隐藏示例。SET TALK OFFVAL1=10VAL2=15DO P7? VAL1,VAL2*过程P7PROCEDURE P7PRIVATE VAL1VAL1=50VAL2=100? VAL1,VAL2RETURN运行结果为:50 10010 100实际上,LOCAL命令在建立局部变量时,也具有隐藏在上层模块中建立的同名变量的作用。但与PRIVATE不同,LOCAL命令只能在它所在的模块内隐藏些同名变量,一旦到了下层模块,这些同名变量就会重新出现。例2.17 LOCAL和PRIVATE命令的比较示例。PUBLIC X,YX=10Y=100DO P8? X,Y*过程P8PROCEDURE P8PRIVATE XX=50LOCAL YDO P9? X,Y*过程P9PROCEDURE P9X=AAAY=BBBRETURN运行结果为:AAA .F.10 BBB实训二 程序设计一、实训目的1. 掌握程序中常用的输入输出语句的使用;2. 学会程序文件的创建、修改与运行;3. 理解程序的

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1