6.记录
记录类型(Record)可以将数据类型不同的数据集中在一起作为整体进行操作。类似于数据库中记录概念。
6.1记录类型的定义
记录类型的定义格式:
type <记录类型名> = Record <域名表1>: <类型1>; <域名表2>: <类型2>; ... <域名表n>: <类型n>; end;
说明:
-
域名表可以是多个合法的域名标识符,也称为字段名;类型可以是任意类型。
-
同一记录类型中不能有同名的域名
-
记录内的域名与记录外的标识符可以相同
例如:
type Student = Record student_id: integer; name: string; sex: boolean; age: integer; addr: string; end;
6.2记录变量的声明
记录变量的声明与其他变量的声明一样,如:
var std1, std2: Student;
6.3记录域的访问
访问记录域(字段)的方法:
-
记录变量名限定
格式:
<记录变量名>.<域名>
如:
std1.student_id := 1; std1.sex := false;
-
with
with语句格式:
with <记录变量名> do <语句>
语句可以是简单语句也可以是复合语句,在语句中访问域不需要加记录变量名进行限定。
如:
with std1 do begin student_id := 1; name := 'zhaoxx'; sex := false; age := 18; addr := 'BEIJING SHI HAIDIANQU'; end;
示例:利用数组和记录类型编写一个学生记录的展现。界面如下图:
在该程序的界面中记录字段的展现依次使用了5个ListBox组件,代码如下:
type Student = Record student_id: integer; student_no: string; name: string; sex: boolean; age: integer; addr: string; End; var ss: array of Student; {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); var i: integer; begin // 窗体创建事件 Setlength(ss, 5); with ss[0] do begin student_id := 1; student_no := '20010005'; name := '赵小美'; sex := false; age := 18; addr := '内蒙古呼和浩特市新城区'; end; with ss[0] do begin student_id := 1; student_no := '20010005'; name := '赵小美'; sex := false; age := 18; addr := '内蒙古呼和浩特市新城区'; end; with ss[1] do begin student_id := 1; student_no := '20010006'; name := '李惠敏'; sex := false; age := 19; addr := '内蒙古乌兰察布市集宁区'; end; with ss[2] do begin student_id := 1; student_no := '20010007'; name := '刘浩'; sex := true; age := 18; addr := '内蒙古鄂尔多斯市东胜区'; end; with ss[3] do begin student_id := 1; student_no := '20010011'; name := '姜明'; sex := true; age := 19; addr := '内蒙古呼和浩特市赛罕区'; end; with ss[4] do begin student_id := 1; student_no := '20010015'; name := '陈静'; sex := false; age := 19; addr := '内蒙古包头市九原区'; end; for i := Low(ss) to High(ss) do with ss[i] do begin ListBox1.Items.Add(student_no); ListBox2.Items.Add(name); if sex then ListBox3.Items.Add('男') else ListBox3.Items.Add('女'); ListBox4.Items.Add(inttostr(age)); ListBox5.Items.Add(addr); end; end;
6.4记录中的变体
记录是由一部分固定不变和另一部分变化部分组成,变化部分是随固定部分中的某个数据项的具体取值而决定的,这个变化部分数据项称为记录变体。带记录变体的记录类型定义格式:
type <记录类型名> = Record <域名表1>: <类型1>; <域名表2>: <类型2>; ... <域名表n>: <类型n>; case <标志域>: <标志域类型> of <常量表1>: <字段列表1>; <常量表2>: <字段列表2>; ... <常量表n>: <字段列表n>; end;
如,对于上面代码中的学生记录,可能有些学生会有曾用名这个域,定义如下:
Student = Record student_id: integer; student_no: string; name: string; sex: boolean; age: integer; addr: string; case hasAnotherName: boolean of True: (anotherName: string); False: (); End;