第九章程序设计基础.docx

上传人:b****7 文档编号:25462874 上传时间:2023-06-09 格式:DOCX 页数:29 大小:102.31KB
下载 相关 举报
第九章程序设计基础.docx_第1页
第1页 / 共29页
第九章程序设计基础.docx_第2页
第2页 / 共29页
第九章程序设计基础.docx_第3页
第3页 / 共29页
第九章程序设计基础.docx_第4页
第4页 / 共29页
第九章程序设计基础.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

第九章程序设计基础.docx

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

第九章程序设计基础.docx

第九章程序设计基础

第九章程序设计基础

教学内容:

这节课将介绍VFP程序设计的基础知识、方法、技巧以及VFP程序设计中常用的命令。

在这章里,我们将利用VFP提供的程序设计命令和前几章所学的VFP命令,按照解决某一实际问题的要求,将所学的命令按一定的逻辑顺序组合起来,并以文件的形式将程序存储在磁盘中。

当我们调用这些程序时,计算机就能按照我们提供的命令序列自动连续地执行每一条命令,高效率的完成预定任务。

9.1VisualFoxPro的工作方式

1)应用程序:

为完成某项任务所需执行的命令序列,这些命令按照一定的结构有机地组合在一起,并以文件的形式存储在磁盘上,又称为命令文件。

2)应用程序的组成:

前言:

注释语句

设置区:

设置程序的运行环境,多由SET命令实现

程序体:

所有命令序列,一般包括数据的输入输出、数据的处理以及结果输出等命令

整理部分:

如关闭各种文件

程序的退出:

设置有关命令关闭文件返回到命令窗口状态或操作系统状态

9.1.1命令方式

在“命令”窗口中,可以操作命令完成对数据库的操作、系统环境的设置和建立、运行命令文件。

9.1.2菜单方式

通过系统菜单提供的菜单选项对数据库进行操作,对系统环境进行设置以及建立、运行命令文件。

9.1.3程序文件方式

程序文件(简称程序)也叫命令文件。

在VisualFoxPro环境下,利用程序文件方式进行数据库管理,是通过程序文件编辑工具,将对数据库操作的命令和对系统环境进行设置的命令,集中在一个以(.PRG)为扩展名的程序文件中,然后再通过菜单方式或命令方式运行该程序文件。

9.2程序文件的建立与编辑

9.2.1以命令方式建立、编辑程序文件

ModifyCommand<程序文件名>

菜单:

文件/新建/程序/新建文件

说明:

1.用于命令文件的建立与编辑,文件的扩展名系统默认.PRG。

2.文件编辑时输完一行,回车。

“ESC”放弃。

“^W”存盘。

3.插入新命令行,^N或回车。

9.2.2以菜单方式建立、编辑程序文件

9.2.3利用设计工具建立程序代码

9.3程序文件的调用

9.3.1以命令方式调用程序文件

Do<程序文件名>

命令方式:

DO〈应用程序名〉WITH<参数表>

说明:

1)在程序运行过程中执行到下述命令时将会中断运行而退出,它们退出后返回的系统状态分别是:

CANCEL:

命令窗口状态。

QUIT:

操作系统状态。

RETURN:

调用点或命令窗口状态。

2)在程序运行过程中,若按下ESC键可使运行强行中断。

这时系统显示警告,并给用户三种选择:

取消:

中断程序的运行。

此为缺省选项。

继续执行:

忽略ESC的中断作用,继续程序的执行。

挂起:

暂时中断程序的运行,返回命令窗口。

当再次运行时可以从中断处继续运行。

9.3.2以菜单方式调用程序文件

程序文件创建、运行的操作步骤

常用辅助命令

1.注释命令

格式I:

NOTE<注释内容>

格式II:

*<注释内容>

格式III:

……&&<注释内容>

说明:

1)注释命令为非执行语句

2)注释内容最后一个字符是分号(;),系统默认下一行内容仍为注释内容。

示例1:

NOTE打开学生表

USE学生表.DBF

……

示例2:

SETCONSOLEOFF&&取消窗口的输出显示

……

2.环境设置命令

SETTALKON/off设置是否在主窗口的状态栏中显示所有命令的执行结果。

SETCONSOLEON/off设置是否把输出信息在窗口上显示。

SETPRINTERon/OFF设置是否在打印机上输出信息。

