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

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

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

阅读下列说明和图,回答问题1至问题3,将解答填入对应栏内。
【说明】
某营销企业拟开发一个销售管理系统,其主要功能描述如下:
1.接受客户订单,检查库存货物是否满足订单要求。如果满足,进行供货处理:修改库存记录文件,给库房开具备货单并且保留客户订单至订单记录文件;否则进行缺货处理:将缺货订单录入缺货记录文件。
2.根据缺货记录文件进行缺货统计,将缺货通知单发给采购部门。
3.根据采购部门提供的进货通知单进行进货处理:修改库存记录文件,并从缺货记录文件中取出缺货订单进行供货处理。
4.根据保留的客户订单进行销售统计,打印统计报表给经理。
现采用结构化方法对销售管理系统进行分析与设计,获得如下图所示的顶层数据流图和0层数据流图。

【问题1】
使用说明中的词语,给出上述顶层数据流图中的外部实体e1~e4的名称。
【问题2】
使用说明中的词语,给出上述0层数据流图中的数据存储d1~d3的名称。
【问题3】
上述0层数据流图中缺少了4条数据流,根据说明及顶层数据流图提供的信息,分别指出这4条数据流的起点和终点。

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


2、 试题二

阅读下列说明和图,回答问题1至问题4,将解答填入对应栏内。
【说明】
某宾馆拟开发一个宾馆客房预订子系统,主要是针对客房的预订和入住等情况进行管理。
【需求分析结果】
1.员工信息主要包括:员工号、姓名、出生年月、性别、部门、岗位、住址、联系电话和密码等信息。岗位有管理和服务两种。岗位为“管理”的员工可以更改(添加、删除和修改)员工表中本部门员工的岗位和密码,要求将每一次更改前的信息保留;岗位为“服务”的员工只能修改员工表中本人的密码,且负责多个客房的清理等工作。
2.部门信息主要包括:部门号、部门名称、部门负责人、电话等信息。一个员工只能属于一个部门,一个部门只有一位负责人。
3.客房信息包括:客房号、类型、价格、状态等信息。其中类型是指单人间、三人间、普通标准间、豪华标准间等;状态是指空闲、入住和维修。
4.客户信息包括:身份证号、姓名、性别、单位和联系电话。
5.客房预定情况包括:客房号、预定日期、预定入住日期、预定入住天数、身份证号等信息。一条预定信息必须且仅对应一位客户,但一位客户可以有多条预定信息。
【概念模型设计】
根据需求阶段收集的信息,设计的实体联系图(不完整)如下图所示。

【逻辑结构设计】
逻辑结构设计阶段设计的部分关系模式(不完整)如下:
员工(  4  ,姓名,出生年月,性别,岗位,住址,联系电话,密码)
权限(岗位,操作权限)
部门(部门号,部门名称,部门负责人,电话)
客房(  5  ,类型,价格,状态,入住日期,入住时间,员工号)
客户(  6  ,姓名,性别,单位,联系电话)
更改权限(员工号,  7  ,密码,更改日期,更改时间,管理员号)
预定情况(  8  ,预定日期,预定入住日期,预定入住天数)
【问题1】
根据问题描述,填写上图中(1)~(3)处联系的类型。联系类型分为一对一、一对多和多对多三种,分别使用1:1,1:n或1:*,m:n或*:*表示。
【问题2】
补充上图中的联系并指明其联系类型。
【问题3】
根据需求分析结果和上图,将逻辑结构设计阶段生成的关系模式中的空(4)~(8)补充完整。(注:一个空可能需要填多个属性)
【问题4】
若去掉权限表,并将权限表中的操作权限属性放在员工表中(仍保持管理和服务岗位的操作权限规定),则与原有设计相比有什么优缺点(请从数据库设计的角度进行说明)。
信管网参考答案:
查看解析:www.cnitpm.com/st/2457223159.html


3、 试题三

