程序设计基础-Visual Basic(2019秋)

沈阳师范大学 刘立群

目录

  • 认识 Visual Basic
    • ● 认识 Visual Basic
    • ● 对象的属性、事件和方法
    • ● 控件的容器-窗体
    • ● 文本编辑工具-文本框
    • ● 命令按钮和标签
  • 程序设计基础
    • ● 语句和语法规则
    • ● 数据类型和常量变量
    • ● 运算符与表达式
    • ● 常用内部函数
    • ● 输入与输出
  • 基本控制结构和算法
    • ● 程序结构与算法
    • ● 选择结构的语句实现
    • ● 循环结构的语句实现
    • ● 穷举和递推问题求解
    • ● 嵌套循环解百钱百鸡问题
    • ● 星形矩阵的显示问题
  • 常用标准控件
    • ● 选择控件和滚动条--设置文字格式
    • ● 列表框及组合框—购票系统
    • ● 计时器与图片控件—自动变换的交通灯
    • ● 图形操作—小球运动
  • 数组和过程
    • ● 数组的定义与一维数组的应用
    • ● 二维数组
    • ● 控件数组
    • ● 自定义过程
    • ● 参数传递
    • ● 变量的作用域
  • 键盘鼠标事件与菜单设计
    • ● 鼠标键盘事件--小鸡吃虫游戏
    • ● 菜单程序设计--控制移动字幕
  • 通用对话框与文件操作
    • ● 通用对话框与文件操作
    • ● 文件操作--打开保存数据实例
文件操作--打开保存数据实例


文件是指存放在外部介质上的以文件名标识的数据集合。按文件存储的内容可将文件分为程序文件和数据文件。程序文件是指令的有序集合。数据文件是专门存放程序中所使用的数据的文件,如学生成绩,图书资料等。这些数据可以是程序运行调用的原始数据,也可以是程序运行后的处理结果。本章将主要讨论数据文件的操作。

划分依据不同,文件的分类方式也不相同。根据数据存取方式和文件结构,文件可分为顺序文件和随机文件。

顺序文件

顺序文件就是普通的文本文件,可以用记事本等文字编辑软件查看。顺序文件中记录一个接一个地顺序存放,读取顺序与存储顺序一致。也就是说,对顺序文件的读取和写入都只能按顺序从头到尾依次进行,不能直接定位于所要处理的记录。

随机文件

随机文件又称为直接存取文件,它的每个记录的长度是固定的,而且都有一个记录号,对文件中记录的读取和写入可根据记录号直接进行,因此它读取速度比顺序文件快得多。随机文件只能通过程序访问,不能通过文字编辑软件打开查看。

顺序文件的打开与关闭

无论是哪种类型的文件,基本操作都分为三个步骤:打开文件,读取文件内容或者向文件写入内容,关闭文件。

1  顺序文件的打开

顺序文件的打开要使用Open语句。

格式:

