VF基础教程.pdf

上传人:l**** 文档编号:73104698 上传时间:2023-02-15 格式:PDF 页数:88 大小:5.98MB
返回 下载 相关 举报
VF基础教程.pdf_第1页
第1页 / 共88页
VF基础教程.pdf_第2页
第2页 / 共88页
点击查看更多>>
资源描述

《VF基础教程.pdf》由会员分享,可在线阅读,更多相关《VF基础教程.pdf(88页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、菜鸟学习 VFP 前言 大学的暑假是珍贵的,像我这样暑假呆在家里面,整天无所事事的同学不在少数,为了应付枯燥乏味的暑假,我决定在暑假学习一些知识,挑来挑去还是觉得选 VFP 比较有意义,因为这门科需要过二级,相信许多看到这篇文章的朋友也要过二级,那么我们大家就从今天开始共同学习吧。所以从今天起,我的网上 VFP 学习课程便开张了,希望我能写完。说起为什么会开这个专题,我相信很多读者都有疑问,学习就学习是了,干嘛还将自己的学习成果放到网上来我在这里要澄清一下,之所以我会选择这样做,是因为我觉得一个人在家里面学习太没有那种气氛了,我希望能够放到网上来,大家看着想着,遇到问题大家可以在一起讨论,在一

2、起互相提意见,还有就是希望能够帮到有心学习 VFP,但是却觉得枯燥乏味而放弃的朋友。在更新期间,我将在我的 QQ 空间(天下人犯是一家),上更新。欢迎大家转载,转载请注明出处,也希望大家能够在我的博客上踊跃发言。首先要说明的是本文仅针对上机考试编写,让你能够在计算机上完成初级的数据库程序开发。关于理论的请多阅读教材。另外是针对 VFP 的初学者,也就是菜鸟级人物来学习,为了应付随之而来的省和国家二级 VFP 考试的同学使用,如果是 VFP 数据库专业人员来这里的话,希望多提提意见,不要见笑,错误之处,还请指正,就此拜谢!呵呵。VFP 是 microsoft 公司开发的一款数据库管理系统(DBM

3、S),全称是 Visual FoxPro。作为二级考试科目的是采用关系数据库系统 Visual FoxPro (为了区分版本,在以后的文章中简称为 VF6),VF6 是小型数据库管理系统的杰作,它以强大的性能,完整而又丰富的工具,较高的处理速度,友好的界面以及较完备的兼容性等特点,备受广大用户的欢迎。(注:该段内容来自国家二级考试 VFP 课本前言高等教育出版社出版)好了,套话到此结束,本来上面的那一段话不想写的,然后又觉得至少把出处点明,在吹吹牛,说 VFP 多好多好,毕竟人家公司开发这系统也不容易。由于 VF6 毕竟作为一门课程来学习,枯燥乏味在所难免,但在这里,我尽量用友好,和谐,幽默的

4、语言来面对大家,希望给赏光的读者带来一个愉快又充实的暑假。第一次写前言,写的不好,大家请多多海涵,不要留言骂我 第一天:VF6 编程基础(一)VFP 程序安装简要说明 在正式写这一课之前,我想先讲一下 VF6 程序安装说明,当然看到这儿的读者的电脑里面可能已经安装了 VF6,那么本节可以略去直接看下一节。其实正版的图书里面大都是说买什么 microsoft visual studio 套件包含有四个编程软件什么的,总的来说,在我们国家的情况下,这些在我看来纯属废话,就让写这句话的人自己去买,他都不一定干。归根究底还是咱国家的盗版太猖獗了,网络管制虽说最近见好,但是哪有那么容易彻底呢,所以大家可

5、以利用你的网络优势,马上去百度吧,这里需要说明的是一般 done 下来的压缩包解压后是一个文件夹,我相信以你的电脑能够达到安装 VF6 的最低配置要求,双击 SETUP 安装,写序列号的那儿都填 1 吧,如图所示。然 后 直 接 点“下一步”,选择典型安装就行,最后会提示安装MSDN,直接不睬他,我们不需要,安装好之后便可以进入课程学习了。对于盗版,我也无语了,知识产权在我们国家很难受保护,是政府的打击力度不够大吗怪不得游戏市场在中国没有盗版就没有市场是一条铁定法则了。编程基础 纵观 VF6,只有这一部分可以独立出来学习了,咱们现在关于什么是数据库,什么是二维表,什么是表单,等不懂没有关系,先

6、通过学习编程来了解一下程序设计语言,这对以后的 SQL 语言学习,面向对象程序设计,菜单,报表等设计都有很大的好处。既然是基础,那就是从变量,常量开始说起,这两个概念,相信学过数学的人都懂,但是在计算机程序语言关于常量的概念中加入了数据类型这么个要素,相信这也不难理解,以下的,我们死记硬背:VF6 中的常量有:数值型(N),字符型(C),货币型(Y),日期型(D),日期时间型(T),逻辑型(L)。在这里不要把表的记录形式弄混了,表的记录类型中还有浮点型(F),双精度型(B),整型(I),备注型(M)和通用型(G)。我在这儿点出来了,希望读者能够给予注意。关于常量的类型,我觉得没啥好说的,书上讲

7、了一大堆,其实只要看常量名就能知道数据的大致内容了,这里有必要说一下逻辑型的数据只有”.T.”和”.F.”两种,即是和否,然后说一下,在程序中将这些常量数据赋给变量的时候必须加定界符,下面举例说明:(1)将数值型赋给变量:store 23 to x 即直接赋值,无需加定界符。(2)将字符型赋给变量:store “你好”to y,即需要在数据两边加上一对引号,可以是双引号,也可以是单引号,一般也可以以括号的形式赋值,如 x=你好.(3)将货币型赋给变量:store$100 to z ,即在数字前面加上”$”.其他的细节参阅书本,在此不做详细介绍(不是我懒,实在没这必要)。(4)将日期型赋给变量:

8、store 1990-08-20 to w ,即在数据上加一对大括号,然后数据前方加上“”,这是严格的日期格式,还有传统的日期格式:08/20/90 08-20-1990 08 20 1990 等。然后日期的显示格式都是可调的,比如年份的位数,月日年,年月日,日期间隔符号等。比如:set century on/off set date to ymd(year month date)set mark to“-“这容易套吧以后所有的语句我都是通过举例的方式来让读者套用,而不像书上直接把公式写出来,很是晦涩。(5)日期时间型赋给变量:store 1990-08-20,02:38a to r Dime

9、nsion x(2,2)这样便定义了一个二维数组,包含四个变量,即 x(1,1),x(1,2),x(2,1),x(2,2)。整个数组的数据类型为 A(array)array 为英文数组的说法。实际在编程中经常会遇到一维数组的使用,二维数组较复杂,编程题中较罕见,有兴趣去翻一些专业的教材。在后面的编程题中,我会通过举例的方式来使用一维数组。下面我们共同学习程序中的表达式,先学习最简单的数学表达式。加,减,乘,除分别对应于“+”,“-”,“*”,“/”次方是数字前面加一个”,然后加上幂数。或者是数后面用两个乘号,如 6 的三次方为 63 或者 6*3,根号同样可以写成幂指数。最后是求余公式“%”如

10、:8%3=2 ,还有括号的用法和数学类似括起来就是将某个表达式单独运算,如:6(1/2)=(默认保留两位小数),其他的我们菜鸟暂时不用掌握。怎么样简单吧,数学公式中用上面的几个符号就可以表达出来了。还有字符表达式,等在高等教育出版社出版的二级 VFP 教程上第 56 页有详细的介绍,先去翻课本。翻完后再继续回来看。下面将所学的内容复习一下,以上所说的内容实例见下图,大家在看完后,最好也先能实际操作一下,(所有标点符号用西文状态下的!)好了,大家书本上的知识都看完了吧,相信我们都对常量,变量,表达式有了初步的了解,下面进入程序的基本组成元素,函数。函数分为数值函数,字符函数,日期时间函数,数据类

11、型转换函数,测试函数,在教材的 61 页,再去看书吧(真的不是我懒,实在是不需要,我写的这玩意只是教程,不是教才,这些基础的必须要通过书本来掌握,如果这些我都写那整个暑假都是不够的,所以关于函数,在程序中遇到,就会有详细的解释)今天是第一天,说的内容不多,其实也没啥好说的,希望读者能够把常量的几种类型,变量,以及数组,表达式,函数,等牢记于心,明天我们正式讲简单的 VFP 程序编写。哦,很晚了呢,我想去困觉了,今晚开始准备写这玩意,希望我能一直写下去,如果大家支持的话,我会很高兴的,如果没有人支持,我也要一直坚持下去。第二天:VF6 编程基础(二)昨天较为简单的说明了程序语言中常量,变量,以及

12、函数表达式等程序体的基本元素,今天我们正式说明在 VF6 中最基本的面向过程程序语言编写。其实在我看来,程序语言就是许多个表达式连在一起而组成的特定的格式的文本,例如我们在小学里经常会遇到这样的数学题:小明在二个小时走了 8km 的路程,问你小明家离学校有 2km,需要多少时间才能到 我们现在可能会直接就写出答案了,说来惭愧,那个时候我上小学的时候最怕遇到此类应用题,当时我们会先写出公式算出每小时走多远,然后在拿 2 除以这个每小时走的路程。得到的就是我们想要的答案:具体写出来就是:82=4(千米)24=(小时)这个就是我们当时的解题步骤,最后不要忘了答一下,呵呵。当然这个比较简单,今天我们想

13、要说的是程序,就假设我们来编程算这个应用题,我们的思路和上面的一样,只是用VFP 的程序语言,首先,我们在程序语言里面经常会先清除窗口内容,即 clear,所以我们在做编程题的时候,这个一般不重要,这个 clear 可要可不要,在程序结束处还有个 RETURN,这在我们平时的编程里面也是可有可无的,它的作用是返回调用它的上级程序,在一些大的程序里面那就必须引起足够的重视。我们在编程的过程中我们得到了另外的常量 4 和最后的结果,因此我们需要两个变量来存储它们,意思就是给它找个代号,在表达式中引用它。最后要说明的是输出号是“”和“”前一个是在主程序中换行输出,后一个是不换行输出。一次性可以同时输

14、出多个结果,将这些变量和常量之间用“,”号或空格隔开。当然在输出常量的时候记得加上定界符!下面我们把上面的转换成为 VFP 程序语言。双击打开 VF6,然后点文件-新建-程序-新建文件,或者在命令窗口中输入 modi command 然后输入程序语言,输入完毕后点程序-运行,或者直接点工具栏上的感叹号,首先系统会提示你先保存,这里说一下,在以后的程序文件和数据库文件中,我的位置是在 E 盘 vfp 文件夹,建议大家使用同样的文件名,文件路径和文件夹。*cx1 Clear T=8/2&算出中间值,用 T 存储 S=2/t&得出结果,存储在变量 s 中”需要”,s,”小时”Return 说明一下,

15、这里以*号开头的一行,以及每行&后面的部分均为解释说明,不参与运行,因此读者在输入程序时可以把这些忽略掉。程序及其运行结果如图所示:好了,这就是我今晚要说明的第一个程序,虽然非常简单(简单到什么程度呢没有用到函数,没有用到程序语言,甚至表达式一步就能搞定:s=2/(8/2),呵呵。),我却花了很多的文字,目的是希望大家都能看懂,这样我也会倍感欣慰,有必要说明一下,在以后的程序编写中,如果大家有更好的方法,希望你能以留言的方式告知与我,感激不尽)上面只是为程序开了个头,下面我们继续,这次我们来编这个老掉牙的程序,给你一个半径,算出圆的周长与面积:圆的周长为:C=2r 圆的面积为:s=r2 这里我

