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

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

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

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

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

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

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

试题一

  阅读以下说明以及数据流图,答复以下问题1至问题5。

【说明】

  某银行已有一套基于客户机/效劳器形式的储蓄系统A和一套建账软件。

建账软件主要用于将储蓄所手工处理的原始数据转换为系统A所需的数据格式。

该建账软件具有以下功能。

  

(1)分户账录入:

手工办理业务时建立的每个分户账数据均由初录员和复录员分别录入,以确保数据的正确性。

  

(2)初录/复录比对:

将初录员和复录员录入的数据进展一一比拟,并标记两套数据是否一致。

  (3)数据确认:

当上述两套数据完全一致后,将其中任一套作为最终进入系统A的原始数据。

  (4)汇总核对和打印:

对经过确认的数据进展汇总,并和会计账目中的相关数据进展核对,以确保数据的整体正确性,并打印输出经过确认的数据,为以后核查可能的错误提供根据。

  (5)数据转换:

将经过确认的数据转换为储蓄系统A需要的中间格式数据。

  (6)数据去除:

为加快初录和复录的处理速度,在数据确认之后,可以有选择地去除初录员和复录员录入的数据。

  该软件的数据流图如图10-1至图10-3所示。

图中局部数据流数据文件的格式如下:

  初录分户账=储蓄所号+账号+户名+开户日+开户金额+当前余额+性质

  复录分户账=储蓄所号+账号+户名+开户日+开户金额+当前余额+性质

  初录数据=手工分户账+一致性标志

  复录数据=手工分户账+一致性标志

  会计账目=储蓄所号+总户数+总余额

  操作结果=初录操作结果+比对操作结果+复录操作结果

                 

                 

            

  软件需要打印的分户账清单款式如表10-1所示:

                          表10-1 分户账清单款式表

储 蓄 所

账 号

开 户 日

户 名

其他分户账数据

储蓄所1

储蓄所1合计

共×××户,总余额9999999.99元

储蓄所2

储蓄所2合计

共×××户,总余额9999999.99元

1、【问题1】

  请采用说明中的词汇,给出数据确认处理所需的数据流在第1层图中的全部可选起点(第0层图和第1层图中均未给出)。

2、【问题2】

  不考虑数据确认处理(加工2),请指出数据流图中存在的错误。

3、【问题3】

  打印分户账清单时,必须以以下哪一组数据作为关键字进展排序,才能满足需求?

请从下面选项中选择。

  ①储蓄所  ②账号  ⑧开户日  ④总户数和总余额

4、【问题4】

  加工1(录入比对处理)除可以检查出初录数据和复录数据不一致外,还应当检测出以下哪些错误。

  ①输入的无效字符     ②输入的半个汉字     ③显示器无法显示

  ④初录员重复录入同一账户 ⑤汇总数据与会计账目不符 ⑥打印机卡纸

5、【问题5】

  请使用数据字典条目定义形式,给出第0层DFD中的“手工分户账〞数据流和第1层DFD中的“初录分户账〞、“复录分户账〞的关系。

 

试题二

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

【说明】

  某宾馆需要建立一个住房管理系统,局部的需求分析结果如下:

  

(1)一个房间有多个床位,同一房间内的床位具有一样的收费标准,不同房间的床位收费标准可能不同;

  

(2)每个房间有房间号(如201、202等)、收费标准、床位数目等信息;

  (3)每位客人有身份证号码、姓名、性别、出生日期和地址等信息:

  (4)对每位客人的每次住宿,应该记录其入住日期、退房日期和预付款额信息;

  (5)管理系统可查询出客人所住房间号。

  根据以上的需求分析结果,设计一种关系模型如以下图所示:

                 

6、【问题1】

  根据上述说明和实体-联络图,得到该住房管理系统的关系形式如下所示,请补充住宿关系。

  房间(房间号,收费标准,床位数目)

  客人(身份证号,姓名,性别,出生日期,地址)

  住宿( 

(1) ,入住日期,退房日期,预付款额)

7、【问题2】

  请给出问题1中住宿关系的主键和外键。

8、【问题3】

  假设将上述各关系直接实现为对应的物理表,现需查询在2005年1月1日到2005年12月31日期间,在该宾馆住宿次数大于5次的客人身份证号,并且按照入住次数进展降序排列。

下面是实现该功能的SQL语句,请填补语句中的空缺。

  SELECT住宿.身份证号,count(入住日期)

  FROM住宿,客人

  WHERE入住日期>='20050101'AND入住日期<='20051231'

  AND住宿.身份证号=客人.身份证号

  GROUPBY 

(2) 

   (3) count(入住日期)>5

   (4) 

