计算机二级VF第六章 程序设计基础.docx

上传人:b****3 文档编号:3887002 上传时间:2022-11-26 格式:DOCX 页数:18 大小:21.47KB
下载 相关 举报
计算机二级VF第六章 程序设计基础.docx_第1页
第1页 / 共18页
计算机二级VF第六章 程序设计基础.docx_第2页
第2页 / 共18页
计算机二级VF第六章 程序设计基础.docx_第3页
第3页 / 共18页
计算机二级VF第六章 程序设计基础.docx_第4页
第4页 / 共18页
计算机二级VF第六章 程序设计基础.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

计算机二级VF第六章 程序设计基础.docx

《计算机二级VF第六章 程序设计基础.docx》由会员分享,可在线阅读,更多相关《计算机二级VF第六章 程序设计基础.docx(18页珍藏版)》请在冰豆网上搜索。

计算机二级VF第六章 程序设计基础.docx

计算机二级VF第六章程序设计基础

第六章程序设计基础

第一节程序和程序文件

一、程序的概念

VFP的程序指将若干条VFP的命令语句,保存在一个扩展名为PRG的文本文件中,当用户在命令窗口或其它方式下执行这一文件时,就相当于一次执行的多条VFP命令语句。

这些命令语句在程序中称为程序代码,一行程序代码又称为语句行。

(1)命令注释

在程序中以“*”或“NOTE”开头的语句行,将不会被系统执行,被当作文字说明来对待。

(2)SETTALKON|OFF命令

打开/关闭命令执行时的“回显”状态,默认为ON

(3)SETSAFEON|OFF命令

打开/关闭系统的安全提示,默认为ON

(4)RETURN

结束当前程序的执行,返回程序调用处。

当程序文件中再无语句行时,系统会默认有一个RETURN

二、程序文件的建立和执行

1.建立和修改

(1)菜单法/工具栏法

建立:

新建程序新建文件

修改:

打开程序选取要修改的程序文件确定

(2)命令

格式1:

MODIFYCOMMAND<程序文件名>

格式2:

MODIFYFILE<程序文件名.PRG>

2.执行程序文件

格式:

DO<程序文件名>

例:

编写程序SX1.PRG,完成如下操作

在屏幕中显示[今天是:

XXXX年XX月XX日,星期X]

1.在命令窗口输入创建程序文件SX1.PRG的命令

MODICOMMSX1

2.在程序编辑界面输入如下代码:

SETTALKOFF

CLEAR

*以上为程序运行的环境设置

RQ=DTOC(DATE(),1)

YY=LEFT(RQ,4)

MM=SUBSTR(RQ,5,2)

DD=RIGHT(RQ,2)

XQ="日一二三四五六"

XQ=SUBS(XQ,DOW(DATE())*2-1,2)

*以上是得到年月日星期的字符数据

?

"今天是:

"+YY+"年"+MM+"月"+DD+"日,星期"+XQ

*以上为程序主体部分

SETTALKON

RETURN

3.保存文件并关闭程序编辑界面(Ctrl+W)

4.在命令窗口输入运行程序的命令:

DOSX1

例:

编写程序SX2.PRG完成如下操作:

打开表DJKS,显示所有性别为男且成绩合格的记录,将结果保存在表文件NAN.DBF中,关闭所有表文件

*SX2.PRG

SETTALKOFF

CLOSEDATAALL&&程序中有表文件打开

SETSAFEOFF

CLEAR

*以上是环境设置

USEDJKS

DISPFOR性别="男"ANDMIN(笔试,上机)>=60

COPYTONANFOR性别="男"ANDMIN(笔试,上机)>=60

*以上是程序主体

SETTALKON

CLOSDATAALL

SETSAFEON

RETURN

例:

上机模拟题第五十套第三题

*PROGZH.PRG

SETTALKOFF

CLOSEDATAALL

SELECOUNT(DISTDHDW)FROMGNHTINTOARRAYDH

