课件 Visual Foxpro PPT 第3章程序设计基础.ppt

上传人(卖家):三亚风情 文档编号:2730928 上传时间:2022-05-22 格式:PPT 页数:82 大小:451.50KB
下载 相关 举报
课件 Visual Foxpro PPT 第3章程序设计基础.ppt_第1页
第1页 / 共82页
课件 Visual Foxpro PPT 第3章程序设计基础.ppt_第2页
第2页 / 共82页
课件 Visual Foxpro PPT 第3章程序设计基础.ppt_第3页
第3页 / 共82页
课件 Visual Foxpro PPT 第3章程序设计基础.ppt_第4页
第4页 / 共82页
课件 Visual Foxpro PPT 第3章程序设计基础.ppt_第5页
第5页 / 共82页
点击查看更多>>
资源描述

1、第第3章章 程序设计基础程序设计基础3.1 VFP应用程序设计3.2程序文件的建立与执行3.3程序设计基本语句3.4程序控制的基本结构3.5过程与过程文件3.6综合程序设计范例3.1 VFP应用程序设计VFP的工作方式的工作方式命令方式菜单方式程序方式 VFP程序设计过程程序设计过程VFP应用程序包括:一个或多个数据库、 设置系统环境的主程序、用户界面 (如表单、工具栏和菜单等),还可以包括查询和报表。 设计数据库、确定功能需求 | 创建数据库、表、视图、关系 | / 方便用户使用 帮助用户访问信息 表单、菜单、工具栏 查询、报表、图形 / | 测试与调试 | 应用程序 创建一个完整的VFP应

2、用程序的全过程 VFP程序设计方法程序设计方法 面向过程程序设计 自顶向下 层层分解子程序之间有严重顺序性和依赖性软件稳定性、可修改性、扩充性、重用性差 面向对象程序设计方法继承 封装 多态各部件相对独立 稳定性、可修改性、维护性、可重用性高 3.1 VFP应用程序设计(续)3.2 程序文件的建立与执行 创建程序 Modify Command 文件名保存程序 修改程序Modify Command 程序文件的调用 DO 程序结束: 文件的末尾(返回到调用行的下一行). Return(返回到调用行的下一行) Retry(返回到调用行本身, 可以实现程序的 重复调用) Cancel(中断, 异常结束

3、, 并返回到命令窗口)Quit(返回到操作系统)命令文件(.prg) 在运行时先自动编译生成目标程序(.fxp)再执行. 3.2 程序文件的建立与执行(续)程序文件的建立与执行(续) 3.3程序设计基本语句1程序注释: Note 或: *2. 语句注释 & 3.3.1 程序注释语句1.中断语句Cancel 功能:中断程序的执行,返回到命令窗口2.挂起语句Suspend功能:暂停当前程序的执行,并返回到系统命令窗口3.恢复执行语句Resume功能:恢复被挂起的程序,使之从暂停的位置继续执行3.3.2 程序调试语句1. 换行输出 ?功能:分别计算表达式列表的值,并将其输出在当 前光标的下一行2.

4、同行输出 ?3.3.3 简单的输出语句3.3.4 简单的输入语句1. 数据接收语句: Input To 功能: 将键盘输入的数据赋给指定的. 将显示在屏幕上。数值型以外的常量, 必须输入其定界符.例: Input “请输入出生年月:” To csny Input “请输入奖学金:” To jxjInput “请输入学号:” To xh 2. 字符串接收语句 Accept To 从键盘输入的数据只能是字符型常量, 且不需定界符.例: Accept 请输入姓名: To xmAccept 请输入学号: To xh3.3.4 简单的输入语句(续)3. 单字符接受语句 Wait To Window At

5、 Nowait Noclear Timeout 从键盘输入的数据只能是单字符型常量.例: Wait “请检查输入内容” Window At 10,403.3.4 简单的输入语句(续)3.3.5 环境设置语句Clear 清屏Set Talk On/Off功能: 打开/关闭对话开关Set Delete On/Off功能: 是否忽略有删除标记的纪录. Set Exact On/Off功能:字符串比较是否为精确比较Set Carry On/Off功能: 向表中添加纪录时是否将上一条记 录的内容作为新纪录的默认值Set Default To 功能:设置系统缺省路径.缺省为当前目录Set Exclusiv

