【5.高级数据类型】6.记录

6.记录

记录类型(Record)可以将数据类型不同的数据集中在一起作为整体进行操作。类似于数据库中记录概念。

6.1记录类型的定义

记录类型的定义格式:

type
    <记录类型名> = Record
        <域名表1>: <类型1>;
        <域名表2>: <类型2>;
        ...
        <域名表n>: <类型n>;
    end;

说明:

  1. 域名表可以是多个合法的域名标识符,也称为字段名;类型可以是任意类型。

  2. 同一记录类型中不能有同名的域名

  3. 记录内的域名与记录外的标识符可以相同

例如:

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;
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Janeb1018

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值