SETSAFETYON/off设置在改写文件时,VFP是否显示对话框以确认改写有效。

SETHEADINGON/off设置在执行LIST、DISPLAY等命令时是否显示字段名。

SETSTATUSON/off设置是否显示状态行。

SETDEFAULTTO〈盘符〉指定默认的驱动器。

SETDEVICETOSCREEN把输出信息发送到VFP的窗口

/PRINTER屏幕或打印机。

3.清除命令

格式I:

CLEAR

说明:

清除当前屏幕上的所有信息

格式II:

CLEARALL

说明:

关闭所有文件,清除所有内存变量

格式III:

CLEARTYPEAHEAD

说明:

清除键盘缓冲区

4.关闭文件命令

格式I:

CLOSEALL

说明:

关闭所有的数据库、表以及索引文件

格式II:

CLOSE<文件类型>

说明:

文件类型

DATABASE数据库文件、索引文件、格式文件

INDEX当前工作区的索引文件

FORMAT当前工作区的格式文件

PROCEDURE当前工作区的过程文件

ALTERNATE文本输出文件

5.运行中断和结束命令

格式I:

QUIT

说明:

退出VFP,返回到操作系统状态

格式II:

CANCEL

说明:

结束本次程序的运行,返回到命令窗口状态

格式III:

RETURN[TOMASTER]

说明:

返回到调用点处。

6.文本显示命令

格式:

TEXT

<文本内容>

ENDTEXT

说明:

将文本内容原样输出

7.定位输出命令

格式:

@<行,列>SAY<数据>

说明:

在指定的行、列处输出数据

9.4程序的基本结构

1.顺序结构

顺序结构是在程序执行时,根据程序中语句的书写顺序依次执行的命令序列。

VisualFoxPro系统中的大多数命令都可以作为顺序结构中的语句。

但是,绝大多数问题仅用顺序结构是无法解决的,还要用到分支结构、循环结构和过程结构。

1)程序设计的过程:

分析问题、确定任务、划分模块、建立模型、组织数据、描述操作步骤、编写程序、上机调试、分析运行结果、写出程序说明书。

2)流程图:

就是运用一些特定的图形符号和必要的文字来描述解题步骤的图示。

3)三种基本程序结构流程图:

4)顺序结构程序:

自始至终严格按照程序中语句的先后顺序逐条执行,是最基本、最普遍的结构形式。

5)例1:

给退休职工增加基本工资20元。

Clear

Usegz

Replall基本工资with基本工资+20foryear(DATE())-year(出生日期)>=60

List

示例2:

编程,根据输入的半径值,计算出相应的圆的周长。

SETTALKOFF

CLEAR

INPUT“请输入圆的半径:

”TOR

L=2*3.1416*R

INPUT“圆的周长是:

”+STR(L,6,3)

SETTALKON

2).选择分支

格式:

IF<条件表达式>

<语句行序列1>

ELSE

<语句行序列2>

ENDIF

说明:

(1)条件为真(T),执行语句序列1。

(2)条件为假(F),执行语句序列2。

例1:

上题,男同学加10分,女同学加20分。

Settalkoff

Usestud

Accept“输入加分同学姓名:

”toxm

Locafor姓名=xm

If性别=“女”

Repl数学with数学+20

else

Repl数学with数学+10

Endif

例2:

求解一元二次方程AX2+BX+C=0,系数A,B,C的值由用户通过键盘输入,当方程有实根时,屏幕显示出两根的值;当方程无实根时,屏幕显示出“方程无实根!

SETTALKOFF

CLEAR

INPUT“A=”TOA

INPUT“B=”TOB

INPUT“C=”TOC

D=B*B-4*A*C

IFD>=0

X1=(-B+SQRT(D))/(2*A)

X2=(-B-SQRT(D))/(2*A)

?

“方程的两根是:

”STR(X1,2)+SPACE(4)+STR(X2,2)

ELSE

?

”方程无实根!

ENDIF

SETTALKON

RETURN

例3:

在表文件“分数.DBF”中查找学号为99020203的学生成绩,若其成绩满60分则显示其学号、课程号和成绩;否则显示此人的学号、课程号并通知其补考。

*L6.PRG

SETTALKOFF

USE分数.DBF

CLEAR

LOCATEFOR学号=“99020203”

IF成绩>=60

?

“学号:

”+学号

?

“课程号:

”+课程号

?

“成绩:

”+STR(成绩,6,2)

ELSE

?

“学号为”+学号+“的学生应参加补考的课程号为:

”+课程号

ENDIF

USE

SETTALKON

3).判断语句嵌套

IF语句多重嵌套示意结构如下:

IF<条件表达式1>

<语句行序列1>

ELSE

IF<条件表达式2>

<语句行序列2>

ELSE

IF<条件表达式3>

<语句行序列3>

ELSE

………

ENDIF3

………

ENDIF2

………

ENDIF1

注意:

(1)IF、ELSE(可不选)、ENDIF一一对应、互相匹配

(2)允许简单判断和选择判断语句自我嵌套或相互嵌套,但层次必须清楚,不得交叉

(3)最好采用缩格(锯齿形)的书写方式

例1:

键盘输入x,当x>=0或x<=1时,y=1。

当x>1或x<0时,y=0。

Settalkoff

Input“输入X的值:

”tox

Ifx>=0

Ifx<=1

y=1

else

y=0

endif

else

y=0

endif

?

”y=”,y

例2:

存款利率:

年限NX<1年,利率LL=2%

年限NX>=1年或NX<3年,利率LL=3%

年限NX>=3年或NX<5年,利率LL=4%

年限NX>=5年,利率LL=5%

settalkoff

input“请输入存款年限:

”tonx

ifnx<1

ll=0.02

else

ifnx<3

ll=0.03

else

ifnx<5

ll=0.04

else

ll=0.05

endif

endif

endif

?

”存款利率是:

”,ll

例3:

根据键入X的值,计算下面分段函数的值,并显示结果。

程序如下:

SETTALKOFF

CLEAR

INPUT“X=”TOX

IFX>0

IFX>10

Y=X*X+1

ELSE

Y=3*X*X-2*X+1

ENDIF

ELSE

Y=X*X+4*X-1

ENDIF

?

”分段函数值为:

”+STR(Y,10,2)

SETTALKON

RETURN

3.循环结构

顺序、分支结构在程序执行时,每个语句只能执行一次,循环结构则能够使某些语句或程序段重复执行若干次。

如果某些语句或程序段需要在一个固定的位置上重复操作,使用循环语句是最好的选择。

4.过程结构

在许多应用程序中,有一些程序段需要反复执行多次,这些程序段不是集中在一个固定的位置上重复执行,而是分散在程序的许多位置上重复执行。

通常将这样的程序段与嵌入它的程序分开,形成独立的程序序列,待使用时再调入程序中,以实现不同位置上的重复操作。

这样做增强了程序的可读性及模块化。

一般情况下,把这种具有独立的功能,并且可以被其他程序调用的程序序列称为过程,将调用过程的程序称为主程序。

9.5常用的交互输入语句

1.键入表达式命令

格式:

INPUT[<提示信息>]TO<内存变量>

功能:

暂停程序运行,等待键入表达式并将其值赋给指定的内存变量,待按回车键后,继续运行程序。

说明:

1)<提示信息>为可选项,其格式、功能与要求同ACCEPT命令。

2)命令中的<内存变量>的类型决定于键入数据的类型,但不得为M型数据。

3)若键入的是表达式,本命令将先计算出表达式的值,然后把其结果赋给<内存变量>。

4)若键入字符型常量或逻辑型常量时应带有定界符。

5)在响应该命令时,若键入了无效表达式或只按下回车键,系统将会给出“句法错”的提示信息。

示例:

试运行下述交互输入命令。

INPUT“请输入学生姓名:

”TOXM

INPUT“请输入其班级:

”TOBJ

INPUT“该人性别为:

”TOXB

2.键入字符串命令

格式:

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

说明:

(1)[<字符串表达式>]为屏幕提示信息。

(2)键盘输入的字符串给内存变量赋值,回车结束。

(3)键盘输入的字符不用定界符。

示例:

编写可以打开任一例:

modicommchaxun.prg

usestud

accept“请输入查询同学的姓名:

”toxm

locafor姓名=xm

disp

use

dochaxun结果:

请输入查询同学的姓名:

李红

3.输入单字符命令

命令:

WAIT[“提示信息”][TO<内存变量>]

说明:

只能输入单字符给变量赋值,不须回车。

全部可选项缺省,击任意键继续。

例:

前面程序,继续查询。

usestud

accept“请输入查询同学的姓名:

”toxm

locafor姓名=xm

disp

wait“是否继续查询(Y/N)?

”toy1

ifuppe(y1)=”N”

quit

endif

9.6分支结构

9.6.1单向分支

单向分支语句,即根据条件表达式的值,决定某一操作是否执行。

If<条件表达式>

<命令行序列>

EndIf

说明:

(1)条件为真(T),执行语句序列。

(2)条件为假(F),执行ENDIF后面的语句。

(3)IF….ENDIF需成对出现。

例:

在“学生表”中查看“李尚清”的基本情况。

SETTALKOFF

CLEAR

USE学生表

LOCATEFOR姓名=”李尚清”

IFFOUND()

DISP

ENDIF

USE

SETTALKON

例:

输入一同学姓名,是女同学数学加10分。

Usestud

Accept“输入加分同学姓名:

”toxm

Locafor姓名=xm

If性别=“女”

Repl数学with数学+10

Endif

8.6.2双向分支

双向分支语句,即根据条件表达式的值,选择两个操作中的一个来执行。

If<条件表达式>

<命令行序列1>

Else

<命令行序列2>

EndIf

例:

上题,男同学加10分,女同学加20分。

Settalkoff

Usestud

Accept“输入加分同学姓名:

”toxm

Locafor姓名=xm

If性别=“女”

Repl数学with数学+20

else

Repl数学with数学+10

Endif

例:

求解一元二次方程AX2+BX+C=0,系数A,B,C的值由用户通过键盘输入,当方程有实根时,屏幕显示出两根的值;当方程无实根时,屏幕显示出“方程无实根!

SETTALKOFF

CLEAR

INPUT“A=”TOA

INPUT“B=”TOB

INPUT“C=”TOC

D=B*B-4*A*C

IFD>=0

X1=(-B+SQRT(D))/(2*A)

X2=(-B-SQRT(D))/(2*A)

?

“方程的两根是:

”STR(X1,2)+SPACE(4)+STR(X2,2)

ELSE

?

”方程无实根!

ENDIF

SETTALKON

RETURN

8.6.3多向分支

DoCase

Case<条件表达式1>

<命令行序列1>

……

Otherwise

<命令行序列n+1>]

EndCase

说明:

1.DOCASE与ENDCASE需成对出现。

2.满足CASE条件,执行下面语句后,跳出ENDCASE.

3.顺序判断,都不满足条件,执行OTHERWISE后的语句。

例1:

对利率重新编程。

settalkoff

input“请输入存款年限:

”tonx

docase

casenx<1

ll=0.02

casenx<3

ll=0.03

casenx<5

ll=0.04

otherwise

ll=0.05

endcase

?

”存款利率是:

”,ll

例2:

用DOCASE语句修改上面计算分段函数的例子。

SETTALKOFF

CLEAR

INPUT“X=”TOX

DOCASE

CASEX<=0

Y=X*X+4*X-1

CASEX>0.AND.X<=10

Y=3*X*X-2*X+1

CASEX>10

Y=X*X+1

ENDCASE

?

”分段函数值为:

”+STR(Y,10,2)

SETTALKON

RETURN

8.6.4使用分支语句应注意的几点

(1)If…EndIf和DoCase…EndCase必须配对使用,DoCase与第一个Case<条件表达式>之间不应有任何命令。

(2)<条件表达式>可以是各种表达式或函数的组合,其值必须是逻辑值。

(3)<命令行序列>可以由一个或多个命令组成,可以是条件控制语句组成的嵌套结构。

(4)DoCase…EndCase命令,每次最多只能执行一个<命令行序列>。

在多个Case的<条件表达式>值为真时,只执行第一个<条件表达式>值为真的<命令行序列>,然后执行EndCase的后面的第一条命令。

8.7循环结构

循环结构程序:

按照一定条件重复进行某种特定操作的程序称为循环结构程序。

8.7.1“当”型循环控制语句

“当”型循环控制语句,即根据条件表达式的值决定循环体内语句的执行次数。

DoWhile<条件表达式>

<命令行序列>

EndDo

说明:

结构组成:

循环起始语句、循环体、循环终端语句

注意:

在循环体内要设置修改循环条件的语句,避免死循环。

死循环示例:

X=1

S=0

DOWHILEX>=1

S=S+X

X=X+1

ENDDO

例1:

编程求和S=1+2+3+…+100。