6、e On/Off功能:设置表打开方式为独占或共享Set Escape On/Off功能:程序运行期间按Esc健是否可中断退出Set Udfparms To Value/Reference功能:调用自定义函数时参数的传递方式是 传值还是引用3.3.5 环境设置语句(续)3.4 程序控制的基本结构程序控制的基本结构例1:求学生表中指定班级的全体学生的奖学金总额。3.4.1 顺序结构ClearUse 学生Input 请输入指定的班级: To bjSum 奖学金 To jxj For 班级=bj? bj+ 班全体学生的奖学金总额为: +Str(jxj,5,2)Use3.4.2 选择分支结构 二路选择分

7、支结构:IfEndIf多路选择分支结构:Do CaseEndCase1二路选择分支结构If ThenElseEndIf ClearInput a= TO aInput b= To bInput c= To cD=b*b-4*a*cP=-b/(2*a)If D0?复根复根ElseIf D=0 ? X1=x2=, PElseD1=sqrt(D)?X1=, (-b+D1)/(2*a)? X2=, (-b-D1)/(2*a)EndifEndif例2: 求一元二次方程aX2+bX+c=0的根。a,b,c由键盘输入。2.多路选择分支结构 Do CaseCase CaseCaseOtherwiseEndca

8、se 3.4.2 选择分支结构例3: 从键盘输入学生的学号, 在成绩表中计算该生的平均成绩, 并给出成绩的档次.(优、良、中、及格、不及格),如果该生不在表中则提示相应的信息。 Use ChjAccept 请输入学生的学号请输入学生的学号: To xhLocate For 学号学号=xhIf !Found() ?查无此人查无此人!ElseAverage 成绩成绩 To 平均分平均分 For 学号学号=xh Do Case Case 平均分平均分=90dc=优优 Case 平均分平均分=80dc=良良 Case 平均分平均分=70dc=中中 Case 平均分平均分=60dc=及格及格 Other

9、wisedc=不及格不及格Endcase? 学号学号,姓名姓名,平均分平均分,dcEndifUse3.4.3 循环结构循环结构三种循环语句: Do While EndDo ScanEndScan ForEndFor 1. Do While EndDo Do While Exit Loop EndDo 1).对循环次数不确定的程序进行操作Do While .T. If Exit EndIfEndDo 例4: 对多个学生成绩的查询 3.4.3 循环结构循环结构Use chjDo While .T. Accept 请输入学生的学号请输入学生的学号: To xh Locate For 学号学号=xh

10、If !Found() ?查无此人查无此人! ElseAverage 成绩成绩 To 平均分平均分 For 学号学号=xhDo Case Case 平均分平均分=90 dc=优优 Case 平均分平均分=80 dc=良良 Case 平均分平均分=70 dc=中中 Case 平均分平均分=60 dc=及格及格 Otherwise dc=不及格不及格Endcase? 学号学号,姓名姓名,平均分平均分,dc Endif Wait 还要查询吗还要查询吗?(y/n) To yn If Upper(yn)=y Loop Else Exit EndifEnddoUse2).对文件的记录逐条进行操作。 Do

11、While .Not.Eof()/Bof() Skip/Skip -1 EndDo3.4.3 循环结构循环结构Set Talk OffClearUse 学生Do While .Not.Eof()If 奖学金0?姓名, 奖学金EndifSkipEnddoUseSet Talk On 例5: 显示输出“学生” 表中的获得奖学金的学生 姓名和奖学金数额. Set Talk OffClearUse 学生Locate For Year(出生日期)1978Do While !Eof()?姓名, 出生日期ContinueEnddoUseSet Talk On 例6: 输出学生表中1978年以前出生的学生姓名

12、和出生年月3). 通过状态测试函数Do While EndDo3.4.3 循环结构循环结构例7:利用状态测试函数Inkey(0)编写一段等待程序,对程序段进行循环操作控制,直到用户按回车键才继续执行其他操作。Set Talk OffClear?”请在驱动器中插入软盘,准备好后按回车”Do While Inkey(0)!=13EndDoDir A:Set Talk On2. Scan Endscan(指针型)Scan 范围 For whileEndscan功能: 对当前打开的表文件在指定范围、满足条件的记录 中自上而下逐个扫描,随着记录指针的移动, SCAN 循环对选中的每条记录执行相同的。 3

13、.4.3 循环结构循环结构Set Talk OffClearUse 学生Scan For 奖学金200 .And. 性别=.T.?姓名, 奖学金EndscanUseSet Talk On 例8: 显示输出学生表中奖学金大于200元的男生的姓名和奖学金数额. 3. For EndFor1) For 循环变量=初值 To 终值 Step 步长 EndFor/Next2) For Each In / EndFor/Next 3.4.3 循环结构循环结构Set Talk OffClearUse 学生For N=1 To Fcount()? Field(n)EndForUseSet Talk On 例9

