
试题一
问题1:E1:客户 E2:财务部 E3:仓库
问题2:D1:客户文件 D2:商品文件 D3:订单文件
问题3:P1:准备发货单 P2:产生配货单 (P1和P2可以交换)
名称 起点 终点
客户记录 D1 P1
订单记录 D3 P1
发货单 P1 E3
订单记录 D3 P2
配货单 P2 E3
缺失的数据流:起点:D1 终点:创建客户帐单
试题二
问题1:
(1)业主编号,房号
主键:房号 外键:业主编号
(2)员工号,所在部门号
主键:员工号 外键:部门号
(3)部门号,部门负责人
主键:部门号 外键:部门负责人
(4)收费类型,单位,单价
主键:收费类型 外键:单位
(5) 房号,业主编号,业主姓名,数量,收费日期
主键:房号,收费日期,员工号 外键:员工号,房号
问题2:(a)m (b)n (c)1 (d)n (e)1 (f)1
画图:增加房屋实体,业主和房屋之间建立拥有联系,1个业主可以拥有一套或多套房屋。
问题3:业主关系属于第2范式。
存在数据冗余的问题,因为一个业主可以有多套房屋,所以会存储多次业主的信息。可以将业主关系拆分开来。
试题三
问题1:C1:处方 C2:药店 C3无效处方 C4:有效处方 C5:药品
(1)1..* (2)1..* (3)1 (4)1..* (5)1..* (6)1..*
问题2:S1:审核中 S2:无法审核 S3:医生信息无效 S4:无效处方
(7)医生信息不正确 (8)医生信息是正确的
(9)医生回复处方无效 (10)医生没有在7天内给出确认答复
问题3:组合(Composition)与聚集(Aggregation)的关系。聚集是关联中的一种,聚集对象由部分对象组成;组合又是一种特殊的聚集。在一个组合对象中,部分对象只能作为组成对象的一部分与组合对象同时存在。即是说,组合是“当聚集对象和它的组成对象之间是具有强关联的一种特殊聚集”,组合对象的关键特征是部分对象只能存在于组合对象之中,并且部分体的寿命可能比组合体短,但组合体消亡,部分体也必然消亡。
试题四
(1) A->int_array[0]
(2) A->int_array[0]=A->int_array[A->array_size]
应为A->int_array[0]=A->int_array[A->array_size-1]更准确。
(3) A->array_size
应为A->array_size-1更准确。
(4) key>A->int_array[PARENT(i)]
(5) A->int_array[i]=key
(6) O(1)
(7) O(log2 n)
这个就是整理堆的时间复杂度,也就是堆的高度。注意这里是整理一次堆,而不是堆排序的多次整理。
(8) O(log2 n)
这里就是从后向前整理一次堆的复杂度,也同样是堆的高度。
(9) 3
试题五
(1) this->name
(2) virtual void Add(Company *c){ }
(3) virtual void Delete(Company *c){ }
(4) Company *
(5) Company::c
(6) this
(7) root->children=comp
(8) comp->children=comp1
试题六
(1) abstract class
(2) this.name
(3) Company
(4) Company
(5) children
(6) children
(7) root.Add(comp)
(8) comp.Add(comp1)