16、们需要用到一个函数,圆周率函数,相信我们在昨天已经记得这个函数了:PI()它就是得到圆周率的函数可以直接当一个常量来使用。然后我们需要从键盘接受一个值作为半径,我们用 r 来存储这个值。然后接收数据在VF6 中有两种 input 和 accept 前一种可以接收任何类型的常量,但需要加上定界符,后一个不管输入什么都是当成字符型(C)常量来对待。好了,下面看程序体:*cx2 Clear Input“请输入圆的半径”to r&接收圆的半径值。引号里面的内容显示在主窗口。C=2*pi()*r&算出圆的周长 S=pi()*r2&算出圆的面积”圆的周长是:”,c,”圆的面积是:”,s Return 在这

17、里啰嗦一句,大家在试验这些程序的时候最好自己敲,不要复制,因为敲程序也是一项技术活。好了,程序及其运行结果如图所示:下面我们引进一个程序体里面的判断语句,通俗一点讲就是如果这样我该干哪些事,如果不是这样是那样我又该哪些事,如果不是这样又不是那样是其他的样子,我又该干哪些事这个语句就是 if 语句和 case 语句,本人看来其实还是 case 语句要简单的多,但其实二者都不难理解,只不过在条件比较多的时候,if 显的要麻烦一点。下面我通过举例的方式来说明程序中这两条语句的使用。从键盘接收一个数据,判断这个数据的类型,并输出。我们在前面已经讲过了,VFP 常量有六种基本类型,vartype 函数可

