中级软件设计师下半年下午试题Word文件下载.docx

上传人:b****6 文档编号:21750883 上传时间:2023-02-01 格式:DOCX 页数:17 大小:192.98KB
下载 相关 举报
中级软件设计师下半年下午试题Word文件下载.docx_第1页
第1页 / 共17页
中级软件设计师下半年下午试题Word文件下载.docx_第2页
第2页 / 共17页
中级软件设计师下半年下午试题Word文件下载.docx_第3页
第3页 / 共17页
中级软件设计师下半年下午试题Word文件下载.docx_第4页
第4页 / 共17页
中级软件设计师下半年下午试题Word文件下载.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

中级软件设计师下半年下午试题Word文件下载.docx

《中级软件设计师下半年下午试题Word文件下载.docx》由会员分享,可在线阅读,更多相关《中级软件设计师下半年下午试题Word文件下载.docx(17页珍藏版)》请在冰豆网上搜索。

中级软件设计师下半年下午试题Word文件下载.docx

下列顺序图描述了某类图书或唱碟被借出后成为十大畅销图书或唱碟时对象间的消息交互。

系统在一次运行过程中,应有

(1)个TenPopulate实例对象最合适,一个TenPopulate类实例对象最多需要和

(2)个Items_on_loan实例对象交互。

[问题3]

(1)1

(2)图书和唱碟种类数

试题二

阅读下列说明和图,回答问题1至问题3。

某企业决定开发一个企业仓储管理系统,山李工承担系统的设计工作。

该系统的网络连接如图2-1所示。

[图2-1]

该企业有多个仓库,图2-1所示的中心数据库存储了各个仓库中每种货物的库存信息。

每个仓库配备一台前端机,进出货物均由前端机辅助实现。

管理员每天上班时,通过前端机从中心数据库的库存表中读取本仓库各种货物的库存数,每个仓库的当日业务数据也都暂存在前端机,当天业务结束后,再将前端机中存储的数据传输到主机进行存储与汇总。

每个仓库可以存放多种货物,但同一种货物不能存放在不同的仓库中。

每个仓库有多个管理员,但每个管理员只管理一个仓库。

货物出库/入库时,由仓库管理员将货物的条码通过阅读器输入前端机中,货物数量的默认值为1,可以由管理员修改。

前端机根据输入的货物信息,打印“出库/入库”清单。

出库/入库单中同一种货物最多只出现一次,每份出库/入库单由流水号唯一标识。

图2-2是一个出库单的实例。

[图2-2]

流水号;

200408080001300101时间:

2005-10-0113:

22

货物编码

货物名称

单价

数量

6900100180988

全自动洗衣机

1680.00

26

6900100170655

32寸彩色电视机

7580.00

20

6901100160126

1P空调

1360.00

60

管理员:

01105出库/入库:

出库

该系统处理业务的过程如下。

1.初始化:

前端机根据仓库号从货物表中读取本仓库中每种货物的货物编码、库存量、货物名称和单价;

2.登记出库/入库信息:

由前端机存储每一笔“出库从库”记录:

3.汇总:

在每个工作日结束前汇总当日各种货物的“出库/入库”量至日汇总表;

4.更新库存表:

根据当日的汇总信息更新货物的库存。

李工经过分析,设计出如图2-3所示的关系模式。

[图2-3]

出入库单(流水号,出入库标志,管理员号,时间)

出入库记录(货物编码,数量,流水号)

日汇总表(日期,货物编码,数量,出入库标志)

仓库(仓库号,仓库名,仓库电话)

管理员(管理员号,姓名,仓库号)

货物((a))

注:

时间格式为年-月-日时:

分;

日期格式为年-月-日。

卖体联系图的表示方法如图2-4所示,其中方框表示实体,菱形表示联系,联系的类型在实体与联系的边上标出。

图2-5为与该系统对应的实体联系图。

[图2-4]

[图2-5]

2.[问题1]

根据题意,补充图2-3中(a)处的空缺,即货物关系模式的属性。

货物编码,货物名称,单价,仓库号,库存量

货物关系模式要保存货物的信息,因此需要有货物编码,这是货物的唯一标识,由于其他的关系模式中未出现货物名称和单价,因此关系模式需要有单价和货物名称两项,因为每一种货物只能放在一个仓库中,因此需要有仓库号信息,每天前端机获取货物的库存信息,还需要有库存量属性,因此,(a)处应填写:

9.[问题2]

根据题意,补充图2-5中缺失的联系和联系的类型,使其成为完善的实体联系图。

其中,联系名分别取名为联系1,联系2,联系3,……。

其中,联系名中的序号可任意排列。

若联系3建立在出入库单和日汇总表之间也正确,或者同时建立两个联系也正确。