Open <文件名> For打开方式 As [#]文件号

说明:

文件名:表示要打开的文件名称,包含所在路径。

打开方式:指打开文件的输入、输出方式,对于顺序文件有如下形式:

Output:向文件中写入数据。若指定的文件不存在,则创建新文件。

Input:读取文件中的数据内容。要求文件必须已经存在。

Append:向文件中写入数据。若指定的文件不存在,将自动建立一个新文件。它与Output的区别为:Output 方式的写,是将文件原有内容清除,从头再写。Append 方式的写,是保留文件原有内容,从文件尾接着写。

文件号:一个整型表达式,其值在1~511,在操作文件时以该数字代替文件名。

Open语句用法示例。

打开CVB文件夹下的顺序文件A.dat,并准备将数据写入文件,指定文件号为1。文件打开语句为:

       Open "C:\VB\A.DAT" For Output As #1

将①中的顺序文件打开,并进行写操作,但保留原记录。

       Open "C:\VB\A.DAT" For Append As #1

将②中的顺序文件打开,指定文件号为2,并准备读取文件中的数据。

       Ch$="C:\VB\A.DAT"    '此例将文件名赋值给字符串变量Ch

       Open Ch For Input As #2

2.文件的关闭

顺序文件的关闭都要使用Close语句。

格式:Close [文件号列表]

例如:

       Close #1         关闭1号文件

       Close 2,3        关闭2号和3号文件,可以省略#

       Close             关闭所有已经打开的文件

12.1.3  顺序文件的读写操作

向顺序文件中写数据的语句有Print语句和Write语句。从顺序文件读数据的语句有:Input语句、Line Input语句和Input$函数。

1Print语句

格式:Print #文件号,[表达式列表]

功能:将数据写入顺序文件中。

说明:Print语句的使用方法与Print方法一样。若省略表达式列表,则写入一个空行。

例如:

Open "d:\abc.txt" For Output As #1

Print "abcd", 5 + 10, 4 < 5, Date         '在窗体上输出

Print

Print "abcd"; 5 + 10; 4 < 5; Date

Print #1, "abcd", 5 + 10, 4 < 5, Date    '在文件中输出

Print #1,

Print #1, "abcd"; 5 + 10; 4 < 5; Date

Close 1

程序运行后,在窗体上显示和文件abc.txt中的内容如下图所示。

 

2Write语句

格式:Write #文件号,[表达式列表]

功能:将数据写入顺序文件中。

说明:表达式列表是要写入文件的数据。若省略表达式列表,则表示写入一个空行。

Write语句和Print语句的主要区别是:用Write语句向文件写入数据时,在数据项之间自动插入逗号。若为字符串数据,则给字符串加上双引号,若为日期或其他类型数据,自动加上“#”分隔。而Print语句写入数据时,系统不会自动添加分隔符。

例如:

Open "d:\cba.txt" For Output As #3

Write #3, "abcd", 5 + 10, 4 < 5, Date

Write #3,

Write #3, "abcd"; 5 + 10; 4 < 5; Date

Close 1

程序运行后,文件cba.txt中的内容如下图所示。在使用write语句写文件时,表达式之间用逗号或分号做分隔符作用是一样的。

 

3Input语句

格式:Input #文件号,[变量列表]

功能:从文件号指定的顺序文件中依次读取数据项,存入到变量列表中。字符型数据每项间以逗号或者回车作为分隔;数值型数据每项间以逗号、空格或回车作为分隔。

说明:变量列表中的变量类型应与文件中读取的数据类型相一致。

例如:数据文件d:\a.txt中内容如下图所示。

 

有如下程序段:

Open "d:\a.txt" For Input As #1

Input #1, c1,c2,c3,c4,c5,c6

Close

则读取到变量c1中的数据为字符串“a”,读取到c2中的数据为字符串“b c”,读取到c3中的数据为字符串“d;e”,读取到c4中的数据为整数10,读取到c5中的数据为整数20,读取到c6中的数据为整数30

4Line Input语句

格式:Line Input #文件号,[变量]

功能:以行为单位从文件号指定的顺序文件中读取数据,存入到变量中。

说明:从文件中读取的数据将作为一个字符串存储到变量中。

例如:从图12.3所示的d:\a.txt中读取数据

有如下程序段:

Open "d:\a.txt" For Input As #1

Line Input #1, a

Line Input #1, b

Close

程序运行后,字符型变量a中为字符串“a,b c,d;e”,字符型变量b中为字符串“10 20,30

在读取顺序文件时,只要数据文件是文本文件形式即可,文件的扩展名可以为txt,也可以为其它扩展名,如dat等。

5Input$函数

格式:Input$(n,#文件号)

功能:返回从指定文件中读取的n个字符。n为整型表达式。

例:若有数据文件d:\b.dat,内容为字符串abcdefghij。程序代码为:

Open "d:\b.dat" For Input As #5

x$ = Input$(6, 5)

Print x

Close #5

程序运行后,在窗体上显示:abcdef

【例1】数值顺序文件操作。

项目说明:在D盘上有一个顺序文件a.txt,该文件是由25个整数组成,两个数字间由空格分隔,如下图所示。通过顺序文件操作命令读取该文件,将所有数字读取到二维数组arr(5,5)中,并在窗体上显示。

 

项目分析:打开文件后,利用Input语句逐项读取整数,将数字读取到二维数组中。

项目设计:新建工程,在窗体的Click事件内编写如下代码:

Private Sub Form_Click()

Dim arr(5, 5) As Integer

Open "d:\a.txt" For Input As #1

For i = 1 To 5

For j = 1 To 5

Input #1, arr(i, j)

Print arr(i, j);

Next j

Print

Next i

Close #1

End Sub

程序运行结果如下图所示。

 

文件操作中常用的语句和函数

1.文件指针

文件打开后,系统会自动生成一个指针(隐含),文件的读写就是从这个指针位置开始的。若文件是以Append方式打开,则文件指针指向文件尾。若文件是以InputOutputRandom方式打开,则文件指针指向文件开始位置(文件头)。当文件经过一次读或写操作后,文件指针会自动移到下一个读写操作的位置。

例:若有数据文件d:\b.dat,内容为字符串abcdefghij。程序代码为:

Open "d:\b.dat" For Input As #5

x = Input$(3, 5)

y = Input$(3, 5)

Close #5

程序运行后,变量x的内容为字符串“abc”,变量y的内容为字符串“def”。

打开文件b.dat后,文件指针指向文件的开始位置,第一次用Input函数读取文件时,将从开始位置的前3个字符赋予了变量x,即“abc”,此时文件指针在字符“d”之前,所以第二次再使用Input函数要求读取3个字符时,即读取了“def”到变量y中。

2.常用语句与函数

EOF函数

格式:EOF(文件号)

功能:用来测试文件是否结束。返回值为逻辑值。

说明:对于顺序文件,若已到文件尾,则返回True,否则返回False。对于随机文件,当无法读到最后一条记录的全部数据时,返回False

LOF函数

格式:LOF(文件号)

功能:该函数的返回值为文件所包含的字节数,即文件的长度。

Loc函数

格式:Loc(文件号)

功能:对于随机文件,Loc函数返回文件读写当前记录的记录号。对于顺序文件,Loc函数返回读写的记录个数。

FreeFile函数

格式:FreeFile()

功能:返回空闲的最小文件号。

说明:当应用程序打开的文件较多时,可利用此函数自动查找还未被使用的文件号。

Seek函数

格式:Seek(文件号)

功能:Seek函数用来返回当前文件指针的位置。

Seek语句

格式:Seek #文件号,位置

功能:Seek语句用来将文件指针定位到指定的位置。

说明:位置是一个数值表达式。对于顺序文件,位置是从文件开头到指定位置的字节数。对随机文件,位置是指定的记录号。