14、:显示学生表中的全部字段名。 4. Exit 语句格式: Exit功能:无条件跳出循环,转去执行EndDo、EndScan或EndFor后面的语句。5Loop 语句格式:Loop功能:用在循环语句的循环体中。在执行循环体时如果遇到该语句,就立即转向循环语句头部,即返回到Do While、For或Scan。在For 循环中返回会修改循环变量的值,在Scan循环中返回会移动记录指针,然后重新判断循环条件。3.4.3 循环结构循环结构3.4.4 多种结构的嵌套多种结构的嵌套 例10: 通过数组完成对学生表的数据录入工作(备注字段和通用字段忽略),当用户按ESC键时, 结束录入操作. Set Esca

15、pe OffUse 学生r=0For i=1 To Fcount()Zdm=field(i)If Type(zdm)=“M.Or. Type(zdm)=“G“r=r+1EndIfEndForDimension A(fcount()-r)Do While .T.j=0For i=1 To Fcount()-r j=j+1 zdm=Field(j) Do While Type(zdm)=“M.Or. Type(zdm)=“G j=j+1 zdm=Field(j) Enddo Input 输入字段: +Field(j) +, 类型为: +Type(zdm) To A(i)EndForAppend B

16、lankGather From AIf Inkey(0)=27ExitEndifEnddoUseSet Escape On 3.5 过程与过程文件过程与过程文件1. 调用:Do With 返回: Return To Master 子程序执行时遇到以下情况时, 自动结束返回:ReturnRetry Cancel Quit 子程序末尾 3.5.1 子程序*p1.prg*Do P2Return*p2.prg*Do P3Return*p3.prg*Return*p1.prg*Do P2Return*p2.prg*Do P3Return*p3.prg*Return To Master图1图2*P1.Pr

17、g* *P2.Prg* Set Talk Off ?早上好! Clear Do P3 ?“同学们!” ?下午好! Do P2 Return ?“晚上好!” Return *P3.Prg* ?中午好!Return 例11:2. 主程序用with语句向子程序传递参数例12:*cfx.prg*a=4b=6s=0Do Cfx-1 With 4,a+b,s? “s=”, s *cfx-1.prg*Parameters 长,宽,面积面积=长*宽?“面积=”, 面积Return3.5.2 过程程序设计 1.过程定义:Procedure EndProc 2. 过程文件的建立*P1.Prg*Proc P11*过

18、程代码EndprocProc P12*过程代码Endproc*P2.Prg*主程序代码Proc P21*过程代码Endproc*P3.Prg*Proc P31*过程代码Endproc 3. 过程文件的调用 调用过程文件中的过程之前必须先打开过程文件, 调用结束后要关闭过程文件.打开: Set Procedure To 关闭: Set Procedure To 或: Close Procedure调用:Do With3.5.2 过程程序设计 例13: 程序p-13.prg和过程文件prc1.prg*p-13.prg*Set Proc To Prc1Set Talk OffClear?同学们!Do

19、 P2?晚上好!Return3.5.2 过程程序设计 *过程文件prc1.prg*Proc P2?早上好!Do P3Endproc Proc P3?中午好!Endproc 程序的执行:Set procedure to prc1 Do p-133.5.3 参数传递及作用域参数传递及作用域 利用内存变量的作用域属性 利用Do With 一利用内存变量作用域属性传递参数 自然属性 公用属性私有属性本地属性1. 自然属性 (1)定义格式:无特别声明(2)作用范围:该程序及其调用的下属子程序。(3)传递方向:单向(由主程序到子程序)。在主程序中出现的自然属性的内存变量在其调用的下属子程序中可以直接使用,

20、并且可以改变其值。当调用结束返回到主程序中时,主程序中自然属性的内存变量的值为最近一次被改变后的值。但在主程序中没有出现而在子程序中出现的自然属性的内存变量,在其上属主程序中则不可以直接使用。 (4)变量寿命:所在程序运行结束后被自动清除。 例14:运行下列程序,并分析运行结果。*p-14.prg*Set Procedure To Proc2ClearSet Talk OffA=1B=good?”P1:”List Memo Like ?WaitDo P2?”P1:”List Memo Like ?Wait*过程文件proc2.prg*Proc P2c=5a=a+cb=date()?”P2:”L