9、【问题4】

  为提交SQL语句的执行效率,可在相应的表上创立索引。

根据问题3中的SQL语句,除主键和外键外,还需要在哪个表的哪些属性上创立索引,应该创立什么类型的索引,请说明原因。

 

试题三

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

【说明】

  S公司创办了在线电子商务网站,主要为各注册的商家提供在线商品销售功能。

为更好地吸引用户,S公司方案为注册的商家提供商品(Commodity)促销(Promotion)功能。

商品的分类(Category)不同,促销的方式和内容也会有所不同。

  注册商家可发布促销信息。

商家首先要在自己所销售的商品的分类中,选择促销涉及的某一详细分类,然后选出该分类的一个或多个商品(一种商品仅仅属于一种分类),接着制定出一个比拟优惠的折扣政策和促销活动的优惠时间,最后由系统生成促销信息并将该促销信息公布在网站上。

  商家发布促销信息后,网站的注册用户便可通过网站购置促销商品。

用户可选择参与某一个促销活动,并选择详细的促销商品,输入购置数量等购置信息。

系统生成相应的一份促销订单(POrder)。

只要用户在优惠活动的时间范围内,通过网站提供的在线支付系统,确认在线支付该促销订单(即完成支付),就可以优惠的价格完成商品的购置活动,否那么该促销订单失效。

  系统采用面向对象方法开发,系统中的类以及类之间的关系用UML类图表示,图10-4是该系统类图中的一局部;系统的动态行为采用UML序列图表示,图10-5是发布促销的序列图。

                 

                 

10、【问题1】

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

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

(1)~(6)。

11、【问题2】

  请从表10-2中选择方法,完成图10-5中的(7)~(10)。

                             表10-2 可选消息列表

功 能 描 述

方 法 名

  向促销订单中添加所选的商品

  buyCommodities

  向促销中添加要促销的商品

  addCommodities

  查找某个促销的所有促销订单信息列表

  getPromotionOrders

  生成商品信息

  createCommodity

  查找某个分类中某商家的所有商品信息列表

  getCommodities

  生成促销信息

  createPromotion

  生成促销订单信息

  createPOrder

  查找某个分类的所有促销信息列表

  getCategoryPromotion

  查找某商家所销售的所有分类列表

  getCategories

  查找某个促销所涉及的所有商品信息列表

  getPromtionCommodities

12、【问题3】

  关联(Association)和聚集(Aggregation)是UML中两种非常重要的关系。

请说明关联和聚集的关系,并说明其不同点。

 

试题四

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

13、【说明】

  某汽车制造工厂有两条装配线。

汽车装配过程如图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处的最短装配时间。

     

 

试题五

  阅读以下说明、图和C代码。

14、【说明】

  一般的树构造常采用孩子-兄弟表示法表示,即用二叉链表作树的存储构造,链表中结点的两个链域分别指向该结点的第一个孩子结点和下一个兄弟结点。

例如,图10-8(a)所示的树的孩子-兄弟表示如图10-8(b)所示。

             

  函数LevelTraverse()的功能是对给定树进展层序遍历。

例如,对图10-1所示的树进展层序遍历时,结点的访问次序为DBAEFPC。

  对树进展层序遍历时使用了队列构造,实现队列根本操作的函数原型如下表所示:

函数原型

说   明

 VoidInitQueue(Queue*Q)

 初始化队列

 BoolIsEmpty(QueueQ)

 判断队列是否为空,假设是那么返回TRUE,否那么返回FALSE

 VoidEnQueue(Queue*Q,TreeNodep)

 元素入队列

 VoidDeQueue(Queue*Q,TreeNode*p)

 元素出队列

  Bool、Status类型定义如下:

  typedefenum{FALSE=0,TRUE=1}Bool;

  typedefenum{OVERFLOW=-2,UNDERFLOW=-1,ERROR=0,OK=1}Status;

  树的二叉链表结点定义如下:

  typedefstructNode{

     chardata;

     structNode*firstchild,*nextbrother;

  }Node,*TreeNode;

【函数】

  StatusLevelTraverse(TreeNoderoot)

  {/*层序遍历树,树采用孩子-兄弟表示法,root是树根结点的指针*/

   QueuetempQ;

   TreeNodeptr,brotherptr;

   if(!

root)

    returnERROR;

   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*/

    returnOK;

   }/*LevelTraverse*/

 

试题六

  阅读以下说明和C++代码。

15、【说明】

  传输门是传输系统中的重要装置。

传输门具有Open(翻开)、Closed(关闭)、Opening(正在翻开)、StayOpen(保持翻开)和Closing(正在关闭)五种状态。

