软件设计师考试上半年软件设计师考试真题及答案下午卷.docx

上传人:b****7 文档编号:11230669 上传时间:2023-02-25 格式:DOCX 页数:28 大小:278.43KB
下载 相关 举报
软件设计师考试上半年软件设计师考试真题及答案下午卷.docx_第1页
第1页 / 共28页
软件设计师考试上半年软件设计师考试真题及答案下午卷.docx_第2页
第2页 / 共28页
软件设计师考试上半年软件设计师考试真题及答案下午卷.docx_第3页
第3页 / 共28页
软件设计师考试上半年软件设计师考试真题及答案下午卷.docx_第4页
第4页 / 共28页
软件设计师考试上半年软件设计师考试真题及答案下午卷.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

软件设计师考试上半年软件设计师考试真题及答案下午卷.docx

《软件设计师考试上半年软件设计师考试真题及答案下午卷.docx》由会员分享,可在线阅读,更多相关《软件设计师考试上半年软件设计师考试真题及答案下午卷.docx(28页珍藏版)》请在冰豆网上搜索。

软件设计师考试上半年软件设计师考试真题及答案下午卷.docx

软件设计师考试上半年软件设计师考试真题及答案下午卷

2007上半年软件设计师考试真题及答案-下午卷

试题一

  阅读以下说明和图,答复以下问题1至问题3。

  【说明】

  某房屋租赁公司欲建立一个房屋租赁效劳系统,统一管理房主和租赁者的信息,从而快速地提供租赁效劳。

该系统具有以下功能:

  1.登记房主信息。

对于每名房主,系统需登记其姓名、住址和联系,并将这些信息写入房主信息文件。

  2.登记房屋信息。

所有在系统中登记的房屋都有一个唯一的识别号(对于新增加的房屋,系统会自动为其分配一个识别号)。

除此之外,还需登记该房屋的地址、房型(如平房、带阳台的楼房、独立式住宅等)、最多能够容纳的房客数、租金及房屋状态(待租赁、已出租)。

这些信息都保存在房屋信息文件中。

一名房主可以在系统中登记多个待租赁的房屋。

  3.登记租赁者信息。

所有想通过该系统租赁房屋的租赁者,必须首先在系统中登记个人信息,包括:

姓名、住址、号码、出生年月和性别。

这些信息都保存在租赁者信息文件中。

  4.租赁房屋。

已经登记在系统中的租赁者,可以得到一份系统提供的待租赁房屋列表。

一旦租赁者从中找到适宜的房屋,就可以提出看房请求。

系统会安排租赁者与房主见面。

对于每次看房,系统会生成一条看房记录并将其写入看房记录文件中。

  5.收取手续费。

房主登记完房屋后,系统会生成一份费用单,房主根据费用单交纳相应的费用。

  6.变更房屋状态。

当租赁者与房主达成租房或退房协议后,房主向系统提交变更房屋状态的请求。

系统将根据房主的请求,修改房屋信息文件。

  数据流图10-1和图10-2分别给出了该系统的顶层数据流图和0层数据流图。

     

     

1、【问题1】

  使用[说明]中给出的词汇,将数据流图10-1中

(1)~(4)处的数据流补充完整。

2、【问题2】

  使用[说明]中给出的词汇,将数据流图10-2中的(5)~(8)补充完整。

3、【问题3】

  数据流程图10-2中缺失了三条数据流,请指出这三条数据流的起点、终点和数据流名称。

试题二

  阅读以下说明,答复以下问题1至问题3。

 【说明】

  某医院的门诊管理系统实现了为患者提供挂号、处方药品收费的功能。

具体的需求及设计如下:

  1.医院医师具有编号,姓名,科室,职称,出诊类型和出诊费用,其中出诊类型分为专家门诊和普通门诊,与医师职称无关;各个医师可以具有不同的出诊费用,与职称和出诊类型无关。

  2.患者首先在门诊挂号处挂号,选择科室和医师,根据选择的医师缴纳挂号费(医师出诊费)。

