VB 程序设计

10个成员

走进VB6啃一块骨头

发表于 2016-12-24 2671 次查看
我们在玩《仙剑奇侠传》时,要是不能保存数据,那么非得挑灯夜战三昼夜才能玩完,可见数据存储之重
要性。爱好编程的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按钮为灰色,即不可激活态);点击【Txt】按钮,会出现【文本已经建好】提示框(文本的各项是按姓名顺序排列的,name分别为Kate、Tom、小巩、朱朱、朱茵、李丽丽、李继华、黄庆);在Textname文本框中输入上面任一姓名,点击【Lookfor】按钮即可得到其他的字段(年龄、性别)情况,如果不为此八人,则显示【not find】提示框。此程序运行后可以建立一个名为Nas.db的数据库文件和一个名为Nas.txt的文本文件。

Cfanvb.bas模块代码为:
Type nas '定义记录类型
name As String * 6 '姓名
age As String * 3 '年龄
sex As String * 4 '性别
End Type
Type nasindex '定义另一记录类型
name As String * 6 '姓名
number As Integer '记录号
End Tyep
Public among As nas '定义公共变量
public index() As nasindex '定义枚举索引数组
Public totalnum As Integer '定义总记录数

cfanvb.frm表单的代码为:
Option Explicit '强制变量必须进行正规声明
Const nasdb="\nas.db" '定义常量数据库文件名
Const nastxt="\nas.txt" '定义文本文件名
Function search(findtxt) As Integer 'Function过程,寻找某一姓名findtxt,得出记录号search
Dim front As Integer '定义变量
Dim behind As Integer
Dim findnum As Integer
Dim middle As Integer
front=1
behind = totalnum '定义初始值
findnum = 0
Do While front <= behind And findnum = 0
middle = (front + behind)\2 '用二分法查找
If findtxt = Rtrim(index(middle).name) Then '找到此记录
findnum = middle
ElseIf findtxt > index(middle).name Then
front=middle + 1 '要找的记录在middle之后
Else
behind = middle - 1 '要找的记录在middle之前
End If
Loop
search=findnum '如找到,则找到的记录号为search;否则,search为0
End Function
Sub createindex() '为所有记录建立索引
Dim I As Integer, change As nasindex, j As Integer
For I = I To totalnum
Get #1,I,among '读出第I条记录
index(I).name=among.name '此记录的name字段赋予索引I的name字段
index(I).number = I '记录号赋予索引I的number字段
Next I
For I =l to totalnum -1
For j=I +1 To totalnum
If index(I).name > index(j).name Then
change = index(I)
index(I)=index(j)
index(j)=change
End If
Next j
Next I '对索引数组排序,使index(I).name Fnd Sub
Private Sub Cmdexit_Click()
Close #1 '关闭文件1
End '结束
End Sub
Private Sub Cmdlookfor_Click() '查找
Dim which As Integer
Dim findit As Integer
which = search(textname.Text) '调用search()
If which > 0 Then 'which > 0 表明查找到
findit = index(which).number
Get #1, findit,among '由记录号读出记录
with among
textname =.name '将此记录的各字段显示于文本框
Textage =.age
Textsex =.sex
End With
Else
MsgBox "can't find it" , 48,"lookfor" '否则没找到提示信息
End If
End Sub
Private Sub cmdnew_Click() '所有文本框清空
textname =""
Textage = ""
Textsex =""
textname.SetFocus 'textname文本框得到输入焦点
End Sub
Private Sub Cmdsave_Click()
totalnum = totalnum + 1 '记录数加1
If totalnum > 0 Then Cmdtxt.Enabled = True '使Cmdtxt按钮由灰色变成可激活
With among '将各文本框内容存于记录
.name=textname.text
.age=Textage.Text
.sex = Textsex.Text
End With
Put #1,totalnum,among '将记录加入#1
ReDim index(totalnum) '重新定义枚举数组
createindex '调用过程重新建立索引
textname ="" '清空文本框,激活textname
Textage = ""
Textsex =""
textname.SetFocus
End Sub
Ptivate Sub Cmdtxt_Click() '建立文本文件
Dim I
Dim message1 As String, message2 As String
Open nastxt For Output As #2 '打开文本,接受输出
For I=1 To totalnum
Get #1, index(I).number,among '读记录
With among
Print #2," "; Ucase(Trim.(.name))
Print #2,"age: "; .age '用Print语句建立文本
Print #2, "sex: "; .sex
End With
Next I
Close #2 '关闭文本文件
textname.SetFocus
message1="文本nas.txt已经建好"
message2 ="file"
MsgBox$ message1, 64, message2 '显示文本已建好对话框
End Sub
Private Sub Form_Load() '程序运行装人表单时的事件
Open nasdb For Random As #1 '打开数据库
Len = Len(among)
totalnun = LOF(1)/ Len(among) '计算记录数
If totalnum > 0 Then
ReDim index(totalnum) '定义枚举索引数组
createindex '建立索引
Else
Cmdtxt.Enabled = False '禁止Cmdtxt按钮
End If
End Sub
我们通过以上程序,可以得出哪些启示呢?
1.文件可分为文本文件(一般为顺序存取格式,本程序为cfanvb.txt)和随机存取文件(本程序为cfan
vb.db)。
2.随机存取文件由一些固定长度的记录组成,建立好索引后,能在不读入其他记录的情况下,直接跳到某一记录。
3.在文本文件中使用的语句:
(1)Open filename For output(append) As #numberoutput:创建一个新文件并准备写入数据;
append:打开一个已存在的文件并准备写入数据于文件的结尾。
(2)Print #number,[data1;data2;data3...]
它可将一个或多个没有分隔的字符串输出到指定文件#filenumber, “print #filename,”表示输出一空行。
(3)Write #number,data1,data2,data3...
它可将一行数据写入一个已经打开的文件,并提供“,”作间隔。
(4)Open filename For Input As #number
它为读数据而打开一个文件。
4.随机存取文件常用语句:
(1)Open filename For Random As #number Len=recordlength
以随机方式打开一既可以读又可以写的文件,其中recordlength为文件记录的字节数。
(2)Put #number,recordnumber,record(写入)
Get #number,recordnumber,record(读出)
其中,#number文件已经打开,"recordnumber指明要写入(或读出)的位置,record指那条记录。
本文介绍了处理数据的一些传统方法和基本知识,根据本程序的思路,你可制作出自己喜欢的小程序。其实VB6还有更简单的处理数据的方法,留待以后介绍。希望我烧的骨头汤能适合大家口味。

 

发表回复
你还没有登录,请先登录注册