21、ist Memo Like ?Wait Do P3?”P2:”List Memo Like ?WaitEndproc Proc P3a=12345b=Year(b)c=Str(c,1)d=56?”P3:” List Memo Like ?WaitEndproc 2公用属性(1)定义格式:Public用Public定义过的变量的初值为逻辑假.f.(2)作用范围: 整个系统的所有程序(3)传递方向: 双向(可以由主程序到子程序,也可以由子程序到主程序)(4)变量寿命: 程序运行结束后, 内存中依然保留该内存变量. 例15:运行下列程序,并分析运行结果。*p-15.prg*Set Procedure

22、 To Proc3ClearPublic a,ba=1b=good?”p1:”List Memo Like ?WaitDo P2?”p1:”List Memo Like ?Wait*过程文件proc3.prg*Proc P2Public cc=aStore Date() To a,b?”p2:”List Memo Like ?Wait Do P3?”p2:”List Memo Like ?WaitEndprocProc P3a=12345b=Year(b)c=Str(c,1)Public dd=56?”p3:”List Memo Like ?WaitEndproc 3. 私有属性 类似自然属性

23、, 能在其下属的所有子程序中使用, 而并不被所有程序共享. 当出现私有属性内存变量与上级主程序中的一些内存变量同名时, 上级主程序中的同名内存变量将被隐藏起来, 保持原有的值, 而不受下属程序中同名私有内存变量值的影响. 必须先声明后使用 .(1)声明格式: Private 或Private All Like / Except (2)作用范围: 该程序及其下属子程序(同自然属性变量)(3)传递方向: 单向(由主程序到子程序,同自然属性变量)(4)变量寿命: 程序运行结束后自动被删除, 同自然属性 变量)(5)特殊作用: 可屏蔽上级程序中与当前程序同名的变量, 即对当前程序中私有属性变量的操作,

24、 不影响上级程序中与当前程序同名的变量值.例16:运行下列程序,并分析运行结果。*p-16.prg*Set Proc To Proc4ClearPublic a,ba=1b=good“?”p1:”List Memo Like ?WaitDo P2?”p1:”List Memo Like ?Wait*过程文件proc4.Prg*Proc P2Private ac=12Store Date() To a,b?”p2:”List Memo Like ?Wait Do P3?”p2:”List Memo Like ?WaitEndprocProc P3a=12345b=Year(b)c=Str(c,2

25、)Private cStore 5 To a,b,c?”p3:”List Memo Like ?WaitEndproc4. 本地属性 只能在其所处的程序中使用, 而不被上级程序或下属子程序共享.当本地属性内存变量与上级主程序中的一些内存变量同名时,上级主程序中的同名内存变量将被屏蔽起来, 保持原有的值,而不受同名本地属性的内存变量的影响. 而当本地属性的内存变量与下属子程序中的一些内存变量同名时, 该本地属性的内存变量保持原有的值, 而不受下属子程序中同名内存变量值的影响. 必须先定义后使用. (1)定义格式: Local 用Local 定义过的变量的初值为逻辑假.f.。(2)作用范围:该程序

26、本身。(3)传递方向:无。(4)变量寿命:程序运行结束后,被自动删除。(5)特殊作用:可屏蔽上级程序中与当前程序同名的变量,即对当前程序中变量的操作,不影响上级程序中与当前程序同名的变量值。同时也不受下属子程序中同名内存变量值的影响。 例:运行下列程序,并分析运行结果。*P-17.prg*Set Procedure To Proc5ClearPublic a,ba=1b=good“?”p1:”List Memo Like ?WaitDo P2?”p1:”List Memo Like ?WaitReturn*过程文件proc5.prg*Proc P2Local aC=12Store Date()

27、 To a,bList Memo Like ?Wait Do P3List Memo Like ?WaitEndproc Proc P3a=12345b=Year(b)c=Str(c,2)Local cStore 5 To a,b,cList Memo Like ?WaitEndproc 二、利用DO WITH传递参数传递参数 Do With 接收参数 Parameters 规则1)传递参数命令可以出现在调用程序(主程序)中的任何位置, 接收参数命令必须出现在被调用程序(子程序)中的第一行 2)参数传递方式:引用、传值引用方式是内存变量列表 每个内存变量的值传给Parameters 中对应变量

