第六章 程序设计.docx
- 文档编号:28851477
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:26
- 大小:100.19KB
第六章 程序设计.docx
《第六章 程序设计.docx》由会员分享,可在线阅读,更多相关《第六章 程序设计.docx(26页珍藏版)》请在冰豆网上搜索。
第六章程序设计
第六章程序设计基础
6.1程序的概念
程序是为了完成某一具体任务而编写的一系列指令。
VFP程序由一系列代码组成,代码可以包括以命令形式出现的指令
6.2建立或修改程序文件
可用两种方式调用系统内置的文本编辑器建立或修改程序文件:
命令方式:
MODIFYCOMMAND[<盘符>][<路径>]〈程序文件名〉
或
MODIFYFILE[<盘符>][<路径>]〈程序文件名〉
菜单方式:
打开“文件”菜单,选择“新建”;在“新建”窗口,选择“程序”,再选择“新建文件”
注:
如果使用MODIFYFILE命令创建程序文件必须加文件扩展名.prg
6.3执行程序
程序文件建立后,可以用多种方式、多次执行它。
下面是两种常用的方式。
(1)菜单方式
①单击【程序】|【运行】菜单项,打开“运行”对话框;
②从文件列表框中选择要运行的程序文件,并单击“运行”命令按钮,启动运行该程序文件
(2)命令方式
【格式】DO[<盘符>][<路径>\]<文件名>
【功能】执行指定<盘符>、<路径>下的程序文件
执行程序文件时,将依次执行文件中的命令,直到所有命令执行完毕,或者执行到以下命令:
①CANCAL:
终止程序运行,清除所有的私有变量,返回命令窗口;
③RETURN:
结束程序执行,返回调用它的上级程序,若无上级程序则返回命令窗口;
④QUIT:
结束程序执行并退出VisualFoxPro系统,返回操作系统
下面是一个完整的VFP过程化程序,可以引出几个基本概念。
*功能说明:
求圆形的面积。
*文件名:
PROG1.PRG
MODIFYCOMMANDPROG1
CLEAR
CTALK=SET("TALK")
SETTALKOFF
INPUT"请输入圆的半径,半径="TOR
S=PI()*R*R
?
"半径为"+ALLTRIM(STR(R))+"的圆,面积=",S
SETTALK&CTALK
RETURN
从形式上看,VFP的程序是由若干有序的命令行组成,且满足下列规则:
(1)一个命令行内只能写一条命令,命令行的长度不得超过2048个字符,命令行以回车键结束。
(2)、一个命令行可以由若干个物理行组成,即一条命令在一个物理行内写不下时,可以分成几行。
换行的方法是在物理行的末尾加符号“;”,表示下一行输入的内容是本行的继续;
6.4简单的输入输出命令
6.4.1ACCEPT命令
【格式】ACCEPT[<提示信息>]TO<内存变量>
【功能】在程序执行过程中,将用户交互式输入的内容作为字符串赋值给指定内存变量。
该命令只接受字符型数据,输入的字符串不需要加定界符
【例6-1】编程从键盘输入某数据库的文件名,要求打开该数据库并显示其内容。
程序文件名为PROG2.PRG。
MODICOMMANDPROG2
SETTALKOFF
CLEAR
ACCEPT“请输入数据库名:
”TOAAA
OPENDATABASE&AAA
ACCEPT"请输入表名"TOBBB
USE&BBB
LIST
USE
SETTALKON
RETURN
6.4.2.INPUT命令
【格式】INPUT[<提示信息>]TO<内存变量>
【功能】在程序执行过程中,将用户交互式输入的内容赋值给指定内存变量
可以输入字符型、数值型、逻辑型、日期型和日期时间型等类型数据,而且可以是常量、变量、函数或表达式等形式,按回车键结束输入,系统将输入的数据赋值给<内存变量>。
【例6-3】从键盘输入两个任意正数,编程求以两数为边长的长方形面积。
程序文件名为
PROG3.PRG
SETTALKOFF
CLEAR
INPUT“长方形一边的长为:
”TOA
INPUT“长方形另一边的长为:
”TOB
S=A*B
?
“长方形的面积为:
”,S
SETTALKON
RETURN
6.4.3.WAIT命令
【格式】WAIT[<提示信息>][TO<内存变量>][WINDOW[AT<行>,<列>]][NOWAIT][CLEAR|NOCLEAR][TIMEOUT<数值表达式>]
【功能】显示提示信息,暂停程序执行,直到用户按任意键或单击鼠标时继续执行程序。
若选择可选项[TO<内存变量>],将输入的单个字符作为字符型数据赋给指定的<内存变量>;若用户是按Enter键或单击鼠标,<内存变量>的值为空串。
若省略所有可选项,屏幕显示“键入任意键继续……”默认提示信息
【例6-4】在STUDENT数据库的STUD表中显示任意一个班级学生的情况。
程序文件名为PROG4.PRG
SETTALKOFF
CLEAR
OPENDATABASESTU11
USECJ11
WAIT“请输入待查学生的班级(1—3):
”TON
IFVAL(N)<1.OR.VAL(N)>3
WAIT“输入无效,结束程序运行!
”WINDOWTIMEOUT5
RETURN
ELSE
LISTFOR班级=AAA
ENDIF
CLOSEDATABASE
SETTALKON
RETURN
6.5程序的基本结构
VisualFoxPro系统提供的命令丰富,且功能强大,把这些命令和程序设计语句有效地组织在一起,就形成了实现某一特定功能的程序。
VisualFoxPro系统的程序有两个特点:
一是程序控制流模式,由顺序、分支、循环三种基本结构构成。
二是面向对象可视化的结构程序模块,在每个模块的内部也是由程序控制流组成。
常见的控制结构如下:
1.顺序结构
顺序结构是在程序执行时,根据程序中语句的书写顺序依次执行的命令序列。
VisualFoxPro系统中的大多数命令都可以作为顺序结构中的语句。
2.分支结构
分支结构是在程序执行时,根据不同的条件,选择执行不同的程序语句,用来解决有选择、有转移的诸多问题。
3.循环结构
循环结构则能够使某些语句或程序段重复执行若干次。
如果某些语句或程序段需要在一个固定的位置上重复操作,使用循环是最好的选择。
分支结构
6.1.1.单向分支单向分支语句,即根据用户设置的条件表达式的值,决定某一操作是否执行。
(1)语句格式:
IF〈条件表达式〉
〈命令行序列〉
ENDIF
(2)语句功能:
该语句首先计算〈条件表达式〉的值,当〈条件表达式〉的值为真时,执行〈命令行序列〉;否则,执行ENDIF后面的第一条命令。
6.4.2双向分支
双向分支语句,即根据用户设置的条件表达式的值,选择两个操作中的一个来执行。
(1)语句格式:
IF〈条件表达式〉
〈命令行序列1〉
ELSE
〈命令行序列2〉
ENDIF
(2)语句功能:
该语句首先计算〈条件表达式〉的值,当〈条件表达式〉的值为真时,执行〈命令行序列1〉中的命令;否则,执行〈命令行序列2〉中的命令;执行完〈命令行序列1〉或〈命令行序列2〉后都将执行ENDIF后面的第一条命令。
【例6-5】编写一密码校验程序(假设密码为ABC)。
程序文件名为PROG5.PRG。
SETTALKOFF
CLEAR
ACCEPT“请输入您的密码:
”TOAAA
IFAAA=”ABC”
CLEAR
?
”欢迎使用本系统!
”
ELSE
?
”密码错误!
”
WAIT
QUIT
ENDIF
SETTALKON
6.4.3多向分支
多向分支语句,即根据多个条件表达式的值,选择执行多个操作中的一个对应执行。
(1)语句格式:
DOCASE
CASE〈条件表达式1〉
<命令行序列1〉
CASE〈条件表达式2〉
<命令行序列2〉
……
CASE〈条件表达式N〉
〈命令行序列N〉]
[OTHERWISE
〈命令行序列N+1〉]
ENDCASE
【例6-6】假设收入(P)与税率(R)的关系如下表,编程求税金。
程序文件名为PROG12.PRG。
0P<800
R=0.05800≤P<2000
0.082000≤P<5000
0.1P≥5000
SETTALKOFF
CLEAR
INPUT“请输入收入:
”TOP
DOCASE
CASEP<800
R=0
CASEP<2000
R=0.05
CASEP<5000
R=0.08
OTHERWISE
R=0.1
ENDCASE
TAX=P*R
?
”税金为:
”,TAX
SETTALKON
RETURN
【例6-7】根据学生的成绩输出学生的等级具体等级如下PRGO7.PRG
100~90优秀
80~89良好
70~79中等
60~69及格
0~59不及格
SETTALKOFF
CLEAR
INPUT“请输入学生的成绩”tot
DOCASE
CASET>=90ANDT<=100
?
”优秀”
CASET>=80ANDT<=89
?
”良好”
CASET>=60ANDT<=69
“及格”
CASET>=0ANDT<=59
“不及格”
OTHERWISE
“输入错误”
ENDCASE
RETURN
SETTALKOFF
CLEAR
DIMENSIONSTU(3,4),STUSUM(3),STUAVG(4)
STORE0TOSTUSUM,STUAVG
FORI=1TO3
FORJ=1TO4
INPUT"请输入第"+alltrim(str(i))+"个学生的第"+alltrim(str(j))+"科成绩"toSTU(I,J)
NEXTJ
NEXTI
FORI=1TO3
FORJ=1TO4
STUSUM[I]=STUSUM[I]+STU[I,J]
NEXTJ
NEXTI
FORJ=1TO4
FORI=1TO3
STUAVG[J]=STUAVG[J]+STU[I,J]
NEXTJ
NEXTI
FORI=1TO3
?
"第"+alltrim(str(i))+"个学生的总分为"+alltrim(str(STUSUM[I]))
NEXTI
?
?
FORI=1TO4
?
"第"+alltrim(str(i))+"科的平均分为"+alltrim(str(STUAVG[I]))
NEXTI
?
?
STORESTUSUM[1]TOSTUMAX,STUMIN
FORI=2TO3
IFSTUSUM[I]>STUMAX
STUMAX=STUSUM[I]
ENDIF
IFSTUSUM[I] STUMIN=STUSUM[I] ENDIF NEXTI ? "最高分为"+ALLTRIM(STR(STUMAX))+"最低分为: "+ALLTRIM(STR(STUMIN)) 4.使用分支语句应注意的几点 (1)IF……ENDIF和DOCASE……ENDCASE必须配对使用,DOCASE与第一个CASE〈条件表达式〉之间不应有任何命令。 (2)〈条件表达式〉可以是各种表达式或函数的组合,其值必须是逻辑值。 (3)〈命令行序列〉可以由一个或多个命令组成,可以是条件控制语句组成的嵌套结构。 (4)DOCASE……ENDCASE命令,每次最多只能执行一个〈命令行序列〉。 在多个CASE项的〈条件表达式〉值为真时,只执行第一个〈条件表达式〉值为真的〈命令行序列〉,然后执行ENDCASE的后面的第一条命令。 6.4.4循环结构 1.DOWHILE循环语句 【格式1】DOWHILE<条件表达式> <语句序列> ENDDO 一个循环结构一般应具备如下的条件: (1)循环的初始条件: 一般为给循环控制变量赋初值; (2)循环头: 循环语句的起始,设置、判断循环条件; (3)循环尾: 循环语句的结尾; (4)循环体: 位于循环头和循环尾之间、循环控制重复执行的语句序列 【格式2】DOWHILE<条件表达式> <语句序列1> [LOOP] <语句序列2> [EXIT] <语句序列3> ENDDO •LOOP语句: 强行返回到循环开始语句。 •EXIT语句: 强行跳出循环,接着执行ENDDO后的语句 【例6-8】编程求1+2+3+……+100之和。 程序文件名为PROG8.PRG。 SETTALKOFF CLEAR S=0 I=1 DOWHILEI<=100 S=S+I I=I+1 ENDDO ? ”1+2+3+……+100=”,S SETTALKON RETURN 例6-9】逐条显示在STUDENT数据库的STUD表中性别为“男”的所有记录。 程序文件名为PROG9.PRG。 SETTALKOFF CLEAR OPENDATABASESTU11 USEDA11 DOWHILE.NOT.EOF() IF性别=”男” DISPLAY ENDIF SKIP ENDDO CLOSEDATABASE SETTALKON RETURN 【例6-10】编程显示STUDENT数据库的STUD表中除“李宁”以外的所有记录。 程序文件名为PROG10.PRG。 SETTALKOFF CLEAR OPENDATABASESTUDENT USESTUD DOWHILE.NOT.EOF() IF姓名=”李宁” SKIP LOOP ENDIF DISPLAY SKIP ENDDO CLOSEDATABASE SETTALKON RETURN 【例6-11】 2.FOR循环语句 【格式】FOR<循环变量>=<初值>TO<终值>[STEP<步长>] <循环体> ENDFOR|NEXT 使用FOR循环语句的有关说明: ①省略STEP<步长>,则〈步长〉为默认值1; ②〈初值〉、〈终值〉和〈步长〉都可以是数值表达式,但这些表达式仅在循环语句开始执行时计算一次。 循环语句执行过程中,初值、终值和步长是不会改变的,并由此确定循环的次数; ③可以在循环体内改变循环变量的值,但会改变循环执行次数; ④EXIT和LOOP命令可以出现在循环体内。 执行LOOP命令时,结束本次循环,循环变量增加一个步长值,返回FOR循环头判断循环条件是否成立。 执行EXIT命令时,程序跳出循环,执行循环尾后面的语句 【例6-12】从键盘输入10个数,编程找出其中的最大值和最小值。 程序文件名为PROG23.PRG。 SETTALKOFF CLEAR INPUT“请从键盘输入一个数: ”TOA STOREATOMAX,MIN FORI=2TO10 INPUT“请从键盘输入一个数: ”TOA
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第六章 程序设计 第六