vf第8章程序设计gj_第1页
vf第8章程序设计gj_第2页
vf第8章程序设计gj_第3页
vf第8章程序设计gj_第4页
vf第8章程序设计gj_第5页
已阅读5页,还剩139页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第8章结构化程序设计Visual

FoxPro

程序设计主讲教师:

高骏Emil

:704098395@本章要求:1.掌握VFP程序的建立、修改、运行。2.掌握程序的三种基本结构。3.了解过程和过程文件。本章要点:程序的三种控制结构。学时安排:6学时(理论)

+6学时(实践)课程要求作业

结束·

8.

1程序文件及其编辑环境·

8.2程序中几种常用命令·

8.3程序的基本控制结构·

8.4过程和用户自定义函数第8章

程序设计基础8.1

程序文件及其编辑环境在ViusalFoxPro中,程序是由一系列

ViusalFoxPro可以理解的命令、函数和操

作组成的,

这些命令和函数可以在Viusal

FoxPro中的命令窗口和以人工方式逐一执

行,

也可以把它们放在一个程序文件中,以文件的形式来执行。【8.1】假定学号的前四位为入学年份,

第5,6位为

专业代码.编写命令文件test.prg,分别统计所有学生

和2010年入学,专业代码为03的学生选修课程号为101课程的平均成绩.SET

TALK

OFFSETDEFAULT

TO

d

:\学生管理

OPENDATA

学生管理SELECTAVG(成绩)FROM

成绩WHERE

;课程号=“101

INTOARRAYm1SELECTAVG(成绩)FROM

成绩WHERE

;课程号=“101

ANDLEFT(学号,4)=“2010

”;

AND

SUBS(学号,5,2)=“03

INTOARRAYm2CLEAR?

”所有学生的平均成绩

:

font“宋体

”,20,m1(1)font“宋”?

”指定学生的平均成绩

:

font

“宋体

”,20,m2(1),font“宋”CLOSE

DATASE

SET

TALK

ON

RETURN创建、编辑以“程序文件名”为名的程序文件1.在编辑窗口输入一条条命令。2.^w或关闭窗口存盘、

^q或者<Esc>放弃存盘3.程序文件的扩展名为.prg,

可以省略。ModifyCommand<程序文件名>8.

1.

1

程序文件的建立和运行(2)

以菜单方式建立、修改程序文件(1)

以命令方式建立、修改程序文件1.

程序文件的建立已有的程序文件格式:

功能

:

说明

:新建打开文件.prg行它

下面是两种常用的方式。选中运行程序文件建立后,

可以用多种方式运行格式:

Do<文件名>

功能

:

运行程序文件2.程序文件的运行、调用(1)菜单方式(2)命令方式程序》

类型

说明

例类型说明

a数组型

aStudents

I

f

浮点型fInterest

c

字符型cNameIl逻辑型lFlagt日期时间型tLastModifiedu未知uReturnValuey

货币型

yCurrentValueb双精度型

bValue8.

1.2

Visual

FoxPro编程特点

d日期型dBirthDayo对象oEmployee1.变量不区分大小写建议的变量命名约定n

数值型

nCounterVisual

FoxPro系统对整行注释和行中部分注释有不同的

格式

。整行注释使用“*

”引导

行中部分注释使用“&&

引导。当把一个值保存到某一变量而该变量原先不存在时,Visual

FoxPro系统会隐含地声明它

并有初始值存在

。用

户在变量里放什么数据

变量就是什么类型。程序中每条命令都以回车键结尾

一行只能写一条命令。

若需分行书写

可以使用分号“;

”表示续行。2.变量不需预先声明4.添加注释3.命令分行8.2

程序中几种常用命令

1.Wait命令

暂停程序的运行,直到用户输入一个字符,也可用于

输出一条提示信息WAIT

[<信息文本>]

[TO<内存变量>]

[WINDOW[AT

<行>,<列>]][NOWAIT]

[CLEAR]

[NOCLEAR]

