结构化程序
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
将sb.dbf复制到D盘根目录下的xxx文件夹(xxx可用任意字母代替),执行命令:SET DEFAULT TO D:\XXX。
一、VFP程序设计中的输入、输出语句
1.字符串输入语句
命令格式:ACCEPT [提示信息] TO <内存变量>
示例1:编写一个程序cx1.prg,该程序打开sb.dbf,按输入的编号查询信息。
* cx1.prg
USE sb
ACCEPT "请输入要查询的设备编号:" TO bh
LOCATE FOR 编号=bh
DISPLAY
USE
RETURN
示例2:编写一个程序cx2.prg,该程序打开sb.dbf,按输入的价格查询信息。
* cx2.prg
USE sb
ACCEPT "请输入要查询的设备价格:" TO jg
jg = VAL(jg) && 将变量jg转换为数值型
LOCATE FOR 价格=jg
DISPLAY
USE
RETURN
2.表达式输入语句
命令格式:INPUT [提示信息] TO <内存变量>
示例3:编写一个程序circle1.prg,求解任意半径的圆的面积。
* circle1.prg
CLEAR
INPUT "请输入圆的半径:" TO r
s=PI()*r*r
?"圆的面积=",s
思考:将示例1和示例2中的ACCEPT换为INPUT,程序要如何修改?
3.定位输入输出命令
命令格式:
@<行,列> [SAY <表达式1>] [GET <变量名>] [DEFAULT <表达式2>]
示例4:试编写一程序,能根据记录号来修改某个设备的价格和部门。
* e4.prg
CLEAR
USE sb
jlh=1
@2,10 SAY "请输入记录号: "GET jlh
READ
GO jlh
@4,10 SAY "请修改第" +STR(jlh,1)+ "个设备的数据: "
@5,10 SAY "价格" GET 价格
@6,10 SAY "部门" GET 部门
READ
USE
示例5:将示例3改用定位输入输出命令实现
(程序略)
4.WAIT命令
命令格式:
WAIT [<信息文本>] [TO <内存变量>][WINDOW [AT <行>,<列>]]
[NOWAIT][CLEAR | NOCLEAR][TIMEOUT <数值表达式>]
示例6:试编写一个程序,按”Y”键后能退出系统。
* e6.prg
WAIT "是否退出?(Y/N)" TO i WINDOW AT 10,10
IF UPPER(i)="Y"
QUIT
ENDIF
二、程序的控制结构
1.顺序结构
(示例略)
2.分支结构
⑴ 简单的条件语句
示例7:将SB.DBF中第一个非主要设备的价格减少10%
*e7.prg
USE sb
LOCATE FOR NOT 主要设备
IF FOUND()
DISPLAY 名称,价格
REPLACE 价格 WITH 价格*(1-0.1)
DISPLAY 名称,价格
ENDIF
USE
RETURN
⑵ 带ELSE的条件语句
示例8:试编写一程序,能打开任意一个表来浏览。
* e8.prg
@5,10 SAY "请输入表名:"GET bm DEFAULT SPACE(10)
READ
bm=ALLTRIM(bm)
IF FILE("&bm..dbf")
USE &bm
BROWSE
ELSE
WAIT "该文件不存在!"WINDOW
ENDIF
⑶ 多分支语句
示例9:显示当前季节程序
* e9.prg
yue=MONTH(DATE())
DO CASE
CASE INLIST(yue,3,4,5)
jj="春"
CASE INLIST(yue,6,7,8)
jj="夏"
CASE INLIST(yue,9,10,11)
jj="秋"
CASE INLIST(yue,12,1,2)
jj="冬"
ENDCASE
WAIT jj WINDOW
3.循环结构
⑴ 条件循环(DO WHILE)
示例10:试编写一程序,显示SB.DBF中所有单价超过10000元的设备名称。
* e10.prg
USE sb
DO WHILE NOT EOF( )
IF 价格>10000
? 名称
ENDIF
SKIP
ENDDO
USE
示例11:按9万元以上,1~9万元,1万元以下三级价格分档统计SB.DBF中设备的个数。
* e11.prg
STORE 0 TO K1,K2,K3
USE sb
DO WHILE NOT EOF( )
DO CASE
CASE 价格>90000
K1=K1+1
CASE 价格<10000
K1=K1+1
OTHERWISE
K2=K2+1
ENDCASE
SKIP
ENDDO
? "9万元以上设备个数:"+STR(K1)
? "1~9万元设备个数:"+STR(K2)
? "1万元以下设备个数:"+STR(K3)
USE
⑵ 步长循环(FOR)
示例12:编写计算s=1+2+3+… …+100的程序。
* e12.prg
s=0
FOR i=1 TO 100
s=s+i
NEXT
?”s=",s
思考:试将示例12用DO WHILE实现。
⑶ 扫描循环(SCAN)
示例13:用SCAN扫描循环语句显示价格在10000元以上的设备的名称及价格。
* e13.prg
USE sb
SCAN FOR 价格>10000
?名称
ENDSCAN
USE
⑷ 循环辅助语句(LOOP和EXIT)
示例14:编程计算s=1+2+3+ … +100,并求1~100之间奇数之和。
* e14.prg
STORE 0 TO i,s,t
DO WHILE i<100
i=i+1
s=s+i
IF INT(i/2)=i/2
LOOP
ENDIF
t=t+i
ENDDO
? "1+2+3+ … +100=",s
? "1~100的奇数和:",t
⑸ 多重循环
示例15:在SB.DBF中找出所有价格超过P的设备编号、名称与价格,并要求在各输出行下显示一行虚线。
* e15.prg
CLEAR
USE sb
@5,10 SAY "请输入价格: "GET jg DEFAULT 0
READ
SCAN
IF 价格>jg
? 编号+SPACE(3)+名称+SPACE(3)+STR(价格,9,2)
?
FOR i=1 TO 30
?? "-"
ENDFOR
ENDIF
ENDSCAN
USE
三、模块化程序设计
1.子程序
示例16:编写3个子程序,用于计算圆的面积、周长及球的体积,在主程序中带参数调用。
主程序:yuan1.prg
CLEAR
ymj = 0
zc = 0
tj = 0
@3,3 SAY "请输入半径:" GET bj DEFAULT 0
READ
DO js1 WITH bj,ymj
DO js2 WITH bj,zc
DO js3 WITH bj,tj
?"圆的面积=",ymj
?"圆的周长=",zc
?"球的体积=",tj
子程序1:js1.prg
PARAMETERS r,s
s=PI()*r*r
RETURN
子程序2:js2.prg
PARAMETERS r,c
c=2*PI()*r
RETURN
子程序3:js3.prg
PARAMETERS r,v
v=4/3*PI()*r*r*r
RETURN
2.过程
示例17:将上例改为过程调用。
解1:过程作为独立的一个文件。
主程序:yuan2.prg
CLEAR
ymj = 0
zc = 0
tj = 0
@3,3 SAY "请输入半径:" GET bj DEFAULT 0
READ
DO js1 WITH bj,ymj in js
DO js2 WITH bj,zc in js
DO js3 WITH bj,tj in js
?"圆的面积=",ymj
?"圆的周长=",zc
?"球的体积=",tj
过程文件:js.prg
PROCEDURE js1
PARAMETERS r,s
s=PI()*r*r
RETURN
PROCEDURE js2
PARAMETERS r,c
c=2*PI()*r
RETURN
PROCEDURE js3
PARAMETERS r,v
v=4/3*PI()*r*r*r
RETURN
解法2:过程与调用程序包含在同一个文件中。
*yuan3.prg
CLEAR
ymj = 0
zc = 0
tj = 0
@3,3 SAY "请输入半径:" GET bj DEFAULT 0
READ
DO js1 WITH bj,ymj
DO js2 WITH bj,zc
DO js3 WITH bj,tj
?"圆的面积=",ymj
?"圆的周长=",zc
?"球的体积=",tj
PROCEDURE js1
PARAMETERS r,s
s=PI()*r*r
RETURN
PROCEDURE js2
PARAMETERS r,c
c=2*PI()*r
RETURN
PROCEDURE js3
PARAMETERS r,v
v=4/3*PI()*r*r*r
RETURN
3.函数
示例18:设计一个自定义函数,用来求一元一次方程AX+B=0的根。
解法1:函数作为一个独立的文件
* root.prg
PARAMETERS a,b
RETURN IIF(a=0,"无解",-b/a)
解法2:函数与调用程序包含在同一个文件中。
* root1.prg
CLEAR
@5,10 SAY "一次项系数:"GET a DEFAULT 1
@7,10 SAY "常数项:"GET b DEFAULT 0
READ
? "x: ",root1(a,b)
FUNCTION root1
PARAMETERS u,v
RETURN IIF(u=0, "无解",-v/u)
文档已经阅读完毕,请返回上一页!