1、第九章程序二第九章 程序设计基础(二)三种基本结构顺序、分支、循环一、分支语句:1、 IF语句单向选择: IF 条件 双向选择: IF 条件执行语句 执行语句 ENDIF ELSE执行语句ENDIF例1:用户输入数据表文件名,判断它存在否,如果存在则打开数据表文件并显示表中的全部记录。clearaccept 请输入数据表文件名: to heng &想想可不可以用inputif file(heng+.dbf ) &了解file()的使用方法use &heng &想想这儿为什么要用&代换 listelse ?sorry,文件不存在.endifclose all &关闭所有打开的表,如果不涉及多工作
2、区,可以只使用useIF语句的嵌套:例2:将用户输入的小写英文字母转化成大写CLEARACCEPT “请输入1个字母:” TO STR1IF STR1=a AND STR1=A AND STR1=Z?SPACE(40)+STR1ELSE “你输入的不是英文字母”ENDIFENDIF二、多向选择:(多路选择)DO CASE CASE CASE OTHERWISE / 其它情况ENDCASE说明:OTHERWISE 可以没有.例3:邮局负责邮购小物品规则如下:50公里及以内收取额外金额5元,50-100公里收取10元,100-200公里收取20元,200-500公里收取40元,其余一律收取50元。
3、CLEARINPUT “请输入您想邮购物品的路程(公里数): ” TO XDO CASE CASE X50 AND X100 AND X200 AND X=500 Y=40 OTHERWISE Y=50ENDCASE? 您需要付款: ,Y,元人民币三、循环语句:1、 DO WHILE 条件 语句序列 LOOP &提前结束本次循环语句序列EXIT &退出循环体 ENDDO 要退出循环,需要条件为假的时候(条件=.F.时)执行过程:例4clearn=1sum1=0do while n=100 sum1=sum1+n n=n+1enddo?”1+2+3+.100的和为:”,str(sum1,4)ca
4、ncel例5cleari=1do while i=5?space(6-i) ?* ? i=i+1enddocancel 2、 计数循环:FOR 循环变量=初值 TO 终值 STEP 步长语句序列 LOOP &提前结束本次循环语句序列EXIT &退出循环ENDFOR / NEXT执行过程:例6:求1100的和SUM=0FOR I=1 TO 100SUM=SUM+IENDFOR?1100的总和为:,SUM使用DO WHILE 实现:SUM=0I=1DO WHILE I0 IF Y0 EXIT QUITENDIF ENDIFENDDO ENDDO如果Y0,则退出本循环 如果Y0,则退出程序,退出VF
5、DO WHILE .T. DO WHILE .T.IF Y0 IF Y0 RETURN CANCELENDIF ENDIFENDDO ENDDO如果Y0,则退出程序返回上层 如果Y0,则退出程序,回到VF中例7:三种方法实现显示出全部的男生。使用DO WHILE 循环 :CLEARCLOSE ALLUSE 学生DO WHILE NOT EOF() IF 性别=男DISP ENDIF SKIPENDDOCLOSE ALL使用FOR 循环 :CLEARCLOSE ALLUSE 学生COUNT TO XGO TOPFOR I=1 TO XIF 性别=男 DISPENDIFSKIPENDFORCLOS
6、E ALL使用SCAN循环 :CLEARCLOSE ALLUSE 学生SCAN FOR 性别=男DISPENDSCANCLOSE ALL例8 (LOOP语句的使用方法:提前结束本次循环)CLOSE ALLCLEARUSE学生DO WHILE NOT EOF()DISP WAIT 你想修改本记录吗?(Y/N): TO XIF X=N OR X=n SKIPLOOPENDIFEDITSKIPENDDOCLOSE ALL程序执行到WAIT语句后,如果用户输入的是N或n,那么就LOOP(也就跳过本次循环,不执行后面的EDIT)例9:通过键盘输入三角形的边长,若边长正确,立即在屏幕上显示三角形的面积,若
7、边长不正确,重新输入边长,若输入的边长中任意一边为0则程序立即结束。CLEAR?”现在计算三角型的面积,如果想退出程序请输入0。”DO WHILE .T.INPUT “请输入边长a:” TO AINPUT “请输入边长b:” TO BINPUT “请输入边长c:” TO CIF A=0 OR B=0 OR C=0 ?结束 RETURNENDIFIF A+B=C OR A+C=B OR B+C570 DISPENDSCANCLOSE ALL例13 : 用户可以循环输入并查找入校总分,直到输入的是负数就退出.CLEARCLOSE ALLUSE 学生INPUT “请输入你要查找的入校总分,输入负数则
8、退出: ” TO XDO WHILE X=0SCAN FOR 入校总分=X DISPENDSCANINPUT “请输入你要查找的入校总分: ” TO XENDDO实验:循环插入新记录,并输入数据。答案见210.41.166.233中省等级考试辅导资料:VF程序部分。例14:现有表STUDENT.DBF和学生成绩.DBF ,编写程序,对两张表建立关联, 用户可以循环查询: 输入某个同学的姓名后,该程序能够修改关于他所选课程的分数. (此题仅理解)其中STUDENT.DBF信息如下:(学号 C(6), 姓名 C(8),性别 C(2),出生日期 D,高考成绩 N(6,1)学生成绩.DBF信息如下:(
9、学号 C(6),课程号 C(3),分数 N(2)思路: 先建立好关联, 因为STUDENT对学生成绩是一对多的关系,所有最好将STUDENT做子表,就不用SET SKIP TO命令了. 然后通过STUDENT中的姓名获得学号,再在表学生成绩.dbf中进行查找和课程分数的修改.CLEARCLOSE ALLSELE 2USE STUDENTINDEX ON 学号 TAG XHSELE 1USE 学生成绩SET RELA TO 学号 INTO B &建立关联,学生成绩作为父表DO WHILE .T. ACCEPT “请输入你想查询的人姓名” TO NAME SELE 2 LOCATE FOR 姓名=
10、NAME &先在表STUDENT中查找姓名 IF FOUND() NUM=学号 &获得姓名对应的学号SELE 1 &转换到表学生成绩中LOCATE FOR 学号=NUM &根据刚才姓名对应的学&学生成绩中循环找,因为一个学生可能有几个课程成绩 DO WHILE NOT EOF()4,8 SAY 学号 4,20 SAY B.姓名 4,34 SAY 课程号 6,10 SAY 分数 GET 分数READCLEARCONTINUE ENDDOELSE?SORRY , NO FIND . ENDIFWAIT “你想继续查询修改数据吗?(Y/N): ” TO ASKIF ASK=n OR ASK=N CL
11、EAR LIST 学号,B.姓名,课程号,分数 CLOSE ALL CANCELENDIFCLEARENDDO编写程序,对于学生.dbf能够在程序末尾循环插入新记录(要求:必须使用 行,列 say . get . 输入数据)CLEARCLOSE ALLUSE 学生DO WHILE .T. APPE BLANK 5,20 SAY 学号 GET 学号 5,40 SAY 姓名 GET 姓名 7,20 SAY 性别 GET 性别 7,30 SAY 出生年月 GET 出生年月 9,20 SAY 入校总分 GET 入校总分 READ WAIT 你想继续插入新记录吗?(Y/N) : TO X IF X=N
12、OR X=n EXIT ENDIF CLEARENDDOCLEARLISTCLOSE ALL编写程序,该程序能够顺序修改表学生.DBF中的所有数据。 (要求:必须使用 行,列 say . get . 进行数据修改)CLEARCLOSE ALLUSE 学生DO WHILE .T. if eof() exit endif 5,20 SAY 学号 GET 学号 5,40 SAY 姓名 GET 姓名 7,20 SAY 性别 GET 性别 7,30 SAY 出生年月 GET 出生年月 9,20 SAY 入校总分 GET 入校总分 READ WAIT 你想继续修改记录吗?(Y/N) : TO X IF X=N OR X=n EXIT ENDIF CLEAR SKIPENDDOCLEARLISTCLOSE ALL例4.39 打印九九表(嵌套循环)clearset talk offfor I=1 to 9 ?str(I,2)endfor?for j=1 to 9 for k=1 to j?str(j*k,2) endfor?endforcancel
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1