第09次课程序设计Word下载.docx

上传人:b****5 文档编号:19494095 上传时间:2023-01-06 格式:DOCX 页数:18 大小:94.21KB
下载 相关 举报
第09次课程序设计Word下载.docx_第1页
第1页 / 共18页
第09次课程序设计Word下载.docx_第2页
第2页 / 共18页
第09次课程序设计Word下载.docx_第3页
第3页 / 共18页
第09次课程序设计Word下载.docx_第4页
第4页 / 共18页
第09次课程序设计Word下载.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

第09次课程序设计Word下载.docx

《第09次课程序设计Word下载.docx》由会员分享,可在线阅读,更多相关《第09次课程序设计Word下载.docx(18页珍藏版)》请在冰豆网上搜索。

第09次课程序设计Word下载.docx

]

注:

如果打开的程序文件不存在,则系统自动建立一个新的空程序文件。

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

定义程序运行结束时自动消失

本地(局部)变量

定义的程序内

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 成人教育 > 远程网络教育

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

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