第09次课程序设计Word下载.docx
- 文档编号:19494095
- 上传时间:2023-01-06
- 格式:DOCX
- 页数:18
- 大小:94.21KB
第09次课程序设计Word下载.docx
《第09次课程序设计Word下载.docx》由会员分享,可在线阅读,更多相关《第09次课程序设计Word下载.docx(18页珍藏版)》请在冰豆网上搜索。
]
注:
如果打开的程序文件不存在,则系统自动建立一个新的空程序文件。
3.程序文件的执行方法:
通过“项目管理器”运行;
通过“程序”菜单的“运行”命令运行;
通过“交互”命令运行。
DO[ProgramFileName|?
]、
用DO命令除了可以调用执行命令文件外,还可调用执行查询文件、菜单文件、表单文件。
在调用执行查询文件、菜单文件时,ProgramFileName必须包括相应扩展名(.QPR,.MPR)。
4.程序文件执行过程中,调用或结束程序执行的相关指令:
◆CANCAL:
终止程序执行,清除所有的私有变量,返回命令窗口;
◆DO:
调用并进入另外一个程序;
◆RETURN:
结束当前程序执行,返回到调用它的上级程序,若无上级程序则返回到命令窗口。
◆QUIT:
退出VFP系统,返回到操作系统
1.3简单的输入输出命令:
1.WAIT语句:
✧格式:
WAIT[<
屏幕提示信息>
][TO<
变量名>
][Timeout<
暂停时间>
✧说明:
●一次只能接收一个字符;
●如果缺省<
,系统将显示“按任意键继续…”
●如果直接回车或单击鼠标,则将空字符存入变量。
2.INPUT
INPUT[<
]TO<
●可接收字符型、数值型、日期型、逻辑型数据;
●可从输入的变量名中接收数据;
●输入相应数据时必须使用定界符;
●回车结束输入;
●不能不输入任何信息直接回车退出。
3.ACCEPT
ACCEPT[<
●只接收字符串,而且不能使用定界符;
●如果直接回车,则将空字符串存入变量。
4.定位显示语句
@<
行,列>
[SAY<
][GET<
][DEFAULT<
表达式>
在屏幕指定位置显示并接收任意信息,接收数据的类型与<
类型一致。
程序的基本结构:
2.1顺序结构:
✧顺序结构程序的执行:
按照语句排列先后顺序,一条接一条地执行,它是程序中最基本的结构。
✧举例:
例1.今有一数据表,名称为SB.DBF,记录了产品“价格”、“名称”等信息。
试编写程序,根据记录号来显示某个设备的价格和部门。
CLEAR
USEsb
Input"
请输入记录号:
"
tojlh
GOjlh
Displayfields价格,部门
USE
2.2选择结构:
1.条件语句:
◆
语句格式:
IF<
逻辑表达式>
<
语句序列>
ELSE
ENDIF
◆说明:
●IF和ENDIF语句必须成对出现;
●为了方便阅读,可按缩进格式书写。
◆举例:
例2.将SB.DBF中第一个非主要设备的价格减少10%。
LOCATEFORNOT主要设备
IFFOUND()&
若查找到,FOUND函数返回.T.
REPLACE价格WITH价格*(1-0.1)
?
“无此设备!
”
RETURN
2.多分支语句:
◆语句格式:
DOCASE
CASE<
逻辑表达式1>
逻辑表达式2>
......
逻辑表达式n>
[OTHERWISE
<
语句序列n+1>
ENDCASE
●不管有几个CASE条件成立,只有最先成立的那个CASE条件对应的命令序列被执行;
●如果所有CASE条件都不成立,且没有OTHERWISE子句,则直接跳出本结构;
例3.试编写一显示当前季节程序。
Yue=MONTH(DATE())&
获取当前月份
CASEINLIST(yue,3,4,5)&
第一个表达式的值是其余表达式值之一就返回.T.
Jj=“春”
CASEINLIST(yue,6,7,8)
Jj=“夏”
CASEINLIST(yue,9,10,11)
Jj=“秋”
CASEINLIST(yue,12,1,2)
Jj=“冬”
?
“当前季节是:
”+jj
2.3循环结构:
1.条件循环:
◆语句格式:
DOWHILE<
ENDDO
●如果第一次判断条件时条件为假,则循环体将一次都不会被执行;
●如果循环体包含LOOP命令,那么遇到LOOP时,就结束循环体的本次循环,后面的语句将被忽略,程序进入下一次循环;
●如果循环体包含EXIT语句,那么遇到EXIT时,就结束整个循环。
◆举例:
例4.今有一数据表,名称为SB.DBF,记录了产品“价格”、“名称”等信息。
试编写程序,显示SB.DBF中所有单价超过10000元的设备名称。
USESB
DOWHILENOTEOF()&
eof()函数用于测试指针是否指向文件尾.
IF价格>
10000
名称
SKIP
2.步长循环:
FOR<
循环变量>
=<
初值>
TO<
终值>
[STEP<
步长>
ENDFOR|NEXT
,其步长为1;
●可以在循环体内改变循环变量的值,但这会影响循环体的执行次数;
●语句LOOP……EXIT的作用与DO……WHILE一样。
例5.编写计算S=1+2+3+…+100的程序
s=0
FORi=1TO100
s=s+i
NEXT
”s=”,s
3.扫描循环:
SCAN[<
范围>
][FOR<
][WHILE<
ENDSCAN
●<
范围的默认值是ALL>
;
●该循环必须有数据表被打开;
●循环每进行一次,数据表指针都被自动加1;
例6.将例2用SCAN语句编写
SCANFOR价格>
价格
4.辅助循环语句:
LOOP、EXIT
2.4编程实例:
假设有一数据库“学生管理”,其结构如下:
例题7编写命令文件test3.prg,请用户输入待查询学生的姓名,显示该学生基本情况。
程序:
OPENDATABASE学生管理
USE学生IN0
SELECT学生
ACCEPT"
请输入待查学生姓名:
TOname
LOCATEFOR姓名=NAME
IF.NOT.EOF()
"
姓名:
+姓名
性别:
+IIF(性别,"
男"
"
女"
出生日期:
+DTOC(出生日期,1)
查无此人!
CLOSEDATABASE
例题8逐条输出1982年出生的学生记录。
程序一:
LOCATEFORYEAR(出生日期)=1982
DOWHILE.NOT.EOF()
DISPLAY
WAIT
CONTINUE
程序二:
INDEXONYEAR(出生日期)TAGcsrq
Seek1982
DOWHILEYEAR(出生日期)=1982
例题9统计专业代码(学号的第3、4位)为03的男、女生人数。
STORE0TOm,w
SCANFORSUBST(学号,3,2)="
03"
&
从<
字符表达式>
中某位置开始取若干字符
IF性别="
m=m+1
w=w+1
男生人数"
m
女生人数"
w
例题10先在学生表中添加一个字段:
平均成绩N(6,2),然后根据成绩表统计每个学生选课的平均成绩,并写入新添加的字段中。
USE学生IN1
USE成绩IN2
ALTERTABLE学生ADD平均成绩N(6,2)
DOWHILE!
EOF()
xh=学号
SELECT成绩
AVERAGE成绩TOcjfor学号=xh
REPLACE平均成绩WITHcj
ALTERTABLE学生ADD平均成绩N(6,2)&
添加字段
SELECT学号,AVG(成绩)FROM成绩GROUPBY学号INTOCURSORpjcj
查询并统计平均成绩将查询结果存放到临时文件中
SELECTpjcj
INDEXON学号TOxh&
在临时文件pjcj中建立索引
SETRELATIONTO学号INTOpjcj&
主表“学生”与子表“pjcj”建立临时关系
REPLACE平均成绩WITHpjcj.avg_成绩all&
在建立关联的两个表中实现“平均成绩”替换
例题11如果在命令窗口执行命令:
LIST名称,主窗口中显示:
记录号名称
1电视机
2计算机
3电话线
4电冰箱
5电线
假定名称字段为字符型、宽度为6,那么下面两个程序段的输出结果分别是:
程序一
GO2
SCANNEXT4FORLEFT(名称,2)="
电"
IFRIGHT(名称,2)="
线"
EXIT
ENDIF
名称
结果为:
电话线(若去掉‘exit’或将其换成loop,程序运行结果为:
电线)
程序二
LOOP
电冰箱电线(若去掉‘loop’,程序运行结果为:
电话线电冰箱电线)
(若去掉‘loop’或将其换成exit,程序运行无输出结果)
例题12从键盘输入10个数,然后找出其中最大值和最小值。
INPUT"
请输入一个数:
TOa
STOREaTOma,mi
FORi=2TO10
IFma<
a
ma=a
IFmi>
mi=a
ENDFOR
最大值:
ma
最小值:
mi
ma=max(ma,a)
mi=min(mi,a)
例题13计算分段函数值:
SETTALKOFF&
SETTALKOFF的意思是关闭程序运算的显示过程
输入X值:
TOx
CASEx<
f=2*x-1
3
f=3*x+5
5
f=x+1
10
f=5*x-3
OTHERWISE
f=7*f+2
SETTALKON&
SETTALKON是开启显示程序的运算过程
例题14计算S=1+2+…+100
store0tos,i
DOWHILEi<
=100
i=i+1
S="
s
多模块程序:
3.1模块的定义与调用:
1.主程序的概念:
调用其它模块而没有被其它模块调用的模块称为主程序。
2.子模块的概念:
被其它模块调用的模块称为子模块。
3.模块的定义格式:
PROCEDURE<
过程名>
[PARAMETERS<
参数表>
命令序列>
[RETURN[<
]]
[ENDPROC]
4.模块使用注意事项:
●过程名必须以字母或下划线开头,可以包含字母、数字、下划线;
●当程序遇到RETURN指令时,控制将转回到调用程序(或命令窗口),并返回表达式的值;
●如果RETURN语句不带任何参数,则返回逻辑.T.
●过程文件建立与修改均使用MODIFYCOMMAND命令;
●过程文件的扩展仍用.PRG;
5.模块调用举例:
设计一个计算圆面积的子程序,并要求在主程序中带参数调用它。
主程序:
ymj=0
请输入半径:
tobj
dojswithbj,ymj&
调用模块时参数传递
”ymj=”,ymj
return
子程序:
procedurejs
parametersr,s
s=3.1415926*r*r
3.2参数传递:
1.参数传递的格式:
格式1:
PARAMETERS<
形式变量1>
[,<
形式变量2>
…]
格式2:
LPARAMETERS<
2.关于参数传递的几点说明:
●参数语句必须是过程或自定义函数的第一条语句;
●PARAMETERS语句定义的变量是私有变量,LPARAMETERS语句定义的变量是局部变量;
●参数语句中参数返回调用程序后,将被清除;
●参数语句中的参数必须与调用命令中的参数一一对应;
●经参数语句说明后的变量,由原来的类型变为私有(局部)变量。
3.调用模块时参数传递的格式:
格式:
DO<
文件名>
|<
WITH<
参数1>
[,<
参数2>
,…]
说明:
参数可以是常量,也可以是变量。
3.3变量的作用域:
1.公共变量:
在任何模块中都可使用的变量。
●先定义,后使用,定义后的默认值为.F.。
定义语句:
PUBLIC<
内存变量表>
●即使程序运行结束返回窗口也不消失,除非使用相关命令将其清除;
●清除公用变量语句:
CLEARMEMORY、RELEASE、QUIT
●在命令窗口中直接赋值(没有使用PUBLIC)的内存变量也是公共变量。
2.私有变量:
在程序中直接赋值使用的变量(没有使用PUBLIC、LOCAL定义,系统隐含建立)。
●其作用域为建立它的模块及下属程序各模块;
●一旦建立它的模块运行结束,就自动消失。
3.本地局部变量:
使用命令:
LOCAL<
内存标量表>
建立的变量。
●只能在定义它的模块内使用,不能在上层及下层模块使用;
●当建立它的模块程序运行结束时,自动消失;
●该变量定义时,被赋值为.F.
●LOCAL不能缩写成LOCA(防止与LOCATE缩写重复)。
4.变量作用域比较:
变量名称
变量作用域
定义方法
删除方法
公共(全局)变量
任何程序都可使用
RELEASE或CLEARALL
私有(局部)变量
定义的程序及下属程序
直接赋值,如:
a=10
定义程序运行结束时自动消失
本地(局部)变量
定义的程序内
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 09 课程 设计