专业软件设计师网站|培训机构|服务商(加客服微信:cnitpm或QQ:800184589进软件设计师学霸群)

软题库 培训课程
当前位置:信管网 >> 软件设计师 >> 案例分析 >> 文章内容
2005年下半年软件设计师下午案例分析真题文字版
来源:信管网 2021年05月17日 【所有评论 分享到微信

免费下载软件设计师历年真题:http://www.cnitpm.com/zhenti/rs.html
该套题在线考试:http://www.cnitpm.com/exam/examam.aspx?t1=2&sid=535607
1、 试题一

阅读下列说明和图,回答问题1~问题3。
[说明]
某公司的主要业务是出租图书和唱碟。由于业务需求,该公司委托软件开发公司a开发一套信息管理系统。该系统将记录所有的图书信息、唱碟信息、用户信息、用户租借信息等。a公司决定采用面向对象的分析和设计方法开发此系统。图1-1所示为某类图书或唱碟被借阅时应记录的信息,图1-2描述了系统定义的两个类book和cd,分别表示图书和唱碟的信息。

[问题1]
经过进一步分析,设计人员决定定义一个类items on loan,以表示类book和cd的共有属性和方法。请采用图1-2中属性和方法的名称给出类items_on_loan应该具有的属性和方法(注意:不同名称的属性和方法表示不同的含义,如cd中的composer与 book甲的author无任何关系)。
[问题2]
为了记录每种图书或唱碟租借的历史记录,引入类circulationhistory,类中存储的信息是图1-1中所表示的内容。请采用uml表示法将下列四个类间的关系表示出来。

[问题3]
现需了解十大最畅销(借出次数最多)图书或唱碟。为此,引入tenpopulate类以存储所有十大畅销图书或cd的名称及其被借出的次数。下列顺序图描述了某类图书或唱碟被借出后成为十大畅销图书或唱碟时对象间的消息交互。系统在一次运行过程中,应有  (1)  个tenpopulate实例对象最合适,一个tenpopulate类实例对象最多需要和  (2)  个items_on_loan实例对象交互。

信管网参考答案:
查看解析:www.cnitpm.com/st/245295631.html


2、 试题二

阅读下列说明和图,回答问题1至问题3。
[说明]
某企业决定开发一个企业仓储管理系统,山李工承担系统的设计工作。该系统的网络连接如图2-1所示。
[图2-1]

该企业有多个仓库,图2-1所示的中心数据库存储了各个仓库中每种货物的库存信息。每个仓库配备一台前端机,进出货物均由前端机辅助实现。管理员每天上班时,通过前端机从中心数据库的库存表中读取本仓库各种货物的库存数,每个仓库的当日业务数据也都暂存在前端机,当天业务结束后,再将前端机中存储的数据传输到主机进行存储与汇总。
每个仓库可以存放多种货物,但同一种货物不能存放在不同的仓库中。每个仓库有多个管理员,但每个管理员只管理一个仓库。货物出库/入库时,由仓库管理员将货物的条码通过阅读器输入前端机中,货物数量的默认值为1,可以由管理员修改。前端机根据输入的货物信息,打印“出库/入库”清单。出库/入库单中同一种货物最多只出现一次,每份出库/入库单由流水号唯一标识。图2-2是一个出库单的实例。
[图2-2] 流水号;200408080001300101    时间:2005-10-01 13:22


该系统处理业务的过程如下。
1.初始化:前端机根据仓库号从货物表中读取本仓库中每种货物的货物编码、库存量、货物名称和单价;
2.登记出库/入库信息:由前端机存储每一笔“出库从库”记录:
3.汇总:在每个工作日结束前汇总当日各种货物的“出库/入库”量至日汇总表;
4.更新库存表:根据当日的汇总信息更新货物的库存。
李工经过分析,设计出如图2-3所示的关系模式。
[图2-3]
出入库单(流水号,出入库标志,管理员号,时间)
出入库记录(货物编码,数量,流水号)
日汇总表(日期,货物编码,数量,出入库标志)
仓库(仓库号,仓库名,仓库电话)
管理员(管理员号,姓名,仓库号)
货物(        (a)        )
注:时间格式为年-月-日时:分;日期格式为年-月-日。
卖体联系图的表示方法如图2-4所示,其中方框表示实体,菱形表示联系,联系的类型在实体与联系的边上标出。图2-5为与该系统对应的实体联系图。

