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

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

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

阅读以下说明以及数据流图,回答问题1至问题5。
【说明】
某银行已有一套基于客户机/服务器模式的储蓄系统a和一套建账软件。建账软件主要用于将储蓄所手工处理的原始数据转换为系统a所需的数据格式。该建账软件具有以下功能。
(1)分户账录入:手工办理业务时建立的每个分户账数据均由初录员和复录员分别录入,以确保数据的正确性。
(2)初录/复录比对:将初录员和复录员录入的数据进行一一比较,并标记两套数据是否一致。
(3)数据确认:当上述两套数据完全一致后,将其中任一套作为最终进入系统a的原始数据。
(4)汇总核对和打印:对经过确认的数据进行汇总,并和会计账目中的相关数据进行核对,以确保数据的整体正确性,并打印输出经过确认的数据,为以后核查可能的错误提供依据。
(5)数据转换:将经过确认的数据转换为储蓄系统a需要的中间格式数据。
(6)数据清除:为加快初录和复录的处理速度,在数据确认之后,可以有选择地清除初录员和复录员录入的数据。
该软件的数据流图如图10-1至图10-3所示。图中部分数据流数据文件的格式如下:
初录分户账=储蓄所号+账号+户名+开户日+开户金额+当前余额+性质
复录分户账=储蓄所号+账号+户名+开户日+开户金额+当前余额+性质
初录数据=手工分户账+一致性标志
复录数据=手工分户账+一致性标志
会计账目=储蓄所号+总户数+总余额
操作结果=初录操作结果+比对操作结果+复录操作结果


【问题1】
请采用说明中的词汇,给出数据确认处理所需的数据流在第1层图中的全部可选起点(第0层图和第1层图中均未给出)。
【问题2】
不考虑数据确认处理(加工2),请指出数据流图中存在的错误。
【问题3】
打印分户账清单时,必须以下列哪一组数据作为关键字进行排序,才能满足需求?请从下面选项中选择。
①储蓄所    ②账号    ⑧开户日    ④总户数和总余额
【问题4】
加工1(录入比对处理)除能够检查出初录数据和复录数据不一致外,还应当检测出下列哪些错误。
①输入的无效字符          ②输入的半个汉字          ③显示器无法显示
④初录员重复录入同一账户  ⑤汇总数据与会计账目不符  ⑥打印机卡纸
【问题5】
请使用数据字典条目定义形式,给出第0层dfd中的“手工分户账”数据流和第1层dfd中的“初录分户账”、“复录分户账”的关系。
信管网参考答案:
查看解析:www.cnitpm.com/st/2454313215.html


2、 试题二

阅读以下说明,回答问题1至问题4。
【说明】
某宾馆需要建立一个住房管理系统,部分的需求分析结果如下:
(1)一个房间有多个床位,同一房间内的床位具有相同的收费标准,不同房间的床位收费标准可能不同;
(2)每个房间有房间号(如201、202等)、收费标准、床位数目等信息;
(3)每位客人有身份证号码、姓名、性别、出生日期和地址等信息:
(4)对每位客人的每次住宿,应该记录其入住日期、退房日期和预付款额信息;
(5)管理系统可查询出客人所住房间号。
根据以上的需求分析结果,设计一种关系模型如下图所示:

 

【问题1】

根据上述说明和实体-联系图,得到该住房管理系统的关系模式如下所示,请补充住宿关系。
房间(房间号,收费标准,床位数目)
客人(身份证号,姓名,性别,出生日期,地址)
住宿(  (1)  ,入住日期,退房日期,预付款额)
【问题2】
请给出问题1中住宿关系的主键和外键。
【问题3】
若将上述各关系直接实现为对应的物理表,现需查询在2005年1月1日到2005年 12月31日期间,在该宾馆住宿次数大于5次的客人身份证号,并且按照入住次数进行降序排列。下面是实现该功能的sql语句,请填补语句中的空缺。
select 住宿.身份证号,count (入住日期)
from 住宿,客人
where 入住日期>='20050101'and入住日期<='20051231'
and 住宿.身份证号=客人.身份证号
group by   (2)
(3)   count(入住日期)>5
(4)
【问题4】
为提交sql语句的执行效率,可在相应的表上创建索引。根据问题3中的sql语句,除主键和外键外,还需要在哪个表的哪些属性上创建索引,应该创建什么类型的索引,请说明原因。
信管网参考答案:
查看解析:www.cnitpm.com/st/2454419927.html