28、, 而该调用程序(主程序)中的内存变量被隐含起来(即不受被调用程序中同名变量的影响), 但其值随着传给被调用程序(子程序)中的接收参数值的变化而变化. 传值方式是内存变量表达式(由常量、变量、函数和运算符组成)列表或单个内存变量用圆括号括起来每个内存变量表达式的值传给Parameters中对应变量,而该调用程序(主程序)中的出现在表达式中的变量不被隐含(即受被调用程序中同名变量的影响), 其值不随着传给被调用程序(子程序)中的接收参数的值的变化而变化。这种参数传递方式称为传值。例:参数传递的引用方式。Set Proc To proc6ClearSet Talk Offa=1b=goodList

29、 Memo Like ?WaitDo P2 With a,bList Memo Like ?WaitReturn *过程文件proc6.prg*Proc P2Parameters x,yy=y+“morning!”x=date()+xa=100b=“ok!”List Memo Like ?Wait Endproc 例:参数传递的传值方式Set Proc To proc7ClearSet Talk Offa=1b=goodList Memo Like ?WaitDo P2 With a+9,(b)List Memo Like ?WaitReturn *过程文件proc7.prg*Proc P2P

30、arameters x,yy=y+“morning!”x=date()+xa=100b=”ok!”List Memo Like ?Wait Endproc 3.5.4 用户自定义函数用户自定义函数 1自定义函数的设计(1)定义:自定义函数是一个子程序(.PRG), 它 可以返回一个值到调用程序.(2)建立: 与一般命令文件的建立方法相同. 存在形式:FUNCTION 自定义函数名语句序列ENDFUNC(3)特点: 首条命令:Parameters 尾条命令:Return 2自定义函数调用与参数传送 (1)调用不能用DO命令调用,只能出现在表达式中。 (2)参数传送:传值,引用如果在中以表达式的形

31、式出现, 那么是传值的方式;如果在参数变量前冠以, 那么将采用引用的方式.例: 编写一个函数, 判断给定的正整数是奇数还是偶数. 是偶数返回.T., 是奇数返回.F.*jos.prg*Function josParameters xIf Int(x/2)=x/2Return .T.ElseReturn .F. Endif调用:?JOS(8) 结果:.T.例: 编写一个函数, 计算给定的三条边(三个正数)所构成的三角形的面积.如果给定的三条边能构成一个三角形, 则返回面积值, 否则返回数值0. Function TareaParameters A,b,cIf A+bc And B+ca And

32、A+cbS=(a+b+c)/2Area=sqrt(s*(s-a)*(s-b)*(s-c)Return AreaElseReturn 0Endif调用:?TAREA(3,4,5) 结果:6例: 对上题通过参数引用方式将三角形面积传回,如果能构成三角形,返回.T.,否则返回.F. Function Tarea1Parameters A,b,cIf A+bc And B+ca And A+cbS=(a+b+c)/2A=sqrt(s*(s-a)*(s-b)*(s-c)Return .T.ElseA=0Return .F.EndifEndfunc调用:x=3 y=4 z=5 ? Tarea1(x,y,z

33、) ? x3.5.5综合程序设计范例综合程序设计范例 例1: 编写一个函数, 返回给定正整数型数值表达式中包含指定数码的个数. (如: 数值2345105中包含数码5的个数为2) Function nctParameters x,y s=0m=x Do While .T. n=Mod(m,10) If n=ys=s+1EndifM=Int(m/10) If M=0ExitEndifEnddoReturn sEndfunc调用:A=23503400B=0cnt=nct(a,b)?cnt结果:3 3. 表内容处理例: 显示输出学生表中每个班级的男女同学的奖学金总额. ClearUse XsdaIn

34、dex On 班级 To Bj?*各班男女同学奖学金总额*?班级 男同学奖学金总额女同学奖学金总额Do While .Not.Eof()Class=班级Store 0 To Boys, Girls Do While 班级=classIf 性别=“男” Boys=boys+奖学金 Else Girls=girls+奖学金 EndifSkipEnddo? Str(class,2)+str(boys,16,2)+str(girls,22,2)EnddoUse2. 字符处理例: 编写一个函数, 返回给定的字符串表达式的倒置字符串. (如: ABCD倒置后为DCBA) Function CcParameters X Set Talk OffC=space(0) L=len(x) Do While L0 Q=substr(x,l,1)C=c+q L=l-1 EnddoReturn C Endfunc调用:a=godcn=cc(a)? cn 结果: dog

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(课件 Visual Foxpro PPT 第3章程序设计基础.ppt)为本站会员(三亚风情)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|