您的位置: 网站首页 > 程序开发 > Visaul FoxPro程序设计 > 第5章 Visual FoxPro程序设计基础 > 【5.5 分支结构程序设计】

5.5 分支结构程序设计

 

5.5  分支结构程序设计

分支结构程序设计是根据条件的测试结果执行不同的操作,在Visual FoxPro中有两条命令实现条件分支:IF...ELSE...ENDIFDOCASE...ENDCASE

5.5.1  简单分支结构

简单分支结构是由以IF语句开头并以ENDIF语句结束的若干条语句组成。

格式:

IF <条件>   [THEN]

<命令序列>

ENDIF

功能:如果<条件>成立,其值为真,则执行<命令序列>中的语句,否则执行ENDIF后的语句。

注意:IF语句与ENDIF语句必须成对使用,且各占一行。IFENDIF之间的各条语句,在书写或输入时建议向右缩进一些,这样便于程序结构的层次分明,增加程序的可读性。

【例5-7判断某学生的成绩,如果达到85分以上,则为“优秀”。

CLEAR

INPUT "    请输入学生姓名:" TO XM

INPUT "    请输入该学生的语文成绩:" TO YW

IF YW>=85

  ?  "  "+XM+"的语文成绩达到了优秀!!!"

ENDIF

REUTRN

运行结果如下:

【例5-8编写一个验证密码的程序。

CLEAR

@ 10,5  SAY "请输入密码:"

ACCEPT TO PA

IF !PA="12345"

    @ 12,5 SAY "你输入的密码错误!将退出."

    CANCEL

ENDIF

@ 12,5 SAY "OK!!"

RETURN

运行结果如下:

  或者 

5.5.2  选择分支结构

选择分支结构同样是由以IF语句开头以ENDIF语句结束的若干条语言组成,其中包含一条ELSE语句。

格式:

IF <条件>  [THEN]

<命令序列1>

ELSE

<命令序列2 >

ENDIF

功能:如果<条件>成立,其值为真,则执行<命令序列1>中的语句,否则执行<命令序列2>中的语句。

ELSE语句应单独占一行,IFENDIF必须成对使用,且各占一行。

【例5-9输入任意一个整数,判断是偶数还是奇数。

CLEA

INPUT "请输入任何一个整数:" TO MM

IF INT(MM/2)=MM/2

  ? MM, "是偶数"

ELSE

  ? MM,"是奇数"

ENDIF

运行结果如下:

     

【例5-10根据输入的年龄,判断是否偏大。

CLEAR

XM=SPACE(8)&&姓名

XB=SPACE(2)&&性别

YL=0        &&年龄

@ 10,10 SAY"输入学生姓名:" GET XM  PICTURE 'XXXXXX'

@ 12,10 SAY"输入该生性别:" GET XB PICTURE 'XX'

@ 14,10 SAY"输入学生年龄:" GET YL PICTURE '99' RANGE 3,70

READ

IF YL>=25

        CT="年龄偏大"

ELSE

        IF YL<25 AND YL >=20

          CT="年龄适中"

        ELSE

          CT="年龄偏小"

        ENDIF

ENDIF

@ 16,10 say "姓名:"+XM+SPACE(2)+XB+SPACE(2)+;

  LTRIM(STR(YL))+""+SPACE(2)+CT

RETURN

运行结果如下:

   或者 

【例5-11根据学生档案表(xsda.dbf),按输入的姓名查找其基本情况。

SET TALK OFF

CLEAR

USE XSDA

ACCEPT "请输入姓名:" TO XM

LOCATE FOR 姓名=XM

IF FOUND()

    ? "姓名:"+姓名

    ? "性别:",性别

    ? "年龄:"+STR(年龄,2)

    ? "出生年月:"+DTOC(出生年月)

ELSE

    ? "对不起,没有查找到此人!"

ENDIF

CLOSE ALL

RETURN

运行结果如下:

           

5.5.3  分支嵌套结构

嵌套式IF条件语句,就是在IF语句中再嵌套一个IF语句,嵌套的IF语句可以在THEN后,也可在ELSE子句后面,还可以在THENELSE后面分别嵌套一个IF语句。

格式:

IF <条件1>   [THEN]

IF <条件2>   [THEN]

<命令序列1>

ELSE

<命令序列2 >

ENDIF

<命令序列3>

ELSE

<命令序列4 >

ENDIF

注意:对于分支嵌套结构的程序而言,最重要的是要做到内外层分支结构的层次分明。

【例5-12计算某公司员工的工资。每小时按15元计算,如果本月工作时间超过150小时,则超过部分加发10%,如果本月工作时间达不到120小时,则应从总工资里扣300元。

SET TALK OFF

CLEAR

ACCEPT "工作人员:" TO XM

ACCEPT "    :" TO GH

INPUT "请输入工作时间:" TO SJ

IF SJ>150

    GZ=SJ*15+(SJ-150)*15*0.1

ELSE

  IF SJ<120

    GZ=SJ*15-300

  ELSE

    GZ=SJ*15

  ENDIF

ENDIF

?

? "姓名:"+XM+" 工号:"+GH+" 本月应发工资:"+STR(GZ,8,2)

RETURN

运行结果如下:

5.5.4  多路分支结构

前面的分支嵌套结构虽然可以解决程序中的多重选择问题,但当嵌套的层数较多时,往往会引起程序结构的混乱与层次不清,并使程序的可读性和可维护性降低。Visual FoxPro提供了多路分支结构来解决多种不同情况下的选择问题。

格式:

DO CASE

   CASE<条件1>

       <命令序列1>

   CASE<条件2>

       <命令序列2>

CASE<条件N>

       <命令序列N>

[OTHERWISE]

[<命令序列N+1>]

ENDCASE

功能:执行多重选择。OTHERWISE表示除去以上多个CASE条件剩下的所有情况,也就是说,当所有<条件>都不成立时,若有[OTHERWISE]项,则执行[<命令序列N+1>],否则执行ENDCASE后的语句。

【例5-13根据系统日期来判断是星期几。

SET TALK OFF

CLEAR

XQ=CDOW(DATE())

DO CASE

  CASE XQ="Monday"

      CXQ="今天是:星期一" 

  CASE XQ="Tuesday"

      CXQ="今天是:星期二" 

  CASE XQ="Wednesday"

      CXQ="今天是:星期三" 

  CASE XQ="Thursday"

      CXQ="今天是:星期四" 

  CASE XQ="Friday"

      CXQ="今天是:星期五" 

  CASE XQ="Saturday"

      CXQ="今天是:星期六" 

  CASE XQ="Sunday"

      CXQ="今天是:星期天" 

ENDCASE

? "系统日期:",DATE()

?

? CXQ

运行结果如下:

【例5-14 根据学生成绩表(xscj.dbf)输入学生的姓名,并计算其平均成绩及等级。

SET TALK OFF

CLEAR

USE XSCJ

ACCEPT "请输入姓名:" TO XM

LOCATE FOR 姓名=XM

平均分=INT((语文+数学+外语+政治)/4)

IF FOUND()

  DO CASE

   CASE 平均分>=90

     PD="优秀"

   CASE 平均分>=80 AND 平均分<90

     PD="良好"

   CASE 平均分>=70 AND 平均分<80

     PD="中等"

   CASE 平均分>=60 AND 平均分<70

     PD="及格"

  OTHERWISE

     PD="不及格"

  ENDCASE

  ? XM+"的平均成绩是:"+STR(平均分,6,2)+"  等级为:"+PD

ELSE

  ? "对不起,没有找到这个人!!!"

ENDIF

CLOSE ALL

RETURN

运行结果如下:

   

【例5-15编写一个算银行存款应得利息的程序。

SET TALK OFF

CLEAR

INPUT "请输入存款金额():" TO JE

INPUT "请输入存款年限():" TO YX

DO CASE

  CASE YX>=5

    RATE=4.5

  CASE YX>=3

    RATE=3.6

  CASE YX>=2

    RATE=3.1

  CASE YX>=1

    RATE=2.7

  CASE YX>=0.5

    RATE=2.21

  OTHER

    RATE=1.23

ENDCASE

LX=JE*YX*RATE/100

? "应取得的利息是:"+STR(LX,8,2)

运行结果如下:

    或者