第九章程序二.docx

上传人:b****7 文档编号:9029136 上传时间:2023-02-02 格式:DOCX 页数:15 大小:18.61KB
下载 相关 举报
第九章程序二.docx_第1页
第1页 / 共15页
第九章程序二.docx_第2页
第2页 / 共15页
第九章程序二.docx_第3页
第3页 / 共15页
第九章程序二.docx_第4页
第4页 / 共15页
第九章程序二.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

第九章程序二.docx

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

第九章程序二.docx

第九章程序二

第九章程序设计基础

(二)

三种基本结构

顺序、分支、循环

一、分支语句:

1、IF语句

单向选择:

IF条件双向选择:

IF条件

执行语句执行语句

ENDIFELSE

执行语句

ENDIF

例1:

用户输入数据表文件名,判断它存在否,如果存在则打开数据表文件并显示表中的全部记录。

clear

accept'请输入数据表文件名:

'toheng&&想想可不可以用input

iffile(heng+'.dbf')&&了解file()的使用方法

use&heng&&想想这儿为什么要用&代换

list

else

?

'sorry,文件不存在.'

endif

closeall&&关闭所有打开的表,如果不涉及多工作区,可以只使用use

IF语句的嵌套:

例2:

将用户输入的小写英文字母转化成大写

CLEAR

ACCEPT“请输入1个字母:

”TOSTR1

IFSTR1>=’a’ANDSTR1<=’z’

STR1=UPPER(STR1)

?

SPACE(40)+STR1

ELSE

IFSTR1>=’A’ANDSTR1<=’Z’

?

SPACE(40)+STR1

ELSE

“你输入的不是英文字母”

ENDIF

ENDIF

二、多向选择:

(多路选择)

DOCASE

CASE<条件表达式1>

<命令序列1>

CASE<条件表达式2>

<命令序列2>

……

[OTHERWISE//其它情况

<命令序列>]

ENDCASE

说明:

OTHERWISE可以没有.

例3:

邮局负责邮购小物品规则如下:

50公里及以内收取额外金额5元,50-100公里收取10元,100-200公里收取20元,200-500公里收取40元,其余一律收取50元。

CLEAR

INPUT“请输入您想邮购物品的路程(公里数):

”TOX

DOCASE

CASEX<=50

Y=5

CASEX>50ANDX<=100

Y=10

CASEX>100ANDX<=200

Y=20

CASEX>200ANDX<=500

Y=40

OTHERWISE

Y=50

ENDCASE

?

’您需要付款:

’,Y,’元人民币’

三、循环语句:

1、DOWHILE条件

语句序列

LOOP&&提前结束本次循环

语句序列

EXIT&&退出循环体

ENDDO

要退出循环,需要条件为假的时候(条件=.F.时)

执行过程:

例4

clear

n=1

sum1=0

dowhilen<=100

sum1=sum1+n

n=n+1

enddo

?

”1+2+3+…..100的和为:

”,str(sum1,4)

cancel

例5

clear

i=1

dowhilei<=5

?

?

space(6-i)

?

?

"*******"

?

i=i+1

enddo

cancel

2、计数循环:

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

语句序列

LOOP&&提前结束本次循环

语句序列

EXIT&&退出循环

ENDFOR/NEXT

执行过程:

例6:

求1~100的和

SUM=0

FORI=1TO100

SUM=SUM+I

ENDFOR

?

’1~100的总和为:

’,SUM

使用DOWHILE实现:

SUM=0

I=1

DOWHILEI<101

SUM=SUM+I

I=I+1

ENDDO

?

’1~100的总和为:

’,SUM

3、指针循环:

SCAN范围FOR/WHILE条件

语句序列

LOOP&&提前结束本次循环

语句序列

EXIT&&退出循环

ENDSCAN

执行过程:

首先判断EOF()的值,为真则结束循环;否则结合FOR/WHILE子句执行循环体部份,记录指针移到指定范围和条件内的下一条记录,重新判断EOF()的值,直到为真则结束循环.

另外:

若语句中有QUIT、RETURN、CANCEL等命令也可以退出

例如:

DOWHILE.T.DOWHILE.T.

IFY>0IFY>0

EXITQUIT

ENDIFENDIF

ENDDOENDDO

如果Y>0,则退出本循环如果Y>0,则退出程序,退出VF

DOWHILE.T.DOWHILE.T.

IFY>0IFY>0

RETURNCANCEL

ENDIFENDIF

ENDDOENDDO

如果Y>0,则退出程序返回上层如果Y>0,则退出程序,回到VF中

例7:

三种方法实现显示出全部的男生。

使用DOWHILE循环:

CLEAR

CLOSEALL

USE学生

DOWHILENOTEOF()

IF性别=’男’

DISP

ENDIF

SKIP

ENDDO

CLOSEALL

使用FOR循环:

CLEAR

CLOSEALL

USE学生

COUNTTOX

GOTOP

FORI=1TOX

IF性别=’男’

DISP

ENDIF

SKIP

ENDFOR

CLOSEALL

使用SCAN循环:

CLEAR

CLOSEALL

USE学生

SCANFOR性别=’男’

DISP

ENDSCAN

CLOSEALL

例8(LOOP语句的使用方法:

提前结束本次循环)

CLOSEALL

CLEAR

USE学生

DOWHILENOTEOF()

DISP

WAIT‘你想修改本记录吗?

(Y/N):

’TOX

IFX=’N’ORX=‘n’

SKIP

LOOP

ENDIF

EDIT

SKIP

ENDDO

CLOSEALL

程序执行到WAIT语句后,如果用户输入的是’N’或’n’,那么就LOOP

(也就跳过本次循环,不执行后面的EDIT)

例9:

通过键盘输入三角形的边长,若边长正确,立即在屏幕上显示三角形的面积,若边长不正确,重新输入边长,若输入的边长中任意一边为0则程序立即结束。

CLEAR

?

”现在计算三角型的面积,如果想退出程序请输入0。

DOWHILE.T.

INPUT“请输入边长a:

”TOA

INPUT“请输入边长b:

”TOB

INPUT“请输入边长c:

”TOC

IFA=0ORB=0ORC=0

?

’结束’

RETURN

ENDIF

IFA+B<=CORA+C<=BORB+C<=A

?

’错误的三角型,请重新输入!

LOOP

ENDIF

S=(A+B+C)/2

AREA=SQRT(S*(S-A)*(S-B)*(S-C))

?

’该三角型的面积是:

’,area

ENDDO

例10:

有下列表:

book(书名C(20),作者C(8),出版日期D,内容简介M)编写程序:

查询关于foxpro的图书.

USEBOOK

LOCATEFOR‘foxpro’$书名

IF!

FOUND()

?

’没有关于foxpro的图书’

ELSE

DOWHILE!

EOF()

CLEAR

?

书名,作者,出版日期

?

内容介绍

WAIT“是否继续查找?

(Y/N)”TOM

IFM$’nN’

EXIT

ENDIF

CONTINUE

ENDDO

?

”全部显示完成”

ENDIF

例题11:

fork=1to10

ifk%2=0

loop

endif

?

”OK”

endfor

请问显示了多少个OK?

例题12:

在学生表里查询所有入校总分在570以上的人.

CLEAR

CLOSEALL

USE学生

SCANFOR入校总分>570

DISP

ENDSCAN

CLOSEALL

例13:

用户可以循环输入并查找入校总分,直到输入的是负数就退出.

CLEAR

CLOSEALL

USE学生

INPUT“请输入你要查找的入校总分,输入负数则退出:

”TOX

DOWHILEX>=0

SCANFOR入校总分=X

DISP

ENDSCAN

INPUT“请输入你要查找的入校总分:

”TOX

ENDDO

实验:

循环插入新记录,并输入数据。

答案见210.41.166.233中省等级考试辅导资料:

VF程序部分。

例14:

现有表STUDENT.DBF和学生成绩.DBF,编写程序,对两张表建立关联,用户可以循环查询:

输入某个同学的姓名后,该程序能够修改关于他所选课程的分数.(此题仅理解)

其中STUDENT.DBF信息如下:

(学号C(6),姓名C(8),性别C

(2),出生日期D,高考成绩N(6,1))

学生成绩.DBF信息如下:

(学号C(6),课程号C(3),分数N

(2))

思路:

先建立好关联,因为STUDENT对学生成绩是一对多的关系,所有最好将STUDENT做子表,就不用SETSKIPTO命令了.然后通过STUDENT中的姓名获得学号,再在表学生成绩.dbf中进行查找和课程分数的修改.

CLEAR

CLOSEALL

SELE2

USESTUDENT

INDEXON学号TAGXH

SELE1

USE学生成绩

SETRELATO学号INTOB&&建立关联,学生成绩作为父表

DOWHILE.T.

ACCEPT“请输入你想查询的人姓名”TONAME

SELE2

LOCATEFOR姓名=NAME&&先在表STUDENT中查找姓名

IFFOUND()

NUM=学号&&获得姓名对应的学号

SELE1&&转换到表学生成绩中

LOCATEFOR学号=NUM&&根据刚才姓名对应的学

&&学生成绩中循环找,因为一个学生可能有几个课程成绩

DOWHILENOTEOF()

@4,8SAY学号

@4,20SAYB.姓名

@4,34SAY课程号

@6,10SAY‘分数’GET分数

READ

CLEAR

CONTINUE

ENDDO

ELSE

?

’SORRY,NOFIND.’

ENDIF

WAIT“你想继续查询修改数据吗?

(Y/N):

”TOASK

IFASK=’n’ORASK=’N’

CLEAR

LIST学号,B.姓名,课程号,分数

CLOSEALL

CANCEL

ENDIF

CLEAR

ENDDO

编写程序,对于学生.dbf能够在程序末尾循环插入新记录

(要求:

必须使用@行,列say...get..输入数据)

CLEAR

CLOSEALL

USE学生

DOWHILE.T.

APPEBLANK

@5,20SAY'学号'GET学号

@5,40SAY'姓名'GET姓名

@7,20SAY'性别'GET性别

@7,30SAY'出生年月'GET出生年月

@9,20SAY'入校总分'GET入校总分

READ

WAIT'你想继续插入新记录吗?

(Y/N):

'TOX

IFX='N'ORX='n'

EXIT

ENDIF

CLEAR

ENDDO

CLEAR

LIST

CLOSEALL

编写程序,该程序能够顺序修改表学生.DBF中的所有数据。

(要求:

必须使用@行,列say...get..进行数据修改)

CLEAR

CLOSEALL

USE学生

DOWHILE.T.

ifeof()

exit

endif

@5,20SAY'学号'GET学号

@5,40SAY'姓名'GET姓名

@7,20SAY'性别'GET性别

@7,30SAY'出生年月'GET出生年月

@9,20SAY'入校总分'GET入校总分

READ

WAIT'你想继续修改记录吗?

(Y/N):

'TOX

IFX='N'ORX='n'

EXIT

ENDIF

CLEAR

SKIP

ENDDO

CLEAR

LIST

CLOSEALL

例4.39打印九九表(嵌套循环)

clear

settalkoff

forI=1to9

?

?

str(I,2)

endfor

?

forj=1to9

fork=1toj

?

?

str(j*k,2)

endfor

?

endfor

cancel

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

当前位置:首页 > 解决方案 > 学习计划

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

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