1、程序设计基础,本章要点,掌握 Visual FoxPro 的工作方式,掌握程序文件的创建与编辑方法与步骤,掌握程序的基本结构 ,掌握顺序结构语句设计方法,掌握分支结构语句设计方法,掌握循环结构语句设计方法,掌握过程 使用方法。,Visual FoxPro 的工作方式,1 、 命令方式,Visual FoxPro命令方式是在“命令”窗口来实现的,在“命令”窗口中,可以输入单个的操作命令、系统命令和SQL语句,完成对数据库的操作、系统环境的设置和创建、运行程序文件等。命令方式的工作特点是:输入一条操作命令,系统完成一个数据库操作。,2、 菜单方式,在Visual FoxPro环境下,也可以通过系统
2、菜单提供的菜单命令对数据库进行操作,对系统环境进行设置以及创建、运行程序文件。菜单方式的工作特点是:通过选择菜单命令完成所需的操作。,3、 程序文件方式,11.1 Visual FoxPro的工作方式,11.1.3 程序文件方式,程序文件(简称程序)也称命令文件。在Visual FoxPro环境下,利用程序文件方式进行数据库管理,是通过程序文件编辑工具,将对数据库操作的命令和对系统环境进行设置的命令,集中在一个以(.PRG)为扩展名的程序文件中,然后再通过菜单方式或命令方式运行程序文件。,4 、 程序文件的创建与编辑,11.1 Visual FoxPro的工作方式,11.1.4 程序文件的创建
3、与编辑,1).使用Modify Command命令 命令格式: Modify Command 命令功能: 创建、编辑以为名的程序文件。,11.1 Visual FoxPro的工作方式,11.1.4 程序文件的创建与编辑,2.以菜单方式创建、编辑程序文件 1)创建程序文件 操作步骤如下:打开“文件”菜单,选择“新建”命令,进入“新建”窗口。在“新建”窗口,选择“程序”选项,按“新建”按钮,进入“程序”编辑窗口。在“程序”编辑窗口,输入程序文件并保存,此时,创建程序文件的操作结束。,2)编辑程序文件 打开“文件”菜单,选择“打开”命令,进入“打开”窗口。在“打开”窗口,输入程序文件名,按“确定”按
4、钮,进入“程序”编辑窗口。在“程序”编辑窗口,编辑该程序文件并保存,完成编辑程序文件的操作,11.1 Visual FoxPro的工作方式,11.1.4 程序文件的创建与编辑,3.利用设计工具建立程序代码在Visual FoxPro系统中,除了用上面介绍的方法创建、编辑程序文件外,还可以借助于“表单设计器”、“类设计器”、“菜单设计器”、“报表设计器”和“项目管理器”等代码设计工具完成程序代码的创建与编辑。,5、 程序文件的调用,11.1 Visual FoxPro的工作方式,11.1.5 程序文件的调用,1).使用Do命令调用程序文件 命令格式: Do 命令功能: 运行以为名的程序文件。,2
5、).以菜单方式调用程序文件操作步骤如下:(1)打开“程序”菜单,选择“运行”命令,进入“运行”窗口。(2)在“运行”窗口,选择要调用的程序文件,按“运行”按钮,即可运行程序文件。,程序的基本结构,11.2 程序的基本结构,1.顺序结构顺序结构是在程序执行时,根据程序中语句的书写顺序依次执行的命令序列。Visual FoxPro系统中的大多数命令都可以作为顺序结构中的语句。 2.分支结构分支结构是在程序执行时,根据不同的条件,选择执行不同的程序语句,用来解决有选择、有转移的诸多问题。,3.循环结构循环结构则能够使某些语句或程序段重复执行若干次。如果某些语句或程序段需要在一个固定的位置上重复操作,
6、使用循环结构语句是最好的选择,但是基于面向对象的程序设计思想,循环控制的操作形式更丰富,不仅限于循环结构语句。,顺序结构语句,程序中的常用语句 一.屏幕输出语句: 格式:?|? 功能:在屏幕上输出表达式的内容。1个问号为换行输出,2个问号为不换行输出,【例1】编制1个命令文件text.prg,保存到f:myvfp中,统计“教师工资表”中的奖金和工资总额。 程序文件内容: use 教师工资表 sum all 工资 to n &计算工资总和 ?“奖金为:”,m ?“工资总额为:”,n,二.注释语句: 格式:&注释内容 功能:为程序中的语句作注释,注释内容不会执行。 三.输入字符串语句: 格式:ac
7、cept 字符串 to 内存变量 功能:执行该语句时,暂停程序的运行,在屏幕上显示“字符串”的内容作为提示信息,等待用户通过键盘输入数据;输入数据后回车,输入的内容保存到指定的内存变量中。,输入表达式语句: 格式:input 表达式 to 内存变量 说明: (1).该命令功能比accept强,accept只能输入字符型数据;而input可输入字符型、数值型、逻辑型和日期型。 (2).使用input时,输入字符型数据时,必须加双引号等定界符;输入逻辑型数据时,要用圆点定界符(如.T.);输入日期型数据要用转换函数,如ctod(“11/15/2005”)。,五.清屏语句: 格式:clear 功能:
8、清除主屏幕上的显示信息。 六.交互状态控制: 格式:set talk off/on 说明:该命令规定是否将命令执行结果显示在屏幕上。默认为on,此时,每执行完1条命令,结果即显示在屏幕上;设置为off时,不显示执行结果。一般,我们在程序文件的开头都加上该语句,抑制显示中间结果。,七.显示提示信息: 格式:wait window 提示信息字符串 timeout 秒数 功能:在屏幕出现提示窗口 八.返回语句: 格式:return 功能:返回调用处或命令窗口。该语句可省略,因为在每个程序执行的最后,系统都会自动执行1个return语句。,顺序结构程序设计在顺序结构中,各种操作块按照出现的先后次序依次
9、执行。 基本语句 1、赋值语句 (1)STORE TO (2)=,2、程序的注释 (1)行首注释 NOTE 注释内容 或* 注释内容注释内容可以是任何文字,程序不执行以NOTE或*开头的语句,只起给程序说明的作用。 (2)行尾注释 &注释内容。,【例9.4】:求任意半径的圆的面积。 clear input “请输入圆的半径:”to r s=3.1415926*r*r ?“圆的面积是:”,s return,选择结构程序设计 选择结构就是对指定的条件进行判断,如果条件成立,则执行指定的语句序列。 1、IFELSEENDIF 2、DO CASEENDCASE 单条件选择语句IF 双分支结构格式一:I
10、F ENDIF 执行过程是:如果所给定的条件为真,则执行“语句序列”,否则执行END IF之后的语句。,格式二:IF ELSE ENDIF执行过程是:如果所给定的条件为真,则执行“语句序列1”,否则执行“语句序列2” 说明:(1)语句序列又可以是IF结构,称为IF语句的嵌套。(2)IF和ENDIF必须成对出现。,2、IIF函数IIF函数可以实现一些简单的选择。 其语法结构为: IIF(条件,表达式1,表达式2) 说明: (1)当条件为真时,函数返回表达式1的值。(2)当条件为假时,函数返回表达式2的值。(3)Y=IIF(条件,表达式1,表达式2)相当于:IF 条件 Y=表达式1ELSE Y=表
11、达式2END IF。,多分支条件选择语句DO CASE 格式:DO CASE CASE 条件1语句序列1CASE 条件2语句序列2OTHERWISE语句序列nENDCASE,某种商品一次购买 100件以上时,可享受8%的优惠。试编程根据输入的单价和数量计算应付金额。 CLEAR INPUT “数量:“ TO a INPUT “单价:“ TO b j=a*b IF sl=100j=j*0.92 ENDIF ? “应付金额:“,j return,出租车不超过5公里时一律收费10元,超过时则超过部分每公里加收1.6元。试编程根据里程数计算并显示出应付车费。 CLEAR INPUT “里程:“ TO
12、c IF c=5? “车费为:十元“ ELSEf=10+(c-5)*1.6? “车费为:“,f ENDIF RETURN,编程计算银行存款整存整取应得的利息。 CLEAR INPUT “本金(元):“ TO b INPUT “存期(年):“ TO c DO CASECASE c=5rate =4.5 &年利率为4.5%CASE c=3 rate =3.6 &年利率为3.6%CASE c=2rate =3.1 &年利率为3.1%,CASE c=1rate =2.7 &年利率为2.7%CASE c=0.5rate =2.21 &年利率为2.21%otherwiserate =1.23 &年利率为1
13、.23%ENDCASE lixi=b*c*rate /100 ? &输出一个空行 ? “ 应得利息:“,lixi return,【例9.6】:设计1个程序名为test4.prg,使用do case语句在“学生情况表”中按学号或姓名查询程序文件内容: clear use 学生情况表 wait “请选择按姓名或按学号查询(M/X)” to xz do case case xz$“Mm” &此条件为真,说明选择了M,即按姓名查询 accept “请输入待查人姓名:” to xm locate for 姓名=xm caxe xz$“Xx” accept “请输入待查学号:” to xh locate
14、for 学号=xh otherwise wait “查询选择错误!按任意键退出!” wind endcase,循环结构程序设计 程序设计中的循环结构(简称循环)是指在该程序中,从某处开始有规律地反复执行某一操作(或程序块)的现象。被重复执行的的部分称为循环体,必须确保循环的重复执行能被终止(无死循环)。 按照循环体执行的方式和条件,在VFP中提供了“当型”和“步长型”和“表扫描型”三种循环语句: DO whileenddo(当型)、 FOR endfor(步长型)、 SCANENDSCAN(表扫描型)。,当型循环命令DO WHILE 格式: DO WHILE 语句序列 EXIT 语句序列 LO
15、OP 语句序列ENDDO,说明: (1)每执行一次循环体,程序自动返回到DO WHILE语句,判断一次。 (2)EXIT是无条件结束循环命令。它使程序跳出循环,转去执行ENDDO之后的语句。 (3)LOOP是无条件循环命令。它将控制直接转回到DO WHILE语句,而不执行LOOP和ENDDO之间的语句。 (4)DO WHILE和ENDDO必须各占一行,且必须成对出现。,求1+2+3+.+100的累计值。CLEAR N=0 S=0 DO WHILE n100 n=n+1s=s+n ENDDO ? “累计值为:“,s RETURN,步长型循环命令FOR 若事先知道循环次数,则可以用步长型循环结构。
16、 FOR = TO STEP 语句序列 EXIT 语句序列 LOOP 语句序列ENDFOR 说明:(1)是一个作为计数器的内存变量,在该结构之前可以不存在。是计数器的初值,是计数器值的增长或减小量。 (2)其余情况与DO WHILE结构相似。,1+2+3+.+100的累计值。 CLEAR s=0 FOR n=1 TO 100s=s+n ENDFOR ? “S=“,s RETURN,求N! Set talk off p=1 For y=1 to n P=p*y Endfor,【例9.8】:求1!+2!+3!+20!的值。 可在计算按钮的Click事件中编写如下代码: S=0 FOR N=1 TO
17、 20T=1FOR M=1 TO NT=T*MENDFORS=S+T ENDFOR,表扫描型SCANENDSCAN 格式: scan 范围for 条件 语句序列 endscan 功能: 对表中指定范围,满足条件的记录执行循环体语句,每执行一次循环,记录指针自动移动到下一条记录。操作表时,使用该语句功能强,效率高。,【例9.9】:使用scan语句编程,显示“教师基本信息表”中的党员的姓名和职称。 use 教师基本信息表 scan for .not.党员否 display 姓名,职称 endscan use return,用扫描型循环结构编程,输出职工档案数据表中基本工资在800元以下的职工姓名及
18、其基本工资数,并输出这些职工的人数。 CLEAR ALL USE zgda CLEAR STORE 0 TO n SCAN FOR基本工资800? 姓名, 基本工资n=n+1 ENDSCAN ? “基本工资在800元以下的职工共有:“+STR(n, 3)+ “人“ CLOSE DATABASE RETURN,使用循环语句的注意事项,11.5 循环结构语句,11.5.4 使用循环语句的注意事项,(1)Do While和EndDo、For和EndFor、Scan和EndScan必须配对使用。(2)可以是任何FoxPro命令或语句,也可以是循环语句,即可以为多重循环。(3)应是数值型的内存变量或数组
19、元素。,(4)Exit和Loop命令嵌入在循环体内,可以改变循环次数,但是不能单独使用。Exit的功能是跳出循环,转去执行EndDo、EndFor、EndScan后面的第一条命令;Loop的功能是转回到循环的开始处,重新对“条件”进行判断,相当于执行了一次EndDo、EndFor、EndScan命令,它可以改变中部分命令的执行次数;Exit、Loop可以出现在的任意位置。,练习: 1、以下循环体共执行了( )次 For i=1 to 10 ?i i=i+1 Endfor A.10 B. 5 C. 0 D.语法错误,以下程序的运行结果是: (1) 。 a=10 if a0 b=a2elseb=s
20、qrt(a) endif ? b,s=0 for n=1 to 10s=s+nendfor? s,2、以下程序正确的运行结果是( ) Do while .not. Eof()locate for xb=“男” Display Continue enddo,3、数据库文件CJ.DBF中有两条记录,内容如下:XM ZF 1 李四 500.00 2 张三 600.00 Set talk off Use cj A=0 Do while .not.eof() A=a+zf Skip Enddo ?a Return 程序运行的结果是( )A. 1100 B. 1000 C. 1600 D.1200,本程序
21、运行后输出的结果是( ) A=10 B=11 C=12 D=13 If ba C=d A=c Endif ?a,Set talk off Store 0 to m For n=1 to 8 M=m+n Endfor ?”m=“,m 结果为( ) a.36 b.35 c.30 d.26,设成绩库cjk.dbf中“数学”这门课程的学分为4,其学分计算的方法如下:数学=90 ,学分值为4 80=数学90 , 学分值为3 70=数学80 , 学分值为2 60=数学70 , 学分值为1 数学60 , 学分值为0 计算任一学生数学这门课程的学分值的程序。,Set talk off Use cjk Accpet”输入学号:“ to xh Xf=0 Locate for 学号=xh Do caseCase_Xf=4case_xf=3case_xf=2case_xf=1,Othersizexf=0 Endcase ?”学号:”,xh ?”数学的学分值:“,xf Use return,