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(<数值表达式1>,<数值表达式2>) 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(<数值表达式1>,<数值表达式2>) 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)<=Z. AND UPPER(ch)>="A ?ch,"是字母 IF ch<=9"AND, 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)<="Z" .AND. UPPER(ch)>="A" ? ch, "是字母" ELSE IF ch<="9" .AND. 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> ≤expL为真 <statements1> <statements1> N [CASE <expL2> ≤expL2>为真2 <statements 2> <statements2> expLn>为真 CASE <expLN> <statements] <statements> TOTHERWISE <statements> <statements> 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 <expL1> <statements1> [CASE <expL2> <statements2> …… CASE <expLN> <statementsN>] [OTHERWISE <statements> ENDCASE <expL1>为真? <expL2>为真? <expLn>为真? <statements1> <statements2> <statementsn> <statementss> ENDCASE后语句 Y N 依次判断,只执行条件为真的一组命令语句,之后转到 ENDCASE后