SELECOUNT(DISTGHDW)FROMGNHTINTOARRAYGH

SELESUM(JHSL)FROMGNHTINTOARRAYJH

UPDAJIEGUOSETNUM=DHWHERENAME="订货单位数"

UPDAJIEGUOSETNUM=GHWHERENAME="供货单位数"

UPDAJIEGUOSETNUM=JHWHERENAME="订货总数"

CLOSDATAALL

SETTALKON

RETURN

例:

上机模拟题第九套第三题

要点:

SETTALKOFF

SETSAFEOFF

CLOSEDATAALL

UPDATESCORE1SET总成绩=考试成绩+IIF(三好生,20,IIF(优秀干部,10,IIF(少数民族,5,0)))

SELE学号,总成绩FROMSCORE1ORDERBY2,1INTOTABLEZCJ

CLOSEDATAALL

SETTALKON

SETSAFEON

RETURN

例:

上机模拟题第一套第三题

要点:

SETTALKOFF

SETSAFEOFF

UPDASCORESET学分=IIF(物理>=60,2,0)+IIF(高数>=60,3,0)+IIF(英语>=60,4,0)

SELE学号,学分FROMSCOREORDERBY2,1DESCINTOTABLEXF

CLOSEDATAALL

SETSAFEON

SETTALKON

RETURN

三、简单的输入命令

1.INPUT命令

格式:

INPUT[字符表达式]TO<内存变量>

功能:

当系统执行到本命令时,会等待用户从键盘输入数据,用户可以输入任意合法的表达式。

当用户以回车结束输入时,系统将表达式的值存入指定的内存变量。

2.ACCEPT命令

格式:

ACCEPT[字符表达式]TO<内存变量>

功能:

与INPUT基本相同,但会将用户输入的一切内容都当作字符型常量保存在指定的内存变量中。

3.WAIT命令

格式:

WAIT[字符表达式][TO<内存变量>][WINDOW[AT<行>,<列>]][TIMEOUT]

功能:

与ACCEPT命令相似,保存字符型数据的输入,但只能接受一位字符的输入。

说明:

(1)如果<字符表达式>为空串,则不显示任何提示。

如果此项省略则显示系统的默认提示“按任意键继续…”

(2)<内存变量>如果省略,则本命令相当于暂停命令

(3)WINDOW选项如果存在,则提示信息会显示在指定窗口

(4)TIMEOUT可以指定系统的等待时间

例:

编写程序SX3.PRG,要求由用户输入圆半径,计算机返回该圆的面积

*SX3.PRG

SETTALKOFF

CLEAR

INPUT[请输入圆半径:

]TOR

?

PI()*R^2

SETTALKON

RETURN

例:

编写程序SX4.PRG,由用户输入表名称,计算机查询该表的全部信息

*SX4.PRG

SETTALKOFF

CLEAR

ACCEPT[请输入要查询的表名称:

]TOBM

SELE*FROM&BM

SETTLAKON

CLOSDATAALL

RETURN

例:

编写程序SX5.PRG,由用户输入考生姓名,计算机在DJKS.DBF表中查询考生的信息进行显示

*SX5.PRG

SETTALKOFF

CLEAR

ACCEPT'请输入考生的姓名:

'TOXM

SELE*FROMDJKSWHERE姓名=XM

CLOSDATAALL

SETTALKON

RETURN

例:

编写程序SX6.PRG,由用户输入结论信息,计算机在DJKS.DBF表中查询符合的信息进行显示,并将结果保存在以结论命名的表中(如:

优秀.DBF)

*SX6.PRG

SETTALKOFF

CLEAR

ACCEPT'请输入结论:

'TOJL

SELE*FROMDJKSWHERE结论=JL

SELE*FROMDJKSWHERE结论=JLINTOTABLE&JL

CLOSDATAALL

SETTALKON

RETURN

第二节程序的基本结构

在标准化程序设计中,程序一般分为三种基本结构:

顺序结构、选择结构和循环结构。

一、顺序结构的程序设计

