visual foxpro课堂9:结构化程序设计基础

程序的基本结构:顺序,分支,循环

CLEAR
input “A=” to a
input “B=” to b
t=a &&将变量a的值存于变量t中
a=b
b=t
?”A=”,a
?”B=”,b
return

VFP程序由命令语句,函数,过程等程序代码组成。程序文件扩展名为.PRG,程序文件的建立(项目管理器,文件菜单新建,modi command),运行(项目管理器中点运行,程序菜单点运行,do 程序名 with 参数)

*功能说明:求圆形的面积
*文件名:area.prg
CLEAR
input “请输入圆的半径,半径=” to R
S=PI()*R*R
?”半径为”+ALLTRIM(STR(R))+”的圆,面积=”,LTRIM(str(ROUND(S,2),8,2))
RETURN

交互式命令:input… to d,表达式值赋给内存变量, accept..to d,把输入的内容作为字符串赋给内存变量,wait … to ..window timeout 10

辅助命令:cancel终止程序运行,清除所有的内存变量,返回命令窗口,return 结束程序执行,返回调用他的上级程序,如无上级程序则返回命令窗口,quit结束程序执行退出vfp,   note/* 首行注释, &&行尾注释,clear清除屏幕内容。

use 学生信息, count to rs, count to rs1 for 性别=“女”

下面是统计学生男女人数百分比的程序:

SET TALK OFF
CLEAR
OPEN DATABASE 学生信息管理
USE 学生信息
COUNT TO rs
COUNT TO rs1 FOR 性别=”女”
COUNT TO rs2 FOR 性别=”男”
?”女生人数占总人数的”+STR(rs1/rs*100,5,2)+”%”
?”男生人数占总人数的”+STR(rs2/rs*100,5,2)+”%”
SET TALK ON
return

分支结构  ;if   .else…endif,可以用if.endif嵌套实现多分支。

*查找学生
SET TALK OFF
CLEAR
OPEN DATABASE 学生信息管理
USE 学生信息
accept “请输入查找学生的姓名:” to xm
LOCATE FOR 姓名=xm
IF !EOF()
?学号,出生日期,籍贯,入学成绩
ELSE
?”查无此人”
ENDIF
CLOSE DATABASES
SET TALK OFF
RETURN

 

或者使用

do case..  ,case…  ,case….otherwise…endcase…  注意if found()=if ! eof()

循环结构:条件循环do while…enddo,计数的循环for …to.. step   endfor/next,和表的循环scan … for/while…  endscan,最 后一个表的循环每执行一次循环指针自动移到下一条满足条件的记录。

条件循环

*从1加到n
CLEAR
input “n=” to n
STORE 0 TO i,s
DO WHILE i<n
i=i+1
s=s+i
ENDDO
?”s=”,s
RETURN
再比如逐条显示入学成绩大于600分的学生的姓名:

SET TALK OFF
CLEAR
OPEN DATABASE 学生信息管理
USE 学生信息
DO WHILE NOT EOF()
IF 入学成绩>600
?姓名
ENDIF
SKIP
ENDDO
CLOSE DATABASES
SET TALK ON
RETURN

计数的循环

*逆置字符串
CLEAR
accept “请输入字符串:” to c
?
FOR i=LEN(c) TO 1 STEP -1
??SUBSTR(c,i,1)
ENDFOR
RETURN

表的循环:表的循环每执行一次循环指针自动移到下一条满足条件的记录

*查找重庆的学生
SET TALK OFF
CLEAR
OPEN DATABASE 学生信息管理
USE 学生信息
SCAN FOR 籍贯=”重庆”
?姓名,入学成绩
ENDSCAN
CLOSE DATABASES
SET TALK ON
RETURN
*输出所有需要补考的学生的学号及科目
SET TALK OFF
CLEAR
OPEN DATABASE 学生信息管理
SELECT 1
USE 课程信息
SET ORDER TO kch
SELECT 2
USE 成绩
SET RELATION TO 课程号 INTO A
SCAN FOR 成绩<60
?学号,A.课程号
ENDSCAN
CLOSE ALL
SET TALK ON
RETURN

循环辅助语句:各种循环体中插入loop,exit改变循环次数但不能单独使用;  loop能使执行转向循环语句头部重新对”条件“进行判断,后者则用来立即退出循环转去执行enddo,endfor,endscan后的语句。

*逐条输出学生信息表中男生的信息
SET TALK OFF
CLEAR
OPEN DATABASE 学生信息管理
USE 学生信息
SCAN
IF 性别#”男”
LOOP
ENDIF
DISPLAY
WAIT
ENDSCAN
CLOSE DATABASES
SET TALK ON
RETURN

模块化程序设计:把一段经常使用的程序代码独立出来,创建子程序,过程或自定义函数,在需要使用此代码时,不必重复编写而是直接调用。

子程序的建立,调用(do…prg)与返回(return ..to ..prg/master),

子程序调用中的参数传递

调用子程序传递参数命令:do area-cirecle with 参数表,  接收调用程序参数命令:parameters,具有接收参数值与回送参数值的作用,主程序中的参数是单个变量时为地址引用方式传递,当主程序中的参数是表达式或常量,按值传递。

过程与子程序类似,只是过程直接放在主程序中。procedure area-circle, parameters …,endproc

自定义函数

function areacircle …, parameters x…., return y

过程文件(直接放在主程序中)

程序设计中,过程和函数还可以保存在单独的过程文件中,可以在主程序中set procedure to 打开从而调用其中的过程或自定义函数。使用完后set procedure to或clsoe procedure

CLEAR
SET PROCEDURE TO sub   &&打开过程文件
DO WHILE .t.
CLEAR
?”1———求1~N的奇数和”
?”2———求N的阶剩”
?”3———求1~N的平方和”
?”4———求1~N的倒数和”
?”0———退出”
input “请造(0–4):” to x
DO CASE
CASE x=1
DO sub1
CASE x=2
DO sub2
CASE x=3
input “请输入N值:” to n
?”1~N的平方和为:”,pfh(n)
CASE x=4
input “请输入N值:” to n
?”1~N的倒数和为:”,dsh(n)
CASE x=0
EXIT
OTHERWISE
?”造反错误请重选”
WAIT  &&可以不要,使用下面的wait起作用
loop&&可以不要,到下面的wait后遇到enddo后反返回到do while
ENDCASE
WAIT &&这样可以返回到do while 以方便计算几次。
ENDDO
CLOSE PROCEDURES
RETURN

变量的作用域

1.变量类型:全局变量,整个程序执行过程中在任何模块内都有效。命令窗口中定义的变量即为全局变量。全局变量可在主程序或子程序中用public命令声明

public a, b(10),可以是简单变量,也可以是数组变量。私有变量是只能在定义他的程序及被他调用 的下属各级子程序中使用的内存变量。用赋值语句或数组说明语句定义的内存变量默认是私有变量。只要退出定义他的程序其变量就被清除。private..。本地变量只能在定义他的模块中使用,不能在上级或下级模块中使用,只要退出定义他的程序其变量就被清除。

2.变量屏蔽:在子程序中,将与主程序或上级程序中变量同名的变量屏蔽起来,无论在子程序中怎么样修改与主程序或上级程序同名的变量,只要返回主程序或上级程序,原来同名变量中的值不变。子程序中使用priv ,local

未经允许不得转载:兴化英语钢琴女孩,兴化英法葡语,兴化一级建造师造价师 » visual foxpro课堂9:结构化程序设计基础

赞 (0)
分享到:更多 ()

评论 0

评论前必须登录!

登陆 注册
切换注册

登录

忘记密码 ?

切换登录

注册