VF基础教程.docx
《VF基础教程.docx》由会员分享,可在线阅读,更多相关《VF基础教程.docx(79页珍藏版)》请在冰豆网上搜索。
VF基础教程
菜鸟学习VFP
前言
大学的暑假是珍贵的,像我这样暑假呆在家里面,整天无所事事的同学不在少数,为了应付枯燥乏味的暑假,我决定在暑假学习一些知识,挑来挑去还是觉得选VFP比较有意义,因为这门科需要过二级,相信许多看到这篇文章的朋友也要过二级,那么我们大家就从今天开始共同学习吧。
所以从今天起,我的网上VFP学习课程便开张了,希望我能写完。
说起为什么会开这个专题,我相信很多读者都有疑问,学习就学习是了,干嘛还将自己的学习成果放到网上来?
我在这里要澄清一下,之所以我会选择这样做,是因为我觉得一个人在家里面学习太没有那种气氛了,我希望能够放到网上来,大家看着想着,遇到问题大家可以在一起讨论,在一起互相提意见,还有就是希望能够帮到有心学习VFP,但是却觉得枯燥乏味而放弃的朋友。
在更新期间,我将在我的QQ空间(
首先要说明的是本文仅针对上机考试编写,让你能够在计算机上完成初级的数据库程序开发。
关于理论的请多阅读教材。
另外是针对VFP的初学者,也就是菜鸟级人物来学习,为了应付随之而来的省和国家二级VFP考试的同学使用,如果是VFP数据库专业人员来这里的话,希望多提提意见,不要见笑,错误之处,还请指正,就此拜谢!
呵呵。
VFP是microsoft公司开发的一款数据库管理系统(DBMS),全称是VisualFoxPro。
作为二级考试科目的是采用关系数据库系统VisualFoxPro6.0(为了区分版本,在以后的文章中简称为VF6),VF6是小型数据库管理系统的杰作,它以强大的性能,完整而又丰富的工具,较高的处理速度,友好的界面以及较完备的兼容性等特点,备受广大用户的欢迎。
(注:
该段内容来自国家二级考试VFP课本前言——高等教育出版社出版)
好了,套话到此结束,本来上面的那一段话不想写的,然后又觉得至少把出处点明,在吹吹牛,说VFP多好多好,毕竟人家公司开发这系统也不容易。
由于VF6毕竟作为一门课程来学习,枯燥乏味在所难免,但在这里,我尽量用友好,和谐,幽默的语言来面对大家,希望给赏光的读者带来一个愉快又充实的暑假。
第一次写前言,写的不好,大家请多多海涵,不要留言骂我
第一天:
VF6编程基础
(一)
VFP程序安装简要说明
在正式写这一课之前,我想先讲一下VF6程序安装说明,当然看到这儿的读者的电脑里面可能已经安装了VF6,那么本节可以略去直接看下一节。
其实正版的图书里面大都是说买什么microsoftvisualstudio套件包含有四个编程软件什么的,总的来说,在我们国家的情况下,这些在我看来纯属废话,就让写这句话的人自己去买,他都不一定干。
归根究底还是咱国家的盗版太猖獗了,网络管制虽说最近见好,但是哪有那么容易彻底呢,所以大家可以利用你的网络优势,马上去XX吧,这里需要说明的是一般done下来的压缩包解压后是一个文件夹,我相信以你的电脑能够达到安装VF6的最低配置要求,双击SETUP安装,写序列号的那儿都填1吧,如图所示。
然后直接点“下一步”,选择典型安装就行,最后会提示安装MSDN,直接不睬他,我们不需要,安装好之后便可以进入课程学习了。
对于盗版,我也无语了,知识产权在我们国家很难受保护,是政府的打击力度不够大吗?
怪不得游戏市场在中国没有盗版就没有市场是一条铁定法则了。
2.VF6编程基础
纵观VF6,只有这一部分可以独立出来学习了,咱们现在关于什么是数据库,什么是二维表,什么是表单,等不懂没有关系,先通过学习编程来了解一下程序设计语言,这对以后的SQL语言学习,面向对象程序设计,菜单,报表等设计都有很大的好处。
既然是基础,那就是从变量,常量开始说起,这两个概念,相信学过数学的人都懂,但是在计算机程序语言关于常量的概念中加入了数据类型这么个要素,相信这也不难理解,以下的,我们死记硬背:
VF6中的常量有:
数值型(N),字符型(C),货币型(Y),日期型(D),日期时间型(T),逻辑型(L)。
在这里不要把表的记录形式弄混了,表的记录类型中还有浮点型(F),双精度型(B),整型(I),备注型(M)和通用型(G)。
我在这儿点出来了,希望读者能够给予注意。
关于常量的类型,我觉得没啥好说的,书上讲了一大堆,其实只要看常量名就能知道数据的大致内容了,这里有必要说一下逻辑型的数据只有”.T.”和”.F.”两种,即是和否,然后说一下,在程序中将这些常量数据赋给变量的时候必须加定界符,下面举例说明:
(1)将数值型赋给变量:
store23tox即直接赋值,无需加定界符。
(2)将字符型赋给变量:
store“你好”toy,即需要在数据两边加上一对引号,可以是双引号,也可以是单引号,一般也可以以括号的形式赋值,如x=[你好].
(3)将货币型赋给变量:
store$100toz,即在数字前面加上”$”.其他的细节参阅书本,在此不做详细介绍(不是我懒,实在没这必要)。
(4)将日期型赋给变量:
store{^1990-08-20}tow,即在数据上加一对大括号,然后数据前方加上“^”,这是严格的日期格式,还有传统的日期格式:
{08/20/90}{08-20-1990}
{08201990}等。
然后日期的显示格式都是可调的,比如年份的位数,月日年,年月日,日期间隔符号等。
比如:
setcenturyon/offsetdatetoymd(yearmonthdate)setmarkto“-“
这容易套吧?
以后所有的语句我都是通过举例的方式来让读者套用,而不像书上直接把公式写出来,很是晦涩。
(5)日期时间型赋给变量:
store{^1990-08-20,02:
38a}tor//将时间02:
38AM赋给变量。
(6)前面讲过了,我不讲了。
其实这么多,我觉得也不是太重要,当然这是针对上机,理论中还是要掌握的,见教材第二章前面。
常量说了这么多,相信大家也能够了解个大概了,有的教材上说了很多,没关系,现在只要把上面所说的背下就OK,等你编程有一定基础了回来看就会觉得简单多了。
下面说说变量,变量名要求啦,等等见书本,咱们上机之需要一个字母搞定!
然后就是数组,再下看来数组这玩意比普通变量稍微复杂,不过也就稍微那么一点点,看我通过举例道来
Dimensionx(3)这样就定义了一个一维数组,包含三个变量,即x
(1),x
(2),x(3).
Dimensionx(2,2)这样便定义了一个二维数组,包含四个变量,即x(1,1),x(1,2),x(2,1),x(2,2)。
整个数组的数据类型为A(array)array为英文数组的说法。
实际在编程中经常会遇到一维数组的使用,二维数组较复杂,编程题中较罕见,有兴趣去翻一些专业的教材。
在后面的编程题中,我会通过举例的方式来使用一维数组。
下面我们共同学习程序中的表达式,先学习最简单的数学表达式。
加,减,乘,除分别对应于“+”,“-”,“*”,“/”次方是数字前面加一个”^”,然后加上幂数。
或者是数后面用两个乘号,如6的三次方为6^3或者6**3,根号同样可以写成幂指数。
最后是求余公式“%”如:
8%3=2,还有括号的用法和数学类似括起来就是将某个表达式单独运算,如:
6^(1/2)=2.45(默认保留两位小数),其他的我们菜鸟暂时不用掌握。
怎么样?
简单吧,数学公式中用上面的几个符号就可以表达出来了。
还有字符表达式,等在高等教育出版社出版的二级VFP教程上第56页有详细的介绍,先去翻课本。
翻完后再继续回来看。
下面将所学的内容复习一下,以上所说的内容实例见下图,大家在看完后,最好也先能实际操作一下,(所有标点符号用西文状态下的!
)
好了,大家书本上的知识都看完了吧,相信我们都对常量,变量,表达式有了初步的了解,下面进入程序的基本组成元素,函数。
函数分为数值函数,字符函数,日期时间函数,数据类型转换函数,测试函数,在教材的61页,再去看书吧(真的不是我懒,实在是不需要,我写的这玩意只是教程,不是教才,这些基础的必须要通过书本来掌握,如果这些我都写那整个暑假都是不够的,所以关于函数,在程序中遇到,就会有详细的解释)
今天是第一天,说的内容不多,其实也没啥好说的,希望读者能够把常量的几种类型,变量,以及数组,表达式,函数,等牢记于心,明天我们正式讲简单的VFP程序编写。
哦,很晚了呢,我想去困觉了,今晚开始准备写这玩意,希望我能一直写下去,如果大家支持的话,我会很高兴的,如果没有人支持,我也要一直坚持下去。
第二天:
VF6编程基础
(二)
昨天较为简单的说明了程序语言中常量,变量,以及函数表达式等程序体的基本元素,今天我们正式说明在VF6中最基本的面向过程程序语言编写。
其实在我看来,程序语言就是许多个表达式连在一起而组成的特定的格式的文本,例如我们在小学里经常会遇到这样的数学题:
小明在二个小时走了8km的路程,问你小明家离学校有2km,需要多少时间才能到?
我们现在可能会直接就写出答案了,说来惭愧,那个时候我上小学的时候最怕遇到此类应用题,当时我们会先写出公式算出每小时走多远,然后在拿2除以这个每小时走的路程。
得到的就是我们想要的答案:
具体写出来就是:
8÷2=4(千米)
2÷4=0.5(小时)
这个就是我们当时的解题步骤,最后不要忘了答一下,呵呵。
当然这个比较简单,今天我们想要说的是程序,就假设我们来编程算这个应用题,我们的思路和上面的一样,只是用VFP的程序语言,首先,我们在程序语言里面经常会先清除窗口内容,即clear,所以我们在做编程题的时候,这个一般不重要,这个clear可要可不要,在程序结束处还有个RETURN,这在我们平时的编程里面也是可有可无的,它的作用是返回调用它的上级程序,在一些大的程序里面那就必须引起足够的重视。
我们在编程的过程中我们得到了另外的常量4和最后的结果,因此我们需要两个变量来存储它们,意思就是给它找个代号,在表达式中引用它。
最后要说明的是输出号是“?
”和“?
?
”前一个是在主程序中换行输出,后一个是不换行输出。
一次性可以同时输出多个结果,将这些变量和常量之间用“,”号或空格隔开。
当然在输出常量的时候记得加上定界符!
下面我们把上面的转换成为VFP程序语言。
双击打开VF6,然后点文件-新建-程序-新建文件,或者在命令窗口中输入modicommand然后输入程序语言,输入完毕后点程序-运行,或者直接点工具栏上的感叹号,首先系统会提示你先保存,这里说一下,在以后的程序文件和数据库文件中,我的位置是在E盘vfp文件夹,建议大家使用同样的文件名,文件路径和文件夹。
*cx1
Clear
T=8/2&&算出中间值,用T存储
S=2/t&&得出结果,存储在变量s中
”需要”,s,”小时”
Return
说明一下,这里以*号开头的一行,以及每行&&后面的部分均为解释说明,不参与运行,因此读者在输入程序时可以把这些忽略掉。
程序及其运行结果如图所示:
好了,这就是我今晚要说明的第一个程序,虽然非常简单(简单到什么程度呢?
没有用到函数,没有用到程序语言,甚至表达式一步就能搞定:
s=2/(8/2),呵呵。
),我却花了很多的文字,目的是希望大家都能看懂,这样我也会倍感欣慰,有必要说明一下,在以后的程序编写中,如果大家有更好的方法,希望你能以留言的方式告知与我,感激不尽)
上面只是为程序开了个头,下面我们继续,这次我们来编这个老掉牙的程序,给你一个半径,算出圆的周长与面积:
圆的周长为:
C=2πr圆的面积为:
s=πr2这里我们需要用到一个函数,圆周率函数,相信我们在昨天已经记得这个函数了:
PI()它就是得到圆周率的函数可以直接当一个常量来使用。
然后我们需要从键盘接受一个值作为半径,我们用r来存储这个值。
然后接收数据在VF6中有两种input和accept前一种可以接收任何类型的常量,但需要加上定界符,后一个不管输入什么都是当成字符型(C)常量来对待。
好了,下面看程序体:
*cx2
Clear
Input“请输入圆的半径”tor&&接收圆的半径值。
引号里面的内容显示在主窗口。
C=2*pi()*r&&算出圆的周长
S=pi()*r^2&&算出圆的面积
”圆的周长是:
”,c,”圆的面积是:
”,s
Return
在这里啰嗦一句,大家在试验这些程序的时候最好自己敲,不要复制,因为敲程序也是一项技术活。
好了,程序及其运行结果如图所示:
下面我们引进一个程序体里面的判断语句,通俗一点讲就是如果这样我该干哪些事,如果不是这样是那样我又该哪些事,如果不是这样又不是那样是其他的样子,我又该干哪些事……这个语句就是if语句和case语句,本人看来其实还是case语句要简单的多,但其实二者都不难理解,只不过在条件比较多的时候,if显的要麻烦一点。
下面我通过举例的方式来说明程序中这两条语句的使用。
从键盘接收一个数据,判断这个数据的类型,并输出。
我们在前面已经讲过了,VFP常量有六种基本类型,vartype函数可以返回这些数据的类型,其中有一个.null.值比较特殊,空值在普通的情况下返回的是X表明是空值如vartype(.null.)=”X”,但如果在函数后面加上一个.t.的逻辑表达式,如vartype(.null.,.t.)则会返回L表明该数据为逻辑型,vartype函数返回的是字符型,因此在程序中必须将vartype返回的值加上定界符引号,此外此函数还可以返回通用型,未定义型等,这些可以不用掌握,如感兴趣可以上网搜索。
下面我们先用if语言做:
*cx3
clear
Input”请键入数据:
”toa
Ifvartype(a)=”C”&&表面输入的数据是字符型,下同
?
”这个数据是字符型”
Else
Ifvartype(a)=”N”
?
”这个数据是数值型”
Else
Ifvartype(a)=”L”orvartype(a)=”X”
?
”这个数据是逻辑型”
Else
Ifvartype(a)=”D”
?
”这个数据是日期型”
Else
Ifvartype(a)=”T”
?
”这个数据是日期时间型”
Else
?
”这个数据是货币型”
Endif
Endif
Endif
Endif
Endif
Return
If与endif是成对出现的,也就是从里向外一一配对,在程序体中,我将各级语言之间空了两个字符格,这也是笔试部分对程序语言的书写要求,然后我来随便解释一下,if就是如果是这样,else就是如果不是这样,else里面的if就是如果不是这样但是那样,if下面的else就是如果不是这样也不是那样,else下面的if是如果不是这样也不是那样,而是另一个样子的意思……好了,简单吧,还有更简单的,那就是用case语句来写,case语言必须先有个头DOCASE,意思就是从现在开始做选择,然后case这样,case那样,最后都不是那就是OTHERWISE,然后别忘了,下个结束命令ENDCASE
CASE语言的程序体如下:
*cx4
Clear
Input“请输入数据:
”toa
Docase
Casevartype(a)=”C”
?
”这个数据是字符型”
Casevartype(a)=”N”
”这个数据是数值型”
Casevartype(a)=”L”orvartype(a)=”X”
?
”这个数据是逻辑型”
Casevartype(a)=”D”
?
”这个数据是日期型”
Casevartype(a)=”T”
”这个数据是日期时间型”
Otherwise
?
”这个数据是货币型”
Endcase
Return
好了,这就是VF6中的条件语句,简单吧,在很多的情况下,二者可以相互替代,主要就是看哪个要简单一些,相信读者对关于什么情况下使用什么样的语句已经胸有成竹了吧?
下图给出上面两个程序的输出结果
现在我相信我们对程序语言已经有了一定的认识和了解了,下面我们继续学习程序语句中的精华部分,循环语句。
循环语句包含三种即DOWHILEFOR和SCAN,其中SCAN语句是浏览表文件记录的程序语言,而且思想方法很容易掌握,以后在介绍表之后在讲,暂时我们不管。
先从DOWHILE语句来开始,记得以前上课的时候,我们的老师向我们说过DOWHILE和FOR语句的区别:
前者不知道循环了多少次,而后者在知道循环的次数的情况下使用。
感谢老师!
其实DOWHILE语句看字面上挺容易理解的,就是当什么什么的情况下做,就是这样,然后在DOWHILE最后一定要有个enddo来结尾,如果在这期间希望程序能够跳出循环的话,或是回到循环的开始处继续的情况下分别在语句里面加上EXIT和LOOP,这两个单词不难背,很好掌握,当程序执行到EXIT时就会之间跳出循环体去执行ENDDO后面的程序语句,如果碰到LOOP语句时便会回到DOWHILE下一句执行。
大家在编程的时候一定要注意循环语句会不会碰到死循环的情况,如果是死循环那就要考虑这两条语句了,这里顺便插一句,当我们编了死循环的语句后,VF6便无限的执行下去,当你想关闭VF6时,上面会提示“无法关闭”,晕!
其实这是有解决的办法的,想当初我第一次碰到的时候,我是直接把计算机给关闭了,汗呀,浪费了多少人力物力呀,其实有较为简便的方法,在windowsXP操作系统下,我们可以按住ctrl+alt+delete调出windows的任务管理器,然后在应用程序选项卡上选中正在运行的VF6,点击结束任务,强制退出VF6,然后在重新启动VF6即可。
下面我们来通过第一个例子,这个例子还是很普通的例子:
判断一个数是否是同构数,即输入一个三位数,如果这个三位数的三个数字的立方和等于本身,那么它就是同构数。
这个思想方法是先判断输入的数字是否为三位数,如果不是三位数,那么要求重新输入,并在屏幕上出现提示,(VF6中在屏幕上出现提示的语句是WAIT“字符”window,即在屏幕上显示字符内容,任意键消失,还可以在上述语句后加上timeout数字,表示经过多少秒后,如果用户没有击键,窗口自动消失。
)这里就需要用到循环语句和判断语句了。
然后在得到各个位上的数字有两种方法,一种是通过数学的方法,例如百分位上的数字,可以拿这个数除以100然后取整,例如int(345/100)=3十位上的数字是将该数字减去百位上的数字乘以100后除以10再取余,例如int((345-300)/10)=4,同理个位上的数字是将这个数先减去百位上的数字乘以100,然后在减去十位上的数字乘以10,得到各位上的数字;除了用数学的方法外,还可以用截取字符串的方法来截取数字,本例采用后者,前者在教科书上面貌似已经有答案了下面给出该程序的代码:
*cx5
Dowhile.t.&&任何情况下,都循环,这就要求后面有一个EXIT语句来跳出循环
Input”请输入一个三位数”tox
Iflen(allt(str(x)))<>3&&如果输入的数不是三位数
*上面是先将数字转化为字符型,去空格后,在算长度。
一般转化字符型才能返回长度
Wait“请按要求输入数字“windowtimeout3&&出现请按要求输入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))
Ifx=a^3+b^3+c^3&&即这个数是同构数
?
x,”这个数是同构数”
Exit&&跳出循环体
Else
?
x,”这个数不是同构数”
Endif
Endif&&别忘了,前面的条件语句
Enddo&&循环结束
Return
好了,这个程序写完了,大家现在对DOWHILE以及IF语句有了一定的了解了吧?
现在继续举个例子说明一下FOR语句的意思。
ForI=1to10意思就是,I从1开始运行当运行到ENDOR或者NEXTI的语句时,回到起点,此时I=2一直到最后一个i=10,循环完毕,如果在forI=1to10step2那就表示i=1后紧接着i=3,然后i=5…懂得套了吧?
亲爱的读者们。
下面继续举例来说明该循环语句的使用:
从键盘接收一个数n,计算1+2+…+n的值
我们先用Dowhile语句来做。
这个思想方法是用一个变量先存储1,然后存储1+2,然后慢慢一直加到n,这里我们变量名取作i
程序体如下:
*cx6
Clear
Input“请输入一个数:
”ton
s=0&&先将s赋0值
i=1&&记录循环的次数,决定该次循环应该加上的数的值
Dowhilei<=n
S=s+I
I=i+1
Enddo
s
return
解释一下该程序语言吧,接收数字之后,先用S存储部分累加的和,i用来存储循环的次数,即相当与数列中的a1,a2…,an第一次i=1,然后s=0+1,i=1+1=2,回去继续循环,第二次循环s=1+2=3,i=2+1=3,然后第三次循环,s=3+3=6,这样一直到I>n时不满足i所满足的条件时,循环结束。
此时s的值即为所求值。
下面我们用for语言来做,
*cx7
Clear
Input“请输入一个数”ton
S=0&&和上面一样,存储部分和
ForI=1ton
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为所求值。
这个简单吧?
比DOWHILE要简洁一点。
下面给出此程序的运行结果:
如果读者有兴趣的话可以分别用dowhile和for语句编这个计算n!
的程序,提示一下:
这里的s初值要赋为1,不能为零,否则,只能结果只能是0.
其实这些程序循环语句看着挺复杂,实际上只要我们弄懂了计算机读的方法也就简单多了,曾经和一个朋友开玩笑,当你看到循环语句时,就把自己的脑子变成死脑筋,学着计算机那样一遍又一遍的循环,如果次数少你可以直接就把结果算出来了,如果次数多,你可以运用“公鸡归纳法“(不完全归纳法,呵呵,一个典故)将结果归纳出来。
更为复杂的是循环的嵌套,例如看下面的例子
从键盘接收一个数N,计算1!
+2!
+3!
+…+n!
的值。
该题我们首先肯定要把这N个阶乘的数分别算出来,然后把它们相加,故一般情况下,我们就可以考虑用嵌套语句来做。
先用dowhile语句来做
*cx8
Clear
Input“请输入一个数”ton
I=1
K=0&&k用来存储部分和
Dowhilei<=n&&外层循环存储部分和
L=1&&L用来存储部分积
J=1
Dowhilej<=I&&内层循环计算每个数的阶乘,并利用外层循环将它们相加
L=L*j
J=j+1
Enddo
K=k+L
i=i+1
Enddo
k
Return
好了,这就是嵌套循环,我们把脑筋变死来看这个程序,i=1时,j=1,然