[问题1]
根据题意,补充图2-3中(a)处的空缺,即货物关系模式的属性。
[问题2]
根据题意,补充图2-5中缺失的联系和联系的类型,使其成为完善的实体联系图。其中,联系名分别取名为联系1,联系2,联系3,……。
[问题3]
写出每种关系模式的主键。
信管网参考答案:
查看解析:www.cnitpm.com/st/2453019882.html


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的身份。

[问题1]
请在下列选项中选择合适的答案,填入图3-1、图3-2的方框a和方框b。
b的公钥,b的私钥,摘要算法,a的私钥,a的公钥,会话密钥
[问题2]
请在下列选项中选择合适的答案,填入图3-2的方框c至方框f。
b的公钥,b的私钥,摘要算法,a的私钥,a的公钥,会话密钥
[问题3]
按照图3-2中的方法发送邮件时,使用不同的密码体制加密消息和消息摘要,请用 150字以内文字简要说明这样做的理由。
[问题4]
请从下面关于摘要函数的说法中选出所有正确的描述。
[a]很容易使不同的输入数据生成相同的输出数据。
[b]根据输入数据获取输出数据的时间非常短。
[c]根据输入数据获取输出数据的时间非常长。
[d]输出数据的长度比输入数据的长度要长。
[e]根据输出数据无法还原出输入数据。
信管网参考答案:
查看解析:www.cnitpm.com/st/2453128972.html


4、 试题四

阅读下列函数说明、图和c代码,将应填入  (n)  处的字句。
[说明]
散列文件的存储单位称为桶(bucket)。假如一个桶能存放m个记录,当桶中已有 m个同义词(散列函数值相同)的记录时,存放第m+1个同义词会发生“溢出”。此时需要将第m+1个同义词存放到另一个称为“溢出桶”的桶中。相对地,称存放前m个同义词的桶为“基桶”。溢出桶和基桶大小相同,用指针链接。查找指定元素记录时,首先在基桶中查找。若找到,则成功返回,否则沿指针到溢出桶中进行查找。
例如:设散列函数为hash(key)=key mod 7,记录的关键字序列为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(int newelemkey)的功能是:将元素neweiemkey插入散列桶中,若插入成功则返回0,否则返回-1。
采用的散列函数为hash(newelemkey)=newelemkey % p,其中p为设定的基桶数目。
函数中使用的预定义符号如下:
#define nullkey  -1           /*散列桶的空闲单元标识*/
#define p   7                 /*散列文件中基桶的数目*/
#define items  3              /*基桶和溢出桶的容量*/
typedef struct bucketnode{    /*基桶和溢出桶的类型定义*/
int kcydata[items];
struct bucketnode *link;
}bucket;
bucket bucket[p];             /*基桶空间定义*/
[函数]
int lnserttohashtable(int newelemkey){
/*将元素newelemkey插入散列桶中,若插入成功则返回0,否则返回-1*/
/*设插入第一个元素前基桶的所有keydata[]、link域已分别初始化为nullkey、
null*/
int index;    /*基桶编号*/
int i,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)  ) return 0;
/*若基桶已满,则在溢出桶中查找空闲单元,若找不到则申请新的溢出桶*/
(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;   break;
}/*if*/
front=t;
if(  (4)  )t=t->link;
else break;
}/*while*/
}/*if*/
if(  (5)  ) {/*申请新溢出桶并将元素存入*/
s=(bucket*)malloe(sizeof(bucket));
if(!s)  return-1;
s->link=null;
for(k=0; k<items; k++)
s->keydata[k]=nullkey;
s->keydata[0]=newelemkey;
(6)  ;
}/*if*/
return 0;
}/*inserttohashtable*/
信管网参考答案:
查看解析:www.cnitpm.com/st/2453217604.html