根据题目说明部分的描述,一张出/入库单上有多条出库记录,而每条出库记录只能在一张出库单上显示,一条出库记录只能表示一种货物的出库或入库,而一种货物可以出、入库多次。

因此出入库单与出入库记录之间的联系是一对多(1:

n),货物与出入库记录之间的联系是一对多(1:

n)。

同时,每条出/入库记录只能汇总到一条日汇总表记录,而一张日汇总表记录对应了多条出入库记录,因此日汇总表与出入库记录之间的联系是一对多(1:

由于每种货物只能放在一个仓库中,而一个仓库可以存放多种货物,因此仓库与货物之间的联系是一对多(1:

每个仓库可以有多个管理员,而一个管理员只能管理一个仓库,因此仓库与管理员之间的联系是(1"

ER图见参考答案。

12.[问题3]

写出每种关系模式的主键。

出入库单的主键:

流水号

出入库记录的主键:

流水号,货物编码

日汇总表的主键:

日期,货物编码,出入库标志

仓库的主键:

仓库号

管理员的主键:

管理员号

货物的主键:

分析出入库单(流水号,出入库标志,管理员号,时间)的属性可知,只有流水号可以标识唯一的一张出入库单,因此出入库单的主键为流水号。

在出入库记录(货物编码,数量,流水号)中,流水号加货物编码可以唯一地标识一条出入库记录,因此出入库记录的主键为流水号和货物编码。

在日汇总表(日期,货物编码,数量,出入库标志)中,同一货物可在多条记录中出现,在同一时间,相同货物可在多条记录中出现,因此日期、货物编码和出入库标志标识一张日汇总表的一条记录,即日汇总表的主键为日期、货物编码和出入库标志。

显然,从管理的角度出发,一个仓库号唯一标识一个仓库,每名管理员被分配唯一的管理员号,每种货物都分配了唯一的货物编码。

试题三

阅读下列说明和图,回答问题1至问题4,将解答填入答题纸的对应栏内。

某公司计划与客户通过Internet交换电子邮件和数据(以下统一称为“消息”)。

为保障安全,在对传输的数据进行加密的同时,还要对参与通信的实体进行身份认证。

因此,需同时使用对称与非对称密钥体系。

图3-1描述了接收者B使用非对称密钥体系对发送者A进行认证的过程。

[图3-1]

图3-2描述了发送和接收消息的过程,其中的认证过程使用了图3-1中的方法。

图3—1中的方框a和方框b与图3-2中的方框a和方框b相同。

[图3-2]

图3-2中发送和接收消息的过程是:

1)发送者A使用与接收者B共享的对称密钥体系的密钥加密将要发送的消息。

2)为了实现身份认证,A使用与B共享的摘要算法生成消息摘要,并使用公钥密码体系把生成的消息摘要加密后发送给B(这里假设A和B都能通过安全的方法获得对方的公钥)。

3)B使用非对称密钥体系解密收到的消息摘要,使用与A共享的对称密钥体系的密钥解密加密后的消息,再使用与A共享的摘要算法针对解密后的消息生成消息摘要。

4)B对比自己生成的消息摘要与接收到的A发送的消息摘要是否相同,从而验证发送者A的身份。

3.[问题1]

请在下列选项中选择合适的答案,填入图3-1、图3-2的方框a和方框b。

B的公钥,B的私钥,摘要算法,A的私钥,A的公钥,会话密钥

方框a:

A的私钥,方框b:

A的公钥

本题考查有关安全和密码的知识。

这里主要解决发送方和接收方的认证问题。

发送方应该使用只有自己才掌握的私钥对数据进行加密,这样才能确保在认证过程中对发送方的认证。

接收方应使用发送方的公钥对认证数据进行解密,以达到认证目的,因此方框a和b分别为,A的私钥,A的公钥。

8.[问题2]

请在下列选项中选择合适的答案,填入图3-2的方框c至方框f。

方框c:

摘要算法方框d:

会话密钥

方框e:

会话密钥方框f:

摘要算法

在传输大量数据时,会由发送方和接收方协商会话密钥,使用会话密钥对数据进行加解密。

与此同时,使用摘要算法对数据生成摘要进行认证,因此方框c、d、e、f分别为摘要算法、会话密钥、会话密钥、摘要算法。

13.[问题3]

按照图3-2中的方法发送邮件时,使用不同的密码体制加密消息和消息摘要,请用150字以内文字简要说明这样做的理由。

对称密钥体系的加解密效率非常高,适合于加解密大量的数据,因此可用于加密消息。

公钥密码体系的加解密效率较低,更适合用于加密少量数据的场合,因此可用于加密消息摘要和会话密钥。

14.[问题4]