阅读下列说明和图,回答问题1至问题4,将解答填入对应栏内。
【说明】
在线会议审稿系统(online reviewing system,ors)主要处理会议前期的投稿和审稿事务,其功能描述如下:
1.用户在初始使用系统时,必须在系统中注册(register)成为作者或审稿人。
2.作者登录(login)后提交稿件和浏览稿件审阅结果。提交稿件必须在规定提交时间范围内,其过程为先输入标题和摘要、选择稿件所属主题类型、选择稿件所在位置 (存储位置)。上述几步若未完成,则重复;若完成,则上传稿件至数据库中,系统发送通知。
3.审稿人登录后可设置兴趣领域、审阅稿件给出意见以及罗列录用和(或)拒绝的稿件。
4.会议委员会主席是一个特殊审稿人,可以浏览提交的稿件、给审稿人分配稿件、罗列录用和(或)拒绝的稿件以及关闭审稿过程。其中,关闭审稿过程须包括罗列录用和(或)拒绝的稿件。
系统采用面向对象方法开发,使用umi进行建模。在建模用例图时,常用的方式是先识别参与者,然后确定参与者如何使用系统来确定用例,每个用例可以构造一个活动图。参与者名称、用例和活动名称分别参见以下各表。参与者列表


【问题1】
根据[说明]中的描述,使用参与者列表的英文名称,给出ors用例图中a1~a4所对应的参与者。
【问题2】
根据[说明]中的描述,使用用例名称列表中的英文名称,给出ors用例图中u1一 u3所对应的用例。
【问题3】
根据[说明]中的描述,给出ors用例图中  (1)  和  (2)  所对应的关系。
【问题4】
根据[说明]中的描述,使用用例名称列表和活动名称列表中的英文名称,给出提交稿件过程的活动图中actionl~action4对应的活动。
信管网参考答案:
查看解析:www.cnitpm.com/st/245733042.html


4、 试题四

阅读下列说明,回答问题1至问题3,将解答填入对应栏内。
【说明】
某餐厅供应各种标准的营养套餐。假设菜单上共有n项食物m1,m2,…,mn,每项食物mi的营养价值为vi,价格为pi其中i=1,2,…,n,套餐中每项食物至多出现一次。客人常需要一个算法来求解总价格不超过m的营养价值最大的套餐。
【问题1】
下面是用动态规划策略求解该问题的伪代码,请填充其中的空缺(1)、(2)和(3)处。
伪代码中的主要变量说明如下。
n:总的食物项数;
v:营养价值数组,下标从1到n,对应第1到第n项食物的营养价值;
p:价格数组,下标从1到n,对应第1到第n项食物的价格;
m:总价格标准,即套餐的价格不超过m;
x:解向量(数组),下标从1到n,其元素值为0或1,其中元素值为0表示对应的食物不出现在套餐中,元素值为1表示对应的食物出现在套餐中;
nv:n+1行m+1列的二维数组,其中行和列的下标均从0开始,nv[i][j]表示由前i项食物组合且价格不超过j的套餐的最大营养价值。问题最终要求的套餐的最大营养价值为nv[n][m]。
伪代码如下:
maxnutrientvalue(n,v,p,m,x)
1  for i=0  to n
2  nv[i][0] = 0
3  for j=1 to m
4  nv[0][j]=0
5  for i=1 to n
6  for j=1 to m
7  if j<p[i]  //若食物mi不能加入到套餐中
8  nv[i][j] =  nv[i-1][j]
9  else if   (1)
10  nv[i][j]=  nv[i-1][j]
11  else
12  nv[i][j]=  nv[i-1][j-p[i]]  +  v[i]
13  j = m
14  for i=n downto 1
15  if   (2)
16  x[i] = 0
17  else
18  x[i] = 1
19    (3)
20  return x and nv[n][m]
【问题2】
现有5项食物,每项食物的营养价值和价格如下表所示。

食物营养价值及价格表
若要求总价格不超过100的营养价值最大的套餐,则套餐应包含的食物有  (4)  (用食物项的编码表示),对应的最大营养价值为  (5)  。
【问题3】
问题1中伪代码的时间复杂度为  (6)  (用o符号表示)。
信管网参考答案:
查看解析:www.cnitpm.com/st/2457421374.html


5、 试题五

阅读下列说明和c函数,将应填入  (n)  处的字句写在对应栏内。
【说明】
已知集合a和b的元素分别用不含头结点的单链表存储,函数difference()用于求解集合a与b的差集,并将结果保存在集合a的单链表中。例如,若集合a={5,10, 20,15,25,30},集合b={5,15,35,25},如图(a)所示,运算完成后的结果如图(b)所示。