收银员为患者生成挂号单,如表10-1所示,其中,就诊类型为医师的出诊类型。

                         表10-1 ××医院门诊挂号单

                    收银员:

13011          时间:

2007年2月1日08:

58 

就诊号

姓名

科室

医师

就诊类型

挂号费

20070205015

叶萌

内科

杨玉明

专家门诊

5元

  3.患者在医师处就诊后,凭借挂号单和医师手写处方到门诊药房交费买药。

收银员根据就诊号和医师处方中开列的药品信息,查询药品库(如表10-2所示)并生成门诊处方单(如表10-3所示)。

                         表10-2 药品库

 

药品编码

药品名称

类型

库存

货架编号

单位

规格

单价

12007

牛蒡子

中药

51590

B1401

G

11090

百部

中药

36950

B1523

G

                         表10-3 ××医院门诊处方单

                                     时间:

2007年2月1日10:

31

 

就诊号

20070205015

病人姓名

叶萌

医师姓名

杨玉明

金额总计

工程总计

2

收银员

21081

药品编码

药品名称

数量

单位

单价

金额(元)

12007

牛蒡子

10

G

11090

百部

10

G

  4.由于药品价格会发生变化,因此,门诊管理系统必须记录处方单上药品的单价。

  根据需求阶段收集的信息,设计的实体联系图和关系模式(不完整)如下所示:

  1.实体联系图

   

  2.关系模式

  挂号单(就诊号,病患姓名,医师编号,时间, 4 )

  收银员(编号,姓名,级别)

  医师(编号,姓名,科室,职称,出诊类型,出诊费用)

  门诊处方( 5 ,收银员,时间)

  处方明细(就诊号, 6 )

  药品库(药品编码,药品名称, 7 )

4、【问题1】

  根据问题描述,填写图10-3实体联系图中

(1)~(4)处联系的类型。

5、【问题2】

  图10-3中还缺少几个联系?

请指出每个联系两端的实体名,格式如下。

  实体1:

实体2

  例如,收银员与门诊处方之间存在联系,表示为:

  收银员:

门诊处方  或  门诊处方:

收银员

6、【问题3】

  根据实体联系图10-3,填写挂号单、门诊处方、处方明细和药品库关系模式中的空(5)~(8)处,并指出挂号单、门诊处方和处方明细关系模式的主键。

试题三

  阅读以下说明和图,答复以下问题1至问题3。

  【说明】

  某图书管理系统的主要功能如下:

  1.图书管理系统的资源目录中记录着所有可供读者借阅的资源,每项资源都有一个唯一的索引号。

系统需登记每项资源的名称、出版时间和资源状态(可借阅或已借出)。

  2.资源可以分为两类:

图书和唱片。

对于图书,系统还需登记作者和页数;对于唱片,还需登记演唱者和介质类型(CD或者磁带)。

  3.读者信息保存在图书管理系统的读者信息数据库中,记录的信息包括:

读者的识别码和读者姓名。

系统为每个读者创立了一个借书记录文件,用来保存读者所借资源的相关信息。

  现采用面向对象方法开发该图书管理系统。

识别类是面向对象分析的第一步。

比拟常用的识别类的方法是寻找问题描述中的名词,再根据相关规那么从这些名词中删除不可能成为类的名词,最终得到构成该系统的类。

表10-4给出了[说明]中出现的所有名词。

                           表10-4 

图书管理系统

资源目录

读者

资源

索引号

系统

名称

出版时间

资源状态

图书

唱片

作者

页数

演唱者

介质类型

CD

磁带

读者信息

读者信息数据库

识别码

姓名

借书记录文件

信息

  通过对表10-4中的名词进展分析,最终得到了图10-4所示的UML类图(类的说明如表10-5所示)。

                           表10-5

 

类名

说明

 LibrarySystem

 图书管理系统

 BorrowerDB

 保存读者信息的数据库

 CatalogItem

 资源目录中保存的每项资源

 Borrower

 读者

 BorrowerItems

 为每个读者创立的借书记录文件