3、 试题三

阅读以下说明和图,回答问题1至问题3。
【说明】
s公司开办了在线电子商务网站,主要为各注册的商家提供在线商品销售功能。为更好地吸引用户,s公司计划为注册的商家提供商品(commodity)促销(promotion)功能。商品的分类(category)不同,促销的方式和内容也会有所不同。
注册商家可发布促销信息。商家首先要在自己所销售的商品的分类中,选择促销涉及的某一具体分类,然后选出该分类的一个或多个商品(一种商品仅仅属于一种分类),接着制定出一个比较优惠的折扣政策和促销活动的优惠时间,最后由系统生成促销信息并将该促销信息公布在网站上。
商家发布促销信息后,网站的注册用户便可通过网站购买促销商品。用户可选择参与某一个促销活动,并选择具体的促销商品,输入购买数量等购买信息。系统生成相应的一份促销订单(porder)。只要用户在优惠活动的时间范围内,通过网站提供的在线支付系统,确认在线支付该促销订单(即完成支付),就可以优惠的价格完成商品的购买活动,否则该促销订单失效。
系统采用面向对象方法开发,系统中的类以及类之间的关系用uml类图表示,图 10-4是该系统类图中的一部分;系统的动态行为采用uml序列图表示,图10-5是发布促销的序列图。

【问题1】
识别关联的多重度是面向对象建模过程中的一个重要步骤。根据说明中给出的描述,完成图10-4中的(1)~(6)。
【问题2】
请从表10-2中选择方法,完成图10-5中的(7)~(10)。

【问题3】
关联(association)和聚集(aggregation)是uml中两种非常重要的关系。请说明关联和聚集的关系,并说明其不同点。
信管网参考答案:
查看解析:www.cnitpm.com/st/245459592.html


4、 试题四

阅读以下说明和图,填补流程图中的空缺。
【说明】
某汽车制造工厂有两条装配线。汽车装配过程如图10-6所示,即汽车底盘进入装配线,零件在多个工位装配,结束时汽车自动完成下线工作。

(1)e0和e1表示底盘分别进入装配线0和装配线1所需要的时间。
(2)每条装配线有n个工位,第一条装配线的工位为s0,0,s0,1,…,s0,n-0,第二条装配线的工位为s1,0,s1,1,…,s1,n-1。其中s0,k和s1,k(0≤k≤n-1)完成相同的任务,但所需时间可能不同。
(3)aij表示在工位sij处的装配时间,其中i表示装配线(i=0或i=1),j表示工位号(0≤j≤n-1)。
(4)tij表示从sij处装配完成后转移到另一条装配线下一个工位的时间。
(5)x0和x1表示装配结束后,汽车分别从装配线0和装配线1下线所需要的时间。
(6)在同一条装配线上,底盘从一个工位转移到其下一个工位的时间可以忽略不计。
图10-7所示的流程图描述了求最短装配时间的算法,该算法的输入为;
n:        表示装配线上的工位数;
e[i]:     表示e1和e2,i取值为0或1:
a[i][j]:  表示ai,j,i的取值为0或1,j的取值范围为0~n-1;
t[i][j]:  表示ti,j,i的取值为0或1,j的取值范围为0~n-1;
x[i]:     表示x0和x1,i取值为0或1。
算法的输出为:
fi:最短的装配时间;
li:获得最短装配时间的下线装配线号(0或者1)。
算法中使用的f[i][j]表示从开始点到si,j处的最短装配时间。

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


5、 试题五

