Visual FoxPro 6.0学习笔记十一

第十一章顺序和分支结构程序设计

一、Visual FoxPro 程序的建立与运行

1.建立和编辑程序文件

组成Visual FoxPro 程序文件的语句可直接在系统提供的“程序编辑器”窗口中输入 、编辑和修改,启动“程序编辑器”窗口有如下两种方式:

(1)执行“文件”菜单下的“新建”命令,在“新建”对话框中选择文件类型为“程序”,然后单击“新建文件”按钮。

(2)在命令窗口中输入:MODIFY COMMAND <程序文件名>。

MODIFY COMMAND MYPROC1.PRG

打开Visual FoxPro“程序编辑器”窗口,在窗口中可以输入程序代码:

SET TALK OFF&&设置是否显示命令在执行过程中的状态信息,默认值为ON

CLEAR&&清屏

INPUT "请输入圆的半径:" TO R&&输入圆的半径

C=2*PI()*R&&计算圆的周长

S=PI()*R^2&&计算圆的面积

?"圆的周长:",C,"圆的面积:",S

SET TALK ON&&设置是否显示命令在执行过程中的状态信息,默认值为ON

RETURN&&关闭程序

说明:调试命令与辅助命令(该部分内容来自徐红波老师上课用PPT)

(1)SET TALK命令
格式:SET TALK  ON|OFF
功能:设置是否显示命令在执行过程中的状态信息,ON为显示信息(默认值),OFF为不显示信息。如:命令copy files 学生.*  to  学生1.*,若选ON,则显示复制过程中复制的几个文件的信息。若选OFF,则无信息。
(2)CANCEL命令
格式:CANCEL
功能:终止程序运行,清除所有私有变量,返回到命令窗口
(3)RETURN命令
格式:RETURN
功能:结束当前程序执行,返回到调用它的上级程序,若无上级调用程序,则返回到命令窗口
(4)QUIT命令
格式:QUIT
功能:退出VFP系统,返回WINDOWS操作系统

2.程序的保存与打开

(1)保存程序

执行菜单“文件”/“保存”命令或按下“Ctrl+W”组合键可将“程序编辑器”窗口中的程序文件保存起来。

若按菜单方式创建新程序时,执行保存操作后需要指定保存位置、文件名,选择文件保存类型为“程序(*.prg)”。

(2)打开程序

打开原来已保存过的程序文件的方法如下:

①执行“文件”菜单下的“打开”命令,在“打开”对话框的“搜寻”列表中选择程序文件所在的位置,在“文件类型”列表中选择“程序”文件类型,在“文件名”框中输入程序文件名或在对话框列表中单击选择程序文件,单击“确定”按钮。

②在命令窗口中输入:MODIFY COMMAND<程序文件名>。

MODIFY COMMAND MYPROC1.PRG

3.程序的运行

①在“程序编辑器”窗口中打开要运行的程序,单击“常用”工具栏上的“运行”按钮。

②在命令窗口或程序中,按DO<程序文件名>的格式调用程序文件并执行。

DO MYPROC1.PRG

使用上面建立的程序,将圆的半径设为10,运行结果为:

说明:输入命令与输出命令(该部分内容来自徐红波老师上课用PPT)

(1)INPUT命令
格式:INPUT [<字符表达式>] TO [<内存变量>]
功能:从键盘输入数据,回车后将数据赋给内存变量
说明:
    1)<字符表达式>为提示信息。
    2)输入的数据可为,常量,变量,表达式。
    3)输入C,L,D型常量时要用定界符。

(2)ACCEPT命令
格式:ACCEPT [<字符表达式>] TO [<内存变量>]
功能:从键盘输入字符串数据,赋给内存变量
说明:
    1)<字符表达式>为提示信息。
    2)输入的字符串不需加定界符,否则会将定界符作为字符串的一部分。
    3)若不输入数据直接按回车键,将空串赋给变量。

(3)输出命令

格式:
@ <行, 列> [SAY<表达式>] [GET<变量名>] [DEFAULT<表达式>]
功能:在屏幕指定行列输出表达式的值并修改内存变量的值。
说明:
1)<行,列>中行自上而下编号,列自左至右编号,编号从0开始,行列可以使用小数精确定位。
2)省略SAY选项,GET变量值在行列指定位置开始显示。若选SAY选项,先显示表达式的值,然后再显示GET变量值。
3)GET中的变量必须有初值或用[DEFAULT<表达式>]中的<表达式>命令定值。
4)GET选项必须用READ命令激活。

