2006年下半年软件设计师下午试卷

考试总分:7分

考试类型:模拟试题

作答时间:60分钟

已答人数:967

试卷答案:有

试卷介绍: 2006年下半年软件设计师下午试卷

开始答题

试卷预览

  • 1. 试题一(共15分)阅读以下说明以及数据流图,回答问题1至问题5,将解答填入答题纸的对应栏内。[说明]某银行已有一套基于客户机/服务器模式的储蓄系统A和一套建帐软件。建帐软件主要用于将储蓄所手工处理的原始数据转换为系统A所需的数据格式。该建帐软件具有以下功能:(1)分户帐录入:手工办理业务时建立的每个分户帐数据均由初录员和复录员分别录入,以确保数据的正确性;(2)初录/复录比对:将初录员和复录员录入的数据进行一一比较,并标记两套数据是否一致;(3)数据确认:当上述两套数据完全一致后,将其中任一套作为最终进入系统A的原始数据;(4)汇总核对和打印:对经过确认的数据进行汇总,并和会计账目中的相关数据进行核对,以确保数据的整体正确性,并打印输出经过确认的数据,为以后核查可能的错误提供依据;(5)数据转换:将经过确认的数据转换为储蓄系统A需要的中间格式数据;(6)数据清除:为加快初录和复录的处理速度,在数据确认之后,可以有选择地清除初录员和复录员录入的数据。该软件的数据流图如图1-1~图1-3所示。图中部分数据流数据文件的格式如下:初录分户帐=储蓄所号+帐号+户名+开户日+开户金额+当前余额+性质复录分户帐=储蓄所号+帐号+户名+开户日+开户金额+当前余额+性质初录数据=手工分户帐+一致性标志复录数据=手工分户帐+一致性标志会计账目=储蓄所号+总户数+总余额操作结果=初录操作结果+比对操作结果+复录操作结果软件需要打印的分户帐清单样式如表1-1所示:表1-1分户帐清单样式表储蓄所帐号开户日户名其他分户帐数据储蓄所1…………储蓄所1合计共XXX户,总余额9999999.99元储蓄所2…………储蓄所2合计共XXX户,总余额9999999.99元[问题1](4分)请采用说明中的词汇,给出数据确认处理所需的数据流在第1层图中的全部可选起点(第0层图和第1层图中均未给出)。[问题2](2分)不考虑数据确认处理(加工2),请指出数据流图中存在的错误。[问题3](2分)打印分户帐清单时,必须以下列哪一组数据作为关键字进行排序,才能满足需求?请从下面选项中选择,并将对应序号填入答题纸相应栏。①储蓄所②帐号③开户日④总户数和总余额[问题4](4分)加工1(录入比对处理)除能够检查出初录数据和复录数据不一致外,还应当检测出下列哪些错误,请将对应序号填入答题纸对应栏。①输入的无效字符②输入的半个汉字③显示器无法显示④初录员重复录入同一帐户⑤汇总数据与会计账目不符⑥打印机卡纸[问题5](3分)请使用数据字典条目定义形式,给出第0层DFD中的“手工分户帐”数据流和第1层DFD中的“初录分户帐”、“复录分户帐”的关系。[15分]
  • 2. 试题二(共15分)阅读以下说明,回答问题1至问题4,将解答填入答题纸的对应栏内。[说明]某宾馆需要建立一个住房管理系统,部分的需求分析结果如下:(1)一个房间有多个床位,同一房间内的床位具有相同的收费标准。不同房间的床位收费标准可能不同。(2)每个房间有房间号(如201、202等)、收费标准、床位数目等信息。(3)每位客人有身份证号码、姓名、性别、出生日期和地址等信息。(4)对每位客人的每次住宿,应该记录其入住日期、退房日期和预付款额信息。(5)管理系统可查询出客人所住房间号。根据以上的需求分析结果,设计一种关系模型如图2-1所示:图2-1住房管理系统的实体联系图[问题1](1分)根据上述说明和实体-联系图,得到该住房管理系统的关系模式如下所示,请补充住宿关系。房间(房间号,收费标准,床位数目)客人(身份证号,姓名,性别,出生日期,地址)住宿((1),入住日期,退房日期,预付款额)[问题2](4分)请给出问题1中住宿关系的主键和外键。[问题3](4分)若将上述各关系直接实现为对应的物理表,现需查询在2005年1月1日到2005年12月31日期间,在该宾馆住宿次数大于5次的客人身份证号,并且按照入住次数进行降序排列。下面是实现该功能的SQL语句,请填补语句中的空缺。SELECT住宿.身份证号,count(入住日期)FROM住宿,客人WHERE入住日期>=‘20050101’AND入住日期5(4)[问题4](6分)为加快SQL语句的执行效率,可在相应的表上创建索引。根据问题3中的SQL语句,除主键和外键外,还需要在哪个表的哪些属性上创建索引,应该创建什么类型的索引,请说明原因。[15分]

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

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

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

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

    E(5)管理系统可查询出客人所住房间号。根据以上的需求分析结果,设计一种关系模型如图2-1所示:图2-1住房管理系统的实体联系图[问题1](1分)根据上述说明和实体-联系图,得到该住房管理系统的关系模式如下所示,请补充住宿关系。房间(房间号,收费标准,床位数目)客人(身份证号,姓名,性别,出生日期,地址)住宿((1),入住日期,退房日期,预付款额)[问题2](4分)请给出问题1中住宿关系的主键和外键。[问题3](4分)若将上述各关系直接实现为对应的物理表,现需查询在2005年1月1日到2005年12月31日期间,在该宾馆住宿次数大于5次的客人身份证号,并且按照入住次数进行降序排列。下面是实现该功能的SQL语句,请填补语句中的空缺。SELECT住宿.身份证号,count(入住日期)FROM住宿,客人WHERE入住日期>=‘20050101’AND入住日期5(4)[问题4](6分)为加快SQL语句的执行效率,可在相应的表上创建索引。根据问题3中的SQL语句,除主键和外键外,还需要在哪个表的哪些属性上创建索引,应该创建什么类型的索引,请说明原因。[15分]

  • 3. 试题三(共15分)阅读以下说明和图,回答问题1至问题3,将解答填入答题纸的对应栏内。[说明]S公司开办了在线电子商务网站,主要为各注册的商家提供在线商品销售功能。为更好地吸引用户,S公司计划为注册的商家提供商品(Commodity)促销(Promotion)功能。商品的分类(Category)不同,促销的方式和内容会有所不同。注册商家可发布促销信息。商家首先要在自己所销售的商品的分类中,选择促销涉及的某一具体分类,然后选出该分类的一个或多个商品(一种商品仅仅属于一种分类),接着制定出一个比较优惠的折扣政策和促销活动的优惠时间,最后由系统生成促销信息并将该促销信息公布在网站上。商家发布促销信息后,网站的注册用户便可通过网站购买促销商品。用户可选择参与某一个促销(Promotion)活动,并选择具体的促销商品(Commodity),输入购买数量等购买信息。系统生成相应的一份促销订单(POrder)。只要用户在优惠活动的时间范围内,通过网站提供的在线支付系统,确认在线支付该促销订单(即完成支付),就可以优惠的价格完成商品的购买活动,否则该促销订单失效。系统采用面向对象方法开发,系统中的类以及类之间的关系用UML类图表示,图3-1是该系统类图中的一部分;系统的动态行为采用UML序列图表示,图3-2是发布促销的序列图。[问题1](6分)识别关联的多重度是面向对象建模过程中的一个重要步骤。根据说明中给出的描述,完成图3-1中的(1)~(6)。[问题2](4分)请从表3-1中选择方法,完成图3-2中的(7)~(10)。表3-1可选消息列表功能描述方法名向促销订单中添加所选的商品buyCommodities向促销中添加要促销的商品addCommodities查找某个促销的所有促销订单信息列表getPromotionOrders生成商品信息createCommodity查找某个分类中某商家的所有商品信息列表getCommodities生成促销信息createPromotion生成促销订单信息createPOrder查找某个分类的所有促销信息列表getCategoryPromotion查找某商家所销售的所有分类列表getCategories查找某个促销所涉及的所有商品信息列表getPromotionCommodities[问题3](5分)关联(Association)和聚集(Aggregation)是UML中两种非常重要的关系。请说明关联和聚集的关系,并说明其不同点。[15分]

    A(1)~(6)。[问题2](4分)请从表3-1中选择方法,完成图3-2中的(7)~(10)。表3-1可选消息列表功能描述方法名向促销订单中添加所选的商品buyCommodities向促销中添加要促销的商品addCommodities查找某个促销的所有促销订单信息列表getPromotionOrders生成商品信息createCommodity查找某个分类中某商家的所有商品信息列表getCommodities生成促销信息createPromotion生成促销订单信息createPOrder查找某个分类的所有促销信息列表getCategoryPromotion查找某商家所销售的所有分类列表getCategories查找某个促销所涉及的所有商品信息列表getPromotionCommodities[问题3](5分)关联(Association)和聚集(Aggregation)是UML中两种非常重要的关系。请说明关联和聚集的关系,并说明其不同点。[15分]

  • 4. 试题五(15分)阅读以下说明、图和C代码,将应填入(n)处的字句写在答题纸的对应栏内。[说明]一般的树结构常采用孩子-兄弟表示法表示,即用二叉链表作树的存储结构,链表中结点的两个链域分别指向该结点的第一个孩子结点和下一个兄弟结点。例如,图5-1(a)所示的树的孩子-兄弟表示如图5-1(b)所示。图5-1树及其孩子-兄弟表示示意图函数LevelTraverse()的功能是对给定树进行层序遍历。例如,对图5-1所示的树进行层序遍历时,结点的访问次序为:DBAEFPC。对树进行层序遍历时使用了队列结构,实现队列基本操作的函数原型如下表所示:函数原型说明voidInitQueue(Queue*Q)初始化队列BoolIsEmpty(QueueQ)判断队列是否为空,若是则返回TRUE,否则返回FALSEvoidEnQueue(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*/[15分]

    A(1);brotherptr=root->nextbrother;while(brotherptr){EnQueue(&tempQ,brotherptr);

    B(2);}/*end-while*/while(

    C(3)){

    D(4);printf("%c\t",ptr->data);if(

    E(5))continue;

    F(6);brotherptr=ptr->firstchild->nextbrother;while(brotherptr){EnQueue(&tempQ,brotherptr);

    G(7);}/*end-while*/}/*end-while*/returnOK;}/*LevelTraverse*/[15分]

  • 5. 试题七(共15分)阅读以下说明以及Java程序,将应填入(n)处的字句写在答题纸的对应栏内。[说明]传输门是传输系统中的重要装置。传输门具有Open(打开)、Closed(关闭)、Opening(正在打开)、StayOpen(保持打开)、Closing(正在关闭)五种状态。触发状态的转换事件有click、complete和timeout三种。事件与其相应的状态转换如图7-1所示。图7-1传输门响应事件与其状态转换图下面的[Java代码1]与[Java代码2]分别用两种不同的设计思路对传输门进行状态模拟,请填补代码中的空缺。[Java代码1]publicclassDoor{publicstaticfinalintCLOSED=1;publicstaticfinalintOPENING=2;publicstaticfinalintOPEN=3;publicstaticfinalintCLOSING=4;publicstaticfinalintSTAYOPEN=5;privateintstate=CLOSED;//定义状态变量,用不同的整数表示不同状态privatevoidsetState(intstate){this.state=state;}//设置传输门当前状态publicvoidgetState(){//此处代码省略,本方法输出状态字符串,//例如,当前状态为CLOSED时,输出字符串为”CLOSED”}publicvoidclick(){//发生click事件时进行状态转换if((1))setState(OPENING);elseif((2))setState(CLOSING);elseif((3))setState(STAYOPEN);//发生timeout事件时进行状态转换publicvoidtimeout(){if(state==OPEN)setState(CLOSING);}publicvoidcomplete(){//发生complete事件时进行状态转换if(state==OPENING)setState(OPEN);elseif(state==CLOSING)setState(CLOSED);}publicstaticvoidmain(String[]args){DooraDoor=newDoor();aDoor.getState();aDoor.click();aDoor.getState();aDoor.complete();aDoor.getState();aDoor.click();aDoor.getState();aDoor.click();aDoor.getState();return;}}[Java代码2]publicclassDoor{publicfinalDoorStateCLOSED=newDoorClosed(this);publicfinalDoorStateOPENING=newDoorOpening(this);publicfinalDoorStateOPEN=newDoorOpen(this);publicfinalDoorStateCLOSING=newDoorClosing(this);publicfinalDoorStateSTAYOPEN=newDoorStayOpen(this);privateDoorStatestate=CLOSED;//设置传输门当前状态publicvoidsetState(DoorStatestate){this.state=state;}publicvoidgetState(){//根据当前状态输出对应的状态字符串System.out.println(state.getClass().getName());}publicvoidclick(){(4);}//发生click事件时进行状态转换publicvoidtimeout(){(5);}//发生timeout事件时进行状态转换publicvoidcomplete(){(6);}//发生complete事件时进行状态转换publicstaticvoidmain(String[]args){DooraDoor=newDoor();aDoor.getState();aDoor.click();aDoor.getState();aDoor.complete();aDoor.getState();aDoor.timeout();aDoor.getState();return;}}publicabstractclassDoorState{//定义所有状态类的基类protectedDoordoor;publicDoorState(Doordoor){this.door=door;}publicvoidclick(){}publicvoidcomplete(){}publicvoidtimeout(){}}classDoorClosedextendsDoorState{//定义一个基本的Closed状态publicDoorClosed(Doordoor){super(door);}publicvoidclick(){(7);}//该类定义的其余代码省略}//其余代码省略[15分]
  • 6. 试题四(共15分)阅读以下说明和图,填补流程图中的空缺,将解答填入答题纸的对应栏内。[说明]某汽车制造工厂有两条装配线。汽车装配过程如图4-1所示,即汽车底盘进入装配线,零件在多个工位装配,结束时汽车自动完成下线工作。图4-1汽车装配线(1)e0和e1表示底盘分别进入装配线0和装配线1所需要的时间。(2)每条装配线有n个工位,第一条装配线的工位为S0,0,S0,1,…,S0,n-1,第二条装配线的工位为S1,0,S1,1,…,S1,n-1。其中S0,k和S1,k(0≤k≤n-1)完成相同的任务,但所需时间可能不同。(3)ai,j表示在工位Si,j处的装配时间,其中i表示装配线(i=0或i=1),j表示工位号(0≤j≤n-1)。(4)ti,j表示从Si,j处装配完成后转移到另一条装配线下一个工位的时间。(5)x0和x1表示装配结束后,汽车分别从装配线0和装配线1下线所需要的时间。(6)在同一条装配线上,底盘从一个工位转移到其下一个工位的时间可以忽略不计。图4-2所示的流程图描述了求最短装配时间的算法,该算法的输入为: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处的最短装配时间。图4-2求最短装配时间算法[15分]

    A(1)e0和e1表示底盘分别进入装配线0和装配线1所需要的时间。

    B(2)每条装配线有n个工位,第一条装配线的工位为S0,0,S0,1,…,S0,n-1,第二条装配线的工位为S1,0,S1,1,…,S1,n-1。其中S0,k和S1,k(0≤k≤n-1)完成相同的任务,但所需时间可能不同。

    C(3)ai,j表示在工位Si,j处的装配时间,其中i表示装配线(i=0或i=1),j表示工位号(0≤j≤n-1)。

    D(4)ti,j表示从Si,j处装配完成后转移到另一条装配线下一个工位的时间。

    E(5)x0和x1表示装配结束后,汽车分别从装配线0和装配线1下线所需要的时间。

    F(6)在同一条装配线上,底盘从一个工位转移到其下一个工位的时间可以忽略不计。图4-2所示的流程图描述了求最短装配时间的算法,该算法的输入为: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处的最短装配时间。图4-2求最短装配时间算法[15分]

  • 7. 试题六(共15分)阅读以下说明和C++代码,将应填入(n)处的字句写在答题纸的对应栏内。[说明]传输门是传输系统中的重要装置。传输门具有Open(打开)、Closed(关闭)、Opening(正在打开)、StayOpen(保持打开)、Closing(正在关闭)五种状态。触发传输门状态转换的事件有click、complete和timeout三种。事件与其相应的状态转换如图6-1所示。图6-1传输门响应事件与其状态转换图下面的[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:coutstate=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();aDoor.complete();aDoor.getState();aDoor.timeout();aDoor.getState();return0;}[15分]
相关试卷
相关题库