【 tulaoshi.com - 编程语言 】
我们在玩《仙剑奇侠传》时,要是不能保存数据,那么非得挑灯夜战三昼夜才能玩完,可见数据存储之重
要性。爱好编程的CFAN是不会放过数据文件的,下面跟着我驰骋吧!我们先吃一个哈密瓜,开门即来编一传统的比较有代表性的程序,不可不看的哟!
程序分为一个表单cfanvb.frm,一个模块cfanvb.bas。一个表单程序。程序的表单中有五个命令按钮,从上到下分别命名为Cmdnew、Cmdsave,Cmdtxt、cmdlookfor、Cmdexit,标题分别为&New、&Save、&Txt、&Lookfor、&Exit;还有三个文本框,名称分别为Textname、Textage、Textsex;还有三个标签。
程序的功能
功能1:能存储你所输入的每一条完整记录,并创造数据库文件nas.db。
功能2:能按输入的姓名字段查找记录并显示。
功能3:将所有记录按NAME字段排序制成文本文件nas.txt,以便打印、修改。
程序运行情况
先后输入八条记录,name字段分别为李继华、朱茵、小巩、朱朱、李丽丽、黄庆、Tom、Kate,并一一存储(按Save按钮,存储第一条记录前,Txt按钮为灰色,即不可激活态);点击按钮,会出现提示框(文本的各项是按姓名顺序排列的,name分别为Kate、Tom、小巩、朱朱、朱茵、李丽丽、李继华、黄庆);在Textname文本框中输入上面任一姓名,点击按钮即可得到其他的字段(年龄、性别)情况,如果不为此八人,则显示提示框。此程序运行后可以建立一个名为Nas.db的数据库文件和一个名为Nas.txt的文本文件。
Cfanvb.bas模块代码为:
Typenas'定义记录类型
nameAsString*6'姓名
ageAsString*3'年龄
sexAsString*4'性别
EndType
Typenasindex'定义另一记录类型
nameAsString*6'姓名
numberAsInteger'记录号
EndTyep
PublicamongAsnas'定义公共变量
publicindex()Asnasindex'定义枚举索引数组
PublictotalnumAsInteger'定义总记录数
cfanvb.frm表单的代码为:
OptionExplicit'强制变量必须进行正规声明
Constnasdb="as.db"'定义常量数据库文件名
Constnastxt="as.txt"'定义文本文件名
Functionsearch(findtxt)AsInteger'Function过程,寻找某一姓名findtxt,得出记录号search
DimfrontAsInteger'定义变量
DimbehindAsInteger
DimfindnumAsInteger
DimmiddleAsInteger
front=1
behind=totalnum'定义初始值
findnum=0
DoWhilefront=behindAndfindnum=0
middle=(front behind)2'用二分法查找
Iffindtxt=Rtrim(index(middle).name)Then'找到此记录
findnum=middle
ElseIffindtxtindex(middle).nameThen
front=middle 1'要找的记录在middle之后
Else
behind=middle-1'要找的记录在middle之前
EndIf
Loop
search=findnum'如找到,则找到的记录号为search;否则,search为0
EndFunction
Subcreateindex()'为所有记录建立索引
DimIAsInteger,changeAsnasindex,jAsInteger
ForI=ITototalnum
Get#1,I,among'读出第I条记录
index(I).name=among.name'此记录的name字段赋予索引I的name字段
index(I).number=I'记录号赋予索引I的number字段
NextI
ForI=ltototalnum-1
Forj=I 1Tototalnum
Ifindex(I).nameindex(j).nameThen
change=index(I)
index(I)=index(j)
index(j)=change
EndIf
Nextj
NextI'对索引数组排序,使index(I).nameFndSub
PrivateSubCmdexit_Click()
Close#1'关闭文件1
End'结束
EndSub
PrivateSubCmdlookfor_Click()'查找
DimwhichAsInteger
DimfinditAsInteger
which=search(textname.Text)'调用search()
Ifwhich0Then'which0表明查找到
findit=index(which).number
Get#1,findit,among'由记录号读出记录
withamong
textname=.name'将此记录的各字段显示于文本框
Textage=.age
Textsex=.sex
EndWith
Else
MsgBox"can'tfindit",48,"lookfor"'否则没找到提示信息
EndIf
EndSub
PrivateSubcmdnew_Click()'所有文本框清空
textname=""
Textage=""
Textsex=""
textname.SetFocus'textname文本框得到输入焦点
EndSub
PrivateSubCmdsave_Click()
totalnum=totalnum 1'记录数加1
Iftotalnum0ThenCmdtxt.Enabled=True'使Cmdtxt按钮由灰色变成可激活
Withamong'将各文本框内容存于记录
.name=textname.text
.age=Textage.Text
.sex=Textsex.Text
EndWith
Put#1,totalnum,among'将记录加入#1
ReDimindex(totalnum)'重新定义枚举数组
createindex'调用过程重新建立索引
textname=""'清空文本框,激活textname
Textage=""
Textsex=""
textname.SetFocus
EndSub
PtivateSubCmdtxt_Click()'建立文本文件
DimI
Dimmessage1AsString,message2AsString
OpennastxtForOutputAs#2'打开文本,接受输出
ForI=1Tototalnum
Get#1,index(I).number,among'读记录
Withamong
Print#2,"";Ucase(Trim.(.name))
Print#2,"age:";.age'用Print语句建立文本
Print#2,"sex:";.sex
EndWith
NextI
Close#2'关闭文本文件
textname.SetFocus
message1="文本nas.txt已经建好"
message2="file"
MsgBox$message1,64,message2'显示文本已建好对话框
EndSub
PrivateSubForm_Load()'程序运行装人表单时的事件
OpennasdbForRandomAs#1'打开数据库
Len=Len(among)
totalnun=LOF(1)/Len(among)'计算记录数
Iftotalnum0Then
ReDimindex(totalnum)'定义枚举索引数组
createindex'建立索引
Else
Cmdtxt.Enabled=False'禁止Cmdtxt按钮
EndIf
EndSub
我们通过以上程序,可以得出哪些启示呢?
1.文件可分为文本文件(一般为顺序存取格式,本程序为cfanvb.txt)和随机存取文件(本程序为cfan
vb.db)。
2.随机存取文件由一些固定长度的记录组成,建立好索引后,能在不读入其他记录的情况下,直接跳到某一记录。
3.在文本文件中使用的语句:
(1)OpenfilenameForoutput(append)As#numberoutput:创建一个新文件并准备写入数据;
append:打开一个已存在的文件并准备写入数据于文件的结尾。
(2)Print#number,[data1;data2;data3...]
它可将一个或多个没有分隔的字符串输出到指定文件#filenumber,“print#filename,”表示输出一空行。
(3)Write#number,data1,data2,data3...
它可将一行数据写入一个已经打开的文件,并提供“,”作间隔。
(4)OpenfilenameForInputAs#number
它为读数据而打开一个文件。
4.随机存取文件常用语句:
(1)OpenfilenameForRandomAs#numberLen=recordlength
以随机方式打开一既可以读又可以写的文件,其中recordlength为文件记录的字节数。
(2)Put#number,recordnumber,record(写入)
Get#number,recordnumber,record(读出)
其中,#number文件已经打开,"recordnumber指明要写入(或读出)的位置,record指那条记录。
本文介绍了处理数据的一些传统方法和基本知识,根据本程序的思路,你可制作出自己喜欢的小程序。其实VB6还有更简单的处理数据的方法,留待以后介绍。希望我烧的骨头汤能适合大家口味。->