阅读以下说明、图和c代码。
【说明】
一般的树结构常采用孩子-兄弟表示法表示,即用二叉链表作树的存储结构,链表中结点的两个链域分别指向该结点的第一个孩子结点和下一个兄弟结点。例如,图10-8(a)所示的树的孩子-兄弟表示如图10-8(b)所示。

函数leveltraverse()的功能是对给定树进行层序遍历。例如,对图10-1所示的树进行层序遍历时,结点的访问次序为d b a e f p c。
对树进行层序遍历时使用了队列结构,实现队列基本操作的函数原型如下表所示:

bool、status类型定义如下:
typedef enum { false=0,true=1 } bool;
typedef enum { overflow=-2,underflow=-1,error=0,ok=1}status;
树的二叉链表结点定义如下:
typedef struct node {
char data;
struct node *firstchild,*nextbrother;
} node,*treenode;
【函数】
status leveltraverse ( treenode root )
{ /*层序遍历树,树采用孩子-兄弟表示法,root是树根结点的指针*/
queue tempq;
treenode ptr,brotherptr;
if (! root)
return error;
initqueue(&tempq);
(1)  ;
brotherptr = root -> nextbrother;
while (brotherptr) {
enqueue(&tempq,brotherptr);
(2)  ;
}/*end-while*/
while(  (3)  ){
(4)  ;
printf("%c\t",ptr->data);
if(  (5)  )continue;
(6)  ;
brotherptr = ptr->firstchild->nextbrother;
while (brotherptr) {
enqueue(&tempq,brotherptr);
(7)  ;
}/*end-while*/
}/*end-while*/
return ok;
}/*leveltraverse*/
信管网参考答案:
查看解析:www.cnitpm.com/st/2454727644.html


6、 试题六

阅读以下说明和c++代码。
【说明】
传输门是传输系统中的重要装置。传输门具有open(打开)、closed(关闭)、opening (正在打开)、stayopen(保持打开)和closing(正在关闭)五种状态。触发传输门状态转换的事件有click、complete和timeout三种。事件与其相应的状态转换如下图所示。

