vfp第7章程序设计.ppt_第1页
vfp第7章程序设计.ppt_第2页
vfp第7章程序设计.ppt_第3页
vfp第7章程序设计.ppt_第4页
vfp第7章程序设计.ppt_第5页
已阅读5页,还剩64页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1,Visual FoxPro程序设计,第 7 章,结构化程序设计,近几年来,程序设计的方法正在逐步由面向过程的结构化程序设计转向面向对象的程序设计,但是在程序设计的过程中,往往将结构化程序设计与面向对象的程序设计结合起来,这样更有利于设计出功能强大、灵活多变的数据库应用系统。,2,第七章 结构化程序设计,7.1 程序设计入门 7.2 顺序结构程序设计 7.3 分支结构程序设计 7.4 循环结构程序设计 7.5 用户自定义函数和过程,3,7.1 程序设计入门,基本概念,基本语句,创建、修改、运行程序,4,7.1.1程序的基本概念,1.程序,能够完成一定任务的命令的有序集合。,程序文件扩展名:.prg,2.程序设计,为完成一个特定的任务而编写程序的过程。,3.程序的基本结构,顺序,分支,循环,5,7.1.1程序的基本概念,4.程序的基本构成规则,(1)程序由若干程序行组成。 (2)每一个程序行以回车键结束;若一个程序行在一行中写不完,使用续行符分号(;)。 (3)程序尾部使用CANCEL、RETURN或QUIT等命令表示该程序结束。,6,7.1.2程序的创建、修改与运行,一、程序的建立,项目管理器方式 菜单方式 命令方式: MODIFY COMMAND 程序文件名,代码,程序,新建,7,7.1.2程序的创建、修改与运行,创建程序的步骤,(1)打开程序编辑窗口。 (2)在程序编辑窗口中逐条输入命令,并以回车键换行。 (3)保存程序文件。(.prg),【例7-1】建立一个程序,输出半径是4的圆的面积。 s=0 r=4 s=3.14*r*r ? “半径是4的圆的面积是: “,s RETURN,9,7.1.2程序的创建、修改与运行,二、程序的修改,在程序文件的编辑状态下完成。打开程序三种方法:,项目管理器方式 菜单方式 命令方式: MODIFY COMMAND 程序文件名,10,7.1.2程序的创建、修改与运行,三、程序的运行,单击工具栏上的 按钮。 项目管理器方式: “运行”按钮。 命令方式:DO 程序文件名。,11,7.1.3 程序中常用的基本语句,1、字符串输入语句,ACCEPT TO ,字符串常量,例:ACCEPT “请输入一个数:“ TO x,只接收字符型数据,功能:在屏幕上显示 内容,等待用户从键盘输入数据,并将该数据赋值给。,12,7.1.3 程序中常用的基本语句,【例7-2】从键盘上任意键入一个数,求其平方根。 CLEAR ACCEPT “请输入一个数:“ TO x y=SQRT(VAL(x) ?x,“的平方根是:“,y RETURN,Val()函数:字符型转换成数值型,Sqrt() 求平方根函数,13,7.1.3 程序中常用的基本语句,2、表达式输入语句,INPUT TO ,字符串常量,可接收任意类型数据,需加定界符,功能:从键盘输入数据赋值给。,14,7.1.3 程序中常用的基本语句,【例7-3】在成绩表cj.dbf中,按学号查询学生的成绩情况。 CLEAR USE cj.dbf INPUT “输入要查询的学号:“ TO xh2 DISPLAY FOR xh=xh2 USE RETURN,字符型数据加引号,15,7.1.3 程序中常用的基本语句,3、单字符输入语句,WAIT TO ; WINDOW AT , ; TIMEOUT ,只接收一个字符,提示窗口的位置,最大等待时间,提示信息出现在提示窗口,WAIT “单字符输入语句测试“ WINDOW AT 15,22 TIMEOUT 5,16,7.1.3 程序中常用的基本语句,4、定位输入输出语句, , SAY GET; DEFAULT ,功能:在屏幕的指定行列位置(行列的编号从0开始)输出的值,并可以修改GET子句的变量值。,17,7.1.3 程序中常用的基本语句,【例7-5】从键盘上任意键入一个数,求其平方根。 CLEAR x=0 10,10 SAY“请输入一个数:“ GET x READ y=SQRT(x) 12,10 SAY“其平方根是:“ 12,22 SAY y RETURN,18,5、程序结束语句,(1)CANCEL语句,功能:结束程序的执行,返回命令窗口,同时关闭所有打开文件。,(2)RETURN 语句,功能:结束程序的执行。如果程序是被另一程序调用,则返回到调用程序,否则返回到命令窗口。,(3) QUIT 语句,功能:结束程序执行并退出Visual FoxPro系统,返回操作系统。,程序文件扩展名: 创建程序命令: 常用的基本语句: accept 提示信息 to 内存变量 input 提示信息 to 内存变量 10,10 SAY “请输入一个数:“ GET x READ 12,10 SAY “其平方根是:“,复习7.1主要知识点,20,7.2 顺序结构程序设计,顺序结构是按照程序语句的书写顺序,逐条依次执行。,【例7-6】从键盘输入半径,求圆的面积。 CLEAR INPUT “请输入圆的半径:“ TO r s=0 s=3.14*r*r ? “该圆的面积为: “,s RETURN,21,7.3 分支结构程序设计,在分支结构中,程序根据判断条件是否成立来选择执行分支,每一个分支对应一个程序段。,22,7.3.1 单分支结构,单分支结构用于控制程序中的语句行序列的执行与否,它根据指定的条件表达式来进行判断。,【语句格式】 IF ENDIF,23,【例7-7】:任意键入一个成绩,若大于等于60分,则显示合格。,7.3.1 单分支结构,CLEAR Input “请输入一个成绩:“ to x IF x=60 ?“成绩合格“ ENDIF RETURN,【例7-8】:任意键入一个日期,判断该日期是否是休息日(周六或者周日为休息日) CLEAR Input “请输入一个日期:“ to d1 d2=dow(d1) IF d2=1 or d2=7 ?d1,“是休息日“ ENDIF RETURN,Dow():返回该日期是一星期中的第几天,7.3.1 单分支结构,25,7.3.2 双分支结构,双分支结构根据指定的一个条件表达式的两种不同结果值来判断执行两个分支中的哪一个分支,从而得到两种不同的程序结果。,【语句格式】 IF ELSE ENDIF,26,【例7-9】:任意键入一个日期,判断该日期是否是休息日还是上班日(周六或者周日为休息日) CLEAR Input “请输入一个日期:“ to d1 d2=dow(d1) IF d2=1 or d2=7 ?d1,“是休息日“ ELSE ?d1, “是上班日“ ENDIF RETURN,27,【例7-10】假设托运50公斤以内的行李按每公斤0.8元计费,如果超过50公斤时,超过的部分每公斤加价0.4元,计算公式如下: (1)当x50公斤: y=0.8*x (2)当x50公斤: y=0.8*50+(0.8+0.4)*(x-50) 从键盘任意键入行李的重量,求该行李的托运费。,数值型转换为字符型函数STR() 格式:STR(,) 给出转换后的字符串长度; 给出小数位数; 例:?str(95643.5136,8,2) 值:“95643.51”,28,【例7-10】程序代码为: INPUT “请输入行李的重量:“ TO x IF x=50 y=0.8*x ELSE y=0.8*50+(0.8+0.4)*(x-50) ENDIF 3,1 SAY “行李的重量为: “+STR(x,6,2)+; “公斤,其托运费为:“+STR(y,6,2)+“元“ RETURN,29,7.3.3 多分支结构,【语句格式】 DO CASE CASE CASE CASE OTHERWISE ENDCASE,30,7.3.3 多分支结构,条件表达式1,语句行序列1,EDNCASE 后面的语句,条件表达式2,语句行序列2,条件表达式n,语句行序列n,语句行序列n+1,执行流程,31,7.3.3 多分支结构,注意事项,DO CASE语句只执行第一个条件表达式值为.T.的CASE语句下的语句行序列,之后便结束该多分支语句。 假如各条件表达式的值均为.F.,若有OTHERWISE子句,则程序执行,之后结束该多分支语句;否则直接结束多分支语句。 在多分支语句,DO CASE和ENDCASE必须配对出现。 在表达分支语句时,不允许在一个命令行中输入完,必须按照【语句格式】中规定的样式一行一个回车分行键入。,32,【例7-11】从键盘上输入一个成绩值,判断出它所对应的等级。 (85-100:优秀;75-84:良好;60-74:及格;0-59:不及格) CLEAR INPUT “请输入一个成绩:“ TO nx DO CASE CASE nx=85 grade=“优秀“ CASE nx=75 grade=“良好“ CASE nx=60 grade=“及格“ OTHERWISE grade=“不及格“ ENDCASE 3,1 SAY STR(nx,5,1)+“对应的成绩等级是:“ +grade RETURN,str()函数:数值型转换成字符型,33,【例7-12】判断随机给定的某一天是星期几。 CLEAR INPUT “请输入一个日期:“ TO d1 d=DOW(d1) DO CASE CASE d=1 y= “星期日“ CASE d=2 y= “星期一“ CASE d=7 y= “星期六“ ENDCASE 3,3 SAY DTOC(d1)+“是:“+y RETURN,dow()函数:星期中第几天函数,dtoc()函数:日期型转换成字符型函数,复习7.2和7.3主要知识点,程序基本结构: 顺序、分支、循环 分支结构:,35,7.4 循环结构程序设计,循环结构是指从程序的某处开始有规律的重复执行某一程序段的程序结构。,三种循环结构:,DO WHILE循环,FOR 循环,SCAN 循环,两个命令:,EXIT,LOOP,36,7.4.1 FOR 循环,FOR循环根据循环变量的初值、终值和步长决定循环体的执行次数。,适用条件:循环次数已知 格式: FOR TO STEP LOOP EXIT ENDFOR/NEXT,37,执行流程,ENDFOR 后面的语句,38,7.4.1 FOR 循环,注意事项,FOR与ENDFOR/NEXT必须成对出现,缺一不可 步长可正可负可省略(缺省时为1)。 当初值大于终值时,步长为负数 例如: FOR i=10 to 1 step -4 ?i ENDFOR,39,【例7-13】计算100以内奇数的和。 clear s=0 FOR i=1 to 100 STEP 2 s = s + i ENDFOR ?“ 100以内奇数的和 s = “,s RETURN,初值:S=0 I=1 I100 结束循环,7.4.1 FOR 循环,40,【例7-14】求任意一个大于1的整数的阶乘 。 clear p=1 INPUT “请键入一个大于等于2的正整数:“ TO n FOR i=1 TO n p=p*i ENDFOR ? n,“的阶乘是“,p RETURN,7.4.1 FOR 循环,41,【例7-15】求1100之间既非3的倍数也非5的倍数的所有奇数的和。 CLEAR s=0 FOR i=1 TO 100 STEP 2 IF MOD(i,3)=0 OR MOD(i,5)=0 LOOP ENDIF s=s+i ENDFOR ?“1100之间既非3的倍数也非5的倍数的所有奇数的和“,s RETURN,LOOP命令(短路语句): 跳出本次循环,执行下一次循环,42,s=0 FOR i=1 TO 100 STEP 2 IF MOD(i,3)=0 OR MOD(i,5)=0 LOOP ENDIF s=s+i ENDFOR,43,【例7-16】判断从键盘上输入的一个数是否为素数。 CLEAR INPUT “请输入一个数N:“ TO n FOR ni=2 TO n-1 IF MOD(n,ni)=0 EXIT ENDIF ENDFOR IF n=ni ?“您输入的数是素数“ ELSE ?“您输入的数不是素数“ RETURN,素数:除1以外,只能被1和自己所整除的自然数,EXIT命令(退出语句,退出循环),44,【例7-16】判断从键盘上输入的一个数是否为素数。 编程方法二: CLEAR INPUT “请输入一个数N:“ TO n lkey=.T. ni=2 FOR ni=2 TO n-1 IF MOD(n,ni)=0 lkey=.F. EXIT ENDIF ENDFOR ?“您输入的数: “+IIF(lkey,“是素数“,“不是素数“) RETURN,45,7.4.2 DO WHILE 循环,DO WHILE循环又称条件循环,是根据条件表达式的值来决定循环体的执行次数的一种循环结构。,适用条件:循环次数未知 格式: DO WHILE LOOP EXIT ENDDO,循环体,46,7.4.2 DO WHILE 循环,执行流程,条件表达式,循环体,循环体中要有使得条件表达式最终为.F.的语句或通过EXIT强制退出,ENDDO后面的语句,47,7.4.2 DO WHILE 循环,【例7-17】求100以内所有偶数的和。 clear s=0 i=2 DO WHILE i=100 s=s+i i=i+2 ENDDO ?“100以内所有偶数的和是“,s RETURN,48,7.4.2 DO WHILE 循环,【例7-18】求任意一个大于1的整数的阶乘 。 p=1 i=1 INPUT “请键入一个大于等于2的正整数:“ TO n DO WHILE i=n p=p*i i=i+1 ENDDO ? n,“的阶乘是“,p RETURN,49,【例7-19】在DO WHILE循环中使用LOOP语句编程实现: 求1100之间既非3的倍数也非5的倍数的所有奇数的和。 CLEAR s=0 DO WHILE i100 IF MOD(i,3)=0 OR MOD(i,5)=0 i=i+2 LOOP ENDIF s=s+i i=i+2 ENDDO ?“1100之间既非3的倍数也非5的倍数的所有奇数的和“,s RETURN,50,【例7-20】要求产生一个在7080之间的随机数。 x=0 DO WHILE .T. x=INT(RAND()*100) IF x70 AND x80 EXIT ENDIF ENDDO ?“找到的70-80之间的随机数是:“,x RETURN,rand():取随机数函数 int():取整数部分函数,永真循环,死循环, 需强制退出(exit),51,【例7-21】应用DO WHILE 编程实现:统计教师表中职称名称为教授、副教授、讲师、助教的各有多少人。 USE js.dbf EXCLUSIVE STORE 0 TO t1, t2, t3, t4 DO WHILE .NOT. EOF() DO CASE CASE zcmc=“教授“ t1=t1+1 CASE zcmc=“副教授“ t2=t2+1 CASE zcmc=“讲师“ t3=t3+1 OTHERWISE t4=t4+1 ENDCASE SKIP ENDDO,2,10 SAY “ 教授的人数:“+STR(t1) 4,10 SAY “副教授的人数:“+STR(t2) 6,10 SAY “讲师的人数:“+STR(t3) 8,10 SAY “助教的人数:“+STR(t4) USE RETURN,循环语句常用的条件表达式,DO WHILE X5 DO WHILE .NOT. BOF():记录指针不在文件头时为.T. DO WHILE BOF():记录指针在文件头时为.T. DO WHILE .NOT. EOF():记录指针未到文件尾部 DO WHILE EOF():记录指针已到文件尾部 DO WHILE .T.: 永真循环,死循环,需强制退出,54,7.4.3 SCAN 循环,适用条件:仅用于处理表中的记录 格式: SCAN FORWHILE LOOP EXIT ENDSCAN 循环控制条件:EOF( )的值,SCAN循环又称数据表扫描型循环或者指针型循环,即根据表中的当前记录指针,决定循环体的执行次数。,55,56,7.4.3 SCAN 循环,【例7-22】将教师表(js.dbf)中职称是“助教”的基本工资增加500元,其他不变。 CLEAR USE js.dbf EXCLUSIVE SCAN ALL FOR zcmc=“助教“ REPLACE jbgz WITH jbgz+500 ENDSCAN USE RETURN,57,7.4.3 SCAN 循环,【例7-23】统计学生表中女生党员的人数。 CLEAR USE xs.dbf EXCLUSIVE x=0 SCAN ALL FOR xb=“女“ .AND. dyf x=x+1 ENDSCAN 10,30 SAY “女生党员的人数是: “ 10,52 SAY x USE RETURN,58,7.4.4 循环嵌套,循环嵌套,在一个循环的循环体内又包含有其他循环。,注意:,(1)内层循环必须被完全包含在外层循环之中,不得交叉。 (2)程序每执行一次外层循环,则其内层循环必须执行完所有的循环次数,之后才能进入到外层的下一次循环,依此类推。 (3)当循环语句与分支语句嵌套使用时,也不能出现交叉。,59,【例7-24】编程计算s=1!+3!+5!+25!,p=1 FOR j=1 to i p=p*j NEXT j,s=0 FOR i=1 TO 25 STEP 2 s=s+i NEXT i,求累加和,求阶乘,60,【例7-24】编程计算s=1!+3!+5!+25! s=0 FOR i=1 TO 25 STEP 2 p=1 FOR j=1 to i p=p*j ENDFOR s=s+p ENDFOR ?s RETURN,61,7.5 用户自定义函数和过程,在程序设计中,经常把完成一个特定功能的程序编写成一个函数或过程,作为一个独立的模块,以便在其他程序使用该功能时调用此模块。 这种用以完成一个特定功能的程序,称为用户自定义函数或过程。,62,7.5.1 用户自定义函数,一、定义格式 FUNCTION PARAMETERS RETURN ENDFUNC,函数体,返回值,缺省为.T.,63,7.5.1 用户自定义函数,二、调用格式 函数名(),两种使用形式: (1)直接写在主程序中,是主程序的一个相对独立的程序段; (2)一个独立的程序文件,文件名即函数名。,64,7.5.1 用户自定义函数,【例7-27】利用用户自定义函数求x!+y!,要求x和y从键盘上随机输入。 CLEAR INPUT “请输入x的值:“ TO x s1=fJC(x) &调用函数fJC INPUT “请输入y的值:“ TO y s2=fJC(y) &调用函数fJC ?STR(x,4

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论