二、顺序结构程序设计

1.将3位整数倒序输出

SET TALK OFF&&设置是否显示命令在执行过程中的状态信息,默认值为ON

CLEAR&&清屏

INPUT "请输入任意一个3位的整数:" TO X&&由用户输入需要倒序输出的3位整数

A=INT(X/100)&&求百位上的数字

B=INT((X-A*100)/10)&&求十位上的数字

C=MOD(X,10)&&求个位上的数字

Y=C*100+B*10+A&&倒序组合

?"所输入的3位整数是:",X

?"倒序后的3位整数是:",Y

SET TALK ON&&设置是否显示命令在执行过程中的状态信息,默认值为ON

运行结果为:

SET TALK OFF&&设置是否显示命令在执行过程中的状态信息,默认值为ON

CLEAR&&清屏

INPUT "请输入任意一个3位的整数:" TO X&&由用户输入需要倒序输出的3位整数

A=MOD(X,10)&&求个位上的数字

B=MOD(X-A,100)/10&&求十位上的数字

C=(X-A-10*B)/100&&求百位上的数字

Y=INT(A*100+B*10+C)&&倒序组合

?"所输入的3位整数是:",X

?"倒序后的3位整数是:",Y

SET TALK ON&&设置是否显示命令在执行过程中的状态信息,默认值为ON

运行结果为:

2.在STUDENT表中对输入的记录号进行逻辑删除

SET TALK OFF&&设置是否显示命令在执行过程中的状态信息,默认值为ON

USE XSDA&&打开XSDA数据库

CLEAR&&清屏

INPUT "输入所删除记录的记录号:" TO RECORDNO

GO RECORDNO&&将指针移动到需要逻辑删除的记录号

DELETE&&逻辑删除当前记录

USE&&关闭表

SET TALK ON&&设置是否显示命令在执行过程中的状态信息,默认值为ON

运行结果为:

3.向STUDENT表中添加新纪录

CLEAR&&清屏

SET CENTURY ON&&设置日期显示世纪

USE STUDENT&&打开STUDENT表

APPEND&&增加一条空记录

***************格式化输入与编辑新纪录***************

@2,10 SAY "请输入新学生的信息"

@3,10 SAY "学号:" GET 学号

@4,10 SAY "姓名:" GET 姓名

@5,10 SAY "性别:" GET 性别 VALID 性别="男"

@6,10 SAY "专业:" GET 专业

@7,10 SAY "出生日期:" GET 出生日期 VALID 出生日期<DATE() AND 出生日期>{^1980-1-1}

@8,10 SAY "是否为党员:" GET 是否为党员

@9,10 SAY "入学成绩:" GET 入学成绩 RANG 500,700

@10,10 SAY "籍贯:" GET 籍贯

READ&&激活各个字段变量

BROWSE&&浏览添加结果

USE&&关闭表

RETURN&&结束程序

运行结果为:

说明:

三、选择结构程序设计

1.根据姓名进行查找,有返回其学号、姓名、出生日期混合专业信息,否则显示“查无此人!”

***************源程序代码***************

CLEAR&&清屏

USE XSDA.DBF&&打开XSDA数据库

ACCEPT "请输入待查学生的姓名:" TO NAME&&将用户输入的待查找的学生姓名转递给NAME变量

LOCATE FOR 姓名=NAME&&顺序查找

IF FOUND()&&如果找到该条记录,则执行下一行显示学号,姓名,出生日期和专业的命令,这里需要注意的是用户输入的出生日期为字符串类型,需要转化为日期类型之后再进行显示。

        ?"学号:"+学号+"姓名:"+姓名+"出生日期:"+DTOC(出生日期)+"专业"+专业

ELSE

        ?"查无此人!"

ENDIF

USE&&关闭表

RETURN&&结束程序

运行结果为:

若将以上程序中的ACCEPT语句替换为INPUT:

需要注意的是此时再进行输入时需要对字符型变量使用定界符

运行结果为:

2.求3个数中的最大数

CLEAR

