m程序设计 第5讲程序的三种基本结构 外顺序结构程序设计 分支结构程序设计 循环结构程序设计 FoxproForWindowshttp://cc.synu.edu.cn
FoxPro For Windows http://cc.synu.edu.cn 1 FoxPro程序设计 第5讲 程序的三种基本结构 顺序结构程序设计 分支结构程序设计 循环结构程序设计
m程序设计 顺序结构程序设计 按照命令语句排列的顺序,一条接一条地依次执行。 【例518】在 student. db学生登记表中查找并显示一个学生的信息。 SET TALK OFF 请输入学号:990101 USE student ACCEPT请输入学号:" TO msn990有关信息如下 LOCATE FOR Sno= msn 姓名:王亚洲 性别:男 ?msno,"的有关信息如下:" ?"姓名:",name 假设输入一个不存在的学号? ?"性别:",sex 请输入学号:99999 USE SET TALK ON 99999的有关信息如下 RETU 性别: 上面程序的缺点:未找到,也显示信息 FoxproForWindowshttp://cc.synu.edu.cn 2
FoxPro For Windows http://cc.synu.edu.cn 2 FoxPro程序设计 按照命令语句排列的顺序,一条接一条地依次执行。 【例5.18】在student.dbf学生登记表中查找并显示一个学生的信息。 SET TALK OFF USE student ACCEPT "请输入学号:" TO msno LOCATE FOR sno= msno ? msno, "的有关信息如下:" ? "姓名:", name ? "性别:", sex USE SET TALK ON RETU 请输入学号:990101 990101的有关信息如下: 姓名: 王亚洲 性别: 男 请输入学号:999999 999999的有关信息如下: 姓名: 性别: 顺序结构程序设计 上面程序的缺点:未找到,也显示信息。 假设输入一个不存在的学号?
m程序设计 分支结构程序设计 分支结构是指程序执行到某处时,根据绐定的条件经判断后选择执 行某些语句。难点是条件语句的设置。 1、单分支 IF IF-ENDIF流程图 ENDIF expl>为真 【例】 IF 5 &&条件语句 y=5*X+3 「END之后的命令 ?Y END &&结束语句 IF- ENDIF是一对,缺一不可 FoxproForWindowshttp://cc.synu.edu.cn 3
FoxPro For Windows http://cc.synu.edu.cn 3 FoxPro程序设计 分支结构是指程序执行到某处时,根据给定的条件经判断后选择执 行某些语句。难点是条件语句的设置。 分支结构程序设计 【例】 IF x=5 &&条件语句 y=5*x+3 ? Y ENDI &&结束语句 IF--ENDIF是一对,缺一不可。 N 为真? ENDIF之后的命令 Y IF—ENDIF 流程图 1、单分支 IF ENDIF
m程序设计 【例】用单分支修改上面程序找到后显示信息,找不到,不显示。 SET TALK OFF USE student ACCEPT"请输入学号:"Toxh LOCATE FOR Sno= Xh IF FOUND( && FOUND0查找结果测试函数返回值T或F ?xh,"的有关信息如下:" ?"姓名:",name ?"性别:",sex ENDI USE SET TALK ON RETU 上面程序的缺点:未找到,不显示,但也不显示错误信息。 FoxproForWindowshttp://cc.synu.edu.cn
FoxPro For Windows http://cc.synu.edu.cn 4 FoxPro程序设计 【例】用单分支修改上面程序,找到后显示信息,找不到,不显示。 SET TALK OFF USE student ACCEPT "请输入学号:" TO xh LOCATE FOR sno= xh IF FOUND( ) &&FOUND()查找结果测试函数,返回值.T.或.F. ? xh, "的有关信息如下:" ? "姓名:", name ? "性别:", sex ENDI USE SET TALK ON RETU 上面程序的缺点:未找到,不显示,但也不显示错误信息
m程序设计 2、双分支 IF IF- ELSE--ENDIF流程图 ELSE N ENDIF exp>为真 Y 【例】 IF XE5 y=5x+3 ENDIF之后的命令 ELSE y=5*X ENDIF y FoxproForWindowshttp://cc.synu.edu.cn 5
FoxPro For Windows http://cc.synu.edu.cn 5 FoxPro程序设计 2、双分支 IF ELSE ENDIF 【例】 IF x=5 y=5*x+3 ELSE y=5*x ENDIF ? y 为真? ENDIF之后的命令 N Y IF –ELSE—ENDIF流程图
m程序设计 【例519】用双分支修改上面程序未找到显示"无此人"。 SET TALK OF USE Student ACCEPT"请输入学号:"TOxh LOCATE FOR Sno= xh IF FOUNDO x,"的有关信息如下 娃姓名:",name ?“性别:",sex ELSE ?“对不起,库中没有这个人 ENDI USE SET TALK ON RETU FoxproForWindowshttp://cc.synu.edu.cn 6
FoxPro For Windows http://cc.synu.edu.cn 6 FoxPro程序设计 【例5.19】用双分支修改上面程序,未找到显示"无此人" 。 SET TALK OFF USE student ACCEPT "请输入学号:" TO xh LOCATE FOR sno= xh IF FOUND( ) ? xh, "的有关信息如下:" ? "姓名:", name ? “性别:”, sex ELSE ? “对不起,库中没有这个人" ENDI USE SET TALK ON RETU
m程序设计 *思考:下面两程序中哪个正确? 程序1 *程序2 SET TALK OFF SET TALK OFF USE student USE student ACCEPT"请输入姓名:" TO mnameACCEPT情请输入姓名:" TO mname LOCATE FOR So= mname LOCATE FOR Sno= mname If found( If foundo ? mname,“的有关信息如下 ? mname,"的有关信息如下:" ?"学号:",sno ?学号:",sno ?"性别:",sex ?"性别:",sex ELSE END ?“对不起,库中没有此人” ?"对不起,库中没有此人 END USE USE SET TALK ON SET TALK ON RETU RETU FoxproForWindowshttp://cc.synu.edu.cn 7
FoxPro For Windows http://cc.synu.edu.cn 7 FoxPro程序设计 ****思考:下面两程序中哪个正确? ***程序1 ***程序2 SET TALK OFF SET TALK OFF USE student USE student ACCEPT "请输入姓名:" TO mname ACCEPT "请输入姓名:" TO mname LOCATE FOR sno= mname LOCATE FOR sno= mname If found( ) If found( ) ? mname, “的有关信息如下:” ? mname,"的有关信息如下:" ? "学号:", sno ? "学号:", sno ? "性别:", sex ? "性别:", sex ELSE ENDI ? “对不起,库中没有此人” ? "对不起,库中没有此人" ENDI USE USE SET TALK ON SET TALK ON RETU RETU
m程序设计 【例520】判断某年是不是闫年。 闰年条件:年份能被400整除,或者年份能被4整除但不能被100整除。 SET TALK OFF INPUT"请输入年份:" TO year IF MOD(year, 400)=0OR MOD(year, 4)=0AND MOD(year, 100)#0 ?year,"年是闰年" 1964 ELSE ?year,"年不是闰年" 1948 ENDIF 1600 SET TALK ON 2000 RETU 求余函数:MOD(,) MOD(36,10)MOD(36,-10)MoD(36,10) 6 4 求表达式1除以表达式2的余数,符号同数值表达式2; 结果为零表示能整除,不为零不能整除。 FoxproForWindowshttp://cc.synu.edu.cn 6
FoxPro For Windows http://cc.synu.edu.cn 8 FoxPro程序设计 【例5.20】判断某年是不是闰年。 闰年条件:年份能被400整除,或者年份能被4整除但不能被100整除。 SET TALK OFF INPUT "请输入年份:" TO year IF ELSE ENDIF SET TALK ON RETU 求余函数:MOD(,) MOD(36,10) MOD(36,-10) MOD(-36, 10) 6 -4 4 求表达式1除以表达式2 的余数,符号同数值表达式2; 结果为零表示能整除,不为零不能整除。 MOD(year,400)=0 .OR. MOD(year,4)=0 .AND. MOD(year,100)#0 ? year,"年是闰年" ? year,"年不是闰年" 1964 1948 1600 2000
3、IF语句的嵌套:IF分支中使用语句 m程序设计 【例521】输入一个字符,判断它属于字母、数字、特殊符号中哪一类。 SET TALK OFF ACCEPT"请输入一个字符:"TOch UPPER(ch)="A ?ch,"是字母 IF ch=0 注意: ?ch,"是数字 ELSE 1、IF-ENDF是一对, ?ch,"是一个特殊符号 缺一不可 ENDIF 2、表达式为逻辑值 ENDIF 3、嵌套时注意对应关系 SET TALK ON 小写转大写函数: UPPER() 大写转小写函数: LOWER() FoxproForWindowshttp://cc.synu.edu.cn 9
FoxPro For Windows http://cc.synu.edu.cn 9 FoxPro程序设计 3、IF语句的嵌套: IF分支中使用IF语句。 【例5.21】输入一个字符,判断它属于字母、数字、特殊符号中哪一类。 SET TALK OFF ACCEPT "请输入一个字符:" TO ch IF UPPER(ch)="A" ? ch, "是字母" ELSE IF ch="0" ? ch, "是数字" ELSE ? ch, "是一个特殊符号" ENDIF ENDIF SET TALK ON 注意: 1、IF--ENDIF是一对, 缺一不可。 2、表达式为逻辑值; 3、嵌套时注意对应关系 小写转大写函数:UPPER() 大写转小写函数:LOWER()
m程序设计 4、多分支: DO CASE-ENDCASE语句 DO CASE CASE ≤expL为真 N [CASE ≤expL2>为真2 expLn>为真 CASE TOTHERWISE ENDCASE ENDCASE后语句 依次判断,只执行条件为真的一组命令语句,之后转到 ENDCASE后。 FoxproForWindowshttp://cc.synu.edu.cn 10
FoxPro For Windows http://cc.synu.edu.cn 10 FoxPro程序设计 4、多分支: DO CASE-ENDCASE语句 DO CASE CASE [CASE …… CASE ] [OTHERWISE ENDCASE 为真? 为真? 为真? ENDCASE后语句 Y N 依次判断,只执行条件为真的一组命令语句,之后转到 ENDCASE后