18、以返回这些数据的类型,其中有一个.null.值比较特殊,空值在普通的情况下返回的是 X 表明是空值如vartype(.null.)=”X”,但如果在函数后面加上一个.t.的逻辑表达式,如 vartype(.null.,.t.)则会返回 L 表明该数据为逻辑型,vartype 函数返回的是字符型,因此在程序中必须将 vartype 返回的值加上定界符引号,此外此函数还可以返回通用型,未定义型等,这些可以不用掌握,如感兴趣可以上网搜索。下面我们先用 if 语言做:*cx3 clear Input”请键入数据:”to a If vartype(a)=”C”&表面输入的数据是字符型,下同 ”这个数据是

19、字符型”Else If vartype(a)=”N”这个数据是数值型”Else If vartype(a)=”L”or vartype(a)=”X”这个数据是逻辑型”Else If vartype(a)=”D”这个数据是日期型”Else If vartype(a)=”T”这个数据是日期时间型”Else ”这个数据是货币型”Endif Endif Endif Endif Endif Return If 与 endif 是成对出现的,也就是从里向外一一配对,在程序体中,我将各级语言之间空了两个字符格,这也是笔试部分对程序语言的书写要求,然后我来随便解释一下,if 就是如果是这样,else 就是如果

20、不是这样,else 里面的 if 就是如果不是这样但是那样,if 下面的else 就是如果不是这样也不是那样,else 下面的 if 是如果不是这样也不是那样,而是另一个样子的意思好了,简单吧,还有更简单的,那就是用 case 语句来写,case 语言必须先有个头 DO CASE,意思就是从现在开始做选择,然后 case 这样,case 那样,最后都不是那就是 OTHERWISE,然后别忘了,下个结束命令 ENDCASE CASE 语言的程序体如下:*cx4 Clear Input“请输入数据:”to a Do case Case vartype(a)=”C”这个数据是字符型”Case var