下面的c++代码1与c++代码2分别用两种不同的设计思路对传输门进行状态模拟,请填补代码中的空缺。
【c++代码1】
const int closed=1;   const int opening=2;
const int open=3;     const int closing=4;
const int stayopen=5;  //定义状态变量,用不同整数表示不同状态
class door {
private:
int state;  //传输门当前状态
void setstate(int state){ this->state=state;}  //设置当前状态
public:
door():state(closed.{};
void getstate(){    //根据当前状态输出相应的字符串
switch(state){
case opening: cout<<"opening"<<endl;    break;
case closed:  cout<<"closed"<<endl;     break;
case open:    cout<<"open"<<endl;       break;
case closing: cout<<"closing"<<endl;    break;
case stayopen:cout<<"stayopen"<<endl;   break;
}
};
void click()  {    //发生click事件时进行状态转换
if (  (1)  )    setstate(opening.;
else if (  (2)  )    setstate(closing.;
else if (  (3)  )    setstate(stayopen);
}
void timeout(){    //发生timeout事件时进行状态转换
if (state == open)  setstate(closing.;
}
void complete(){    //发生complete事件时进行状态转换
if (state == opening.    setstate(open);
else if (state == closing.  setstate(closed.;
}
};
int main(){
door adoor;
adoor.getstate();adoor.click();    adoor.getstate();
adoor.complete();adoor.getstate(); adoor.click();
adoor.getstate();adoor.click();    adoor.getstate();    return 0;
}
【c++代码2】
class door {
public:
doorstate *closed,*opening,*open,*closing,*stayopen,*state;
door();
virtual~door(){……//释放申请的内存,此处代码省略);
void setstate(doorstate *state)  { this->state = state;}
void getstate(){
//此处代码省略,本方法输出状态字符串,
//例如,当前状态为closed时,输出字符串为“closed”
};
void click();
void timeout();
void complete();
};
door::door(){
closed = new doorclosed(this);    opening = new dooropening(this);
open = new dooropen(this);        closing = new doorclosing(this);
stayopen = new doorstayopen(this);state = closed;
}
void door :: click() {  (4)  ;)
void door :: timeout() {  (5)  ;)
void door :: complete() {  (6)  ;}
class doorstate//定义一个抽象的状态,它是所有状态类的基类
{
protected:door *door;
public:
doorstate(door *door) {this->door = door;}
virtual~doorstate(void);
virtual void click()  {}
virtual void complete()  {}
virtual void timeout()  {}
};
class doorclosed :public doorstate{//定义一个基本的closed状态
public:
doorclosed(door *door) :doorstate(door)  {}
virtual ~ doorclosed(){}
void click();
};
void doorclosed :: click() {  (7)  ;}
//其他状态类的定义与实现代码省略
int main() {
door adoor;
adoor.getstate();adoor.click();adoor.getstate();adoor.complete();
adoor.getstate();adoor.timeout();adoor.getstate();return 0;
}
信管网参考答案:
查看解析:www.cnitpm.com/st/245488533.html


7、 试题七

阅读以下说明以及java程序。
【说明】
传输门是传输系统中的重要装置。传输门具有open(打开)、closed(关闭)、opening (正在打开)、stayopen(保持打开)和closing(正在关闭)五种状态。触发状态的转换事件有click、complete和timeout三种。事件与其相应的状态转换如下图所示。

下面的java代码1与java代码2分别用两种不同的设计思路对传输门进行状态模拟,请填补代码中的空缺。
【java代码1】
public class door {
public static final int closed = 1;    public static final int opening = 2;
public static final int open = 3;  public static final int closing = 4;
public static final int stayopen = 5;  private int state = closed;
//定义状态变量,用不同的整数表示不同状态
private void setstate(int state){ this.state = state;}
//设置传输门当前状态
public void getstate() {
//此处代码省略,本方法输出状态字符串,
//例如,当前状态为closed时,输出字符串为"closed"
}
public void click()  {  //发生click事件时进行状态转换
if (  (1)  ;)    setstate(opening.;
else if (  (2)  ;)  setstate{closing.;
else if (  (3)  ;)    setstate(stayopen);
}
//发生timeout事件时进行状态转换
public void timeout() { if (state == open)    setstate(closing.;}
public void complete() {//发生complete事件时进行状态转换
if (state == opening.    setstate(open);
else if  (state == closing.  setstate(closed.;
}
public static void main(string [] args){
door adoor = new door();
adoor.getstate();adoor.click();adoor.getstate();adoor.complete();
adoor.getstate();adoor.click();adoor.getstate();adoor.click();
adoor.getstate();return;
}
}
【java代码2】
public class door {
public final doorstate closed = new doorclosed(this);
public final doorstate opening = new dooropening(this);
public final doorstate open = new dooropen(this);
public final doorstate closing = new doorclosing(this);
public final doorstate stayopen = new doorstayopen(this);
private doorstate state = closed;
//设置传输门当前状态
public void setstate(doorstate state) { this.state=state;}
public void getstate(){ //根据当前状态输出对应的状态字符串
system.out.println(state.getclass().getname());
}
public void click(){  (4)  ;}//发生click事件时进行状态转换
public void timeout(){  (5)  ;}//发生timeout事件时进行状态转换
public void complete(){  (6)  ;)//发生complete事件时进行状态转换
public static void main(string[]args){
door adoor = new door();
adoor.getstate();adoor.click();adoor.getstate();adoor.complete();
adoor.getstate();adoor.timeout();adoor.getstate();return;
}
}
public abstract class doorstate { //定义所有状态类的基类
protected door door ;
public doorstate(door doer)  { this.door = door;}
public void click() {}
public void complete() {}
public void timeout() {}
}
class doorclosed extends doorstate { //定义一个基本的closed状态
public doorclosed(door door) { super(door);}
public void click() {  (7)  ;)
//该类定义的其余代码省略
}
//其余代码省略
信管网参考答案:
查看解析:www.cnitpm.com/st/245495543.html
扫码关注公众号

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

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

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

相关内容

发表评论  查看完整评论  

推荐文章