[TIMEOUT<数值表达式>WINDOW子句使屏幕出现一个WAIT提示窗口,

内容由<信息文本>确定,位置有AT子句指定.省略AT子句则出现在屏幕右上角不关闭提示窗口,直到下一

个WAIT命令自动关闭TIMEOUT子句设定等待时间(以秒为单位)保存键入的字符,省

略TO子句不保存省略则显示“按

任意键继续….不等待用户输入关闭提示窗口说明

:③若指定WINDOWS子句,则会出现一个WAIT提示窗口,用

以显示提示信息.提示窗口在主窗口的右上角,也可以用AT短语指定其在主窗口中的位置.④若同时选用NOWAIT短语和WINDOWS子句,系统将不等

待用户按键,直接往下执行.⑤若选用NOCLEAR短语,则不关闭提示窗口,直到用户执行

下一条WAITWINDOWS命令或WAITCLEAR命令为止.⑥TIMEOUT子名用来设定等待时间(秒数)。在屏幕右上角弹出一个窗口,

“欢迎使

任意示

用键后窗口消失。”

Windows例如执行:Wait“欢迎使用!,

按格式:

Accept[<提示信息>]To<内存变量>功能

:

在程序执行过程中

暂停执行

等待用户从键盘输入字

符串

当用户以回车键结束输入完数据后

系统将用户

输入的内容作为字符串赋值给指定内存变量

。然后继续

往下执行程序。说明

:(

1)

如果选用提示信息

系统会在屏幕上显示提示信息;

(2)

输入的数据只能是字符型数据

并且不用定界符;(3)

如果用户什么数据都不输

就按下回车键

系统认

为是输入了一个空串

自动会把空串赋给指定的内存变量

中。2.Accept命令【例8.2】编程从键盘输入某数据库的文件名,要求打开该

数据库并显示其内容.程序文件名为PROG1.PRG。SETTALKOFFSte

default

to

d:\学生管理CLEARACCEPT"请输入数据库名

:"

TO

AAAOPENDATABASE&AAAACCEPT"请输入表名

:"

TO

BBBDoprog1请输入数据库名:

学生管理

请输入表名

:

学生USE&BBBbrowseUSESETTALK

ONRETURNset

default

to

d

:\人才管理

opendata人才管理Accept"请输入职称

:"to

zcselect

*

from

专业特长

;

where职称=zcUse人才档案ExclusiveAccept"请输入编号

:"Tobh

Locate

For编号=bh?编号,姓名

UseDo8.3请输入编号:

sh01001Sh01001金银桥【例8.4】编写程序

浏览专业特长表中不同职录集。【例8.3】输入姓名

在人才档案表中查询某编号对应的姓名Do8.4请输入职称:

教授输入字符串时不加定界符(1)

如果选用<提示信息>,那么系统会首先显示该提示信息的值,作为提示信息。(2)输入的数据可以是常量、变量,

也可以是一般的表达式。但不能不

输入任何内容直接按回车键。(3)输入字符串是必须加定界符“”,输入逻辑型常量要用圆点定界符

(如.T.,

.F.

),输入日期时间型常量是要用大括号(如

{^2012-03-

01})

。等待用户从键盘输入数据,

用户可以输入任意合法的表达式。当以

回车键结束输入时,

系统将表达式的值存入指定的内存变量,程序继续运行。Input

[<提示信息>]To<内存变量>格式:

功能

:说明

:3.Input命令【例8.5】编写命令文件test1.prg,查找指定日期

以后出生的学生SETDEFAULTTOd:\学生管理OPENDATABASE

学生管理INPUT

"输入日期

:"

TO

mrqSELECT学号,姓名,出生日期FROM学生

;

WHERE出生日期>mrq;NOWAITCLOSEDATABASE

RETURNDotest1输入日期:{^1993-01-01}在命令窗口中输入:ModifyCommand8.6ClearInput

“长方形一边的长为:

TOAInput

“长方形另一边的长为:

TOB

S=A*B?"长方形的面积为:",S屏幕显示

键盘输入Do8.6长方形一边的长为:

5长方形另一边的长为:

6

运行结果:长方形的面积为:30【例8.6】从键盘输入两个任意正数

编程求以两数为边长

的长方形面积

。程序文件名为8.6.prgSet

default

to

d

:\人才管理Input"请输入要删除的人的出生日期:

"to

CsrqDeletefrom人才档案

where

出生日期=CsrqSelect

人才档案BrowClosedata请输入要删除的人的出生日期:

{^1969-02-03}【例8.7】编写程序

将人才档案表中指定的出生日期的记录

逻辑删除。功能

:

在指定的行、列位置输入一个常量

当执行到Read语句时

将常量赋值给指定的变量。说明

:

1、多个@语句可以配置一个Read语句

。但是中间

不能有别的语句。2、Get后面的变量要先赋值。格式:

@<行,列>Say<提示信息>get<变量>@<行,列>

Say<提示信息>get<变量>

…….Read4.格式输入语句ClearSet

default

to

d

:\人才管理Use专业特长ExclusiveAccept

"请输入职称

:"to

zcLocate

All

For

职称

=zc@2,10Say"编号"

Get

编号@3,10Say"专业"Get

专业@4,10Say"毕业学校"Get毕业学校

@5,10Say"专业年限"Get

专业年限

@6,10Say“职称

Get

职称ReadClosedata【例8.8】编写程序

在指定的位置显示修改“专业特长

”表

中指定职称的记录。格式:

@<行,列>

Say

<提示信息>[Picture<格式描述符>]功能

:(

1)

在指定的行、列输出表达式的值。(2)

格式描述符用来限定数据输出的类型、长度及格式。8.2.2

基本输出语句1.格式输出语句格式字符

含义例子9

只允许显示数字字符与正负号

Picture

"

999.99

"#

一个数值型数字与正负号

Picture"####.##"$

显示货币符

Picture"$999.99

"!

将字符转成大写

Picture"xxxxx"X

允许任意字符

Picture

"xxxxx",

千位分隔符

Picture“99,999"常用格式描述符的功能bh"

!!!!!!!!

"

"xxxxxxxxx"【例8.9】输入编号

在人才档案表中查询某编号对应Use人才档案ExclusiveAccept"请输入编号

:"toLocatFor编号=bh@

13,20Say编号Picture

@

14,20Say姓名Picture的姓名

字符转换成大写任意字符Usex1=Messagebox("您真的要退出系统

吗?",4+16+0,"退出系统")Ifx1=6ReturnEndif格式:Messagebox(<“提示信息

”>,<对话框类型>,<“对话框标题“功能:在屏幕上弹出一个指定格式的对话框。说明:对话框类型是由“按钮个数对话框标题

认按钮

组成

提示信息对话框标题

提示信息对话框类型2.对话框MessageBox函数按钮个数显示图标默认按钮P67默认焦点按钮的代码代码0代码的含义确定按钮l

按钮l

返回值

l

按钮l

返回值1确定、取消按钮2终止、重试、和忽略按钮3是、

否和取消按钮4是、

否按钮5重试、取消按钮256默认焦点在第二个按钮512默认焦点在第三个按钮代码

代码的含义0

默认焦点在第一个按钮代码16代码的含义停止图标

32问号图标48感叹号图标

64信息图标

返回系统忽

是否674+1

+0单击“否

”,返回7取消终止单击“是

”,返回6单击对话框按钮的返回值按钮个返

到“

”显示图标代码1231、程序的末尾可以使用Return命令

能使程序

执行结束

并返回到调用它的上级程序继续执行,

若无上级程序则返回到命令窗口。2、使用另一条命令为Cancel

它可以中止程序

运行

并返回到命令窗口。3、使用Quit命令可以结束程序运行退出VisualFoxPro系统8.2.3

程序结尾命令8.3

程序的基本控制结构常见的控制结构如下:1.

顺序结构顺序结构是在程序执行时,

根据程序中语句的书

写顺序依次执行的命令序列

。Visual

FoxPro系统中的

大多数命令都可以作为顺序结构中的语句。2.

分支结构分支结构是在程序执行时,

根据不同的条件,

选择执行不同的程序语句,

用来解决有选择、有转移的

诸多问题。3.

循环结构循环结构则能够使某些语句或程序段重复执行若

干次

。如果某些语句或程序段需要在一个固定的位置上重复操作,

使用循环是最好的选择。ClearInput"请输入圆的半径:

"

To

r&&输入半径

c=2*3.14*r&&计算圆的周长s=3.14*r*r

&&计算圆的面积?"圆的周长:

",c&&输出周长?“圆的面积:

”,s&&输出面积Return顺序结构是一种线性结构

。是程序设计中最简单同时也

是最基本的结构

。它要求顺序地执行每一个基本的加工处

理单位。8.3.

1

顺序结构8.3

程序的基本控制结构【例8.10】计算圆的周长和面积。!命令序列2命令序列1功能

:首先计算

〈条件表达式〉

的值

〈条件表达式〉

的值为真时

执行

〈语句序列〉

否则

执行EndIf后

面的第一条语句。分支结构是在程序执行时

根据不同的条件

选择执行不同

的程序语句。格式:

If

<条件表达式><语句序列>

EndIf8.3.2

条件分支结构1.简单的条件语句语句序列EndIf后面的语句条件↓!FTClearInput"X="TO

xInput"Y="TO

yy=y+xEndIf?"Y=",y【例8.11】编写程序:

先从键盘接收两个数x和y

然后判断x能否被3整除

。如果x能被3整除

那么y的值增加x;

则y的值不变。EndIf后面的语句Ifxm/od

((IX,t3()x=/0

)

y=y+xx/3=int

(x/

3)T输入x,y↓FClearUse专业特长

ExclusiLocateFor编号="zj0If

职称="副教授"Replace

职称

With

EndIfBrowseLast【例8.12】编写程序:

修改“专业特长

”表中的数据

编号为“zj01002

”的职称从“副教授

”改为“教授

”。ve01002

""教授"该语句首先计算

〈条件表达式〉

的值

〈条件表达式〉

的值为真时

执行

〈语句序列1〉

中的命令;

否则

执行

〈语句

序列2〉

中的命令;

执行完

〈命令行序列1〉

〈命令行序列2〉后都将执行EndIf后面的第一条语句。格式:

If

〈条件表达式〉〈语句序列1〉

Else〈语句序列2〉EndIf功能

:

EndIf后面的语句

2.带Else的条件语句语句序列1语句序列2T

F

条件

ENDIF【例8.13】输入一个姓名

在“学生

”表中查找该姓名的学生,如果找到,显示该记录的姓名、性别和出生日期

否则显示“查

无此人!

”,程序名为test2.prgSETDEFAULTTO

d:\学生管理OPENDATABASE

学生管理USE

学生

IN0SELECT

学生ACCEPT“请输入待查学生姓名

:

TONAMELOCATE

FOR

姓名=NAMEIF

EOF()=.F.?

”姓名

:

”+姓名FONT“宋体

”,20?

”性别

:

”+IIF(性别=.t.,“男

”,

”女

”)FONT

“宋体

”,20?

”出生日期

:

”+DTOC(出生日期,1)FONT“宋体

”,20ELSE

messagebox(“查无此人!

”,0+48+0,

”例8.13

”)

CLOSEDATABASERETURNDoCaseCase〈条件表达式1〉<语句序列1〉Case〈条件表达式2〉<语句序列2〉……Case〈条件表达式N〉〈语句序列N〉

][Otherwise〈语句序列N+1〉

]EndCase个Case后面的条件成立时

就执行该Case和下一个Case之间的语句序列

然后执行EndCase后面的语句令

。如果所有的条件都不成立

则执行Otherwise与EndCase之间的语句序列

然后转

向EndCase后面的语句。

语句序列1

语句序列2

…!语句执行时

依次判断Case后面的条件是否成立

当发现某3.

多分支语句OTHERWISEENDCASE后面的语句条件2条件n条件1语句序列n+1语句序列n功能

:格式:Input

"请输入考试成绩:

"

To

x

DoCaseCasex<60?"不及格"Casex<70?"及格"Casex<80?"

中等"Casex<90?"

良好"Otherwise?"优秀"EndCase说明:①不管有几个Case条件成立

只有最先成立的那个Case条

件的对应命令序列被执行。②如果所有的Case条件都不成立

且没有Otherwise子句,

则直接跳出本结构。③Do

Case和EndCase必须配对使用

DoCase是本结

构的入口

EndCase是本结

构的出口。④Do

Case和第一个Case子句之间不能插入任何命令。【例8.13】显示当前季节。ClearYue=Month

(Date

())DoCaseCaseyue<4jj="春"Caseyue<7jj="夏"Caseyue<10

jj="秋"Otherwisejj="冬"EndcaseWaitjjWindow程序文件如下从今天的日期里取出月份送到yue测试表达式的值是

否在表达式中,

就返回.T.ClearInput"请输入收入:

"ToP

DoCaseCaseP<=3500

R=0CaseP<=4500R=0.05CaseP<=6500R=0.08OtherwiseR=0.1EndCaseTax=

(p-3500)*r?"税金为

:"+Str

(tax)0R=0.050.08

0.1P

35003500

<P≤4500

4500<P≤6500

P>6500【例8.14】假设收入(P)

与税率(R)

的关系如下表

编程求税金。【例8.15】输入一个字符“男

”或者“女

”到变量“性别

”中,

再输入一个数值到变量“身高

”中

。计算:

如果性别=“男

”并且身高又在180以上

输出“参加篮球比赛

”,

否则输出“参

加足球比赛

”。如果性别为“女

”并且身高在170以上输出“参加模特大赛

”,

否则输出“参加健美操比赛

”Acce"请输入你的性别:"To性别

用Case包含Input"请输入你的身高:"To身高

If语句怎么If

性别="男"

写?DoCaseCase身高

>=

180?

"参加篮球比赛!

"

Do

身高

>=

170Case

身高<

180

?

"参加模特比赛!

"?

"参加足球比赛!

"

Case

身高

<

170EndCase

?"参加健美操比赛!"Else

EndCaseEndIf

ReturnCCaasseeCCaasseeT

开始

输入a,b,c的值T

a>c

A,c交换

T

ab

c解题步骤:交换a、b的值交换a、c的值交换b、c的值【例8.

16】编写程序

对任给的三

个数

按从小到大的顺序输出。b>c?

F

a>b?

F

B,c交换

A,b交换

FB,

c排序a

=

cc

=

t

EndifIf

b

>ct

=bb

=

cc

=

t

Endif?

“排序后",a,b,cInput"请输入第1个数

:"

to

aInput"请输入第2个数

:"

to

bInput"请输入第3个数

:"

to

c?

"排序前"

a

b

c

a,b排序,

,

,If

a

>bt=

aa

=

bb

=

tEndifIf

a

>ct=

aa,

c排序循环结构也称为重复结构

是指程序在执行的过程中

程序

中的某段代码被重复执行若干次

。被重复执行的代码段

通常

称之为循环体。首先计算〈条件表达式〉

的值,

当〈条件表达式〉

的值为真时,执行循环;

否则,执行

EndDo后面的第一条命令。如果第一次判断

条件为假,

一次也不循环。根据条件表达式的值决定循环体内语句

的执行次数。Do

While<条件表达式><语句序列>EndDo8.4

循环结构程序1.条件循环格式1:

功能

:循环体条件TEndDo后面的语句!FClearSet

default

to

d

:\人才管理Use人才档案ExclusiveGo

Top

Rc=0Do

While

Eof

()=.f.If工资现状>7000rc=rc+1

EndIfSkipEndDo@2,30

Say"工资在7000元以上的人"

@2,60

Say

rcUseClearSet

default

to

d

:\人才管理Use人才档案ExclusiveLocatefor工资>7000Rc=0Do

While

Eof

()=.f.rc=rc+1continueEndDo?"工资在7000元以上的人“,

Use【例8.17】统计“人才档案

”表中工资超过7000元的人数。一个循环结构一般应具备

如下的条件:(

1)

循环的初始条件:

般为给循环控制变量赋初

值;(2)

循环头:

循环语句的

起始

设置、判断循环条

件;(3)

循环尾:

循环语句的结尾;(4)

循环体:

位于循环头

和循环尾之间、循环控制

重复执行的语句序列。S=0

I=1Do

While

I<=100

S=S+II=I+1

EndDo?"1+2+3+……+

100

",S求s=1+3+5+7-------+51求s=1*2*3*--------*100

(s=100!)求

s=

1!+2!+3!+…+n

!求

s=

1!+2!+3!+…+n

!【例8.18】编程求1+2+3+……+

100之和。Clear循环条件ExitLoopDo

While<条件表达式>

<语句序列1>[Loop]<语句序列2>

[Exit]<语句序列3>

EndDo功能

:Loop语句:

强行返回到循环开始语句。Exit语句:

强行跳出循环

接着执行EndDo后的语句EndDo的后继语句格式2:循环体ClearJi=0

Ou=0Do

while

.t.Input

”输入一个整数:Ifa=0ExitElseIf

mod

(a,2)=0ou=ou+1endifIf

mod

(a,2)<>0ji=ji+1Endif

Endif

Enddo?

”奇数的个数为:

”,ji?

”偶数的个数为:

”,ouReturn【例8.19】输入任意整数

分别统计偶数和奇数的个数

,输入0为结束程序。”

ToaIf

Flag=0?Str

(n,3)+"是素数"Else?Str

(n,3)+"不是素数"Endif一个数除了1和它本身之外,

没有其他整数能整除的整数为素数。判别一个大于2的整数n是否为素数可以:用2,3,…,n-1作除数除n,

只要有一个

能整除n,n就不是素数。否则,n为素数。Flag=

0

I=2Input"请输入一个大于2的整数"ToN

DoWhile

i<n【例8.20】验证一个大于2的整数n是否为素数。If

Mod

(n,i)<>0

I=I+1Loop

ElseIfn/i=int

(n/i)Exit

EndIf

EndDoFlag=

1【例9.21】全班50个同学报名参加运动

会。如果是男同学并且身高又在180以

上,输出“参加篮球比赛”,

否则输出“参加足球比赛”

。如果是女同学

并且身高在170以上输出“参加模特大

赛”,

否则输出“参加健美操比赛”。

最后统计参加各项比赛的人数。A=0B=0C=0D=0Sum=50DoWhile

SUM

>

0Acce"请输入你的性别"

TO性别

Input"请输入你的身高"TO身高If

性别="男“if身高>=

180?

"参加篮球比赛!"A=A+1else?"参加足球比赛!"B=B+1EndifElseif身高

>=

170?

"参加模特比赛!"C=C+1else?

"参加健美操比赛!"D=D+1EndifEndIfSUM=SUM-1EndDo?"参加篮球比赛的人数",A?"参加足球比赛的人数",B

?"参加模特比赛的人数",C

?"参加健美操比赛的人数",D首先将初值赋给循环变量,然后

判断循环条件是否成立(若步长

为正值,循环条件为“循环变量

<=终值”;

若步长为负值,循环

条件为“循环变量>=终值”)

若循环条件成立,

则执行循环体,

然后循环变量增加一个步长值,并再次判断循环条件是否成立,以确定是否再次执行循环体。若

循环条件不成立,

则结束该循环语句,执行EndFor后面的语句。循环变量增加步长格式:

For<循环变量>=<初值>To<终值>

<循环体>EndFor

|Next步长循环控制语句

即根据循环变量的初值、终值和步长,2.步长循环[Step<步长>]!循环变量获得初值!决定循环体内语句的执行次数。循环体循环变量在终值内!LoopExit功能

:!!!FT说明:1、省略Step

步长

则步长为默认值1;2、初值、终值和步长都可以是数值表达式

当初值小于终值,步长必须为正

当初值大于终值

步长必须为负才可以循环;3、行次数;4、时

结头判断循环条件是否成立

。执行Exit命令时,程序跳出循环

执行循环

尾后面的语句注意:1、循环终止的条件是:

“循环变量的值超出终值

”而不是循环2、当<步长>为正时

检查<循环变量>是否大于<终值>

当<步长>为负时

检查<循环变量>是否小于<终值>

当步长为0时

循环永不终止。For<循环变量>=<初值>To<终值>

[Step<步长>]

<循环体>EndFor

|NextFor<循环变量>=<初值>To<终值>

[Step<步长>]

<循环体>EndFor

|NextClear

S=1I=1Do

While

I<=100

S=S*II=I+1

EndDo?"1*2*3*……*100

",SClear

S=1For

i=1to

100

s=s*IEndFor?"1*2*3*……*100

",S【例8.22】编程求1*2*3*……*100之和。【例8.23】全班50个同学报名参加运动

会。如果是男同学并且身高又在180以

上,输出“参加篮球比赛”,

否则输出“参加足球比赛”

。如果是女同学

并且身高在170以上输出“参加模特大

赛”,

否则输出“参加健美操比赛”。

最后统计参加各项比赛的人数。else?

"参加健美操比赛!"D=D+1EndifEndIfEndFor?"参加篮球比赛的人数",A?"参加足球比赛的人数",

B?"参加模特比赛的人数",C?"参加健美操比赛的人数",DReturnA=0B=0C=0D=0For

I=1TO50Acce"请输入你的性别"TO性别

Input"请输入你的身高"TO身高

If

性别="男"DoCaseif身高>=

180?

"参加篮球比赛!"A=A+1else?"参加足球比赛!"

B=B+1EndifElseif身高

>=

170?

"参加模特比赛!"C=C+1ClearFori=1

to

10Input

“输入一个整数

To

a【例8.24】输入任意10个整数

将所有正整数显示出来。在For循环语句中执行Loop语句,将会先修改循

环变量的值,然后转向循

环语句头部。If

a>0?a

ElseLoop

EndifEndFor功能:

执行该语句时,记录指针在

当前表的指定范围内自动从

上往下依次移到满足条件的记录上,

并对每一条记录执行循环体内的命令。说明:(1)

<范围>的默认值是All。(2)

当指针移到文件尾时,

自动退出循环。Scan[<范围>]

[For<条件表达式1>]

[While<条件表达式2>]

<命令行序列>EndScan扫描循环控制语句

即根据表中的当前记录指针决定循环

体内语句的执行次数

扫描当前表中满足表中的记录。TEof

()

F循环体3.扫描循环格式:clear

Rc=0Use人才档案

Exclusive

Scanallfor性别=“男

”rc=rc+1

EndScan?“男同学的人数为",

rc

Use【例8.25】用扫描循环控制语句

统计人才档案数据

表中男同学的人数。clearUse人才档案

ExclusiveScanallfor

year

(date

())-year

(出生日期)>=25display

编号,姓名EndScan

Use【例8.26】用扫描循环控制语句

显示人才档案数据

表中年龄大于等于25的记录。Use

运动员表Exclusive

Go

2ScanNext4ForLeft(名称,2)=“男"

If

Right(名称,2)=“球"ExitEndif

Endscan?名称记录号名称1

男子排球

2

女子排球

3

男子足球

4

女子足球

5

男乒乓球练习:

下列程序段执行后

输出结果是:男子足球如果在一个循环内包含另一个循环结构

则称为多重循环,

或循环嵌套

嵌套的层数可以根据需要而定

嵌套一层称为

二重循环

嵌套二层称为三重循环

。下面是几种常见的二重

嵌套形式:3.

DOWHILEL….[

…..ENDDO…..enddoFor

I=….…..For

J=….

[

….NextJ…..Next

I4.

多重循环DOWHILE

….….ENDDOFORI=

….…..…..

NEXT

IDOWHILE

…[

….2.[[[1.也不能从外循环转向内循环ForForFor……NextB

Next

A

NextCFor

AFor

BFor

C……

Next

CNextB

Next

A[[A

B

C对于循环的嵌套,要注意以下事项:(1)

内循环变量与外循环变量不能同名;(2)外循环必须完全包含内循环,

不能交叉;(3)不能从循环体外转向循环体内,错误的嵌套正确的嵌套不能交叉[[[[[clearFor

i=

1

To

3[

For

j=

5

To

7?

I

,

j

Nextj

Next

iReturn【例8.27】分析下面程序的运行结果:567567567111222333[对于两个具有调用关系的程序文件

常称调用程序为主程序,被调用程序为子程序

。子程序的建立和一般命令文件的建立方法相同

都是ModifyCommand

文件默认的扩展没有可选项,返回到与程序一样ModifyCommand〈过程文件名〉

。Do

子程序文件名Return

[ToMaster]调用方法是在主程序中用Do命令

调用处,有可选项,返回到调用的最高一建立子程序:文件格式:主程序调用:返回主程序:8.4过程和用户自定义函数8.4.

1

主程序和子程序1.子程序的调用和返回&&JA.RPG?"***"DoJBDoJCReturn&&MAIN.PRGClearDoJADoJBDoJCReturn&&JB.RPG?

"#####

"Return【例8.28】分析下面程序的运行结果:&&JC.RPG?"*******"ReturnToMasterIf

Upper

(ja)=Do

zcx1.prg“Y

”&&为“N

”时结束程序ElseExit*子程序zcx1:EndifEnddoReturnClearInput

"输入圆的半径

:"

to

bjS=3.14*bj**2?"

圆的面积为:

",sReturn*主程序:DoWhile.T.ClearWait“是否要计算圆的面积(Y/N)?

To

ja【例8.29】利用子程序计算圆的面积:主程序调用:

Do

<过程文件名〉With

<实际参数表>子程序接收:

Parameters

<形式参数表>

例如

:主程序:

Dozcx

With

“张三

”,89

性别子程序:

Parameters

a,b,c调用子程序时参数表中的参数要没传有

指的变量,个数、也必须设置相应的参数接受语句

。at要和主以程完序成的

项功能

,但是必须是子程序的第一条

参句数。一样,但是名字可以

不一样。2.带参数的子程序调用变量姓名必须是赋过值的

变量没有具体值各种各类型的常数、

有具体值的变量

【例8.30】利用子程序计算圆的面积:*主程序:Clearymj=0

&&初始化用于接收圆面积的变量“

“*子程序zcx2:Parameters

cj,sS=3.14*cj**2

ReturnInput

请输入圆的半径:To

bjDo

zcx2

With

bj,ymj&&带参数调用子程序@7,10

Say"

圆的面积为:

"+Str

(ymj,10,2)Return计算后的面积[Function

<函数名>][Parameters

<形式参数表>]命令序列

Return<表达式>?a1

(bb)Parameters

bb自定义函数与子程序的区别在于自定义函数必须返回一主程序调用格式:

自定义函数格式:例如

:主程序:自定义函数:函数名

(实际参数表)个函数值

而子程序则无此限制

如果是单独的程序,就自定义函数和主程序是

一个程序,

不能省略。3.

自定义函数从表达式返回函数值到主程序可以省略这一句,

如果Return

bb……*主程序:【例8.31】利用自定义函数计算圆的面义函数zcx3*主程序:clearInput“请输入圆的半径:“

To

bj@7,

10Say"

圆的面积为:

"+str

(zcx3

(bj),

10,2)Return*自定义函数Function

zcx3

Parameters

rS=3.

14*r**2

Returns如果主程序和自定义

函数放在一个文件中,

那么一定要加上这么

一句。带参数调用自定多个过程可以保存在一个过程文件中

。过程文件打开后

其中的过程能被任何其它程序调用

。称为内部过程调用

。要

调用内部过程

需在主程序中首先打开过程文件

然后再调

用过程文件中的过程。打开过程文件:调用过程:关闭过程文件:1.打开、调用、关闭过程文件Set

Procedure

To<过程文件名>8.4.2过程文件Do

<过程名>

[with参数表]Set

Procedure

ToProcedure<过程名1>

<命令序列>Return

[ToMaster]

Procedure<过程名2><命令序列>Return……1、Procedure表示一个过程的开始

并命名过程名

过程名必须以字母或下划线开始

。为1~8个字符;2、过程执行到Return处返回到调用程序或命令窗口。定义过程:说明:过程文件可以单

独建立成命令文

也可以放在

主程序的后面2.过程的建立ClearSetProcedure

To

pp1.prgInput"请从键盘输入一个数:

"TInput"请从键盘输入一个数:

"T【例8.32】有2个文件:

程序文件

过程文件。oo

aDo

P1

Do

P2SetProcedureTo?"a=",a,"b=",b?"a+b=",a+b,"a-b=",a-b

?"a*b=",a*b,"a/b=",a/bReturn*PP1.PRGProcedure

P1C=1D=2C=C+DD=D+C?"c=",C,"d=",DReturnProcedure

P2?"p2=",200ReturnPro

g打开pp1.prg过程文件pp1过程文件放了2个过

程P1和P2关闭PPo1.PRGo

b1.PRG过程文件长打开过程文件Cl

Se

N=DoCl@1@1@1@1@1t

n

Re*zcx1Procedureproc1

ClearInput

"请输入半径

:"

to

bjs=3.14**bj?“圆的面积为:

",sWaitReturnProcedure

proc2

ClearInput

"请输入半径

:"

to

bji=2*3.14*bj?"

圆的周长为:

",i

WaitReturnDo

casecasen=1doproc1&&面积

Casen=2doproc2&&周长

Casen=3ExitEndcase

EnddoSetProcedure

to

Return关闭过程文件VisualFoxPro既是一种数据库管理系统

是一种程序设计语言

。本章介绍了VisualFoxPro

陈序设计的基本内容

包括程序的概念、程序的

基本结构、多模块程序设计等等。本章小结作业实验六

程序设计作业要求上交实验六的Word文档和所作的程序文件。第8章结构化程序设计Visual

FoxPro

程序设计主讲教师:

高骏Emil

:704098395@本章要求:1.掌握VFP程序的建立、修改、运行。2.掌握程序的三种基本结构。3.了解过程和过程文件。本章要点:程序的三种控制结构。学时安排:6学时(理论)

+6学时(实践)课程要求作业

结束·

8.

1程序文件及其编辑环境·

8.2程序中几种常用命令·

8.3程序的基本控制结构·

8.4过程和用户自定义函数第8章

程序设计基础8.1

程序文件及其编辑环境在ViusalFoxPro中,程序是由一系列

ViusalFoxPro可以理解的命令、函数和操

作组成的,

这些命令和函数可以在Viusal

FoxPro中的命令窗口和以人工方式逐一执

行,

也可以把它们放在一个程序文件中,以文件的形式来执行。【8.1】假定学号的前四位为入学年份,

第5,6位为

专业代码.编写命令文件test.prg,分别统计所有学生

和2010年入学,专业代码为03的学生选修课程号为101课程的平均成绩.SET

TALK

OFFSETDEFAULT

TO

d

:\学生管理

OPENDATA

学生管理SELECTAVG(成绩)FROM

成绩WHERE

;课程号=“101

INTOARRAYm1SELECTAVG(成绩)FROM

成绩WHERE

;课程号=“101

ANDLEFT(学号,4)=“2010

”;

AND

SUBS(学号,5,2)=“03

INTOARRAYm2CLEAR?

”所有学生的平均成绩

:

font“宋体

”,20,m1(1)font“宋”?

”指定学生的平均成绩

:

font

“宋体

”,20,m2(1),font“宋”CLOSE

DATASE

SET

TALK

ON

RETURN创建、编辑以“程序文件名”为名的程序文件1.在编辑窗口输入一条条命令。2.^w或关闭窗口存盘、

^q或者<Esc>放弃存盘3.程序文件的扩展名为.prg,

可以省略。ModifyCommand<程序文件名>8.

1.

1

程序文件的建立和运行(2)

以菜单方式建立、修改程序文件(1)

以命令方式建立、修改程序文件1.

程序文件的建立已有的程序文件格式:

功能

:

说明

:新建打开文件.prg行它

下面是两种常用的方式。选中运行程序文件建立后,

可以用多种方式运行格式:

Do<文件名>

功能

:

运行程序文件2.程序文件的运行、调用(1)菜单方式(2)命令方式程序》

类型

说明

例类型说明

a数组型

aStudents

I

f

浮点型fInterest

c

字符型cNameIl逻辑型lFlagt日期时间型tLastModifiedu未知uReturnValuey

货币型

yCurrentValueb双精度型

bValue8.

1.2

Visual

FoxPro编程特点

d日期型dBirthDayo对象oEmployee1.变量不区分大小写建议的变量命名约定n

数值型

nCounterVisual

FoxPro系统对整行注释和行中部分注释有不同的

格式

。整行注释使用“*

”引导

行中部分注释使用“&&

引导。当把一个值保存到某一变量而该变量原先不存在时,Visual

FoxPro系统会隐含地声明它

并有初始值存在

。用

户在变量里放什么数据

变量就是什么类型。程序中每条命令都以回车键结尾

一行只能写一条命令。

若需分行书写

可以使用分号“;

”表示续行。2.变量不需预先声明4.添加注释3.命令分行8.2

程序中几种常用命令

1.Wait命令

暂停程序的运行,直到用户输入一个字符,也可用于

输出一条提示信息WAIT

[<信息文本>]

[TO<内存变量>]

[WINDOW[AT

<行>,<列>]][NOWAIT]

[CLEAR]

[NOCLEAR]

[TIMEOUT<数值表达式>WINDOW子句使屏幕出现一个WAIT提示窗口,

内容由<信息文本>确定,位置有AT子句指定.省略AT子句则出现在屏幕右上角不关闭提示窗口,直到下一

个WAIT命令自动关闭TIMEOUT子句设定等待时间(以秒为单位)保存键入的字符,省

略TO子句不保存省略则显示“按

任意键继续….不等待用户输入关闭提示窗口说明

:③若指定WINDOWS子句,则会出现一个WAIT提示窗口,用

以显示提示信息.提示窗口在主窗口的右上角,也可以用AT短语指定其在主窗口中的位置.④若同时选用NOWAIT短语和WINDOWS子句,系统将不等

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论