21、type(a)=”N”这个数据是数值型”Case vartype(a)=”L”or vartype(a)=”X”这个数据是逻辑型”Case vartype(a)=”D”这个数据是日期型”Case vartype(a)=”T”这个数据是日期时间型”Otherwise ”这个数据是货币型”Endcase Return 好了,这就是 VF6 中的条件语句,简单吧,在很多的情况下,二者可以相互替代,主要就是看哪个要简单一些,相信读者对关于什么情况下使用什么样的语句已经胸有成竹了吧 下图给出上面两个程序的输出结果 现在我相信我们对程序语言已经有了一定的认识和了解了,下面我们继续学习程序语句中的精华部分,

22、循环语句。循环语句包含三种 即 DO WHILE FOR 和 SCAN,其中 SCAN 语句是浏览表文件记录的程序语言,而且思想方法很容易掌握,以后在介绍表之后在讲,暂时我们不管。先从 DO WHILE 语句来开始,记得以前上课的时候,我们的老师向我们说过 DO WHILE 和 FOR 语句的区别:前者不知道循环了多少次,而后者在知道循环的次数的情况下使用。感谢老师!其实 DO WHILE 语句看字面上挺容易理解的,就是当什么什么的情况下做,就是这样,然后在 DO WHILE 最后一定要有个 enddo 来结尾,如果在这期间希望程序能够跳出循环的话,或是回到循环的开始处继续的情况下分别在语句里

23、面加上 EXIT 和 LOOP,这两个单词不难背,很好掌握,当程序执行到 EXIT 时就会之间跳出循环体去执行 ENDDO 后面的程序语句,如果碰到 LOOP 语句时便会回到 DO WHILE 下一句执行。大家在编程的时候一定要注意循环语句会不会碰到死循环的情况,如果是死循环那就要考虑这两条语句了,这里顺便插一句,当我们编了死循环的语句后,VF6 便无限的执行下去,当你想关闭 VF6 时,上面会提示“无法关闭”,晕!其实这是有解决的办法的,想当初我第一次碰到的时候,我是直接把计算机给关闭了,汗呀,浪费了多少人力物力呀,其实有较为简便的方法,在 windows XP 操作系统下,我们可以按住 c

24、trl+alt+delete 调出 windows 的任务管理器,然后在应用程序选项卡上选中正在运行的 VF6,点击结束任务,强制退出 VF6,然后在重新启动 VF6 即可。下面我们来通过第一个例子,这个例子还是很普通的例子:判断一个数是否是同构数,即输入一个三位数,如果这个三位数的三个数字的立方和等于本身,那么它就是同构数。这个思想方法是先判断输入的数字是否为三位数,如果不是三位数,那么要求重新输入,并在屏幕上出现提示,(VF6 中在屏幕上出现提示的语句是 WAIT“字符”window,即在屏幕上显示字符内容,任意键消失,还可以在上述语句后加上 timeout 数字,表示经过多少秒后,如果用

25、户没有击键,窗口自动消失。)这里就需要用到循环语句和判断语句了。然后在得到各个位上的数字有两种方法,一种是通过数学的方法,例如百分位上的数字,可以拿这个数除以 100 然后取整,例如 int(345/100)=3 十位上的数字是将该数字减去百位上的数字乘以 100 后除以 10 再取余,例如 int((345-300)/10)=4,同理个位上的数字是将这个数先减去百位上的数字乘以 100,然后在减去十位上的数字乘以 10,得到各位上的数字;除了用数学的方法外,还可以用截取字符串的方法来截取数字,本例采用后者,前者在教科书上面貌似已经有答案了下面给出该程序的代码:*cx5 Do while.t.