请从下面关于摘要函数的说法中选出所有正确的描述。

∙[a]很容易使不同的输入数据生成相同的输出数据。

∙[b]根据输入数据获取输出数据的时间非常短。

∙[c]根据输入数据获取输出数据的时间非常长。

∙[d]输出数据的长度比输入数据的长度要长。

∙[e]根据输出数据无法还原出输入数据。

[问题4]

[b]根据输入数据获取输出数据的时间非常短

[e]根据输出数据无法还原出输入数据

摘要函数具有如下特点:

根据输入数据获取输出数据的时间非常短,并且根据输出数据无法还原出输入数据。

试题四

阅读下列函数说明、图和C代码,将应填入(n)处的字句。

散列文件的存储单位称为桶(BUCKET)。

假如一个桶能存放m个记录,当桶中已有m个同义词(散列函数值相同)的记录时,存放第m+1个同义词会发生“溢出”。

此时需要将第m+1个同义词存放到另一个称为“溢出桶”的桶中。

相对地,称存放前m个同义词的桶为“基桶”。

溢出桶和基桶大小相同,用指针链接。

查找指定元素记录时,首先在基桶中查找。

若找到,则成功返回,否则沿指针到溢出桶中进行查找。

4.例如:

设散列函数为Hash(Key)=Keymod7,记录的关键字序列为15,14,21,87,97,293,35,24,149,19,63,16,103,77,5,153,145,356,51,68,705,453,建立的散列文件内容如图4-1所示。

[图4-1]

为简化起见,散列文件的存储单位以内存单元表示。

函数InsertToHashTable(intNewElemKey)的功能是:

将元素NewEIemKey插入散列桶中,若插入成功则返回0,否则返回-1。

采用的散列函数为Hash(NewElemKey)=NewElemKey%P,其中P为设定的基桶数目。

函数中使用的预定义符号如下:

#defineNULLKEY-1/*散列桶的空闲单元标识*/

#defineP7/*散列文件中基桶的数目*/

#defineITEMS3/*基桶和溢出桶的容量*/

typedefstructBucketNode{/*基桶和溢出桶的类型定义*/

intKcyData[ITEMS];

structBucketNode*Link;

}BUCKET;

BUCKETBucket[P];

/*基桶空间定义*/

[函数]