SETTALKOFF

CLEAR

STORE0TON,S

DOWHILEN<=100

S=N+S

N=N+1

ENDDO

?

”累加和S=”,S

SETTALKON

RETURN

例2:

求12+22+32…..+502

settalkoff

s=0

k=0

dowhilek<=50

s=s+k*k

k=k+1

enddo

?

s

例3:

编程显示学生表中所有女生的记录。

SETTALKOFF

CLEAR

USE学生表

INDEXON性别TO学生表_性别

SEEK“女”

DOWHILE性别=”女”

DISP

SKIP

ENDDO

USE

SETTALKON

RETURN

例4:

令计算机从0开始计数,每计一个数,便判断该数是否为偶数,若是偶数则接着计下一个数;若是奇数则将其累加,若累加和大于250,则计数结束;若累加和不大于250则继续计数,编写程序。

SETTALKOFF

CLEAR

STORE0TOX,Y

DOWHILE.T.

X=X+1

DOCASE

CASEINT(X/2)=X/2

LOOP

CASEX+Y>250

EXIT

OTHERWISE

Y=X+Y?

”Y=”,Y

ENDCASESETTALKON

ENDDORETURN

例5:

编写程序能根据键盘输入的姓名,从学生表中查找该生的信息。

SETTALKOFF

CLEAR

ACCEPT“请输入姓名:

”TOXM

USE学生表

DOWHILE.NOT.EOF()

IF姓名=XM

DISP

EXIT

ELSE

SKIP

ENDIF

ENDDO

USE

SETTALKON

8.9内存变量作用域

作用域:

内存变量的作用范围。

1、全局变量

1)全局变量:

指在程序的任何嵌套中及在程序执行期间始终有效的变量。

2)格式:

PUBLIC<内存变量表>

例:

在过程调用中,运用全局变量传递数据。

主程序过程

*MAIN_3.PRG*SUB_3.PRG

SETTALKOFFPUBLICB,C

CLEARB=2

PUBLICAD=3

A=1?

“在过程中:

A,B,C,D=”,A,B,C,D

DOSUB_3RETURN

?

“返回主程序:

A,B,C,D=”,A,B,C,D

SETTALKON

2、局部变量

1)局部变量:

未经PUBLIC命令定义且只在建立它的过程及其下级过程中有效的内存变量。

2)局部变量的定义:

隐含定义方式:

过程中未经特殊说明的内存变量。

显示定义方式:

PRIVATE[ALL[LIKE/EXCEPT<通配符>]][<内存变量表>]

例:

在过程调用中局部变量的应用。

主程序

*MAIN_4.PRG

SETTALKOFF

A=1

B=2

?

“主程序中:

A=”,A,“B=”,B

DOSUB_4

?

“返主程序后:

A=”,A,“B=”,B,“C=”,C,“D=”,D

SETTALKON

过程

*SUB_4.PRG

PRIVATEB

PUBLICC

A=10

B=11

C=12

D=13

?

“在过程中:

A=”,A,“B=”,B,“C=”,C,“D=”,D

RETURN

2、局部变量

1)局部变量:

未经PUBLIC命令定义且只在建立它的过程及其下级过程中有效的内存变量。

2)局部变量的定义:

隐含定义方式:

过程中未经特殊说明的内存变量。

显示定义方式:

PRIVATE[ALL[LIKE/EXCEPT<通配符>]][<内存变量表>]

例:

在过程调用中局部变量的应用。

*主程序MAIN_4.PRG

SETTALKOFF

A=1

B=2

?

“主程序中:

A=”,A,“B=”,B

DOSUB_4

?

“返主程序后:

A=”,A,“B=”,B,“C=”,C,“D=”,D

SETTALKON

*过程SUB_4.PRG

PRIVATEB

PUBLICC

A=10

B=11

C=12

D=13

?

“在过程中:

A=”,A,“B=”,B,“C=”,C,“D=”,D

RETURN

过程的带参调用

1、带参过程调用命令

格式:

DO<过程名>WITH<参数表>

说明:

参数表中的参数也称实参,可以为常量、已赋值的变量或数值表达式。

2、接收参数命令

格式:

PARAMETERS<参数表>

说明:

参数表中的参数也称形参

形参与实参的数量应相等、类型要一致

例1:

利用带参

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

当前位置:首页 > 党团工作 > 入党转正申请

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

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