1、软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷 7及答案与解析 一、必答题(共 4道大题,每道大题 15分) 1 【说明】 设有下列关于图书借阅系统的 ER图。图中矩形表示实体,圆表示属性,双圆表示关键字属性,菱形表示实体间的联系。假定已通过下列 SQL语言建立了基本表: CREATE TABLE Readers (Rao CHAR(6) PRIMARY KEY, Rname CHAR(20) NOT NULL, Raddress CHAR(200), Rphone CHAR(15); CREATE TABLE Books (Brio CHAR(6) PRIMARY KEY, Rn
2、ame CHAR(50) NOT NULL); CREATE TABLE Administrators (Ano CHAR(6) PRIMARY KEY, Aname CHAR(20) NOT NULL); CREATE TABLE Borrows (Rno CHAR(6) NOT NULL, Bno CHAR(15) NOT NULL, Ano CHAR(6) NOT NULL, Bdate DATE, Rdate DATE, PRIMARY KEY(Rno,Bno,Ano), FOREGIN KEY(Rno) REFERENCE Readers(Rno), FOREGIN KEY(Bno)
3、 REFERENCE Book(Bno) FOREGIN KEY(Ano) REFERENCE Administrators(Ano); CREATE TABLE Readers (Rao CHAR(6) PRIMARY KEY, Rname CHAR(20) NOT NULL, Raddress CHAR(200), Rphone CHAR(15); CREATE TABLE Books (Brio CHAR(6) PRIMARY KEY, Rname CHAR(50) NOT NULL); CREATE TABLE Administrators (Ano CHAR(6) PRIMARY K
4、EY, Aname CHAR(20) NOT NULL); CREATE TABLE Borrows (Rno CHAR(6) NOT NULL, Bno CHAR(15) NOT NULL, Ano CHAR(6) NOT NULL, Bdate DATE, Rdate DATE, PRIMARY KEY(Rno,Bno,Ano), FOREGIN KEY(Rno) REFERENCE Readers(Rno), FOREGIN KEY(Bno) REFERENCE Book(Bno) FOREGIN KEY(Ano) REFERENCE Administrators(Ano); 为了答题的
5、方便,图中的实体和属性同时给出了中英文两种名字,回答问题时只需写出英文名即可。 【系统 E-R图】1 填写下列 SQL程序中的 (1) (6),使它们分别 完成相应的功能。 程序 1:查没有借阅过编号为 111111图书的所有读者名单。 SELECT Rno,Rname,address,phone FROM Readers WHERE Rno(1) (SELECT(2) FROM Borrow WHERE Bno=llllll);程序 2:统计在 2005年 1月 1日借书的读者人数。 SELECT(3) FROM Borrow WHERE(4);程序 3:查借书证号为 123456的读者所借
6、过的所有图书。 SELECT Bno,Bname FROM Books WHERE(5) (SELECT * FROM Borrow WHERE(6)AND Rno=123456; 2 对于说明中建立的基本表,是否允许同一读者从同一管理员处多 次 (两次和两次以上 )借阅同一本书 ?为什么 ? 3 【说明】 某医院收费系统的主要功能是收取病人门诊的各项费用。系统的收费功能分为 3个方面:病历收费、挂号收费和根据处方单内容收取检查或药物费用。 1病人初次来该医院看病,首先购买病历,记录病人基本情况。 2病人看病前要挂号。根据病人的病历和门诊部门 (内科、外科等 ),系统提供相应的挂号单和处方单,
7、并收取费用。 3病人根据处方单进行进一步检查或取药前需交纳各项费用。系统首先根据病人基本情况检查处方单中病历号是否正确,记录合格的处方单,并提供收据。 4所有收 费都必须依据定价表中的定价来计算,且所有收费都必须写入收费记录中。 医院收费系统的顶层图如图 32所示;医院收费系统的第0层 D四图如图 33所示。其中,加工 1的细化图如图 34所示,加工 2的细化图如图 3-5所示。 假定顶层图是正确的, “定价表 ”文件已由其他系统生成。3 指出哪张图的哪些文件可以不必画出。 4 数据流图 34中缺少 2条数据流,请直接在图中添加。 5 数据流图 3-5中缺少 4条数据流,请直接在图中添加。 6
8、 【说明】 某大学准备开发一个学生课程注册系统,学生可以使用该系统查询新学期将开设的课程和讲课教师情况,选择自己要学习的课程进行登记注册,并可以查询成绩单;教师可以使用该系统查询新学期将开设的课程和选课学生情况,并可以登记成绩单;注册管理员使用该系统进行注册管理,包括维护教师信息、学生信息和课程信息等。 在每个学期的开始,学生可以获得该学期的课程目录表,课程目录表列出每门课程的所有信息,诸如基本信息、教师、开课系和选课条件等。 新学期开始前两周为选课注册时间,在此期间学生可以选课注册,并且允许改变或取消注册申请,开学两周后注册管理员负责关闭课程注册。每个学生可以选择不超过4门课程 ,同时指定
9、2门侯选课程以备主选课程未选上。每门课程最多不能超过 10人,最少不能低于 3人,低于 3人选课的课程将被取消。一旦学生的注册过程完毕,注册系统将有关信息提交收费系统以便学生付费。如果在实际注册过程中名额已满,系统将通知学生在提交课程表之前予以更改。 在学期结束时,学生可以存取系统查看电子成绩单。由于学生成绩属于敏感信息,系统必须提供必要的安全措施以防非法存取。 【用例图】【时序图】注释 1:学生打算注册新的课程。注释 2:一张这学期可选择的课程列表。注释 3:显示一张为学生选课用的空白登记表。6 在 UML中,用例代表一个完整的功能,如与角色通信、进行计算或在系统内工作等。请简要说明用例具有
10、哪些的特征,并指出用例图中 (1) (3)处表示的内容。 7 协作图与时序图是同构的,二者表示的都是同样的系统交互活动,只是各自的侧重点不同而已。根据题目提供的信息,指出协作图中 (4) (8)处表示的内容。 8 UML采用 5个互联的视图来描述软件系统的体系结构,即用例视图 (Use-case View)、设计视图 (Design View)、进程视图 (Process View)、实现视图(Implementation View)和展开视图 (Deployment View)。系统模型中每一个视图的内容是由一些图来描述的, UML中包含用例图、类图、对象图、状态图、时序图、协作图、活动图、
11、组件图、分布图等 9种图。对整个系统而言,其功能由用例图描述,静态结构由类图和对象图描述,动态行为由状态图、时序图、协作图和活动图描述,而物理架构则是由组件图和分布图描述。请分别指出用例图、类图、对象图、状态图、时序图、协作图、活动图、组件图、分布图的作用。 9 【说明】 某网络故障诊断系统,使用故障代理 (aZent、 Sm4P Trap等 )来检测各种意外情况,如大幅丢包、路由冲突、广播风暴等。网络管理员可以在安装该系统时配置安全监控程序 (如故障代理程序、实时诊断程序、报警器等 ),也可以在系统运行时修改配置,通过网络状态采集器和故障特征数据库,并通过控制面板上的键盘与系统进行信息交互。
12、在安装过程中,系统给每个故障代理赋予一个编号 (即 id)和类型,并设置管理员密码以启动和关闭系统,设置故障代理事件发生时应自动拨出的电话号码。当系统检测到一个故障代理事件时,就激活警报,拨出预置的电话号码,并报告关于位置和检测到的事件的性质等信息。 【数据流图】9 数据流图 1(网络故障检测系统顶层图 )中的 A和 B分别表示什么 ? 10 数据流图 2(网络故障检测系统第 0层 DFD图 )中的数据存储 “配置信息 ”会影响图中的哪些加工 ? 11 将数据流图 3(加工 4的细化图 )中的数据流补充完整,并指明加工名称、数据流的方向 (输入 /输出 )和数据流名称。 12 阅读下列函数说明
13、,将应填入 (n)处的字句写在答卷纸的对应栏内。 【函数 1说明】 函数 compare(SqList A, SqList B)的功能是:设 A=(al, , am)和 B=(b1, ,bn)均 为顺序表, “比较 ”两个顺序表 A和 B的大小。设 A和 B分别为 A和 B中除去最大共同前缀后的子表 (例如, A (y, X,X,Z,X,Z), B=(y, x, x, z, y, x, x,2),则两者中最大的共同前缀为 (y, x, x, 2),在两表中除去最大共同前缀后的子表分别为 A=(X,Z)和 B=(y, x, x, 2)。若 A=B=空表,则 A=B:若 A=空表,而B空表,或者两
14、者均不为空表,且 A的首元小于 B,的首元,则 A B;否则 A B。 提示:算法的基本思想为:若相等,则 j+1,之后继续比较后继元素:否则即可得 山比较结果。显然, j的初值应为 0,循环的条件是 j不超出其中任何一个表的范围。若在循环内不能得出比较结果,则循环结束时有 3种可能出现的情况需要区分。 【函数 1】 int compare(SqList A, SqList B) /若 A B,则返回 -1;若 A=B,则返回 o:若 A B,则返回 1 j=0; while(j (1) else if( A.elemj B.elemj ) return(i); else (2) ff (A.
15、length = B.length) return (0); else fi(A.length B.length ) return(-1); else return(1); /compare /函数 1的时间复杂度是 (3) 【函数 2说明】 函数 exchange_L( SLink k = 1; while( k m +k; if(6) / 以指针 ha记 a1 结点的位置 L- next = p- next; / 将 b1结点链接在头结点之后 p- next = NULL; / 设 am的后继为空 q:(7); / 令 q 指向 b1结点 while(q- next)q=(8); / 查的
16、 bn结点 q- next =(9); / 将 a1 结点链接到 bn 结点之后 /函数 2的时间复杂度是 (10)。 软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷 7答案与解析 一、必答题(共 4道大题,每道大题 15分) 1 【正确答案】 (1)NOT IN (2)Rno (3)COUNT(DISTINCT Rno) (4)Bdate=2005-01-01 (5)EXISTS (6)Borrow. Bno=Books. Bno 【试题解析】 从给定的 SQL的语句中可以看出,子查洵中是查询所有借阅过编号为 111111图书的所有读者。而题目要 求是查询 “没有借阅过编号为 1
17、11111图书的所有读者名单 ”,也就是从读者 Readers关系中查询不在子查询中出现的那些读者。所以 (1)空的答案是 NOT IN。 SQL语句中是 Readers关系中的 Rno与子查询结果进行比较,所以 (2)空的答案也应该是 Rno。 题目要求查询人数, 自然需要利用统计函数 COUNT。因为 2005年 1月 1日同一读者可能借多本书,也就是可能在 Borrow关系中出现多次,所以需要加上DISTINCT表示不计重复值。因此, (3)空的答案是 COUNT(DISTINCT Rno)。 查询的条件自然是借阅时间是 2005年 1月 1日,所以填空 (4)的答案是 Bdate=20
18、05-0101。 程序 3是要查 “借书证号为 123456的读者所借过的所有图书 ”,也就是从 Books关系中查询出图书信息,这些图书被借书证号为 123456的读者借阅的记录在Borrow关系中存在。因此 (5)空的答案是 EXISTS,表示存在。 (6)空的答案是Borrow. Bno=Books. Bno。 2 【正确答案】 不能。表 Borrow中,借书证号 Rno、管理员工作证号 Ano和图书书号 Bno共同组成主码,因 此不允许有两个在主码上完全相同的元组 (行 )存在,也就是不允许同一读者从同一管理员处多次借阅同一本书。 【试题解析】 主码是惟一识别表中记录的属性。在一个表中
19、,不允许有两个在主码上完全相同的元组 (行 )存在。表 Borrow中,借书证号 Rno、管理员工作证号Ano和图书书号 Bno共同组成主码,所以不允许由任意两行在这三个属性上的值都完全相同,也就是不允许同一读者从同一管理员处多次借阅同一本书。 3 【正确答案】 医院收费系统的 0层图中 “处方记录 ” 【试题解析】 在 0层图中有 0层图中 “处方记录 ”是加 工 3“处方收费 ”的局部数据文件,所以不必画出。 4 【正确答案】 1.“1.1检查病人信息 ”的 “不合格病人信息 ”输出数据流。 2 “1.2计算费用 ”的 “收据 ”输出数据流。 【试题解析】 找出缺少的数据流的一个关键是父图
20、与子图的平衡,即子图的输 4入输出数据流与父图相应的加工的输入输出数据必须一致。 从 0层图中可以看到对于加工 1“病历收费 ”有输入流 “病人信息 ”,输出流 “不合格病人信息 ”, “病历 ”和 “收据 ”。而加工 1子图中却只有 “病人信息 ”和 “病历 ”,所以一定缺少 2条输出流 “不合格病人信息 ”和 “收据 ”。病人信息是否合格是在加工1.1“检查病人信息 ”中处理,因此加工 1.1出一条输出流 “合格病人信息 ”外,还缺少一条输出流 “不合 格病人信息 ”。对合格的病人信息,加工 1.2计算收费后,理应提供收据给病人,所以另一条缺少的数据流是 “1.2计算费用 ”的 “收据 ”
21、输出数据流。 5 【正确答案】 1.从 “病人基本情况 ”到 “3.1检查处方单 ”的数据流。 2从 “3.2记录处方 ”到 “处方记录 ”的数据流。 3从 “定价表 ”到 “3.3制作收据 ”的数据流。 4从 “3.3制作收据 ”到 “收费记录 ”的数据流。 【试题解 析】 根据说明 “系统首先根据病人基本情况检查处方单中病历号是否正确 ”,因此,在加工 3.1“检查处方单 ”中,需读入病人基本情况,所以缺少从 “病人基本情况 ”到 “3.1检查处方单 ”的数据流。然后系统 “记录合格的处方单 ”,所以加工 3.2“记录处方 ”中需讲处方的内容记录到文件 “处方记录 ”中,因此缺少从 “3.
22、2记录处方 ”到 “处方记录 ”的数据流。加工 3.3“制作收据 ”中需根据文件 “定价表 ”的各项目或药品的价格宋计算所需收取的费用,因此图中还缺少从 “定价表 ”到 “3.3制作收据 ”的数据流。最后收费的记录需写入文件 “收费记录 ”中,所以缺少的第 4条数据流是从 “3.3制作收据 ”到 “收费记录 ”的数据流。 6 【正确答案】 用例的特征如下:用例总是由角色初始化:用例为角色提供值;用例具有完全性,即不管其内部是如何实现的,只有最终产生了返回角色的结果,用例的执行才能完毕。 (1)登记成绩 (2)查询成绩单 (3)关闭注册 7 【正确答案】 (4)create Schedule (
23、5)display blank schedule() (6)get course offerings() (7)create with offerings() (8)add schedule(Schedule) 8 【正确答案】 1.用例图定义了系统的功能需求,它完全是从系统的外部观看系统功能,并不描述系统内部对功能的具体实现。在用例图中,角色代表触发系统功能的用户或其他系统,用例代表具体的功能描述。 2类图描述系统的静态结构,表示系统中的类以及类与类之间的关系。 3对象图描述了一组对象以及它们之间的关系,表示类的对象实例。 4状态图表示一个状态机,强调对象行为的事件 /顷序。 5时序图和协作
24、图均表示一组对象之间的动态协作关系。其中,时序图反映对象之间 发送消息的时间顺序,协作图反映收发消息的对象的结构组织。时序图和协作图是同 【试题解析】 用例描述了它所代表的功能的各个方面,即包含了用例执行期间可能发生的各种情况。用例和角色之间具有 “关联 ”的连接关系,表示什么角色与该用例进行通信。在 UML语言 中,用例用 个椭圆图形和名称表示。 在本题中,我们通过题目说明可以识别以下用例: 1与教师有关的用例: 1)选择课程 选择所教的课程,并获得学生名册。 2)登记成绩 在学期结束时,提交学生的课程成绩。 2与学生有关的用例 : 1)注册课程 在学期开始进行选课注册,允许在一段时间内更改
25、或删除,课程目录系统提供当前学期的所有可选课程列表。 2)查看成绩单 学生可以查看以前学期的电子成绩单。 3与注册管理员有关的用例: 1)维护课程信息 在系统中增加、修改和删除课程信息。 2)维护学生信息 在系统中增加、修改和删除学生信息。 3)维护教师信息 在系统中增加、修改和删除教师信息。 4)关闭注册 删除少于 3人的课程,并由付费系统通知学生缴费。 4与安全性要求有关的用例: 登录 使用此系统的人员需要进行登录,以验证其身份和权限。 发现和定义对象类应以问题域和系统责任为出发点,正确地运用抽象原则,尽可能全面地发现对象的因素,并对其进行检查和整理,最终得到系统的对象类。我们可以在用例模
26、型的基础上,通过识别实体类、边界类和控制类,从而发现和定义系统中的对象类。识别上述对象类之后,通过建立交互图,将用例的行为分布到这些对象类中。时序图表示完成某项行为的对象类和这些对象类之间传递消息的时间顺序,其中,对象生命线是一条垂直的虚线,表示对象存在的时间;控制焦点是一个细长的矩形 ,表示对象执行一个所经历的时间段;消息是对象之间的一条水平箭头线,表示对象之间的通信。协作图包含一组对象和以消息交换为纽带的关联,用于描述系统的行为是如何由系统的成分合作实现的。 9 【正确答案】 A代表故障代理, B代表报警器。 10 【正确答案】 影响监控代理、显示信息和状态。 11 【正确答案】 1.“读
27、代理 ”添加输入数据流 “故障代理状态 ”。 2 “显示格式 ”添加输出数据流 “监控信号 ”。 3 “拨号 ”添加输出数据流 “电话拨号 ”。 【试题解析】 本题是一道分层数据流图的题目。解答此类问题 最关键的一点就是要细心,把题目看清,不要丢掉任何一个条件。另外解题有一定的技巧,从一些常规的入口作为突破口,会事半功倍。现在就利用分层数据流图的数据流的平衡原则 (即父图和于图 (加工图 )的一致性 )来解题。 中,用例用 个椭圆图形和名称表示。 在本题中,我们通过题目说明可以识别以下用例: 1与教师有关的用例: 1)选择课程 选择所教的课程,并获得学生名册。 2)登记成绩 在学期结束时,提交
28、学生的课程成绩。 2与学生有关的用例: 1)注册课程 在学期开始进行选课注册, 允许在一段时间内更改或删除,课程目录系统提供当前学期的所有可选课程列表。 2)查看成绩单 学生可以查看以前学期的电子成绩单。 3与注册管理员有关的用例: 1)维护课程信息 在系统中增加、修改和删除课程信息。 2)维护学生信息 在系统中增加、修改和删除学生信息。 3)维护教师信息 在系统中增加、修改和删除教师信息。 4)关闭注册 删除少于 3人的课程,并由付费系统通知学生缴费。 4与安全性要求有关的用例: 登录 使用此系统的人员需要进行登录,以验证 其身份和权限。 发现和定义对象类应以问题域和系统责任为出发点,正确地
29、运用抽象原则,尽可能全面地发现对象的因素,并对其进行检查和整理,最终得到系统的对象类。我们可以在用例模型的基础上,通过识别实体类、边界类和控制类,从而发现和定义系统中的对象类。识别上述对象类之后,通过建立交互图,将用例的行为分布到这些对象类中。时序图表示完成某项行为的对象类和这些对象类之间传递消息的时间顺序,其中,对象生命线是一条垂直的虚线,表示对象存在的时间;控制焦点是一个细长的矩形,表示对象执行一个所经历的时间段;消息是对象之间的一条水平箭头线,表示对象之间的通信。协作图包含一组对象和以消息交换为纽带的关联,用于描述系统的行为是如何由系统的成分合作实现的。 12 【正确答案】 (1)A.l
30、ength (2)j+ (3)O(Min(A.1ength, B.1ength) (4)m (5)p- next (6) p (7)L- next (8)q- next (9) ha (10)O(ListLength(L) 【试题解析】 函数 1中,算法要求对两个顺序表进行 “比较 ”,是一种 “引用型 ”操作,因此在算法中不应该破坏己知表 。按题目中的规定,只有在两个表的长度相等,且每个对应元素都相同时才相等;否则,两个顺序表的大小主要取决于两表中除去最大公共前缀后的第一个元素。因此,比较两表的大小不应该先比较它们的长度,而应该设一个下标变量 i同时控制两个表,即对两表中 “位序相同 ”的元素进行比较。 上述算法中只有一个 while循环,它的执行次数依赖于待比较的顺序表的表长,因此,算法的时间复杂度为 O(Min(A.1enZ出, B.length)。 函数 2中,对链表来说, “插入 ”和 “删除 ”仅需修改指针即可完成,并且由于前 m个元素之间和 后 n个元素之间的链接关系都不需要改变,则算法的实际操作为: 先从链表中删除 (a1, a2, , am),然后将 (b1, b2, , bn)链接到头结点之后,再将 (a1, a2, , am)链接到 bn之后。 算法的时间复杂度为 O(L1stlen2出 (L)。