7、【问题1】

  表10-5所给出的类并不完整,根据[说明]和表10-4,将图10-4中的(a)~(c)处补充完整。

  

8、【问题2】

  根据【说明】中的描述,给出图10-4中的类CatalogItem以及(b)、(c)处所对应的类的关键属性(使用表10-4中给出的词汇),其中,CamlogItem有4个关键属性;(b)、(c)处对应的类各有两个关键属性。

9、【问题3】

  识别关联的多重度是面向对象建模过程中的一个重要步骤。

根据[说明]中给出的描述,完成图10-4中的

(1)~(6)。

试题四

  阅读以下说明和图,填补流程图中的空缺。

10、  【说明】

  在一条农村公路的一边稀疏地分布着房子,其分布如图10-5所示。

某电信公司需要在某些位置放置蜂窝基站,由于基站的覆盖范围是6公里,因此必须使得每栋房子到某个基站的直线距离不超过6公里。

为简化问题,假设所有房子在同一直线上,并且基站沿该直线放置。

现采用贪心策略实现用尽可能少的基站覆盖所有的房子。

   

  实现贪心算法的流程如图10-6所示,请填充其中空白并计算该算法的时间复杂度,其中:

  1.d[i](1≤i≤N)表示第i个房子到公路A端的距离,N表示房子的总数,房子的编号按照房子到公路A端的距离从小到大进展编号。

  2.s[k]表示第k(k≥1)个基站到公路A端的距离,算法完毕后k的值为基站的总数。

    

  该算法的时间复杂度为 (5) 。

 

试题五

  (以下试题五至试题七中任选一题解答)

  阅读以下说明和C语言函数,应填入 (n) 处。

11、  【说明】

  在一个分布网络中,资源(石油、天然气、电力等)可从生产地送往其他地方。

在传输过程中,资源会有损耗。

例如,天然气的气压会减少,电压会降低。

我们将需要输送的资源信息称为信号。

在信号从信源地送往消耗地的过程中,仅能容忍一定范围的信号衰减,称为容忍值。

分布网络可表示为一个树型构造,如图10-9所示。

信号源是树根,树中的每个节点(除了根)表示一个可以放置放大器的子节点,其中某些节点同时也是信号消耗点,信号从一个节点流向其子节点。

  每个节点有一个d值,表示从其父节点到该节点的信号衰减量。

例如,在图10-9中,节点w、p、q的d值分别为2、1、3,树根节点表示信号源,其d值为0。

  每个节点有一个M值,表示从该节点出发到其所有叶子的信号衰减量的最大值。

显然,叶子节点的M值为0。

对于非叶子节点j,M(j)=max{M(k)+d(k)|k是j的孩子节点}。

在此公式中,要计算节点的M值,必须先算出其所有子节点的M值。

     

  在计算M值的过程中,对于某个节点i,其有一个子节点k满足d(k)+M(k)大于容忍值,那么应在k处放置放大器,否那么,从节点i到某叶子节点的信号衰减量会超过容忍值,使得到达该叶子节点时信号不可用,而在节点i处放置放大器并不能解决到达叶子节点的信号衰减问题。

  例如,在图10-9中,从节点p到其所有叶子节点的最大衰减值为4。

假设容忍值为3,那么必须在s处放置信号放大器,这样可使得节点p的M值为2。

同样,需要在节点小v处放置信号放大器,如图10—10阴影节点所示。

假设在某节点放置了信号放大器,那么从该节点输出的信号与信号源输出的信号等价。

     

  函数placeBoosters(TreeNode*root)的功能是:

对于给定树型分布网络中各个节点,计算其信号衰减量的最大值,并确定应在树中的哪些节点放置信号放大器。

  全局变量Tolerance保存信号衰减容忍值。

  树的节点类型定义如下:

  typedefstructTreeNode{

   intid;           /*当前节点的识别号*/

   intChildNum;        /*当前节点的子节点数目*/

   intd;           /*父节点到当前节点的信号衰减值*/

   structTreeNode**childptr; /*向量,存放当前节点到其所有子节点的指针*/

   intM;           /*当前节点到其所有子节点的信号衰减值中的最大值*/

   boolboost;         /*是否在当前节点放置信号放大器的标志*/

  }TreeNode;

【C语言函数】

  voidplaceBoosters(TreeNode*root)

  {               /* 计算root所指节点处的衰减量,如果衰减量超出了容忍值,那么放置放大器*/

   TreeNode*p;

   inti,degradation;

   if( 

(1) ){

    degradation=0;root->M=0;

    i=0;

    if (i>=root->ChildNum)

     return;

    p= 

(2) ;

    for(;i<root->ChildNum && p;i++,p= (3) ){

     p->M=0;

      (4) ;

     if (p->d+p->M>Tolerance) { /*在p所指节点中放置信号放大器*/

       p->boost=true;

       p->M=0;

     }

     if (p->d+p->M>degradation)

        degradation=p->d+p->M;

    }

    root->M= (5) ;

   }

  }

 

试题六

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

12、  【说明】

  某游戏公司现欲开发一款面向儿童的模拟游戏,该游戏主要模拟现实世界中各种鸭子的发声特征、飞行特征和外观特征。

游戏需要模拟的鸭子种类及其特征如表10-6所示:

               表10-6

  

  为支持将来能够模拟更多种类鸭子的特征,采用策略设计模式(Strategy)设计的类图如图10-11所示:

  

  其中,Duck为抽象类,描述了抽象的鸭子,而类RubberDuck、MallardDuck、CottonDuck和RedHeadDuck分别描述具体的鸭子种类,方法fly()、quack()和display()分别表示不同种类的鸭子都具有飞行特征、发声特征和外观特征;类FlyBehavior与QuackBehavior为抽象类,分别用于表示抽象的飞行行为与发声行为:

类FlyNoWay与FlyWithWings分别描述不能飞行的行为和用翅膀飞行的行为;类Quack、Squeak与QuackNoWay分别描述发出“嘎嘎〞声的行为、发出橡皮与空气摩擦声的行为与不发声的行为。

请填补以下代码中的空缺。

【C++代码】

  #include<iostream>

  usingnamespace 

(1) ;  classFlyBehavior{

  public:

 

(2) fly()=0;

  };

  classQuackBehavior{

  public:

 (3) quack()=0;

  };

  classFlyWithWings:

publicFlyBehavior{

  public:

voidfly(){ cout<<“使用翅膀飞行!

〞 <<endl; }

  };

  classFlyNoWay:

publicFlyBehavior{

  public:

voidfly(){ cout<<“不能飞行!

〞<<endl;}

  };

  classQuack:

publicQuackBehavior{

  public:

voidquack(){ cout<<“发出\‘嘎嘎\’声 !

〞<<endl; }

  };

  classSqueak:

publicQuackBehavior{

  public:

voidquack(){cout<<“发出空气与橡皮摩擦声!

〞<<endl; }

  };

  classQuackNoWay:

publicQuackBehavior{

  public:

voidquack (){ cout<<“不能发声 !

〞<<endl; }

  };

  classDuck{

  protected:

   FlyBehavior* (4) ;

   QuackBehavior* (5) ;

  public:

   voidfly(){ (6) ; }

   voidquack(){ (7) ;);

   virtualvoiddisplay()=0;

  };

  classRubberDuck:

publicDuck{

  public:

   RubberDuck(){

    flyBehavior=new (8) ;

    quackBehavior=new (9) ;

   }

   ~RubberDuck(){

    if(!

flyBehavior)deleteflyBehavior;

    if(!

quackBehavior) deletequackBehavior;

   }

   voiddisplay(){/*此处省略显示橡皮鸭的代码*/ }

  };

  //其他代码省略

 

试题七

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