链表结点的结构类型定义如下:
typedef struct node{
elemtype elem;
struct node *next;
}nodetype;
【c函数】
void difference(nodetype **la,nodetype *lb.
{
nodetype  *pa,  *pb,  *pre,  *q;
pre=null;
(1)  ;
while  (pa)  {
pb=lb;
while(  (2)  )
pb=pb->next;
if(  (3)  )  {
if(!pre)
*la=  (4)  ;
else
(5)  =pa->next;
q = pa;
pa=pa->next;
free(q);
}
else  {
(6)  ;
pa=pa->next;
}
}
}
信管网参考答案:
查看解析:www.cnitpm.com/st/2457526064.html


6、 试题六

阅读下列说明和c++代码,将应填入  (n)  处的字句写在对应栏内。
【说明】
已知某类库开发商提供了一套类库,类库中定义了application类和document类,它们之间的关系如下图所示。其中,application类表示应用程序自身,而document类则表示应用程序打开的文档。application类负责打开一个已有的以外部形式存储的文档,如一个文件,一旦从该文件中读出信息后,它就由一个document对象表示。
当开发一个具体的应用程序时,开发者需要分别创建自己的application和document子类,例如上图中的类myapplication和类mydocument,并分别实现application和 document类中的某些方法。
已知application类中的opendocument方法采用了模板方法(template method)设计模式,该方法定义了打开文档的每一个主要步骤,如下所示:

1.首先检查文档是否能够被打开,若不能打开,则给出出错信息并返回;
2.创建文档对象;
3.通过文档对象打开文档;
4.通过文档对象读取文档信息;
5.将文档对象加入到application的文档对象集合中。
【c++代码】
#include<iostream>
#include<vector>
using namespace std;
class document{
public:
void save(){/*存储文档数据,此处代码省略*/)
void open(string docname){ /*打开文档,此处代码省略*/)
void close(){  /*关闭文档,此处代码省略*/)
virtual void read(string docname) =0;
};
class appplication{
private:
vector<  (1)  >  docs;  /*文档对象集合*/
public:
bool canopendocument(string docname){
/*判断是否可以打开指定文档,返回真值时表示可以打开,
返回假值表示不可打开,此处代码省略*/
}
void adddocument(document * adocument){
/*将文档对象添加到文档对象集合中*/
docs.push_back(  (2)  );
}
virtual document * docreatedocument()=0;/*创建一个文档对象*/
void opendocument(string docname){/*打开文档*/
if  (  (3)  ){
cout<<“文档无法打开!”<<endl;
return;
}
(4)   adoc=   (5)  ;
(6)  ;
(7)  ;
(8)  ;
}
};
信管网参考答案:
查看解析:www.cnitpm.com/st/2457622134.html


7、 试题七

阅读下列说明和java代码,将应填入  (n)  处的字句写在对应栏内。
【说明】
已知某类库开发商捉供了一套类库,类库中定义了application类和document类,它们之间的关系如下图所示,其中,application类表示应用程序自身,而document类则表示应用程序打开的文档。application类负责打开一个已有的以外部形式存储的文档,如一个文件,一旦从该文件中读出信息后,它就由一个document对象表示。

当开发一个具体的应用程序时,开发者需要分别创建自己的application和document子类,例如上图中的类myapplication和类mydocument,并分别实现application和 document类中的某些方法。
已知application类中的opendocument方法采用了模板方法(template method)设计模式,该方法定义了打开文档的每一个主要步骤,如下所示:
1.首先检查文档是否能够被打开,若不能打开,则给出出错信息并返回;
2.创建文档对象;
3.通过文档对象打开文档;
4.通过文档对象读取文档信息;
5.将文档对象加入到application的文档对象集合中。
【java代码】
abstract class document{
public void save(){/*存储文档数据,此处代码省略*/  )
public void open(string docname){  /*打开文档,此处代码省略*/)
public void close(){    /*关闭文档,此处代码省略*/)
public abstract void read(string docname);
};
abstract class appplication{
private vector<  (1)  >  docs;  /*文档对象集合*/
public  boolean canopendocument(string docname){
/*判断是否可以打开指定文档,返回真值时表示可以打开,
返回假值表示不可打开,此处代码省略*/
}
public void adddocument(document adocument){
/*将文档对象添加到文档对象集合中*/
docs.add(  (2)  );
}
public abstract document docreatedocument();/*创建一个文档对象*/
public void opendocument(string docname){/*打开文档*/
if (  (3)  )  {
system.out.println(“文档无法打开!”);
return;
}
(4)  adoc=  (5)  ;
(6)  ;
(7)  ;
(8)  ;
}
};
信管网参考答案:
查看解析:www.cnitpm.com/st/2457710715.html
扫码关注公众号

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

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

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

相关内容

发表评论  查看完整评论  

推荐文章