顺序结构是最简单的程序结构,它按命令在程序文件中的先后次序依次执行。

二、分支选择结构程序设计

1.IF…ELSE…ENDIF分支

格式:

IF<条件>

<语句序列1>

[ELSE

<语句序列2>]

ENDIF

功能:

当条件成立时,计算机将执行<语句序列1>,当条件不成立,将判断是否有ELSE选项存在,如存在,则执行<语句序列2>,反之,什么都不执行。

例:

编写程序FZ1.PRG,由用户输入考生姓名,计算机返回该考生的相关信息

*FZ1.PRG

SETTALKOFF

CLOSDATAALL

CLEAR

USEDJKS

ACCEPT"请输入要查询的考生姓名:

"TOXM

LOCAFOR姓名=XM

IFFOUND()

DISPFOR姓名=XM

ELSE

?

"查无此人!

"

ENDIF

USE

SETTALKON

RETURN

2.DOCASE…ENDCASE分支

格式:

DOCASE

CASE<条件1>

<语句序列1>

CASE<条件2>

<语句序列2>

CASE<条件n>

<语句序列n>

[OTHERWISE

<语句序列>]

ENDCASE

功能:

当系统执行到DOCASE语句时,会顺序对各个CASE后的条件做出判断,并执行第一个满足条件的CASE后的语句序列。

如果所有的CASE后条件均不满足,则判断是否有OTHERWISE选项存在,如存在,则执行OTHERWISE后的语句序列,反之,什么都不执行。

例:

编写程序FZ2.PRG,根据用户输入的存款年限返回存款的利率.1年以内为0.03,3年以内0.05,5年以内0.07,5年以上0.09

*FZ2.PRG

SETTALKOFF

CLEAR

INPUT"请输入存款年限:

"TONX

DOCASE

CASENX<1ORINT(NX)<>NX

?

"输入有误,只能输入不小于1的整数!

"

CASENX=1

?

"0.03"

CASENX<=3

?

"0.05"

CASENX<=5

?

"0.07"

OTHER

?

"0.09"

ENDCASE

SETTALKON

RETURN

例:

编写程序FZ3.PRG,根据用户输入的身高(CM),体重(KG)来判断体形

*FZ3.PRG

ACCEPT"请输入姓名:

"TOXM

ACCEPT"请输入性别:

"TOXB

INPUT"请输入身高(CM):

"TOSG

INPUT"请输入体重(KG):

"TOTZ

CH=IIF(XB="男","先生","女士")

DOCASE

CASESG-115>TZ

TX="有些偏瘦!

"

ZG="加强营养!

"

CASESG-105

TX="有些偏胖!

"

ZG="加强锻炼!

"

OTHER

TX="完全正常!

"

ZG="继续保持!

"

ENDCASE

?

XM+CH+"您的体形"+TX+"请"+ZG

SETTALKON

RETURN

三、循环结构程序设计

1.DOWHILE…ENDDO循环

格式:

DOWHILE<条件>

<语句序列>

[LOOP]

[EXIT]

[RETURN]

ENDDO

功能:

当条件成立时,系统会执行DOWHILE与ENDDO之间的循环体;当遇到ENDDO语句,系统会回到DOWHILE处对条件再次进行判断,直到条件不成立,系统才会执行ENDDO后的语句。

说明:

LOOP:

回到本层循环开始处,重新判断条件

EXIT:

跳出本层循环

例:

编写程序XH1.PRG,计算从1累加至100的结果

*XH1.PRG

SETTALKOFF

CLEAR

S=1

N=100

DOWHILEN<=100

S=S+N

N=N+1

ENDDO

?

S

SETTALKON

RETURN

例:

编写程序XH2.PRG,逐条显示DJKS表中的所有记录

*XH2.PRG

CLOSDATAALL

USEDJKS

DOWHILE!

EOF()

CLEAR

DISP

WAITTIME3

SKIP

ENDDO

CLOSDATAALL

例:

编写程序XH3.PRG,逐条显示DJKS表中所有成绩合格的考生信息

*XH3.PRG

CLOSDATAALL

USEDJKS

LOCAFORMIN(笔试,上机)>=60

DOWHILFOUND()

CLEAR

DISP

WAITTIME3

CONTINUE

ENDDO

CLOSDATAALL

例:

上机模拟题第五十六套第三题

要点:

*PROG1.PRG

SETTALKOFF

SETSAFEOFF

CLOSEDATAALL

USETABLE3

ZAP

USECHENGJI

INDEXON学号TAGSY

SELE0

USEXUESHENG

SETRELATIONTO学号INTOCHENGJI

GOTOP

DOWHILE!

EOF()

IFA.数学<60

INSERTINTOTABLE3VALUES(B.学号,B.姓名,"数学",A.数学)

ENDIF

IFA.英语<60

INSERTINTOTABLE3VALUES(B.学号,B.姓名,"英语",A.英语)

ENDIF

IFA.信息技术<60

INSERTINTOTABLE3VALUES(B.学号,B.姓名,"信息技术",A.信息技术)

ENDIF

SKIP

ENDDO

SELE*FROMTABLE3ORDERBY分数,学号DESCINTOTABLELSH

SELETABLE3

ZAP

APPEFROMLSH

CLOSEDATAALL

SETTALKON

SETSAFEON

RETURN

*注意:

表文件TABLE3.DBF要事先建立

2.FOR…ENDFOR循环

格式:

FOR<循环变量>=<初值>TO<终值>[STEP<步长>]

<循环体>

ENDFOR|NEXT

功能:

用于指定次数的循环。

执行该语句时,首先将初值赋给循环变量,然后判断循环条件是否成立(若步长为正值,循环条件为<循环变量><=<终值>;若步长为负值,循环条件为<循环变量>>=<终值>)。

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

说明:

<步长>的默认值为1。

例:

编写程序XH4.PRG,显示100到999之间的"水仙花数"

水仙花数是指各位数的立方和等于这个数本身

*XH4.PRG

SETTALKOFF

CLEAR

FORN=100TO999

A=INT(N/100)

B=INT(N/10)%10

C=N%10

*A,B,C分别为N的百位数字,十位数字和个位数字

IFA^3+B^3+C^3=N

?

?

N

ENDIF

ENDFOR

3.SCAN…ENDSCAN循环

格式:

SCAN[范围][条件]

<循环体>

ENDSCAN

功能:

用于处理表中的记录。

执行该语句时,记录指针自动、依次地在当前表的指定范围内满足条件的记录上移动,对每一条记录执行循环体内的命令。

例:

编写程序XH5.PRG,逐条显示DJKS中所有性别为男且成绩合格的考生信息

*XH5.PRG

SETTALKOFF

CLEAR

CLOSDATAALL

USEDJKS

SCANFOR性别="男"ANDMIN(笔试,上机)>=60

CLEAR

DISP

WAITTIME3

ENDSCAN

CLOSEDATAALL

SETTALKON

RETURN

例:

上机模拟题第三套第三题

要点:

SETTALKOFF

SETSAFEOFF

CLOSEDATAALL

USESCORE_FS

SCAN

XK=0

IF物理#-1

REPL平均分WITH平均分+物理

XK=XK+1

ENDIF

IF高数#-1

REPL平均分WITH平均分+高数

XK=XK+1

ENDIF

IF英语#-1

REPL平均分WITH平均分+英语

XK=XK+1

ENDIF

REPL平均分WITH平均分/XK

ENDSCAN

SELE学号,平均分FROMSCORE_FSORDERBY平均分DESC,学号INTOTABLEPJF

CLOSEDATAALL

SETTALKON

SETSAFEON

RETURN

第三节多模块程序

一、过程的定义和调用

1.定义过程:

格式:

PROCEDURE|FUNCTION<过程名>

<语句序列>

[RETURN[表达式]]

ENDPROC|ENDFUNC