26、&任何情况下,都循环,这就要求后面有一个 EXIT 语句来跳出循环 Input”请输入一个三位数”to x If len(allt(str(x)3&如果输入的数不是三位数*上面是先将数字转化为字符型,去空格后,在算长度。一般转化字符型才能返回长度 Wait“请按要求输入数字“window timeout 3&出现请按要求输入 3 秒后自动消失 Loop&回去,重来 Else A=val(left(str(x,3),1)&截取百位数字,先转化为字符型,截取后在转化成数值型,B=val(substr(str(x,3),2,1)&下同 C=val(right(str(x,3),1)If x=a3+b

27、3+c3&即这个数是同构数 x,”这个数是同构数”Exit&跳出循环体 Else x,”这个数不是同构数”Endif Endif&别忘了,前面的条件语句 Enddo&循环结束 Return 好了,这个程序写完了,大家现在对 DO WHILE 以及 IF 语句有了一定的了解了吧现在继续举个例子说明一下 FOR 语句的意思。For I=1 to 10 意思就是,I 从 1 开始运行当运行到 ENDOR 或者 NEXT I 的语句时,回到起点,此时 I=2 一直到最后一个 i=10,循环完毕,如果在 for I=1 to 10 step 2 那就表示 i=1 后紧接着 i=3,然后 i=5 懂得套了

28、吧亲爱的读者们。下面继续举例来说明该循环语句的使用:从键盘接收一个数 n,计算 1+2+n 的值 我们先用 Do while 语句来做。这个思想方法是用一个变量先存储 1,然后存储 1+2,然后慢慢一直加到 n,这里我们变量名取作 i 程序体如下:*cx6 Clear Input“请输入一个数:”to n s=0&先将 s 赋 0 值 i=1&记录循环的次数,决定该次循环应该加上的数的值 Do while in 时 不满足 i 所满足的条件时,循环结束。此时 s 的值即为所求值。下面我们用 for 语言来做,*cx7 Clear Input“请输入一个数”to n S=0&和上面一样,存储部分

29、和 For I=1 to n S=s+I Endfor s return 好了,这个就是for 语句做的结果,先从i=1开始,第一次i=1,s=0+1=1,第二次循环,i=2,s=1+2=3,第三次循环 i=3,s=3+3=6直到最后一次 s=s+n 时,循环结束,s 为所求值。这个简单吧比 DO WHILE 要简洁一点。下面给出此程序的运行结果:如果读者有兴趣的话可以分别用 do while 和 for 语句编这个计算 n!的程序,提示一下:这里的 s 初值要赋为 1,不能为零,否则,只能结果只能是 0.其实这些程序循环语句看着挺复杂,实际上只要我们弄懂了计算机读的方法也就简单多了,曾经和一

30、个朋友开玩笑,当你看到循环语句时,就把自己的脑子变成死脑筋,学着计算机那样一遍又一遍的循环,如果次数少你可以直接就把结果算出来了,如果次数多,你可以运用“公鸡归纳法“(不完全归纳法,呵呵,一个典故)将结果归纳出来。更为复杂的是循环的嵌套,例如看下面的例子 从键盘接收一个数 N,计算 1!+2!+3!+n!的值。该题我们首先肯定要把这 N 个阶乘的数分别算出来,然后把它们相加,故一般情况下,我们就可以考虑用嵌套语句来做。先用 do while 语句来做 *cx8 Clear Input“请输入一个数”to n I=1 K=0&k 用来存储部分和 Do while i=n&外层循环存储部分和 L=

31、1&L 用来存储部分积 J=1 Do while jI,跳出内层循环,k=k+L=0+1=1,然后 i=2,j=1,L=1*1=1,j=2 时,L=1*2=2,J=3 时大于 2,跳出内层循环,i=3直到循环结束。这一段写的比较拗口,大家多看看多想想,一定能够想通的,呵呵,因为我都能看懂嘛!其实这样的程序可以不用嵌套,下面我们用 for 语句来写这个,FOR 不用嵌套,可以边积边加,即乘以一个数,得到的结果加上中间变量。*cx9 Clear Input”请输入一个数”to n S=0 K=1 For I=1 to n K=k*i S=s+k Endfor s Return 好了,大家用同样的方

32、法来读这个程序。即可,下面给出这两个程序的运行结果。好了,VF6 的基本程序语句说道这里基本上算是结束了,不知道诸位看的怎么样,在明天我将大量的举例来使大家能够熟练的掌握程序语言读以及写,并且简单的介绍一下程序模块调用以及自定义函数。下面我们运用所学知识编个恶搞游戏,呵呵!该游戏的目的是测试两个人之间的缘分,当然纯属骗人的把戏,好了,我先说一下思想,我们先随机产生一个 0100 之间的数,这里需要一个产生随机数的函数,rand(),该函数的功能是随机产生一个 0 到 1 之间数,我们将其放大 100 倍,即可得到 1 到 100 之间的随机数。然后我们可以通过产生的数的范围不同用 if 语句来

33、表述不同的缘分。由于人的姓名都是字符型,所以我们不用 input 语句,不然需要加上字符型的定界符,很麻烦,所以我们这里就可以用专门接收字符型常量语句 accept。下面请看程序体*cx10 clear accept 请输入你的姓名to a accept 请输入他(她)的姓名 to b x=rand()*100 if x0 and x 0 ”x1=”,(-b+(b2-4*a*c)(1/2)/(2*a)”x2=”,(-b-(b2-4*a*c)(1/2)/(2*a)Else If b2-4*a*c=0 ”x1=x2=”,(-b)/(2*a)Else ”方程无解”Endif Endif Return

34、 再看下一个程序,编写一个程序求解三阶行列式的值。我们知道三阶行列式有 9 个数字,,a13,a21,a22,a23,a31,a32,a33,我们利用公式求解,其公式是 a11*A11-a12*A12+a13*A13,于是,我们可以建立一个数组 x(3,3)方便描述,然后算出其每个代数余子式的值,用循环语句加上。参考程序如下:*cx12 clear dimension x(3,3)&建立一个二维数组,包含 9 个变量。input 请输入 a11 的值:to x(1,1)input请输入 a12 的值:to x(1,2)input请输入 a13 的值:to x(1,3)input请输入 a21

35、的值:to x(2,1)input请输入 a22 的值:to x(2,2)input请输入 a23 的值:to x(2,3)input请输入 a31 的值:to x(3,1)input请输入 a32 的值:to x(3,2)input请输入 a33 的值:to x(3,3)t=0 for i=1 to 3 do case case i=1 r=2 s=3 case i=2 r=1 s=3 case i=3 r=1 s=2 endcase r=(-1)(i+1)*x(1,i)*(x(2,r)*x(3,s)-x(2,s)*x(3,r)t=t+r endfor 行列式的值是,t Return 上面程

36、序中,我们还可以之前将公式写出来,不用循环语句,在这里只是练习一下循环语句,所以我们编程有很多种方法。这就要求我 们用最简单的方法编出程序。继续看下面的程序:编一个程序在屏幕上显示倒三角形,(要求有 5 行,每行按从 9 个星到 1 个星递减),VF6 为了向上与以前的版本相兼容,在屏幕上可以显示的语句是 坐标 say 字符,这里的坐标是指,坐标原点在 vf6 界面窗口的左上角,没有负坐标。例如 3,1 say“*”,就在屏幕上横坐标 3,纵坐标 1 处显示一个”*”,该程序的考虑方法是利用等差数列,然后每行的数目有相差两个,每行的起始位置相差 1,所以参考程序如下:*cx13 Clear F

37、or i=1 to 5&按行处理,总共五行 For k=1 to 2*i-1&按列处理,每列的数目与行有关 6-i,6-i+k say“*”&从第五行,第 8 列开始显示。以后每到上一行,其列数要减一。Endfor Endfor 此程序还有一个方法,那就是用输出的方式来输出*,程序如下。clear For i=1to 5 space(i+5)&换行,并决定首个*的位置 For k=1to 11-2*i *Endfor Endfor Return 编写一个程序使其完成下述功能:在屏幕上有序的滚动显示“河海大学文天学院”从左到右显示 5 次,先给出参考程序体:*cx14 Clear for i=1

38、 to 5 for k=1 to 100 1,k say 河海大学文天学院 wait timeout clear endfor clear endfor 显示五次,在上面的程序第一行的语言就是循环 5 次,也即显示 5 次。第二句循环一百次的含义就是显示 100 次河海大学文天学院,并且每次显示的起始位置不同,每次显示后,先要消除屏幕的内容,用 clear,再显示下一个,由于 VFP 本身速度较快,我们需要给它“减速”,所以我们就可以在上面用 wait 语言,要其自动完成,只需用在后面加上 timeout 因为我们看滚动需要较快的速度,我在程序里面用的间隔是,这样便可以有效的形成字幕滚动效果。

39、这个屏幕的效果图无法做成,不好意思,就不放效果图了。其实利用这一题原理,我相信聪明的读者们肯定可以想起各种更为有情调的滚动方式,如按照某种规律滚动,轨迹可以是一个图形,或是一个简单的汉字。在看下一个程序:编一个程序,先从键盘输入一个数,(为了简化程序,仅限五位数以内,且各位数字均不为零)然后转换成大写汉字的形式表述出来:如:输入 123,程序运行后结果为“壹佰贰拾叁”这个程序由于是几位数并不确定,因而从低位向高位显示,这就要求程序必须以语言输出,由于数字并不确定,所以取变量明并不方便,故采用建立数组的方式,如果是 i 为数,那我们就建立数组 x(i),刚好能和我们需要的变量匹配,先将数字截取出

40、来,数字可以从前截,也可以从后截,为了简化起见我是从后截,截的方法是先用 right 函数,从 1 到 i 逐个截取,在分别用 left 函数截取刚刚截到的第一个字符即可,参考下面的程序(这里再提醒一下,截取字符一定先转化成字符型常量),并且利用循环语言将这些数字转化后显示出来,每个汉字占两个坐标,汉字与汉字之间有单位,故每个数字输出后的间隔是 4 个坐标,然后利用数列的通项公式从后向左输出,先输出字符,在输出单位,单位同样的道理,建立数组y(5),这样就包含了 5 个元素,且为了不重新编通项公式,只需要将数组 y 的数字安小到高,单位也按低到高,这样只需在原单位减去 2,这样就和原来的数字刚

41、好错开,供参考的程序体如下:*cx15 clear input 请输入一个数字 to n i=allt(str(n)&为了方便起见,先将数字转化为字符型存储在变量 i 中 j=len(i)&判断数字的位数 dimension x(j)dimension y(5)y(1)=拾 y(2)=佰 y(3)=仟 y(4)=万 y(5)=for k=1 to j x(k)=left(right(i,k),1)&截取各位数字上数字,注意截取后的数字是字符型 do case case x(k)=1 x(k)=壹 case x(k)=2 x(k)=贰 case x(k)=3 x(k)=叁 case x(k)=4

42、 x(k)=肆 case x(k)=5 x(k)=伍 case x(k)=6 x(k)=陆 case x(k)=7 x(k)=柒 case x(k)=8 x(k)=捌 case x(k)=9 x(k)=玖 case x(k)=0 x(k)=零 endcase 2,(2*j-1)*2-1-4*(k-1)say x(k)&显示转换后的数字,从后向左显示。2,(2*j-1)*2-3-4*(k-1)say y(k)&显示单位 endfor return 结果如图所示:相信大家将这上面的 15 个程序弄懂的话,对 VFP 程序的编程题应该有一定的基础了,其实程序是变化万千的,只要得到的结果是正确的,那么

43、这个程序就是正确的,然后能够熟练的编程或是读程序还需要对 VF6 的函数能够有熟练的掌握,具体在高等教育出版社出版的vfp 二级考试教程里有详细的说明,我就不多此一举了,这些函数如果能够巧妙的运用的话,能得到许许多多种有趣的小程序,正应验了那句关于计算机的话:“只有你想不到的,没有它做不到的。”呵呵呵,如果读者觉得我在上述的例题中有更好的解题方法的话,希望你能以留言的方式告知与我,大家相互交流,相互促进。然后也欢迎大家将一些有趣的源程序代码发上来供大家学习交流。我们遇到的一般都是小程序,但是在实际生活中,我们更多的还是遇到模块化程序设计,模块可以是一个程序文件,也可以是一个过程,调用程序文件之

44、接用 do+程序名,一般来说,这两个程序文件要放在 vfp 的默认路径下,为了以后的方便,我们现在将 vf6 的默认路径设置为 e 盘 vfp 文件夹。具体的过程是这样,点击菜单栏上的工具选项在选项对话框中选中文件位置选项卡,选中默认目录,点击下面的修改,在更改文件位置的对话框上先勾选使用默认目录,然后将路径定位至 e 盘 vfp 文件夹,如图 其实调用程序没什么好说的,如果我们在笔试部分看到这样的调用程序,那么遇到调用语句时,就先看调用的子程序,这就相当于将子程序塞到主程序调用子程序的那个位置处连在一起,现在我随便说一下过程,程序中的过程还有一个说法叫做自定义函数,也就是在程序的结尾处,相当

45、于是一个子程序,但它涉及到参数传递问题。这是 VFP 编程的难点,但是好在,考试对这部分的要求较低,一般都没有什么复杂的程序,所以在这里我通过举个例子来让大家对按值传递和按引用传递有个大致的了解。请先看这个例子,Store 3 to n Do p1 with n&这种方式引用被成为按引用传递。n Function p1&也可以是 procedure p1,但是前面的单词容易记,后面的只要认识就行 Parameters x&定义形参,这个单词也较陌生,但记前四个字母就行,para X=x2 Endfunc&如果是 procedure,这里应该是 endproc 在上面的程序第二句中的 n,要将其

46、传给下面的过程,在 vf 中被称为是实参变量,明显这里的实参是变量,下面的过程中的 x 需要从主程序中接收值,被称为形参变量,形参需要从实参接收值,可以是常量也可以是变量,如果是常量,那就是按值传递,如果是变量那就是按引用传递。在这里,由于接收的 n 是变量,所以是按引用传递,当过程执行完毕后,再将 x的值赋给实参,也可以这样理解按引用传递,形参和实参为同一个变量,即上题中,x 和 n 一起变化。最后的结果 n 的值就是 x 的值是 9,如果是按值传递,那么 x 从程序中接收到的是n 的值即是 3,当 x 变化时,n 的值不变,所以如果上题中要按值传递,那么第二句的表述是,do p1 with

47、(n),即给 n 加个括号即可,然后程序运行后,x 的值是 9,n 的值仍是 3.此外,按值传递也可以这样表示,仍然是第二句;P1(n),默认的情况下是按值传递,但是我们可以通过设置方式让此语句也按引用传递,设置方式是:set udfparms to reference ,在英语中,reference 是引用的意思,udfparms 不知道是啥意思,如果我们自己写,那就用第一种语言吧,因为这个单词实在难记,只要我们看到知道是啥意思即可,多记几个单词吧,呵呵,当然如果我们再想设置回来,那就是 set udfparms to value,value 这个单词较常见,有值的意思,这个不难记。当然如果

48、用此语言的话,在引用传递的情况下,这样表示 p1(n),即给 n 加个括号,那还是按值传递,总之这样记即可,不管什么情况下,只要给传递的实参加括号了,那就是值传递,程序结束处问实参的值,那就是不变,不管过程文件是什么。为了不至于混淆,下面我将这几种方式一起写下来。N=3 Do p1 with n”按引用传递,n 的值是:”,n N=3 Do p1 with(n)”按值传递,n 的值是:”,n N=3 P1(n)”按值传递,n 的值是:”,n Set udfp to reference P1(n)”按引用传递,n 的值是:”,n N=3 P1(n)”按值传递,n 的值是:”,n Function

49、 p1 Para x X=x2 endfunc 这就是大致的参数传递了,但在实际编程中,可能遇到多个过程,那也是将过程写在程序结尾处,当然我们也可以将过程以文件的形式存储在磁盘上,调用的时候必须先打开这些过程文件,具体的语法是 set procedure to 过程文件名,可以是多个,逗号隔开,然后在语句的后面加上 additive 不关闭其他已经打开的过程文件,如果不加这个单词,那就是关闭其他已经打开的过程文件,当我们想关闭过程文件时,只需用 set procedure to 即可,一次性关闭所有已经打开的过程文件,就像打开表那样,用 use 不加文件名,意即关闭所有已经打开的表文件,当然如

50、果想关闭某一个已经打开的过程文件,那就是 release procedure 过程文件名,可以是多个,逗号隔开。这些在上机中不会遇到,因为实际运用中,可以不需要这些,直接把过程放程序结尾处即可,多么省事。但还是需要了解一下,毕竟笔试题也要过嘛!还有一个想说明的就是关于过程文件的参数传递问题,刚刚举得例子只是传递一个变量,但在实际应用中,往往需要传递多个变量,甚至是整个数组,当然二级考试题中都是传递一个,最多两个。只要记下面一句话应付笔试的选择题即可,当要传递的实参变量数目比形参变量数目多,即过程的形参变量数目不够的情况下,那么程序将会显示出错信息,就像是十二个糖分给 10 个人,要求每个人最多

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 工作报告

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