5、 试题五

阅读以下说明和c++代码,将应填入  (n)  处。
[说明]
在一公文处理系统中,开发者定义了一个公文类officedoc,其中定义了公文具有的属性和处理公文的相应方法。当公文的内容或状态发生变化时,关注此officedoc类对象的相应的docexplorer对象都要更新其自身的状态。一个officedoc对象能够关联一组 docexplorer对象。当officedoc对象的内容或状态发生变化时,所有与之相关联的 docexplorcr对象都将得到通知,这种应用被称为观察者模式。以下代码写在一个c++源文件中,能够正确编译通过。
[c++代码]
#include <iostream>
const obs_maxnum=20;//最多与officedoc对象相关联的docexplorer对象的个数
(1)  ;
class docexplorer{  //关注officedoc公文对象的类
public:
docexplorer(  (2)   *doc);  //构造函数
(3)   void update(officedoc *doc)=0;//更新自身状态的函数
//其他相关属性和方法省略
};
class officedoc{  //公文类
private:
docexplorer *myobs[obs_maxnum];
//关注此公文类的docexplorer类对象指针数组
int index; //与officedoc对象关联的docexplorer对象的个数
public:
officedoe()
index=0;
}
void  attach(docexplorer *o){
//将一doeexplorer对象与officedoe对象相关联
if(index >=obs_maxnum ||o=null)return;
for(int loop=0; loop<index; loop++)
if(myobs[loop]==o) return;
myobs[index]=o;
index++;
}
void  detaeh(docexplorer *o){
//接触某doeexplorer对象与officedoc对象的关联
if(0==null) return;
for(int loop=0; loop<index; loop++){
if(myobs[loop]==o){
if(loop<=index-2)myobs[loop]=myobs[index-1];
myobs[index-1]=null;
index--;
break;
}
}
}
private:
void notifyobs(){   //通知所有的docexplorer对象更改自身状态
for(int loop=0; loop<index; loop++){
myobs[loop]->  (4)  ;    //docexplorer对象更新自身状态
}
}
//其他公文类的相关属性和方法
};
docexplorer::docexplorer(officedoc *doc){//docexplorer 类对象的构造函数
doc->  (5)  ;  //将此docexplorer对象与doc对象相关联
}
信管网参考答案:
查看解析:www.cnitpm.com/st/2453319636.html


6、 试题六

阅读以下说明和java代码,将应填入  (n)  处。
[说明]
在一公文处理系统中,开发者定义了一个公文类officedoc,其中定义了公文具有的属性和处理公文的相应方法。当公文的内容或状态发生变化时,关注此officedoc类对象的相应的docexplorer对象都要更新其自身的状态。一个officedoc对象能够关联一组 docexplorer对象。当officedoc对象的内容或状态发生变化时,所有与之相关联的 docexplorer对象都将得到通知,这种应用被称为观察者模式。以下代码采用java语言实现,能够正确编译通过。
[java代码]
//subject.java 文件
public interface subject {
public void attach(observer docexplorer);
public void detach(observer docexplorer);
void notifyobservers();
}
//observer.java 文件
public interface observer{
void update(  (1)  );
}
//officedoc.java 文件
import java.util.*;
public class officedoc implements subject(//officedoc 类实现 subject 接口
private vector observerveetor=new java.util.vector();
//存储与officedoc相关联的docexplorer 对象
public void attach(observer  observer){
//将某 docexplorer 对象与officedoc 相关联
observervector.addelement(observer);
}
public void detach(observer observer){
//解除某docexplorer 对象与officedoc的关联关系
observervector.removeelement(observer);
}
public void notifyobservers(){
//当officedoc对象状态已发生变化时,通知所有的docexplorer对象
enumeration enumeration=  (2)  ;
while (enumeration.hasmoreelements()){
((observer)enumeration.nextelement()).  (3)  ;
}
}
public enumeration observers(){
return  observervector.elements();
}
//其他公文类的属性和方法省略
}
//doeexplorer.java 文件
public class docexplorer implements   (4)  {
public void update(  (5)  ){
//更新docexplorer自身的状态,代码省略
}
}
信管网参考答案:
查看解析:www.cnitpm.com/st/2453419400.html