INPUT "请输入第一个数字:" TO NUM1

INPUT "请输入第二个数字:" TO NUM2

INPUT "请输入第三个数字:" TO NUM3

MAX_NUM = MAX(NUM1,NUM2,NUM3)&&求三个数中的最大者

?"三个数中最大的数为:"+STR(MAX_NUM)

RETURN

运行结果为:

不使用MAX()函数的版本:

CLEAR

INPUT "请输入第一个数字:" TO NUM1

INPUT "请输入第二个数字:" TO NUM2

INPUT "请输入第三个数字:" TO NUM3

MAX = NUM1

IF NUM2>MAX

        MAX=NUM2

ENDIF

IF NUM3>MAX

        MAX=NUM3

ENDIF

?"三个数中最大的数为:"+STR(MAX)

RETURN

运行结果为:

3.编写完成分段式函数计算的程序代码:

CLEAR

INPUT "请输入X的值:" TO X

IF X<1

        Y=2*X-5

ENDIF

IF X>=1 AND X<10

        Y=2*X

ENDIF

IF X>=10

        Y=2*X+5

ENDIF

?"Y的值为:"+STR(Y)

RETURN

运行结果为:

使用DO CASE版本:

CLEAR

INPUT "请输入X的值:" TO X

DO CASE
CASE X<1

        Y=2*X-5

CASE X>=1 AND X<10

        Y=2*X

CASE X>=10&&改为OTHERWISE亦可

        Y=2*X+5

ENDCASE

?"Y的值为:"+STR(Y)

RETURN

运行结果为:

4.对成绩进行评级

SET EXACT ON&&用于开启精准比对模式

CLEAR

ACCEPT "输入学生姓名:" TO SNAME

USE VFSCODE

INDEX ON 姓名 TAG XM

SET ORDER TO XM&&设置主控索引

SEEK SNAME&&索引查询

IF FOUND()

        DO CASE

                CASE 成绩>=90

                        ?姓名+"优秀!"

                CASE 成绩>=70

                        ?姓名+"良好!"

                CASE 成绩>=60

                        ?姓名+"及格!"

                CASE 成绩<60&&OTHERWISE

                        ?姓名+"不及格!"

        ENDCASE

ELSE

        MESSAGEBOX("查无此人!",0,"提示信息")

ENDIF

USE

SET EXACT OFF

RETURN

运行结果为:

5.求解一元二次方程的实根

SET TALK OFF

CLEAR

INPUT "输入参数a:a=" TO a

INPUT "输入参数b:b=" TO b

INPUT "输入参数c:c=" TO c

IF b^2-4*a*c>=0

        X1=(-b+sqrt(b^2-4*a*c))/(2*a)

        X2=(-b-sqrt(b^2-4*a*c))/(2*a)

        ?"X1=",X1

        ?"X2=",X2

ELSE

        MESSAGEBOX("方程无实根",0,"提示信息")

ENDIF

SET TALK ON

RETURN

运行结果为:

思考与练习

计算分段函数的值并输出结果

CLEAR

INPUT "请输入X的值:" TO X

IF X>20

        Y=2*X+5

ENDIF

IF X=20

        Y=8

ENDIF

IF X<20

        Y=10*X-5

ENDIF

?"Y的值为:",Y

RETURN

运行结果为:

3.判断输入字符的类型,并给出相应的提示

CLEAR
ACCEPT "请输入一个字符:" TO A
X=ASC(A)
DO CASE
    CASE X>=48 AND X<=57
        ?"所输入的字符是数字"
    CASE X>=65 AND X<=90

        ?"所输入的字符是大写字母"
    CASE X>=97 AND X<=122
        ?"所输入的字符是小写字母"
    OTHERWISE
        ?"所输入的字符为特殊字符"
ENDCASE
RETURN

运行结果为:

4.利用DO CASE语句编写程序实现所输入月份对应季度的判断

CLEAR

INPUT "请输入月份:" TO MON

DO CASE

        CASE MON<=3

                ?MON,"月为第一季度"

        CASE MON<=6

                ?MON,"月为第二季度"

        CASE MON<=9

                ?MON,"月为第三季度"

        CASE MON<=12

                ?MON,"月为第四季度"

ENDCASE

RETURN

运行结果为:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值