2.调用模块:

1)打开过程文件

格式:

SETPROCEDURETO[<过程文件名列表>[ADDITIVE]]

2)使用过程

格式1:

DO<程序文件名>|<过程名>

2:

<程序文件名>|<过程名>(…)

例:

编写程序LX1.PRG

*LX1.PRG

SETTALKOFF

CLOSDATAALL

DOWHIL.T.

CLEAR

INPUT[请选择:

1.姓名查询2.结论查询3.考场查询4.退出]TOXZ

DOCASE

CASEXZ=1

DOSUB1

CASEXZ=2

DOSUB2

CASEXZ=3

DOSUB3

OTHER

CLEAR

WAIT"谢谢使用,再见!

"TIME3

CLEAR

SETTALKON

RETURN

ENDCASE

ENDDO

*以上为主模块,以下为各子模块过程

PROCSUB1

ACCEPT[请输入姓名:

]TOXM

SELE*FROMDJKSWHERE姓名=XM

ENDPROC

PROCSUB2

ACCEPT[请输入结论:

]TOJL

SELE*FROMDJKSWHERE结论=JL

ENDPROC

PROCSUB3

ACCEPT[请输入考场:

]TOKC

SELE*FROMDJKSWHERE考场=KC

ENDPROC

二、参数传递

1.接受参数的命令

格式:

PARAMETERS形参变量名列表(私有)

LPARAMETERS形参变量名列表(局部)

2.传递参数的命令

格式1:

DO<程序文件名>|<过程名>WITH实参变量名列表

格式2:

<程序文件名>|<过程名>(实参变量名列表)

注意:

1.实参可以是常量、变量,也可以是一般形式的表达式。

调用模块程序时,系统会自动把实参传递给对应的形参(因此,形参个数必需不少于实参,多出的形参取初值.F.)

2.如果实参是变量,则本次传递为按引用传递,此时,实参与形参其实是同一个变量,如果形参的值发生变化,则实参也同时改变

3.如果实参是表达式,则为按值传递。

例:

编写程序LX2.PRG,通过参数传递计算最大公约数

*LX2.PRG

SETTALKOFF

CLEAR

INPUT"请输入第1个自然数:

"TON1

INPUT"请输入第2个自然数:

"TON2

DOSUBWITHMAX(N1,N2),MIN(N1,N2)

SETTALKON

RETURN

PROCSUB

PARAA,B

FORN=BTO1STEP–1

IFA%N=0ANDB%N=0

?

"最大公约数为:

"+ALLT(STR(N))

EXIT

ENDIF

ENDFOR

ENDPROC

例:

编写自定义函数"CDATE(D)"

*CDATE.PRG

PARARQ

IFVARTYPE(RQ)<>"D"&&D必须是大写

RQ=DATE()

ENDIF

XRQ=DTOC(RQ,1)

YY=LEFT(XRQ,4)

MM=SUBS(XRQ,5,2)

DD=RIGHT(XRQ,2)

XQ="日一二三四五六"

XQ=SUBS(XQ,DOW(RQ)*2-1,2)

FHZ=YY+"年"+MM+"月"+DD+"日,星期"+XQ

RETURNFHZ

注:

保存完毕后,在命令窗口输入

?

CDATE(),CDATE({^2008-8-8})

三、变量的作用域

1.公共变量(在任何模块中都可以使用的变量,要先建立后使用)

格式:

PUBLIC<内存变量名列表>

2.私有变量(在程序中直接使用,不用事先定义,可用于本模块以及其下属的各层模块,建立该变量的模块执行结束后,变量会自动清除)

3.局部变量(只能在建立它的模块中使用,要先建立后使用)

格式:

LOCAL<内存变量名列表>

4.屏蔽上层模块中可能出现的变量

格式:

PRIVATE<内存变量名列表>

PRIVATE[LIKE<通配符>]|[EXCEPT<通配符>]

 

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

当前位置:首页 > PPT模板 > 节日庆典

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

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