1、2006年上半年软件水平考试(中级)软件设计师下午(应用技术)试题真题试卷及答案与解析 一、必答题(共 4道大题,每道大题 15分) 1 阅读下列说明以及数据流图,回答问题 1、问题 2和问题 3。 说明 某学校建立了一个网上作业提交与管理系统,基本功能描述如下: (1)账号和密码。任课老师用账号和密码登录系统后,提交所有选课学生的名单。系统自动为每个选课学生创建登录系统的账号和密码。 (2)作业提交。学生使用账号和密码登录系统后,可以向系统申请所选课程的作业。系统首先检查学生的当前 状态,如果该学生还没有做过作业,则从数据库服务器申请一份作业。若申请成功,则显示需要完成的作业。学生需在线完成
2、作业,单击 “提交 ”按钮上交作业。 (3)在线批阅。系统自动在线批改作业,显示作业成绩,并将该成绩记录在作业成绩统计文件中 1 如果将数据库服务器 (记为 DB)作为一个外部实体,那么在绘制该系统的数据流图时,还应有哪些外部实体和数据存储 ? 2 根据说明结合问题 1的解答,指出在该系统的顶层数据流图中应有哪些数据流。请采用说明中的词汇给出这些数据流的起点、终点以及数据流名称,下表给出了数据流的部 分信息,请填充空缺处。3 根据数据流图的设计原则,阅读下图所示的数据流图,找出其中的错误之处。4 阅读下列说明以及 UML类图,回答问题 1、问题 2和问题 3。 说明 某客户信息管理系统中保存着
3、两类客户的信息。 (1)个人客户,对于这类客户,系统保存了其客户标识 (由系统生成 )和基本信息 (包括姓名、住宅电话和 E-mail)。 (2)集团客户。集团客户可以创建和管理自己的若干名联系人。对于这类客户,系统除了保存其客户标识 (由系统生成 )之外,也保存了其联系人的信息。联系人的信息包括姓名、住宅电话、 E-mail、办公电话以及职位。 该系统除了可以保存客户信息之外,还具有以下功能: (1)向系统中添加客户 (addCustomer); (2)根据给定的客户标识,在系统中查找该客户 (getCustomer): (3)根据给定的客户标识,从系统中删除该客户 (removeCusto
4、mer): (4)创建新的联系人 (addContact): (5)在系统中查找指定的联系人 (getContact); (6)从系统中删除指定的联系人 (removeContact)。 该系统采用面向对象方法进行开发。在面向对象分析阶段,根据 上述描述,得到如下表所示的类。 描述该客户信息管理系统的 UML类图如下图所示。 4 请使用说明中的术语,给出上图中类 Customer和类 Person的属性。 5 识别关联的多重度是面向对象建模过程中的一个重要步骤。根据说明中给出的描述,完成图中的 (1) (6)。 6 根据说明中的叙述,抽象出如下表所示的方法,请指出上图中的类 Customer-
5、 InformationSystem和7 阅读下列说明,回答问题 1、问题 2和问题 3。 说明 某单位资料室需要建立一个图书管理系统,初步的需求分 析结果如下: (1)资料室有图书管理员若干名,他们负责己购入图书的编目和借还工作,每名图书管理员的信息包括工号和姓名; (2)读者可在阅览室读书,也可通过图书流通室借还图书,读者信息包括读者 D、姓名、电话和 E-mail,系统为不同读者生成不同的读者 ID; (3)每部书在系统中对应唯一的一条图书在版编目数据 (CIP,以下简称书目 ),书目的基本信息包括 ISBN号、书名、作者、出版商、出版年月,以及本资料室拥有该书的册数 (以下简称册数 )
6、,不同书目的 ISBN号不相同: (4)资料室对于同一书目的图书可拥有多册(本 ),图书信息包括图书 ID、 ISBN号、存放位置、当前状态,每一本书在系统中被赋予唯一的图书 ID: (5)一名读者最多只能借阅十本图书,且每本图书最多只能借两个月,读者借书时需由图书管理员登记读者 、所借图书 D、借阅时间和应还时间,读者还书时图书管理员在对应的借书信息中记录归还时间; (6)当某书目的可借出图书的数量为零时,读者可以对其进行预约登记,即记录读者 ID、需要借阅的图书的 ISBN号、预约时间。 某书目的信息,以及与该书目对应的图书信息,如下表所示。系统的主要业务处理如下。 (1)入库管理:图书购
7、进入 库时,管理员查询本资料室的书目信息,若该书的书目尚未建立,则由管理员编写该书的书月信息并输入系统,然后编写并输入图书信息;否则,修改该书目的册数,然后编写并输入图书信息,对于进入流通室的书,其初始状态为 “未借出 ”,而送入阅览室的书的状态始终为 “不外借 ”。 (2)借书管理:读者借书时,若有,则由管理员为该读者办理借书手续,并记录该读者的借书信息,同时将借出图书的状态修改为 “已借出 ”。 (3)预约管理:若图书流通室没有读者要借的书,则可为该读者建立预约登记,需要记录读者 ID、书的 ISBN号、预约时间和预约期限 (最长为 10天 )。一旦其他读者归还这种书,就自动通知该预约读者
8、。系统将自动清除超出预约期限的预约记录并修改相关信息。 (4)还书管理:读者还书时,则记录相应借还信息中的 “归还时间 ”,对于超期归还者,系统自动计算罚金 (具体的计算过程此处省略 )。系统同时自动查询预约登记表,若存在其他读者预约该书的记录,则将该图书的状态修改为 “已预约 ”,并将该图书 ID写入相应的预约记录中 (系统在清除超出预约期限的记录时解除该图书的 “已预约 ”状态 );否则,将该图书的状态修改为 “未借出 ”。 (5)通知处理:对于己到期且未归还的图书,系 统通过 E-mail自动通知读者:若读者预约的书已到,系统则自动通过 E-mail通知该读者来办理借书手续。 7 根据以
9、上说明设计的实体联系图如下图所示,请指出读者与图书、书目与读者、书目与图书之间的联系类型。8 该图书管理系统的主要关系模式如下,请补充 “借还记录 ”和 “预约登记 ”关系中的空缺。 管理员 (工号,姓名 ) 读者 (读者 ID,姓名,电话, E-mail) 书目 (ISBN号,书名,作者,出版商,出版年月,册数,经办人 ) 图书 (图书 ID, ISBN号,存放位置,状态,经办人 ) 借还记录 (a),借出时间,应还时间,归还时间 ) 预约登记 (b),预约时间,预约期限,图书 ID) 注:时间格式为 “年 .月 .日 时:分:秒 ”。 9 请指出问题 2中给出的读者、书目关系模式的主键,以
10、及图书、借还记录和预约登记关系模式的主键和外键。 10 阅读以下说明,回答问题 1、问题 2和问题 3。 说明 某单位正在使用一套 C/S模式的应用软件系统,现在需要升级为 B/S应用模式,但需要保持业务的连续性。开发人员提出用 Web Service作为中间层的接口进行开发。 10 请用 120字以内文字,从业务的继承性、升级成本 (时间、工作量 )和扩展性三个方面简要说明开发人员所提方案的优点。 11 Web Service的三个基本技术是 WSDL、 SOAP、 UDDI,它们都是以 XML为基础定义的。请用 120字以内文字,简要说明 WSDL、 SOAP和 UDDI的作用。 12 服
11、务注册中心、服务提供者和服务请求者之间的交互和操作构成了 Web Service的体系结构,如下图所示。请用 180字以内文字,说明这三者的主要功能及其交互过程。 二、选答题(共 3道大题,每道大题 15分) 从下列 3道试题中任选 1道解答,如果解答的试题数超过 1道,则仅题号小的 1道题解答有效。 13 阅读下列说明、图和 C代码。 说明 5-1 B树是一种多叉平衡查找树。一棵 m阶的 B树,或为空树,或为满足下列特性的 m叉树: 树中每个结点最多有 m棵子树; 若根结点不是叶子结点,则它至少有两棵子树; 除根之外的所有非叶子结点至少有 m/2棵子树; 所有的非叶子结点中包含下列数据信息:
12、 (n, A0,K1, A1, K2, A2, , Kn, An)其中: Ki(i=1, 2, , n)为关键字,且 KiKi+1(i=1, 2, , n-1); Ai(i=0, 1, , n)为指向子树根结点的指针,且指针 Ai-1,所指子树中所有结点的关键字均小于 Ki, Ai+1,所指子树中所有结点的关键字均大于 Ki, n为结点中关键字的数目。 所有的叶子结点都出现在同一层次上,并且不带信息 (可以看作是外部结点或查找失败的结点,实际上这些结点不存在,指向这些结点的指针为空 )。 例如,一棵 4阶 B树如下图所示 (结点中关键字的数目省略 )。 B树的阶 M、 bool类型、关键字类型
13、及 B树结点的定义如下: #define M 4 /*B树的阶 */ typedef enum FALSE=0,TRUE=1bool; typedef int ElemKeyType; typedef struct BTreeNode int numkeys; /*结点中关键字的数日 */ struct BTreeNode*parent; /*指向父结点的指针,树根的父结点指针为空 */ struct BTreeNode *AM; /*指向子树结点的指针数组 */ ElemKeyType KM; /*存储关键字的数组, K0闲置不用 */ BTreeNode; 函数 SearchBtree(B
14、TreeNode*root,ElemKcyTypeakey,BTreeNode: *pb)的功能是:在给定的一棵 M阶 B树中查找关键字 akey所在结点,若找到则返回 TRUE,否则返回 FALSE。其中, root是指向该M阶 B树根结点的指针,参数 ptr返回 akey所在结点的指针,若 akey不在该 B树中,则 ptr返回查找失败时空指针所在结点的指针。例如,在上图所示的 4阶 B树中查找关键字 25时, ptr返回指向结点 e的指针。 注;在结点中查找关键字 akey时采用二分法。 函数 5-1 bool SearchBtree(BTreeNode* root, ElemKeyTy
15、pe akey, BTreeNode *ptr) int lw, hi, mid; BTreeNode*p = root; *ptr = NULL; while ( p ) 1w = 1; hi=(1); while (1w = hi) mid = (1w + hi)/2; if (p - Kmid = akey) *ptr = p; return TRUE; else if (2) hi=mid - 1; else 1w = mid + 1; *ptr = p; p = (3); return FALSE; 说明 5-2 在 M阶 B树中插入一个关键字时,首先在最接近外部结点的某个非叶子结点
16、中增加一个关键字,若该结点中关键字的个数不超过 M-1,则完成插入;否则,要进行结点的 “分裂 ”处理。所谓 “分裂 ”,就是把结点中处于中间位置上的关键字取出来并插入其父结点中,然后以该关键字为分界线,把原结点分成两个结点。 “分裂 ”过程可能会一直持续到树根,若树根结点也需要分裂,则整棵树的高度增加 1。 例如,在上图所示的 B树中插入 关键字 25时,需将其插入结点 e中。由于 e中已经有 3个关键字,因此将关键字 24插入结点 e的父结点 b,并以24为分界线将结点 e分裂为 e1和 e2两个结点,结果如下图所示。 函数 Isgrowing(BTreeNode*root, ElemKe
17、yTypeakey)的功能是:判断在给定的 M阶B树中插入关键字 akey后,该 B树的高度是否增加,若增加则返回 TRUE,否则返回 FALSE。其中, root是指向该 M阶 B树根结点的指针。 在函数 Isgrwing中,首先调用函数 SearchBtree(即函数 5-1)查找关键字 akey是否在给定的 M阶 B树中,若在,则返回 FALSE(表明无需插入关键字 akey,树的高度不会增加 );否则,通过判断结点中关键字的数目考查插入关键字 akey后该 B树的高度是否增加。 函数 5-2 bool Isgrowing(BTreeNode* root, ElernKeyType ak
18、ey) BTreeNode *t, *f; if( !SearchBtree(4) ) ) t=f; while (5) t=t - parent; if( !t ) return TRUE; return FALSE; 14 阅读下列说明、图和 c+代码。 说明 某订单管理系统的部分 UML类图如下图所示。 上图中, Product表示产品, ProductList表示产品目录, Order表示产品订单,OrderItem表示产品订单中的一个条目, OrderList表示订单列表, SalesSystem提供订单管理系统的操作接口。 请完善类 Order的成员函数 getOrderedAmo
19、unt()和类SalesSystem的 stafistic()方法,各个类的属性及部分方法定义参见下面的 C+代码。 C+代码 class Product /产品 private: string pid; /产品识别码 string description; /产品描述 double price; /产品单价 public: void setProductPrice(double price); /设置产品单价 string getProduetld(); /获取产品识别码 string getProduetDescriprion 0; /获取产品描述 double getProductPri
20、ce0; /获得产品单价 /其他成员省略 ; class ProductList /产品列表类 private: vector Product products; public: ProductList(); Product getProductBylndex(int i); /获得产品列表中的第 i件产品 void addProduct(Product t); /在产品列表中加入一件产品 Product * getProductByID(string pid); /获得识别码为 pid的产品 指针 unsigned iht getProductAmount(); /获得产品列表中的产品娄量
21、; class OrderItem /订单条目类 private: Product *productPtr; /指向被订购产品的指针 int quantity; /订购数量 public: OrderItem (Product *,iht); Product * getProductptr O; /获得指向被订购产品的指针 int getQuantity (); /获取被订刚强产品数量 ; class Order /订单类 private: unsigned int orderid; /订单识别号 vector Orderltem items; /订单内容 (订单项 ) public: Ord
22、er(unsigned int orderid); /获得识别码为 fid的产品在当前订单中被订购的数量 int getOrderedAmount(string fid); void additem(Product *productPtr,unsigned int n); /在订单中增加一个订 单项 ; class OrderList /订单列表类 private: vector Order orders; public: OrderList(); /Begin()返回指向订单列表第一个元素的迭代器 (指针 ) virtual vector Order :iterator OrderList:
23、Begin(); /End()返回指向订单列表最后一个元素之后的迭代器 (指向一个不存在的元素 ) virtual vector Order :iterator orderList:End(); void addOrder(Order t); /在订单列表中加入一份订单 /其他成员省略 ; class SalesSystem private: ProductList catalog; /产品目录 OrderList sales; /订单列表 public: SalesSystem(); void statistic(); /统计所有产品的订购情况 /其他成员省略 ; /在订单中查找识别码为 t
24、id的产品的订购数量,若该产品没有被订购,则返回 0 int Order:getOrderedAmount(string tid) for (int k=0; k items.size(); k+) if(1)=tid) return (2); return 0; /方法 statistic()依次统计产品目录中每个产品的订购总量,并打印输出 /每个产品的识别码、描述、订购总量和订购金额 void SalesSystem:statistic() unsigned int k, t, ordered_qty = 0; vector Order :iterator it; Product p; c
25、out 产品识别码 t描述 tt订购数量 t金额 endl; for (k = 0; k catalog.gctProductAmount(); k+)/遍历产品列表 p =(3); /从产品列表取得一件产品信息存入变量 p ordered_qty = 0; /通过迭代器变量 it遍历订单列表中的每一份订单 for (it = sales. Begin(); (4): it+) /根据产品识别码获得产品 p在当前订单中被订购的数量 t =(5) (p.getProductld(); ordered_qty +=t; cout p.getProducfld() “tt“ p.gntProduct
26、Description() “tt“; cout ordered_qty “tt“ p.getProductPrice() * ordered_qty endl; 15 阅读下列说明、图以及 Java程序。 说明 某订单管理系统的部分 UML类图如下图所示。 上图中, Product表示产品, ProductList表示所销售产品的列表, Order表示产品订单, Orderltem表示产品订单中的一个条目, OrderList表示订单列表, SalesSystem提供订单管理系统的操作接口。各个类的部分属性和方法说明如下表所示。 可以使用类 java.util.ArrayList E米实现对
27、象的聚集关系,如上图中 OrderList与 Order之间的聚集关系。 for-each循环提供了一种遍历对象集合的简单方法。在for-each循环中,可以指定需要遍历的对象集合以及用来接收集合中每个元素 的变量,其语法如下: for(用来接收集合中元素的变量:需要遍历的对象集合 ) 如果要使用 for-each循环来遍历对象集合,那么包含该对象集合的类必须实现接口 java.util.Iterable T。 Java程序 7-1和 Java程序 7-2分别给出了类 OrderList和方法 statistic的 Java代码 Java程序 7-1 import java.util.*; p
28、ublic class OrderList (1) private ArrayList Order orders; public OrderList0 this.orders = new ArrayListOrder (); public void addOrder(Order orde0 this.orders.add(order); public IteratorOrder iterator() return (2); public iht getNumberOfOrders0 return this.orders.size(); Java程序 7-21 import java.u61.*
29、; public class SalesSystem private ProductList catalog; private OrderList sales; private static PrintWriter stdOut = new PrintWriter(System.out, true); public void statistic() for (Product product: (3) iht number = 0; for (Order order: (4) for (5): order) if (produet.equals(item.getProduct() number
30、+= item. getQuantity(); stdOut.println(product .getCode() +“ “ + product.getDescription() +“ “ + number +“ “+ number * product.getPrice(); /其余的方法末列出 2006年上半年软件水平考试(中级)软件设计师下午(应用技术)试题 真题试卷答案与解析 一、必答题(共 4道大题,每道大题 15分) 1 【正确答案】 外部实体: (选课 )学生、 (任课 )老师 数据存储:作业成绩统计文件 【试题解析】 DFD图中包含 4种元素:加工、数据流、外部实体和数据存储。
31、外部实体是指存在于软件系统之外的人员或组织。它指出系统所需数据的发源地和系统所产生的数据的归宿地。 根据 说明 中提供的信息,可以发现 “学生 ”和 “任课老师 ”向 “网上作业提交与管理系统 ”提供最原始的输入数据,并从系统中获取相应的输出数据。因此可以确定这两个为外部实体 。 数据存储用来表示暂时存储的数据,每个数据存储都有一个名字。从 说明 中可以很明显地看出, “作业成绩统计文件 ”是一个数据存储。 2 【正确答案】 (1)(选课 )学生 (2)(选课 )学生 (3)(选课 )学生 (4)(选课 )学生 (5)作业成绩 (6)DB (7)作业成绩统计文件 (8)作业成绩 (9)(任课
32、)老师 (10)DB (11)作业 (12)(选课 )学生 (13)(任课 )老师 注: (4)、 (6)的答案可互换; (12)、 (13)的答案可互换。 【试题解析】 在绘制 DFD时,遵循分层绘制的原则。首先绘制系统的输入输出,即把整个软件系统看作一个大的加工。然后根据系统从哪些外部实体接收数据流,以及系统发送数据流到哪些外部实体,就可以画出系统的输入和输出图,这张图称为项层图。 实际上根据题目的描述,确定外部实体与 “网上作业提交与管理系统 ”之间存在的输入、输出数据,填写空 (1) (13)。 3 【正确答案】 错误 1:外部实体 A和 B之间不能存在数据流。 错误 2:外部实体 A
33、和数据存储 H之间不能存在数据流。 错误 3:加工 2的输入 /输出数据流名字相同。 错误 4:加工 4只有输入,没有输出。 错误 5:加工 5只有输出,没有输入。 注:以上 5条错误信息可以打乱次序。 【试题解析】 在单张 DFD时,必须注意以下原则: 1)一个加工的输出数据流不应与输入数据流同名,即使它们的组成成分相同。 2)保持数据守恒。也就是说,一个加工所有输出数据流中的数据必须能从该加工的输入数据流中直接获得,或者是通过该加工能产生的数据。 3)每个加工必须既有输入数据流,又有输出数据流。 4)所有的数据流 都必须以一个加工开始,或以一个加工结束。 根据上述原则,可以很明显地看出图中
34、存在的错误: 图中的数据流 x和 H的开始和结束都不是加工; 加工 2的输入、输出数据流是同名的; 加工 4只有输入数据流,没有输出数据流;而加工 5只有输出数据流,没有输入数据流。 4 【正确答案】 Customer的属性:客户标识 Person的属性:姓名、住宅电话、 E-mail 【试题解析】 本题考查的是在识别具有继承关系的类的属性。继承是基类和派生类之间共享数据和方法的机制。题目要求分别确认两个基类 Customer和 Person的属性。 由题目的描述可知,类 IndividualCustomer和类 InstitutionalCustomer包含的共同属性为 “客户标识 ”,因此
35、 “客户标识 ”必然是类 Customer的一个属性。如果 “办公电话 ”、 “职位 ”也是类 Customer的属性,那么类 IndividualCustomer必然继承这两个属性,与题目描述相矛盾。所以类 Customer中只要具有属性 “客户标识 ”就够了。 类 Person不仅是类 Contact的基类,同时也与类 IndividualCustomer之间具有关 联关系。类 IndividualCustomer还有属性姓名、住宅电话及 E-mail没有体现出来。而类 Contact除了具有属性姓名、住宅电话、 E-mail之外,还追加了办公电话和职位。综合起来,在类 Person中包含
36、的属性有姓名、住宅电话和 E-mail。 5 【正确答案】 (1) 1 (2) 0* (3) 1 (4) 1 (5) 1 (6) 1* 【试题解析】 关联表示了对象间的结构关系。在很多建模问题中,说明一个关联的实例中有多少个相互连接的对 象是很重要的。这个 “多少 ”被称为关联角色的多重度,把它写成一个表示取值范围的表达式或写成一个具体值。指定关联一端的多重度,就是说明:在关联另一端的类的每个对象要求在本端的类必须有多少个对象。 由题目的描述可以得到以下关系: (1)集团客户可以创建和管理自己的若干名联系人。这说明类InstitutionalCustomer和类 Contact之间存在着一对多
37、的联系。根据类图中给出的关联导航,第 (5)空应填 1,第 (6)应填 1*。 (2)客户管理系统中必然包含若干个需要管理的客户信息。根据类图 中给出的关联导航,第 (1)空应填 1,第 (2)空应填 0*。 (3)类 IndividualCustomer和类 Person之间的关联关系。根据 问题 1的答案,可 知类 Person的属性有姓名、住宅电话和 E-mail,类 Customer的属性是 “客户标识 ”。 IndividualCustomer从 Customer只能继承到属性 “客户标识 ”,其他的属性都要依靠与 Person类之间的关联关系来获取。因此第 (3)空应填 1第 (4
38、)空应填 1。 6 【正确答案】 CustomerlnformationSystem的方法: addCustomer, getCustomer, removeCustomer。 InstimtionalCustomer的方法: addContact, getContact, removeContaet。 【试题解析】 类 CustomerlnformationSystem的作用是向用户提供与客户管理相关的操作接口。由于联系人是由集团客户创建和管理的,按照面向对象的理念,与联系人相关的直接操作应由类 InstitutionalCustomer来提供。因此addCustomer, getCusto
39、mer, removeCustomer为 CustomerlnformationSystem的方法,而 addContact, getContact, removeContact为类 InstitutionalCustomer的方法。 7 【正确答案】 (1)n (2)m (3)1 (4)n或 m (5)m (6)n 其中, (1)、 (2)的答案可互换, (5)、 (6)的答案可互换。 【试题解析】 两个实体型之间的联系可以分为 3类: 1)一对一联系 (1:1) 如果对于 实体集 A中的每一个实体,实体集 B中最多有一个 (也可以没有 )实体与之联系,反之亦然,则称实体集 A与实体集 B具
40、有一对一联系,记为 1:1。 2)一对多联系 (1:n) 如果对于实体集 A中的每一个实体,实体集 B中有 n个实体 (n =o)与之联系,反之,对于实体集 B中的每一个实体,实体集 A中最多只有一个实体与之联系,则称实体集 A与实体集 B有一对多联系,记为 1:n。 3)多对多联系 (m:n) 如果对于实体集 A中的每一个实体,实体集 B中有 n个实体 (n =0)与之联系,反之,对于实体集 B中的每一个实体, 实体集 A中也有 m个实体 (m =0)与之联系,则称实体集 A与实体集 B具有多对多联系,记为 m:n。 读者与图书之间形成了借还关系,题中说明 “一名读者最多只能借阅十本图书 ”
41、,显然一本图书可被多名读者借阅,而每名读者应该能够借阅多本图书,因此读者与图书之间的借还联系为多对多 (n:m)。另外,资料室对于同一书目的图书可拥有多册 (本 ),每一本书在系统中被赋予唯一的图书 ,所以书目与图书之间的联系类型为一对多 (1:m)。当某书目的可借出图书的数量为零时,读者可以对其进行预约登记,由于一名读者可借阅多种图书,因此书 目与读者之间的预约联系类型为多对多 (n:m)。 8 【正确答案】 (a)读者 D,图书 ID (b)读者 ID, ISBN号 【试题解析】 由于读者借书时需由图书管理员登记读者 m、所借图书 ID、借出时间和应还时间,还书时图书管理员在对应的借书信息
42、中记录归还时间,因此借还记录关系中的空缺处应填入 “读者 ,图书 ID”。 读者对某书目进行预约登记时,需记录读者 ID、需要借阅的图书的 ISBN号、预约时间等。目前的预约登记关系中已经有预约时间、预约期限、图书 ID信息,显然还需要记录是哪位读者预约了书,以 及书的 ISBN号。因此,预约登记关系模式中的空缺处应填入 “读者 ID, ISBN号 ” 9 【正确答案】 【试题解析】 主键也称为主码,是关系中的一个或一组属性,其值能唯一标识一个元组。根据题干部分的描述 “系统为不同读者生成不同的读者 ID”,因此读者关系的主键显然是 “读者 ID”。不同书目的 ISBN号不相同,书目关系的主键
43、为书的“ISBN号 ”。同一书目的多册 (本 )图书具有相同的 ISBN号,因此所有的图书依据“图书 ID”相互区分,图书关系的主键是 “图书 ID”,外键是书目关系的 “ISBN号 ”。借还记录关系用 于记录读者的借书和还书信息,为了区分读者在同一日期对同一本书多次借还,借还记录的主键为 “读者 ID,图书 ID,借出时间 ”。借还记录是由联系借还对应的关系,它记录与图书和读者的联系。因此,借还记录具有外键读者 ID和图书 ID,分别与读者和图书相关联。同理,预约登记关系的主键为“读者 ID, ISBN号,预约时间 ”,外键为读者关系的 “读者 ID”、书目关系的“ISBN号 ”和图书关系的
44、 “图书 ID”。 10 【正确答案】 (1)开发人员无需重新设计业务模式,只需在原系统的界面和中间层添加 Web Service层,就能继 承原系统的所有业务。 (2)有可能以较少的开发时间和工作量,将系统升级为 B/S应用模式。 (3)可以不修改原有的 Web服务和中间层,直接扩展新服务。 【试题解析】 本题考查 Web Service技术的基本知识。 Web Service(Web服务 )是解决应用程序之间相互通信的一项技术,或者说,Web Service是描述一系列操作的接口。它使用标准的、规范的 XML描述接口,包括了与服务进行交互所需要的全部细节,即消息格式、传输协议和服务位置。而
45、在对外的接口中隐藏了服务实现的细节,仅提供一系列可 执行的操作,这些操作独立于软硬件平台和编写服务的编程语言。 在 Web Service体系结构中,服务提供者 (服务器 )和服务请求者 (客户端 )是必需的,服务注册中心是可选的角色。 服务提供者是 Web Service的所有者,如企业、 ICP等,该角色负责定义并实现Web Service,使用服务描述语言对 Web Service进行详细、准确、规范的描述,并将该描述发布到服务注册中心供服务请求者查找并绑定使用。 服务请求者是 Web Service的使用者。虽然 Web Service面向的是程序,但 程序的最终使用者仍然是企业或用户
46、。因此,服务请求者是查找、绑定并调用服务或与服务进行交互的应用程序,该角色可由浏览器担当,由人或程序来控制。 服务注册中心是连接服务提供者和服务请求者的纽带,在某些情况下,该角色是可选的。例如,使用静态绑定的 Web Service,服务提供者可直接把描述发送给服务请求者。若没有服务注册中心,则服务请求者可以从其他来源得到服务描述,例如文件、 FTP站点、 Web站点等。 Web Service模型中的操作包括以下 3种:发布服务描述、查找服务描述、根据服务描述绑定或调用 服务。 在消息处理方面, Web Service使用了简单对象访问协议 SOAP作为消息的传送标准,在此基础上用 Web服
47、务描述语言 WSDL描述 Web服务的访问方法。服务使用者通过动态发现协议 UDDI查找并定位服务。 11 【正确答案】 WSDL是 Web Service的描述语言,用于描述 Web Service的服务、接口绑定等,为用户提供详细的接口说明书。 SOAP是通信协议,用于以服务的方式在互联网上发布有用的程序模块。 UDDI提供了一种统一的发布、查找和定位 Web服务的方法。 12 【正确答案】 在 Web Service模型的解决方案中,服务提供者定义并实现 Web Service,使用服务描述语言 (WSDL)描述 Web Service,然后将服务描述发布到服务请求者或服务注册中心。服务
48、请求者使用查找操作从本地或服务注册中心检索服务描述,然后使用服务描述与服务提供者进行绑定并调用 Web Service。服务注册中心是整个模型中的可选角色,是连接服务提供者和服务请求者的纽带。 二、选答题(共 3道大题,每道大题 15分) 从下列 3道试题中任选 1道解答,如果解答的试题数超过 1道,则仅题号小 的 1道题解答有效。 13 【正确答案】 (1)p- numkeys;或其等价形式 (2)p- Kmid akey,或其等价形式 (3)p- Ahi,或 p- A1w-1,或其等价形式 (4)root,akey, k items.size(); k+) if ( (1) = fid) return (2) ; remm 0; 对于每个订单项,显然需要取出对应产品的识别号。 从以上代码可以看出,变量 k用于遍历并索引一份订单中的每个订单项 (itemsk)。由于 Orderltem类提供的成员函数 getProductptr()可获取指向被订购产品的指针,因此可通过“itemsk getProduetptr() - getProduetld()”获取被订购产品的识别号,若指定的产品识别号等于该