触发传输门状态转换的事件有click、complete和timeout三种。

事件与其相应的状态转换如以下图所示。

             

  下面的C++代码1与C++代码2分别用两种不同的设计思路对传输门进展状态模拟,请填补代码中的空缺。

【C++代码1】

  constintCLOSED=1; constintOPENING=2;

  constintOPEN=3;  constintCLOSING=4;

  constintSTAYOPEN=5; //定义状态变量,用不同整数表示不同状态

  classDoor{

   Private:

    intstate; //传输门当前状态

    voidsetState(intstate){this->state=state;} //设置当前状态

   public:

    Door():

state(CLOSED.{};

    voidgetState(){  //根据当前状态输出相应的字符串

      switch(state){

      caseOPENING:

cout<<"OPENING"<<endl;  break;

      caseCLOSED:

 cout<<"CLOSED"<<endl;  break;

      caseOPEN:

  cout<<"OPEN"<<endl;   break;

      caseCLOSING:

cout<<"CLOSING"<<endl;  break;

      caseSTAYOPEN:

cout<<"STAYOPEN"<<endl; break;

    }

   };

   voidclick() {  //发生click事件时进展状态转换

      if( 

(1) )  setState(OPENING.;

      elseif( 

(2) )  setState(CLOSING.;

      elseif( (3) )  setState(STAYOPEN);

   }

   voidtimeout(){  //发生timeout事件时进展状态转换

      if(state==OPEN) setState(CLOSING.;

   }

   voidcomplete(){  //发生complete事件时进展状态转换

      if(state==OPENING.  setState(OPEN);

      elseif(state==CLOSING. setState(CLOSED.;

   }

  };

  intmain(){

    DooraDoor;

    aDoor.getState();aDoor.click();  aDoor.getState();

    aDoorplete();aDoor.getState();aDoor.click();

    aDoor.getState();aDoor.click();  aDoor.getState();  return0;

  }

【C++代码2】

  classDoor{

  public:

    DoorState*CLOSED,*OPENING,*OPEN,*CLOSING,*STAYOPEN,*state;

    Door();

    virtual~Door(){……//释放申请的内存,此处代码省略);

    voidsetState(DoorState*state) {this->state=state;}

    voidgetState(){

     //此处代码省略,本方法输出状态字符串,

     //例如,当前状态为CLOSED时,输出字符串为“CLOSED〞

    };

    voidclick();

    voidtimeout();

    voidcomplete();

  };

  Door:

:

Door(){

    CLOSED=newDoorClosed(this);  OPENING=newDoorOpening(this);

    OPEN=newDoorOpen(this);    CLOSING=newDoorClosing(this);

    STAYOPEN=newDoorStayOpen(this);state=CLOSED;

  }

  voidDoor:

:

click(){ (4) ;)

  voidDoor:

:

timeout(){ (5) ;)

  voidDoor:

:

complete(){ (6) ;}

  classDoorState//定义一个抽象的状态,它是所有状态类的基类

  {

  protected:

Door*door;

  public:

    DoorState(Door*door){this->door=door;}

    virtual~DoorState(void);

    virtualvoidclick() {}

    virtualvoidcomplete() {}

    virtualvoidtimeout() {}

  };

  classDoorClosed:

publicDoorState{//定义一个根本的Closed状态

  public:

  DoorClosed(Door*door):

DoorState(door) {}

    virtual~DoorClosed(){}

    voidclick();

  };

  voidDoorClosed:

:

click(){ (7) ;}

  //其他状态类的定义与实现代码省略

  intmain(){

    DooraDoor;

    aDoor.getState();aDoor.click();aDoor.getState();aDoorplete();

    aDoor.getState();aDoor.timeout();aDoor.getState();return0;

  }

 

试题七

  阅读以下说明以及Java程序。

16、【说明】

  传输门是传输系统中的重要装置。

传输门具有Open(翻开)、Closed(关闭)、Opening(正在翻开)、StayOpen(保持翻开)和Closing(正在关闭)五种状态。

触发状态的转换事件有click、complete和timeout三种。

事件与其相应的状态转换如以下图所示。

             

  下面的Java代码1与Java代码2分别用两种不同的设计思路对传输门进展状态模拟,请填补代码中的空缺。

【Java代码1】

  publicclassDoor{

    publicstaticfinalintCLOSED=1;  publicstaticfinalintOPENING=2;

    publicstaticfinalintOPEN=3; publicstaticfinalintCLOSING=4;

    publicstaticfinalintSTAYOPEN=5; privateintstate=CLOSED;

    //定义状态变量,用不同的整数表示不同状态

    privatevoidsetState(intstate){this.state=state;}

           

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

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

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

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