7、 试题七

阅读以下说明和c代码,将应填入  (n)  处。
[说明]
在一公文处理系统中,开发者定义了一个公文结构officedoc,其中定义了公文应该具有的属性(字段)。当公文的内容或状态发生变化时,与之相关联的docexplorer结构的值都需要发生改变。一个officedoc结构能够关联一组docexplorer结构。当officedoc结构的内容或状态发生变化时,所有与之相关联的docexplorer结构都将被更新,这种应用被称为观察者模式。以下代码采用c语言实现,能够正确编译通过。
[c代码]
#include <stdio.h>
#define obs_maxnum 20  /*一个officedoc变量最多能够关联的*/
/*doeexplorer变量的个数*/
typedef void(  (1)  )(struct officedoc*,street docexplorer*);
struct docexplorer{
func update;/* docexplorer结构采用的更新函数*/
/*其他的结构字段省略*/
};
struct officedoc{
(2)  myobs[obs_maxnum];
/*存储所有与officedoc相关联的doeexplorer结构指针*/
int index;/*与officedoc结构变量相关联的docexplorer结构变量的个数*/
};
void  attach(struet officedoc *doc, struet docexplorer *ob){
/*关联obersver结构ob与officedoe结构doc*/
int loop=0;
if(doc->index >=obs_maxnum || ob==null) return;
for(loop=0; loop <doc->index; loop++)
if(doc->myobs[loop]==ob)return;
doc->myobs[doe->index]=ob;
doc->index++;
)
void  detach(struct officedoc *doc, struct docexplorer *ob){
/*解除doc结构与ob结构间的关系*/
int loop;
if(ob==null)return;
for(loop=0; loop <doc->index; loop6++){
if(doc->myobs[loop]==ob){
if(loop<=doc->index-2)
doe->myobs[loop]=doc->myobs[  (3)  ];
doc->myobs[doe->indox-1]=null;
doe->index--;
break;
}
}
}
void updatel(struct officedoc *doc,struct docexplorer *ob){
/*更新ob结构的值,更新代码省略*/
}
void update2(stmct officedoc *doc, struct docexplorer *ob){
/*更新ob结构的值,更新代码省略*/
}
void notifyobs(struet officedoc *doc){
/*当doc结构的值发生变化时,通知与之关联的所有docexplorer结构变量*/
int loop;
for(loop=0; loop <doc->index; loop++){
(doc->myobs[loop])->update(  (4)  );
}
}
void main(){
stmct officedoc doc;/*定义一officedoc变量*/
struct docexplorer explorer1, explorer2;/*定义两个docexplorer变量*/
/*初始化与officedoc变量相关的docexplorer变量个数为0*/
doc.index=0;
explorer1.update=update1;/*设置explorer1变量的更新函数*/
explorer2.update=update2;/*设置explorer2变量的更新函数*/
attaeh(&doc,&explorer1);/*关联explorer1与doc对象*/
attach(&doc,&explorer2);/*关联explorer2与doc对象*/
/*其他代码省略*/
(5)  ;/*通知与officedoc相关的所有docexplorer变量*/
return;
}
信管网参考答案:
查看解析:www.cnitpm.com/st/245356842.html
扫码关注公众号

温馨提示:因考试政策、内容不断变化与调整,信管网网站提供的以上信息仅供参考,如有异议,请以权威部门公布的内容为准!

信管网致力于为广大信管从业人员、爱好者、大学生提供专业、高质量的课程和服务,解决其考试证书、技能提升和就业的需求。

信管网软考课程由信管网依托10年专业软考教研倾力打造,官方教材参编作者和资深讲师坐镇,通过深研历年考试出题规律与考试大纲,深挖核心知识与高频考点,为学员考试保驾护航。面授、直播&录播,多种班型灵活学习,满足不同学员考证需求,降低课程学习难度,使学习效果事半功倍。

相关内容

发表评论  查看完整评论  

推荐文章