intlnsertToHashTable(intNewElemKey){

/*将元素NewElemKey插入散列桶中,若插入成功则返回0,否则返回-1*/

/*设插入第一个元素前基桶的所有KeyData[]、Link域已分别初始化为NULLKEY、

NULL*/

intIndex;

/*基桶编号*/

inti,k;

BUCKET*s,*front,*t;

(1);

for(i=0;

i<ITEMS;

i++)/*在基桶查找空闲单元,若找到则将元素存入*/

if(Bucket[Index].KeyData[i]=NULLKEY){

Bucket[Index].KeyData[i]=NewElemKey;

break;

}

if(

(2))return0;

/*若基桶已满,则在溢出桶中查找空闲单元,若找不到则申请新的溢出桶*/

(3);

t=Bucket[Index].Link;

if(t!

=NULL){/*有溢出桶*/

while(t!

=NULL){

for(k=0;

k<ITEMS;

k++)

if(t->KeyData[k]=NULLKEY){/*在溢出桶链表中找到空闲单元*/

t->KeyData[k]=NewElemKey;

}/*if*/

front=t;

if((4))t=t->Link;

elsebreak;

}/*while*/

if((5)){/*申请新溢出桶并将元素存入*/

s=(BUCKET*)malloe(sizeof(BUCKET));

if(!

s)return-1;

s->Link=NULL;

s->KeyData[k]=NULLKEY;

s->KeyData[0]=NewElemKey;

(6);

return0;

}/*InsertToHashTable*/

(1)Index=NewElemKey%P

(2)i<ITEMS

(3)front=&

Bucket[Index]

(4)k==ITEMS

(5)t==NULL,或!

t

(6)front->Link=s

本题考查元素的散列存储。

元素作散列存储时,首先用设定的散列函数计算元素的存储位置。

在本题中,将元素存储在预先设定的基桶或根据需要申请的溢出桶中,只要基桶中有空闲单元,就将新元素NewElemKey插入在基桶中,若基桶中无空闲单元,则看是否存在溢出桶,若存在,则在溢出桶中查找空闲单元,若不存在溢出桶或溢出桶中无空闲单元,则申请一个溢出桶并存入新元素。

在基桶查找空闲单元时使用的桶号为Index,可知空

(1)处应填入“Index=NewElemKey%P”。

显然,一旦在基桶中找到空闲单元,即“Bucket[Index].KeyData[i]==NULLKEY”(0≤i<ITEMS),则可将元素NewElemKey放入Bucket[Index].KeyData[i],至此元素已经插入散列桶中,函数可返回,因此空

(2)处应填入“i<ITEMS”;

反之,若在基桶中没有找到空闲单元,则需查找溢出桶。

“t=Bucket[Index].Link”,指针t首先指向桶号Index的第一个溢出桶。

下面的代码即为在溢出桶中查找空闲单元。

while(t!

k++)

if(t->KeyData[k]==NULLKEY){/*在溢出桶链表中找到空闲单元*/

由于每个溢出桶都可以存储ITEMS个元素,所以在溢出桶中查找空闲单元与在基桶中的查找过程相同,代码如下。

k<ITEMS;

if(t->KcyData[k]==NULLKEY){/*在溢出桶链表中找到空闲单元*/

若在指针t指向的溢出桶中找到空闲单元则插入元素,否则,由“t=t->Link”得到下一个溢出桶的指针,因此“k<ITEMS”可作为是否在当前溢出桶中找到空闲单元的判定条件。

显然,在桶号Index的基桶和其所有溢出桶都已满的情况下,t的值为空指针。

此时才需要申请新的溢出桶并建立链接关系,因此在上面查找溢出桶中空闲单元时,进行指针t的后移“t=t->Link”前应先用front记录t的值,以便于后面建立链接关系。

所以空(3)处应给front置初值,即“front=&

Bucket[Index]”,空(4)填入“k==ITEMS”,空(5)填入“t=NULL”。

空(6)处建立新申请溢出桶的链接关系“front->Link=s”。

试题五

阅读以下说明和C++代码,将应填入(n)处。

在一公文处理系统中,开发者定义了一个公文类OfficeDoc,其中定义了公文具有的属性和处理公文的相应方法。

当公文的内容或状态发生变化时,关注此OfficeDoc类对象的相应的DocExplorer对象都要更新其自身的状态。

一个OfficeDoc对象能够关联一组DocExplorer对象。

当OfficeDoc对象的内容或状态发生变化时,所有与之相关联的DocExplorcr对象都将得到通知,这种应用被称为观察者模式。

以下代码写在一个C++源文件中,能够正确编译通过。

5.[C++代码]

#include<iostream>

constOBS_MAXNUM=20;

//最多与OfficeDoc对象相关联的DocExplorer对象的个数

classDocExplorer{//关注OfficeDoc公文对象的类

public:

DocExplorer(

(2)*doc);

//构造函数

(3)voidupdate(OfficeDoc*doc)=0;

//更新自身状态的函数

//其他相关属性和方法省略

};

classOfficeDoc{//公文类

private:

DocExplorer*myObs[OBS_MAXNUM];

//关注此公文类的DocExplorer类对象指针数组

intindex;

//与OfficeDoc对象关联的DocExplorer对象的个数

OfficeDoe()

index=0;

voidattach(DocExplorer*o){

//将一DoeExplorer对象与OfficeDoe对象相关联

if(index>=OBS_MAXNUM||o=NULL)return;

for(intloop=0;

loop<index;

loop++)

if(myObs[loop]==o)return;

myObs[index]=o;

index++;

voiddetaeh(DocExplorer*o){

//接触某DoeExplorer对象与OfficeDoc对象的关联

if(0==NULL)return;

loop++){

if(myObs[loop]==o){

if(loop<=index-2)myObs[loop]=myObs[index-1];

myObs[index-1]=NULL;

index--;

break;

voidnotifyObs(){//通知所有的DocExplorer对象更改自身状态

myObs[loop]->(4);

//DocExplorer对象更新自身状态

//其他公文类的相关属性和方法

DocExplorer:

:

DocExplorer(OfficeDoc*doc){//DocExplorer类对象的构造函数

doc->(5);

//将此DocExplorer对象与doc对象相关联

(1)classOfficeDoc

(2)OfficeDoc

(3)virtual

(4)update(this)

(5)attach(this)

首先,DocExplorer需要知道OfficeDoc是一个类,但因为OfficeDoc定义在DocExplorer之后,所以需要在DocExplorer类的定义前加上classOfficeDoc的声明,因此

(1)空处应该填写classOfficeDoc

(2)空可根据程序最后的构造函数的实现知道,应该填写OfficeDoc;

在观察者模式中,不同的观察者更新自身的方法不同,因此第(3)空处应该填写virtual,而且程序最后的=0也表明是一个纯虚拟函数;

第(4)空处,程序注释说明所有与OfficeDoc相关联的对象更新自身状态因此需要使用update函数,但update函数的参数是一个OfficeDoc类的对象。

所以,参数应该为this;

第(5)空将OfficeDoc类

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 工学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1