13、  【说明】

  某游戏公司现欲开发一款面向儿童的模拟游戏,该游戏主要模拟现实世界中各种鸭子的发声特征、飞行特征和外观特征。

游戏需要模拟的鸭子种类及其特征如表10-7所示:

              表10-7

  

  为支持将来能够模拟更多种类鸭子的特征,采用策略设计模式(Strategy)设计的类图如图10-12所示:

  

  其中,Duck为抽象类,描述了抽象的鸭子,而类RubberDuck、MallardDuck、CottonDuck和RedHeadDuck分别描述具体的鸭子种类,方法fly()、quack()和display()分别表示不同种类的鸭子都具有飞行特征、发声特征和外观特征;接口FlyBehavior与QuackBehavior分别用于表示抽象的飞行行为与发声行为;类FlyNoWay与FlyWithWings分别描述不能飞行的行为和用翅膀飞行的行为;类Quack、Squeak与QuackNoWay分别描述发出“嘎嘎〞声的行为、发出橡皮与空气摩擦声的行为与不发声的行为。

请填补以下代码中的空缺。

【Java代码】

   

(1) FlyBehavior{

         publicvoidfly();

  };

   

(2) QuackBehavior{

         publicvoidquack();

  };

  classFlyWithWingsimplementsFlyBehavior{

    publicvoidfly(){System.out.println(“使用翅膀飞行!

〞);}

  };

  classFlyNoWayimplementsFlyBehavior{

    publicvoidfly(){System.out.println(“不能飞行!

〞);}

  };

  classQuackimplementsQuackBehavior{

    publicvoidquack(){System.out.println(“发出\‘嘎嘎\’声!

〞);}

  };

  classSqueakimplementsQuackBehavior{

    publicvoidquack(){System.out.println(“发出空气与橡皮摩擦声!

〞);

  }

  };

  classQuackNoWayimplementsQuackBehavior{

    publicvoidquack(){System.out.println(“不能发声!

〞);}

  };

  abstractclassDuck{

    protected FlyBehavior (3) ;

    protected QuackBehavior (4) ;

    publicvoidfly(){ (5) ; }

    publicvoidquack() { (6) ;};

    public (7) voiddisplay();

  };

  classRubberDuckextendsDuck{

    publicRubberDuck(){

     flyBehavior=new (8) ;

     quackBehavior=new (9) ;

    }

    publicvoiddisplay(){/*此处省略显示橡皮鸭的代码*/ }

  };

  //其他代码省略

 

答案:

试题一

1、  

(1)费用单 

(2)待租赁房屋列表 (3)看房请求 (4)变更房屋状态请求  2、(5)房主信息文件 (6)租赁者信息文件 (7)房屋信息文件(8)看房记录文件  

3、  

(1)起点:

房主 终点:

变更房屋状态 数据流名称:

变更房屋状态请求

  

(2)起点:

租赁者终点:

登记租赁者信息数据流名称:

租赁者信息

  (3)起点:

租赁者终点:

安排租赁者看房数据流名称:

看房请求

[解析]此题考察的是DFD的应用,属于比拟传统的题目,考察点也与往年类似。

  [问题1]考察的是顶层DFD。

顶层DFD通常用来确定系统边界,其中只包含一个唯一的加工(即待开发的系统)、外部实体以及外部实体与系统之间的输入输出数据流。

题目要求填充的正是数据流。

  细心的考生可能会发现,在0层DFD中,与“房主〞相关的数据流有5条。

其中的“费用单〞是顶层DFD中没有出现过的,而且是系统输出给“房主〞的。

这条数据流恰好可以与第

(1)空对应,因此

(1)处缺失的数据流就是“费用单〞。

如果确定了(4)处的数据流,实际上[问题3]要求的一条数据流也就找到了。

  由于(4)处缺失的数据流是一条输入数据流,从[说明]中可以看出,只有功能6“当租赁者

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

当前位置:首页 > 人文社科 > 文学研究

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

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