四、記錄類型(用戶自定義類型)
使用VB提供的數(shù)據(jù)類型基本上已經(jīng)可以滿足用戶的要求,但有時會需要存放一組不同類型的數(shù)據(jù)。例如,一個管理學(xué)生的教務(wù)系統(tǒng),一個學(xué)生通常要有許多特征,如學(xué)生的姓名、年齡、性別等。如果每個特征都用一個變量表示,當(dāng)有許多學(xué)生時很可能產(chǎn)生混亂。這時,就可以把學(xué)生的所有特征構(gòu)造為一個數(shù)據(jù)類型。
1、記錄類型定義
在Visual Basic中構(gòu)造數(shù)據(jù)類型可以用Type語句定義,Type的語法如下:
[Private| Public] Type 記錄類型名
成員列表
End Type
說明:
記錄類型的定義必須放在模塊(包括標(biāo)準(zhǔn)模塊和窗體模塊)的聲明部分。
記錄數(shù)據(jù)類型是定義在“Type …End Type”之間的數(shù)據(jù)?!癧 ]”內(nèi)的是可選項。
Public用于聲明可在所有工程的所有模塊的任何過程中使用記錄類型;
Private用于聲明只能在包含該聲明的模塊中使用記錄類型。
當(dāng)在標(biāo)準(zhǔn)模塊中定義時,可以有關(guān)鍵字Public(默認(rèn))或Private;而如果在窗體模塊中定義,則必須加上關(guān)鍵字Private。
記錄類型的命名遵循標(biāo)準(zhǔn)的變量命名約定。
成員的類型聲明格式為:
成員名 As 數(shù)據(jù)類型
注意:
Type …End Type中不允許使用行號和標(biāo)簽。
Type 語句只能在模塊的聲明部分中使用。
例如:
Type Student
Num As Integer
Name As String *20 '定長字符串(20個)
Sex As String*1 '定長字符串(1個)
Age As Integer
Score As single
Addr As String
End Type
該例定義了一個類型名為:“Student”六個成員的記錄集合。
使用 Type 語句聲明了一個記錄類型后,就可以在該聲明范圍內(nèi)的任何位置聲明該類型的變量??梢允褂?Dim、Private、Public、ReDim 或 Static 來聲明記錄類型的變量。對同一種用戶定義類型,可以聲明為局部的、私有的或公用的模塊級變量。
下表介紹了在什么地方聲明用戶定義類型和該類型的變量及其作用范圍。
過程/模塊
將用戶定義類型創(chuàng)建成為…
用戶定義類型的變量可以被聲明成…
過程
標(biāo)準(zhǔn)模塊
窗體模塊
類模塊
不適用
私有或公用
僅私有
私有或公用
僅局部
私有或公用
僅私有
私有或公用
缺省情況下,用Type語句聲明的記錄類型是公有的,但任何公有的聲明和定義只能放在標(biāo)準(zhǔn)模塊的聲明部分,因此,在窗體模塊或類模塊的聲明部分定義用戶自定義類型時,一定要加上Private關(guān)鍵字。
例如,在一個標(biāo)準(zhǔn)模塊中創(chuàng)建一個記錄有關(guān)公司雇員信息的用戶定義類型時,必須使用關(guān)鍵字Private:
Private Type Employee
ID As Integer
Name As String *20
Salary As Cureency
End Type
記錄類型中的成員可以是數(shù)組。包括:靜態(tài)數(shù)組和動態(tài)數(shù)組。例如:
Type SystemInfo
CPU As Varint
Memory As Long
DiskDrives(25) As String'靜態(tài)數(shù)組(此處也可以是動態(tài)數(shù)組,即可以改為DiskDrives() As String)
VideoColore As Integer
Cost As Currency
PurchaseDate As Variant
End Type
2、定義記錄類型變量
定義了一個記錄類型之后,可以用Dim(或Public,Static)來聲明擁有這種數(shù)據(jù)類型的變量。例 如:
Dim Student1,Student2 As Student
定義Student1和Student2為Student之后,Student1和Student2就具有了Student類型的結(jié)構(gòu)。
Student1
1001
Zhang Zhen
M
18
90
Shanghai
Student2
1002
Wang Chen
M
18
95
Beijing
3、賦值和檢索值
對記錄類型變量的元素賦值和檢索類似于對象屬性的設(shè)置和獲取。例如:
MySystem.CPU="486"
If MySystem.PurchaseDate>#1/1/92# Then…
如果兩個變量都屬于同一個用戶定義類型,也可將其中一個變量賦給另一個變量。這種賦值是將一個變量的所有元素賦給另一個變量的對應(yīng)元素。例如:
YourSystem=MySystem (兩者均為記錄類型)
記錄中的成員的數(shù)據(jù)也可以是記錄類型,稱之為嵌套記錄。
4、記錄數(shù)組
一個記錄變量可以是一組數(shù)據(jù)(如一個學(xué)生的學(xué)號、姓名、成績……等數(shù)據(jù))。如果對一個班的學(xué)生的數(shù)據(jù)進(jìn)行統(tǒng)計與處理,顯然應(yīng)該使用記錄數(shù)組。記錄數(shù)組與以前的數(shù)組不同之處在于每個數(shù)組元素都是一個記錄類型的數(shù)據(jù)。下面的示例完成對記錄數(shù)組的初始化。
使用VB提供的數(shù)據(jù)類型基本上已經(jīng)可以滿足用戶的要求,但有時會需要存放一組不同類型的數(shù)據(jù)。例如,一個管理學(xué)生的教務(wù)系統(tǒng),一個學(xué)生通常要有許多特征,如學(xué)生的姓名、年齡、性別等。如果每個特征都用一個變量表示,當(dāng)有許多學(xué)生時很可能產(chǎn)生混亂。這時,就可以把學(xué)生的所有特征構(gòu)造為一個數(shù)據(jù)類型。
1、記錄類型定義
在Visual Basic中構(gòu)造數(shù)據(jù)類型可以用Type語句定義,Type的語法如下:
[Private| Public] Type 記錄類型名
成員列表
End Type
說明:
記錄類型的定義必須放在模塊(包括標(biāo)準(zhǔn)模塊和窗體模塊)的聲明部分。
記錄數(shù)據(jù)類型是定義在“Type …End Type”之間的數(shù)據(jù)?!癧 ]”內(nèi)的是可選項。
Public用于聲明可在所有工程的所有模塊的任何過程中使用記錄類型;
Private用于聲明只能在包含該聲明的模塊中使用記錄類型。
當(dāng)在標(biāo)準(zhǔn)模塊中定義時,可以有關(guān)鍵字Public(默認(rèn))或Private;而如果在窗體模塊中定義,則必須加上關(guān)鍵字Private。
記錄類型的命名遵循標(biāo)準(zhǔn)的變量命名約定。
成員的類型聲明格式為:
成員名 As 數(shù)據(jù)類型
注意:
Type …End Type中不允許使用行號和標(biāo)簽。
Type 語句只能在模塊的聲明部分中使用。
例如:
Type Student
Num As Integer
Name As String *20 '定長字符串(20個)
Sex As String*1 '定長字符串(1個)
Age As Integer
Score As single
Addr As String
End Type
該例定義了一個類型名為:“Student”六個成員的記錄集合。
使用 Type 語句聲明了一個記錄類型后,就可以在該聲明范圍內(nèi)的任何位置聲明該類型的變量??梢允褂?Dim、Private、Public、ReDim 或 Static 來聲明記錄類型的變量。對同一種用戶定義類型,可以聲明為局部的、私有的或公用的模塊級變量。
下表介紹了在什么地方聲明用戶定義類型和該類型的變量及其作用范圍。
過程/模塊
將用戶定義類型創(chuàng)建成為…
用戶定義類型的變量可以被聲明成…
過程
標(biāo)準(zhǔn)模塊
窗體模塊
類模塊
不適用
私有或公用
僅私有
私有或公用
僅局部
私有或公用
僅私有
私有或公用
缺省情況下,用Type語句聲明的記錄類型是公有的,但任何公有的聲明和定義只能放在標(biāo)準(zhǔn)模塊的聲明部分,因此,在窗體模塊或類模塊的聲明部分定義用戶自定義類型時,一定要加上Private關(guān)鍵字。
例如,在一個標(biāo)準(zhǔn)模塊中創(chuàng)建一個記錄有關(guān)公司雇員信息的用戶定義類型時,必須使用關(guān)鍵字Private:
Private Type Employee
ID As Integer
Name As String *20
Salary As Cureency
End Type
記錄類型中的成員可以是數(shù)組。包括:靜態(tài)數(shù)組和動態(tài)數(shù)組。例如:
Type SystemInfo
CPU As Varint
Memory As Long
DiskDrives(25) As String'靜態(tài)數(shù)組(此處也可以是動態(tài)數(shù)組,即可以改為DiskDrives() As String)
VideoColore As Integer
Cost As Currency
PurchaseDate As Variant
End Type
2、定義記錄類型變量
定義了一個記錄類型之后,可以用Dim(或Public,Static)來聲明擁有這種數(shù)據(jù)類型的變量。例 如:
Dim Student1,Student2 As Student
定義Student1和Student2為Student之后,Student1和Student2就具有了Student類型的結(jié)構(gòu)。
Student1
1001
Zhang Zhen
M
18
90
Shanghai
Student2
1002
Wang Chen
M
18
95
Beijing
3、賦值和檢索值
對記錄類型變量的元素賦值和檢索類似于對象屬性的設(shè)置和獲取。例如:
MySystem.CPU="486"
If MySystem.PurchaseDate>#1/1/92# Then…
如果兩個變量都屬于同一個用戶定義類型,也可將其中一個變量賦給另一個變量。這種賦值是將一個變量的所有元素賦給另一個變量的對應(yīng)元素。例如:
YourSystem=MySystem (兩者均為記錄類型)
記錄中的成員的數(shù)據(jù)也可以是記錄類型,稱之為嵌套記錄。
4、記錄數(shù)組
一個記錄變量可以是一組數(shù)據(jù)(如一個學(xué)生的學(xué)號、姓名、成績……等數(shù)據(jù))。如果對一個班的學(xué)生的數(shù)據(jù)進(jìn)行統(tǒng)計與處理,顯然應(yīng)該使用記錄數(shù)組。記錄數(shù)組與以前的數(shù)組不同之處在于每個數(shù)組元素都是一個記錄類型的數(shù)據(jù)。下面的示例完成對記錄數(shù)組的初始化。