软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷5(共114题)_第1页
软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷5(共114题)_第2页
软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷5(共114题)_第3页
软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷5(共114题)_第4页
软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷5(共114题)_第5页
已阅读5页,还剩122页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷5(共9套)(共114题)软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷第1套一、必答题(本题共7题,每题1.0分,共7分。)阅读下列说明、图1和图2,回答问题1、问题2和问题3。【说明】下面是某租车信息管理系统的介绍:该车库中备有若干车辆,每辆车有车号、车牌、车名、价格等属性。车库不定期地购买并注册新车供用户借用,也可将报废的旧车注销以停止租用。车库可为众多用户提供服务。每个用户在借车之前需注册姓名、地址等内容。每个用户最多可同时借3辆车。每辆车借期7天;若有一辆车超期,则不可再借其他车。一辆车超期一天罚款250元。若一辆车超期3周不归还,则发布通告。若用户借的车丢失,在罚款处理之前不能借车,每辆报失的车罚款该车目前市价(包括折旧)的1.2倍。注册新用户不受限制;而注销用户之前,该用户必须归还所有借的车,或者报失并接受罚款。1、分析车辆的状态和事件,指出图1中的(1)、(2)、(3)、(4)分别是什么?标准答案:(1)cancelregister(注销旧车的注册)(2)register(车辆注册)(3)return(归还)(4)lostreport(遗失报告)知识点解析:暂无解析2、分析用户的状态和事件,指出图2中的(5)、(6)、(7)、(8)分别是什么?(注意,用户与车辆在状态图中的关系)。标准答案:(5)cancelregister(注销用户的注册)(6)borrow/n+1(借车/拥有车的数量+1)(7)penaltyandn=0(罚款并且拥有车的数量为0)(8)3知识点解析:暂无解析3、指出UML中活动图的含义,并说明活动图和状态图的区别与联系。标准答案:活动图(activitydiagram)显示动作及其结果。活动图着重描述操作(方法)实现中所完成的工作以及用例实例或对象中的活动。活动图是状态图的一个变种,与状态图的目的有一些小的差别,活动图的主要目的是描述动作(执行的工作和活动)及对象状态改变的结果。当状态中的动作被执行(不像正常的状态图,它不需指定任何事件)时,活动图中的状态(称为动作状态)直接转移到下一个阶段。活动图和状态图的另一个区别是活动图中的动作可以放在泳道中。泳道聚合一组活动,并指定负责人和所属组织。活动图是另一种描述交互的方式,描述采取知识点解析:根据题意可以分析出车辆的状态和事件,例如根据“车库不定期地购买并注册新车供用户借用,也可将报废的旧车注销以停止租用”,可以得出(1)、(2)空分别是注销旧车的注册和车辆注册。(3)空可以从在库状态和在借状态的合理推断,得出从在借状态到在库状态只有一种事件——“归还”。从在借状态到终结状态,也只有一种可能性,那就是遗失。根据题意“注销用户之前,该用户必须归还所有借的车,或者报失并接受罚款”,得出从“NoCar”到终结状态的事件(5)空是cancelresister(注销用户的注册)。根据从“NoCar”到“HasCar”的事件(6)空是borrow(借车),同时已知用户可以借多辆车,当前拥有车n辆,所以需要n+1。根据“若用户借的车丢失,在罚款处理之前不能借车”可知(7)空是penalty(罚款),同时状态从“HasCar”到达“NoCar”说明n=0。根据“每个用户最多可同时借3辆车”,可以得出(8)空为3。所有的系统均有静态结构和动态行为。结构可以用静态模型元素来描述,如类、关系、节点和构件。行为描述结构内的元素如何交互。通常情况下,这些交互是确定的且可以建立模型。抽象系统的动态行为也称为动态建模,UML支持动态建模。在UML中有4类图,每一类用于不同的目的:状态、序列、协作和活动。状态图被用来描述类(也可以用于子系统或整个系统)中的行为和内部状态。它着眼于描述随着时间的改变,对象如何改变其状态。状态的改变起决于出现的事件,状态中执行的行为和动作,状态转移等。事件可能是条件成真,接收一个信号或一个操作调用或经过指定时间。序列图主要用来描述在指定情节中一组对象是如何交互的。它着眼于消息序列,也就是说,在对象间如何发送和接收消息。序列图有两个坐标轴:纵坐标轴显示时间,横坐标轴显示有关的对象。序列图中最基本的东西是时间。协作图主要用来描述对象在空间中的交互,即除了动态交互,它也直接描述对象是如何链接在一起的。在协作图中没有时间轴,因而将消息按序编号。阅读以下说明和流程图(如图3所示),回答问题1和问题2。【说明】本流程图实现从成绩文件生成学生成绩一览表。某中学某年级的学生成绩数据(分数)登录在成绩文件10中,其记录格式见表2:由该成绩文件生成见表3的学生成绩一览表。生成的学生成绩一览表按学号升序排列。表中的名次是指该生相应课程在年级中的名次。流程图中的顺序文件F0是学生成绩文件,F0文件经处理1处理后产生顺序文件F,然后经过处理2至处理4对文件F进行处理和更新。在处理5中,仅对文件F的纪录进行学生成绩一览表的编排输出,不进行排序和增加名次等处理。4、流程图中文件F的纪录格式设定为见表4形式:其中的①、②应定义为何种数据项?标准答案:①成绩②名次知识点解析:暂无解析5、简述处理2、处理3和处理4作何种处理,若有排序处理则需指明排序的键及序(升序或降序)。标准答案:课程代码按升序排列、成绩按降序排列知识点解析:处理2对每个文件F进行排序。处理3对每个课程代码,确定学生名次,写入文件F的相应字段。处理4按学号(升序)、课程代码(升序)对文件F排序。6、根据题意回答以下问题:设某商业集团数据库中有3个实体集:一是“商店”实体集,属性有商店编号,商店名,地址等;二是“商品”实体集,属性有商品号,商品名,规格,单价等;三是“职工”实体集,属性有职工编号,姓名,性别,业绩等。商店与商品间存在“销售”联系,每个商店可以销售多种商品,每种商品也可以在多个商店和职工间存在“聘用”联系,每个商店有许多职工,每个职工只能在一个商店工作,商店聘用职工有聘期和月薪。问题:1.请根据题意完善下面ER图。2.将ER图转换成关系模型,并注明主键和外键。3.请写出要查出员工“小李”在三月份的销售业绩的关系代数式。标准答案:如图5所示。2.商店(商店编号,商店名,地址)职工(职工编号,姓名,性别,业绩,商店编号,聘期,月薪)商品(商品号,商品名,规格,单价)销售(商店编号,商品号,月销售量)3.select业绩from职工where商品.商品号=“商品A”and销售.商品号=商品.商品号and商店.商店编号=销售.商店编号and商店.商店编号=聘用.商品编号and职工.职工编号=聘用.职工编号and职工.职工号=“小李”知识点解析:暂无解析7、下列给定程序中,函数fun()的功能是:对N名学生的学习成绩,按从高到低的顺序找出前m(m≤10)名学生来,并将这些学生数据存放在一个动态分配的连续存储区中,此存储区的首地址作为函数值返回。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。试题程序:#include<stdio.h>#include<malloc.h>#include<string.h>#include<conio.h>#defineN10typedefstructss{charnum[10];intorder;}STU;STU*fun(STUa[],intm){STUb[N],*tt;inti,j,k;(1);for(i=0;i<N;i++)b[i]=a[i];for(k=0;k<m;k++){for(i=j=0;i<N;i++)if((2))j=i;tt[k]=b[j];b[j].order=0;}return(3);}outresult(STUa[],FILE*pf){inti;for(i=0;i<N;i++)fprintf(pf,"No=%sMark=%d\n",a[i].num,a[i].order);fprintf(pf,"\n\n");}main(){STU[N]={{"A01",80},{"A02",79},{"A03",66},{"A04",82},{"A05",87},{"A06",93},{"A07",78},{"A08",60},{"A09",85},{"A10",73}};STU*p_order;inti,m;clrscr();printf("***TheOrigialdata***\n");outresult(a,stdout);printf("\nGivethenumeberofthestudentswhohavebetterscore:");scanf("%d",&m);while(m>10){printf("\nGivethenumberofthestudetswhohavebetterscore:");scanf("%d",&m);}p_order=fun(a,m);printf("***THERESULT***\n");printf("***Thetopstudents***\n");for(i=0;i<m;i++)printf("%s%d\n",p_order[i].num,p_order[i].order);free(p_order);}标准答案:(1)n=(STU*)malloc(sizeof(STU)*m)(2)b[i].order>b[j].order(3)tt知识点解析:填空1:tt是结构体STU型指针,声明时并没有进行初始化,所以,需要使用malloc()函数动态申请存储空间。动态申请存储空间的大小取决于函数的形参m。填空2:按成绩高低找出前m名学生的方法是,先假设第一名学生成绩最高,依次与其他学生的成绩进行比较,如果出现成绩更高者,则认为这名学生成绩最高,全部比较完后找到成绩第一名的学生,存入指针tt所指的结构体空间中,同时将这名同学的成绩置0,这样在其他同学中找第一名就相当于找到所有同学中的第二名,依此类推,进行m次循环,找到前m名学生。填空3:题目要求函数值返回动态分配的存储区的首地址,所以返回指针tt。二、选答题(本题共2题,每题1.0分,共2分。)8、【说明】①定义类Table的私有数据成员x和y,分别用于表示九九表中的两个乘数(x*y),它们都是int型的数据。②完成类Table的成员函数print()的定义,该函数以“x*y=z”的格式打印出九九表中的一个乘法算式,请使用格式化输出函数printf实现。③完成类Table9的成员函数print()的定义,该函数调用基类Table的print()函数,将九九表输出到屏幕。④补充主函数,在屏幕上输出九九表,以便测试所定义的类的正确性。源程序文件test8_3.cpp清单如下:#include<iostream,h>#include<stdio,h>classTable}(1)intz;public:voidprint(intx,inty,intz);};voidTable::print(intx,inty,intz){(2)}ClassTable9:publicTable{public:voidprint();};voidTable9::print(){(3)intx,y,z;for(i=1;i<10;i++){for(j=1;j<i+1;j++){x=i;y=j;z=i*j;Table::print(y,x,z);}printf("\n");}}main(){//**4**return0;}标准答案:(1)intx;inty;(2)printf("%d*%d=%d",x,y,z);if(z<10)printf("");(3)inti,j;(4)Table9t_9;t_9.print();知识点解析:主要考查考生将具体问题抽象为类,将类的定义补充完整,并进行类定义测试的能力。注意(2)中格式化输出函数printf的使用格式,%d代表输出的为整型。9、【说明】下面是一个Applet程序,其功能是建立2个文本区域,一个为编辑区,一个为只读区;建立2个按钮,一个实现将编辑区中被鼠标选定的文本内容拷贝到只读区中,一个实现将只读区的全部文本内容清空。程序运行结果如图3所示。importjava.awt.*;importjava.applet.*;/*<appletcode="ex3_6.class"width=800height=400></applet>*/publicclassex3_6extendsApplet{privateButtonokBtn,clearBtn;privateStringstrMessage;privateTextAreatArea1,tArea2;publicvoidinit(){strMessage="Hello!Welcometothetest!\n"+"Wishyougoodluck!";tArea1=newTextArea(10,25);(1);tArea2=newTextArea(10,25);(2);OkBtn;newButton("Copy");dearBtn=(3);add(tArea1);add(tArea2);add(okBtn);add(clearBtn);}publicbooleanaction(Evente,Objecto){if(e.target==okBtn)tArea2,setText((4));elseif(e.target==clearBtn)(5);returntrue;}}ex3_6.htm|<HTML><HEAD><TITLE>ex3_6</TITLE></HEAD><BODY><appletcode="ex3_6.class"Width=800height=400></applet></BODY></HTML>标准答案:(1)tAreal.setText(strMessage)(2)tArea2.setEditable(false)(3)newButton("Clear")(4)tAreal.getSelectedText()(5)tArea2.setText("")知识点解析:本题主要考查Applet窗口、其事件处理机制以及对文本区域的相关操作。解题关键是熟悉TextArea的基本方法,如setEditable()方法就是用来确定不用的编辑模式的一个重要的方法,并且需要明确题目要求的2个文本区域的区别和联系,根据不同的事件,来对这两个文本区域进行操作。本题中,第1个空,将第2个文本区域tArea2的编辑模式设定为只读,注意参数为false,因为默认的编辑模式设定为可编辑的,用true表示,所以参数应该是false;第2个空,响应点击Copy按钮事件的语句应该将第1个文本区tAreal的被选择的文本内容取出放入第二个文本区tArea2中;第3个空,响应点击Clear按钮事件的语句应该将第2个文本区tArea2中的所有文本内容清空。软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷第2套一、必答题(本题共10题,每题1.0分,共10分。)阅读下列说明、图1和图2,回答问题1、问题2和问题3。【说明】下面是某租车信息管理系统的介绍:该车库中备有若干车辆,每辆车有车号、车牌、车名、价格等属性。车库不定期地购买并注册新车供用户借用,也可将报废的旧车注销以停止租用。车库可为众多用户提供服务。每个用户在借车之前需注册姓名、地址等内容。每个用户最多可同时借3辆车。每辆车借期7天;若有一辆车超期,则不可再借其他车。一辆车超期一天罚款250元。若一辆车超期3周不归还,则发布通告。若用户借的车丢失,在罚款处理之前不能借车,每辆报失的车罚款该车目前市价(包括折旧)的1.2倍。注册新用户不受限制;而注销用户之前,该用户必须归还所有借的车,或者报失并接受罚款。1、分析车辆的状态和事件,指出图1中的(1)、(2)、(3)、(4)分别是什么?标准答案:(1)cancelregister(注销旧车的注册)(2)register(车辆注册)(3)return(归还)(4)lostreport(遗失报告)知识点解析:暂无解析2、分析用户的状态和事件,指出图2中的(5)、(6)、(7)、(8)分别是什么?(注意,用户与车辆在状态图中的关系)。标准答案:(5)cancelregister(注销用户的注册)(6)borrow/n+1(借车/拥有车的数量+1)(7)penaltyandn=0(罚款并且拥有车的数量为0)(8)3知识点解析:暂无解析3、指出UML中活动图的含义,并说明活动图和状态图的区别与联系。标准答案:活动图(activitydiagram)显示动作及其结果。活动图着重描述操作(方法)实现中所完成的工作以及用例实例或对象中的活动。活动图是状态图的一个变种,与状态图的目的有一些小的差别,活动图的主要目的是描述动作(执行的工作和活动)及对象状态改变的结果。当状态中的动作被执行(不像正常的状态图,它不需指定任何事件)时,活动图中的状态(称为动作状态)直接转移到下一个阶段。活动图和状态图的另一个区别是活动图中的动作可以放在泳道中。泳道聚合一组活动,并指定负责人和所属组织。活动图是另一种描述交互的方式,描述采取知识点解析:根据题意可以分析出车辆的状态和事件,例如根据“车库不定期地购买并注册新车供用户借用,也可将报废的旧车注销以停止租用”,可以得出(1)、(2)空分别是注销旧车的注册和车辆注册。(3)空可以从在库状态和在借状态的合理推断,得出从在借状态到在库状态只有一种事件——“归还”。从在借状态到终结状态,也只有一种可能性,那就是遗失。根据题意“注销用户之前,该用户必须归还所有借的车,或者报失并接受罚款”,得出从“NoCar”到终结状态的事件(5)空是cancelresister(注销用户的注册)。根据从“NoCar”到“HasCar”的事件(6)空是borrow(借车),同时已知用户可以借多辆车,当前拥有车n辆,所以需要n+1。根据“若用户借的车丢失,在罚款处理之前不能借车”可知(7)空是penalty(罚款),同时状态从“HasCar”到达“NoCar”说明n=0。根据“每个用户最多可同时借3辆车”,可以得出(8)空为3。所有的系统均有静态结构和动态行为。结构可以用静态模型元素来描述,如类、关系、节点和构件。行为描述结构内的元素如何交互。通常情况下,这些交互是确定的且可以建立模型。抽象系统的动态行为也称为动态建模,UML支持动态建模。在UML中有4类图,每一类用于不同的目的:状态、序列、协作和活动。状态图被用来描述类(也可以用于子系统或整个系统)中的行为和内部状态。它着眼于描述随着时间的改变,对象如何改变其状态。状态的改变起决于出现的事件,状态中执行的行为和动作,状态转移等。事件可能是条件成真,接收一个信号或一个操作调用或经过指定时间。序列图主要用来描述在指定情节中一组对象是如何交互的。它着眼于消息序列,也就是说,在对象间如何发送和接收消息。序列图有两个坐标轴:纵坐标轴显示时间,横坐标轴显示有关的对象。序列图中最基本的东西是时间。协作图主要用来描述对象在空间中的交互,即除了动态交互,它也直接描述对象是如何链接在一起的。在协作图中没有时间轴,因而将消息按序编号。【说明】下面是某租车信息管理系统的介绍:该车库中备有若干车辆,每辆车有车号、车牌、车名、价格等属性。车库不定期地购买并注册新车供用户借用,也可将报废的旧车注销以停止租用。车库可为众多用户提供服务。每个用户在借车之前需注册姓名、地址等内容。每个用户最多可同时借3辆车。每辆车借期7天:若有一辆车超期,则不可再借其他车。一辆车超期一天罚款250元。若一辆车超期3周不归还,则发布通告。若用户借的车丢失,在罚款处理之前不能借车,每辆报失的车罚款该车目前市价(包括折旧)的1.2倍。注册新用户不受限制;而注销用户之前,该用户必须归还所有借的车,或者报失并接受罚款。4、分析车辆的状态和事件,指出图2-1中的(1)、(2)、(3)、(4)分别是什么?标准答案:(1)cancelregister(注销旧车的注册)(2)register(车辆注册)(3)return(归还)(4)lostreport(遗失报告)知识点解析:根据题意可以分析出车辆的状态和事件,例如根据“车库不定期地购买并注册新车供用户借用,也可将报废的旧车注销以停止租用”,可以得出(1)、(2)空分别是注销旧车的注册和车辆注册。(3)空可以从在库状态和在借状态的合理推断,得出从在借状态到在库状态只有一种事件——“归还”。从在借状态到终结状态,也只有一种可能性,那就是遗失。5、分析用户的状态和事件,指出图2-2中的(5)、(6)、(7)、(8)分别是什么?(注意,用户与车辆在状态图中的关系)。标准答案:(5)cancelregister(注销用户的注册)(6)borrow/n+1(借车/拥有车的数量+1)(7)penaltyandn=0(罚款并且拥有车的数量为0)(8)3知识点解析:根据题意“注销用户之前,该用户必须归还所有借的车,或者报失并接受罚款”,得出从“NoCar’’到终结状态的事件(5)空是cancelregister(注销用户的注册)。根据从“NoCar”到“HasCar”的事件(6)空是borrow(借车),同时已知用户可以借多辆车,当前拥有车n辆,所以需要n+1。根据“若用户借的车丢失,在罚款处理之前不能借车”可知(7)空是penalty(罚款),同时状态从“HasCar”到达“NoCar”说明n=0。根据“每个用户最多可同时借3辆车”,可以得出(8)空为3。6、指出UML中活动图的含义,并说明活动图和状态图的区别与联系。标准答案:活动图(activitydiagram)显示动作及其结果。活动图着重描述操作(方法)实现中所完成的工作以及用例实例或对象中的活动。活动图是状态图的一个变种,与状态图的目的有一些小的差别,活动图的主要目的是描述动作(执行的工作和活动)及对象状态改变的结果。当状态中的动作被执行(不像正常的状态图,它不需指定任何事件)时,活动图中的状态(称为动作状态)直接转移到下一个阶段。活动图和状态图的另一个区别是活动图中的动作可以放在泳道中。泳道聚合一组活动,并指定负责人和所属组织。活动图是另一种描述交互的方式,描述采取知识点解析:所有的系统均有静态结构和动态行为。结构可以用静态模型元素来描述,如类、关系、节点和构件。行为描述结构内的元素如何交互。通常情况下,这些交互是确定的且可以建立模型。抽象系统的动态行为也称为动态建模,UML支持动态建模。在UML中有4类图,每一类用于不同的目的:状态、序列、协作和活动。状态图被用来描述类(也可以用于子系统或整个系统)中的行为和内部状态。它着眼于描述随着时间的改变,对象如何改变其状态。状态的改变起决于出现的事件,状态中执行的行为和动作,状态转移等。事件可能是条件成真,接收一个信号或一个操作调用或经过指定时间。序列图主要用来描述在指定情节中一组对象是如何交互的。它着眼于消息序列,也就是说,在对象间如何发送和接收消息。序列图有两个坐标轴:纵坐标轴显示时间,横坐标轴显示有关的对象。序列图中最基本的东西是时间。协作图主要用来描述对象在空间中的交互,即除了动态交互,它也直接描述对象是如何链接在一起的。在协作图中没有时间轴,因而将消息按序编号。阅读以下说明和流程图,回答问题1至问题3,将解答写在对应栏内。【说明】(1)流程图描述某大型商店商品销售的数据处理流程。(2)商店设有若干柜台,同一种商品可能在几个柜台上销售,各柜台每天提供一组日销售数据,其格式如下:日期、柜台号、商品代码、销售数量、商品代码、销售数量……(3)数据处理系统每日产生一份反映各柜台当日销售金额和商店日销售金额的“日销售金额报告”,必要时还产生一份“商品请购报告”,给出那些低于最低库存量的商品代码、商品名称、最低库存量和实际库存量。处理过程中产生存档的“日销售文件”和临时工作文件“日销售量文件”和“旧销售金额文件”。(4)系统中所用到的数据均来自数据文件。(5)流程图中的商品库存文件的记录已按关键字“商品代码”排序。7、①指出商品库存文件的记录中必须包括哪些数据项?②分别指出在日销售文件,日销售量文件和日销售金额文件的记录中至少应包括哪些数据项,同时不产生数据冗余?③错误清单可能指出哪些错误?标准答案:①商品代码、商品名称、单价、最低库存数量、实际库存数量。②日销售文件:柜台号、商品代码、销售数量。日销售量文件:商品代码、销售数量。日销售金额文件:柜台号、销售金额。③非法日期、非法商品代码、销售量为负数、销售量大于实际库存量;知识点解析:暂无解析8、简要叙述处理6的主要内容。标准答案:①更新商品库存文件中的实际库存量。②当实际库存量小于最低库存量时产生商品请购清单。知识点解析:暂无解析9、如果删除流程图中的虚框部分,日销售文件的记录中应增加什么数据项?标准答案:在日销售文件中增加“单价”或“金额”。知识点解析:本题描述的是商品销售的数据处理流程。首先要对说明和流程图进行快速扫读,然后结合问题,在说明和图中找到有关的范围,进行分析。问题1中的第一个小问题是指出商品库存文件的记录中必须包括哪些数据项,首先,应该马上注意到说明中的第5项,应该包括“商品代码”。同时,注意第4项,所用到的数据均来自数据文件,这个条件将会直接影响后面的分析。图中显示,商品库存文件在处理1、处理3、处理6使用到。流程图中很明显地显示出在处理1产生日销售文件后分为两个分支,即左边的分支处理日销售量和商品请购事务和右边的分支处理销售金额事务。处理6生成商品请购清单,说明3中提到商品请购清单给出低于库存量的商品代码、商品名称、最低库存量和实际库存量。其所在分支只在处理1中使用到除库存文件之外的日销售数据,日销售数据和商品库存文件经过处理1生成日销售文件,所以,商品库存文件必须还包括;商品名称、最低库存量、实际库存量。处理1生成的日销售文件还被右边分支使用,它和商品库存文件又被处理3使用生成日销售金额文件,销售金额:单价x销售量,销售数量由日销售数据提供,所以,商品单价应该由商品库存清单提供。由此,得出商品库存清单必须包括的数据项。问题1中的问题②在分析①时已经得到了一些线索,在进一步分析中得出,在同时要保证不能有数据项冗余的情况下,可以得出日销售金额必须包括柜台号、商品代码、销售数量;日销售量文件必须包括商品代码、销售数量;日销售金额必须包括柜台号、销售金额。问题1的③,错误清单产生于处理1,这时还没有用到商品库存文件中的商品单价,所以不可能有关于金额的错误。可能有的错误是非法的商品代码、非法日期、销售数量为负、销售数量大于库存数量。处理6根据日销售量文件和商品库存文件来更新商品库存文件,并在实际库存量小于最低库存量时产生商品请购清单。删除虚框部分,就是在处理3处不使用商品库存文件,那么商品库存文件提供的数据项就要在日销售文件中提供,所以日销售文件中要提供“单价”,也可以提供“金额”,这样就免去计算处理。10、阅读下列说明和相关的类图,回答问题。【说明】在一栋m层楼的大厦里,用电梯内和每个楼层的按钮来控制n部电梯的运作。当按下电梯内按钮请求电梯在指定楼层停下时,按钮指示灯亮,当电梯到达指定楼层时,指示灯熄灭。除了大厦的最底层和最高层之外,每层楼都有两个按钮分别指示电梯上行和下行,当这两个按钮之一被按下时相应的指示灯亮,当电梯到达此楼层时灯熄灭,电梯向要求的方向移动。当电梯无升降运动时,关门并停止在当前楼层。软件设计师火云龙采用面向对象分析的方法,经过三次逐步求精设计之后,得到如图13-19所示的类图。【问题1】按钮类有一个重要的属性,请将该属性填入图13-19中的(a)处。【问题2】识别关联的多重性是面向对象建模重要的一步,请根据题目说明填空(1)~(6)。【问题3】软件设计师火云龙在初步设计类时,将门(的状态)作为电梯的属性,后经思考,将电梯门设计成一个独立的类,这么做的好处是什么?软件设计师火云龙在初步设计类时,并没有设计“请求”类,后来又加入了该类,这么做的原因是什么?标准答案:[问题1](a)指示灯[问题2](1)mn(2)mn(3)2m-2(4)2m-2(5)n(6)n[问题3]一旦将电梯门作为一个独立的类,则打开或关闭电梯门的唯一办法就是向“电梯门”类对象发送消息。如果电梯门类封装得好,就能保证不会在错误的时间关闭或打开电梯门,从而有效杜绝严重意外事故的发生。出于安全考虑,在未经授权时不能随意修改“请求”,因此将“请求”设计成独立的类,如果“请求”类封装得好就能有效保证电梯安全运行。知识点解析:从图13-19可知,电梯按钮类和楼层按钮类都是按钮类的子类,电梯按钮和楼层按钮的共同点就是用指示灯跟乘客进行交互,所以,按钮类必定有个重要的属性“指示灯”。识别关联的多重性是面向对象建模重要的一步。题目的说明中提到“在一栋m层楼的大厦里,用电梯内和每个楼层的按钮来控制n部电梯的运作”、“除了大厦的最底层和最高层之外,每层楼都有两个按钮分别指示电梯上行和下行”,所以这栋大厦中一共有mn个电梯按钮,共有2m-2个楼层按钮,电梯控制器类控制着所有的电梯按钮、楼层按钮和电梯,所以第(1)~(6)空应分别填:mn、mn、2m-2、2m-2、n、n。注意,不可以用*号代替,*号表示多个,具体多少是未知,而题目已经给定具体数目,所以应该用m、n来表示。识别类是面向对象分析的第一步,常用的方法是名词分析法。题目的说明其实就是电梯系统的需求说明,出现了如下主要名词:大厦、电梯、楼层、按钮、运动、指示灯、请求、最底层、最高层、方向和门。这些名词所代表的事物可作为类的初步候选者。其中,大厦、最底层、最高层和楼层处于问题范畴之外,因此不必考虑。运动、方向、指示灯和门可作为其它类的属性,例如,指示灯(的状态)可作为按钮类的属性,方向和门(的状态)可作为电梯类的属性。经过上述初步筛选只剩下两个基本的候选类,即电梯类和按钮类。在题目的说明中实际指定了两种按钮,因此,应该为按钮类定义两个子类,即电梯按钮和楼层按钮。综合上述分析结果,可得出系统的类图,如图13-50所示。这个模型是非常初步的模型,需要进一步充实、精化和完善。分析上述模型会发现它存在比较明显的不足:在实际的电梯系统中,按钮并不直接与电梯通信;为了决定分派哪一部电梯去响应一个特定的请求,必须有某种类型的电梯控制器。然而在题目说明中并未提到控制器,因此它未被列入候选类中。由此可见,名词分析法只为寻找候选类提供了初步线索,不能指望依靠这种方法找出全部候选类。系统分析员必须根据领域知识、常识和经验做进一步分析,才能找出问题域中所有的类。补充了电梯控制器类之后,其类图如图13-51所示。这个模型也并非十分完善。电梯类的主要功能应是执行电梯控制器发出的移动或等待命令,如果将门(的状态)作为电梯的一个属性,则电梯还要执行关门或开门的命令,这样电梯类的功能就不单一了。于是将电梯门划分出来成为一个独立的类,一旦将其作为一个独立的类,则打开或关闭电梯门的唯一办法就是向“电梯门”类对象发送消息。如果电梯门类封装得好,就能保证不会在错误的时间关闭或打开电梯门,从而有效杜绝严重意外事故的发生。同样,出于安全考虑,在未经授权时不能修改“请求”,因此将“请求”设计成独立的类。经过再次完善之后的类图如图13-19所示。二、选答题(本题共7题,每题1.0分,共7分。)11、从下列的3道式题(试题五至试题七)中任选1道解答。如果解答的试题数超过1道,则题号小的1道解答有效。阅读以下说明和C++码,将应填入(n)处的字名写在的对应栏内。[说明]利用c++的各种控制语句编写一个万年历程序,要求:显示任何年份的日历,日历以月份顺序排列,每月以星期顺序排列,类似于一般挂历上的格式。本程序包含如下两个函数:Leap()用于判定指定的年份是闰年,Week()用于计算year年份的1月1日是星期几,其判定规则为:(1)如果year年份为1994年,则为星期六。(2)如果year年份大于1994年,则星期值weekno按下列公式计算:differ=(year-1994)*(365%6)+(year-1993)/4-(year-2001)/100+(year-2001)/400date=6+differ%7weekno=(date6)?date-7:date(3)如果year年份小于1994年,则星期值weekno按下列公式计算:differ=(1994-year)*(365%7)+(1996-year)/4-(2001-year)/100+(2000-year)/400weekno=6-dder%7#include"iostream.h"#include"iomanip.h"intleap(intn){if((1))return0elsereturn1;}intweek(intyear){inta1,differ,date,weekno;if(year==1994)a1=0;elseif(year>1994)a1=1;elsea1=-1;switch(a1){case0:return6;break;case1:{(2)date=6+differ%7;weekno=(date>6)?date-7date;}returnweekno;break;case-1:{differ=(1994-year)*(365%7)+(1996-year)/4-(2001-year)/100+(2000-year)/400;weekno=6-differ%7;}returnweekno;break;}}voidmain()}inti,year,m2,n,j;cout<<“Pleaseinput某年数:”;cin>>year;if(!leap(year))(3);elsem2=28;intmonth[12]:{31,m2,31,30,31,30,31,31,30,31,30,31};(4)for(i=0;i<12;i++){cout<<<<end1<<setw(4*n)<<";for(j=1;j<=month[i];j++){cout<<setw(4)<<j;n++;if(n>=7){(5)cout<<end1;}}}}标准答案:(n%100==0)||(n%400==0)differ=(year-1994)*(365%6)+(year-1993)/4-(year-2001)/100+(year-2001)/400;m2=29n=week(year);n=0;知识点解析:暂无解析12、阅读下列Java程序和程序说明,将应填入(n)处的字句写在对应栏内。【说明】本程序ExceptionTester实现功能:读入两个整数,第1个数除以第2个数,之后输出。若第2个数为0,则自动进行异常处理。程序如下:(1);publicclassExceptionTester{publicstaticvoidmain(Stringargs[]){intresult;intnumber[]=newint[2];booleanvalid;for(inti=0;i<2;i++){valid=(2);while(!valid){try{System.out.println("Enternumber"+(i+1));number[i]=Integer.valueOf(Keyboard.getString()).intValue();valid=true;}catch(NumberFormatExceptione){System.out.println("Invalidintegerentered.Pleasetryagain.");}}}by{result=number[0]/number[1];System.out.print(number[0]+"/"+number[1]+"="+result);}catch((3)){System.out.println("Secondnumberis0,cannotdodivision!");}}}其中,Keyboard类的声明为:imponjava.io.*;publicclassKeyboard{staticBufferedReaderinputStream=new(4)(newInputStreamReader(System.in));publicstaticintgetInteger(){try{return(Integer,valueOf(inputStream.readLlne().trim()).intValue());}catch(Exceptione){e.printStackTrace();return0;}}public(5){by{return(inputStream.readLine());}catch(IOExceptione){return"0";}}}标准答案:(1)importjava.io.*(2)false(3)ArithmeticExceptione(4)BufferedReader(5)staticStringgetString()知识点解析:(1)importjava.io.*Java程序的头部。(2)false开关变量valid初值应该为false。(3)ArithmeticExceptione捕捉算术计算异常信息。(4)BufferedReader动态生成一个BufferedReader对象用于输入。(5)staticStringgetString()读字符串成员函数的函数头部。阅读以下说明和Java代码,将应填入(n)处的字句写在对应栏内。[说明]在一些大型系统中,大多数的功能在初始化时要花费很多时间,如果在启动的时候,所有功能(连不用的功能)都要全面初始化的话,会连带影响到应用软件要花很多时间才能启动。因此常将程序设计成到了实际要使用某种功能的阶段才初始化该功能。以下示例展示了Proxy(代理)模式,PrinterProxy类执行一些比较“轻”的方法——设置名称和取得名称,需要真正执行“重”的方法——真正打印——时才初始Print类。图6-1显示了各个类间的关系。[图6-1][Java代码]//Printable.JavapubliC(1)Printable{publicabstractvoidsetPrinterName(Stringname);publicabstractStringgetprinterName();publicabstractvoidprint(Stringstring);}//Printer.JavapublicclassPrinterimplementsPrintable{privateStringname;publicPrinter(){System.out.println("正在产生Printer的对象实例");}publicPrinter(Stringname){=name;heavyJob("正在产生Printer的对象实例("+name+")");publicvoidsetPrinterName(Stringname){=name;publicStringgetPrinterName(){returnname;publicvoidprint(Stringstring){System.out.println("==="+name+"====");System.out.println(string);}}//PrinterProxy.JavapublicclassPrinterProxy(2)Printable{privateStringname;privatePrinterreal;publicPrinterProxy(){}publicPrinterProxy(Stringname){=name;}publicgynchronizedvoidsetPrinterName(Stringname){if((3)){real.setPrinterName(name);}=name;}publicStringgetprinterName(){returnname;}publicvoidprint(Stringstring){(4);real.print(string);}privatesynchronizedvoidrealize(){//产生真正的Printer对象if(real==null){real=(5);}}}13、(1)标准答案:interface知识点解析:暂无解析14、(2)标准答案:implements知识点解析:暂无解析15、(3)标准答案:real!=null知识点解析:暂无解析16、(4)标准答案:realize()知识点解析:暂无解析17、(5)标准答案:newPrinter(name)知识点解析:在Java中,interface和abstractclass均能包含抽象方法,“类是用来继承的(extends),接口是用来实现的(implements)。”由类Printer的声明可判知Printable应为接口,故空(1)应填interface。因Printable是一个接口,故空(2)应填implements。该空比较简单。real是一个引用,调用之前当然得先判断real是否为空,只有不是空才能进行调用,否则将出现不可预期的结果,因此空(3)应填real!-NULL。在执行打印时,需要保证已经正确生成了real对象,否则打印将无法完成,这也正是Proxy的核心所在,到真正需要打印时,才生产real对象,因此空(4)应填realize()。real是Printer对象引用,空(5)是生成一个Printer对象,注意Printer类的构造函数是Printer(stringname),故应填newPrinter(name)。顺便说一下,生成real对象时,进行Treal是否为空的判断,并将方法realize()声明为synchronized,这是为了避免生成多个real对象,有一个即可。软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷第3套一、必答题(本题共7题,每题1.0分,共7分。)阅读以下说明,回答问题1~2,将解答填入对应的解答栏内。[说明]某程序的功能是输入三个正整数作为边长,判断三条边构成的三角形是否等边、等腰或是一般三角形。1、通过该程序的算法用等价类设计测试用例,检查逻辑覆盖标准。标准答案:(1)划分等价类并编号,见下表:(2)为合理设计等价类测试用例,对于表中对应的四个合理等价类,用三个测试用例覆盖,见下表:(3)为每—个不合理等价类设计一个侧试用例,见下表:知识点解析:暂无解析2、用边界值分析法设计测试用例,检查逻辑覆盖标准。标准答案:用边界值法设计测试用例,见下表:知识点解析:本题属于软件测试中测试用例的设计,分为白盒技术和黑盒技术。等价类划分是将输人数据域按有效的或无效的划分成若干个等价类,测试每个等价类的代表值就等于对该类其他值的测试。步骤如下;1)按程序的功能说明,找出一个个输入条件,将每个输入条件划分成两个或多个等价类,将其列表。2)确定测试用例。根据已划分的等价类,按以下步骤设计测试用例:Ⅰ.为每一个等价类编号Ⅱ.没计一个测试用例,使其尽可能多地覆盖尚未被覆盖过的合理等价类,重复此步,直到所有合理等价类被测试用例覆盖。Ⅲ.设计一个测试用例,使其只覆盖一个不合理等价类。重复这一步,直到所有不合理等价类被测试用例覆盖。边界值分析不是从一个等价类中任选一个例子作为代表,而是将测试边界情况作为重点目标,选取正好等于,刚刚大于或刚刚小于边界值的测试数据。因为实践经验表明,程序往往在处理边界情况时发生错误。其基本思想是列出程序中可能发生错误的情况,根据这些情况选择测试用例。逻辑覆盖是白盒技术,它追求程序内部的逻辑覆盖程度,要设计使覆盖程度较高的或覆盖最优代表性的路径的测试用例。阅读以下说明,回答问题1~4,将解答填入对应的解答栏内。[说明]设T1,T2,T3为如下所述的三个事务。T1:A:=A+1。T2:A:=A*2。T3:A:=在屏幕上输出A,并将A置为1;其中A为数据库中的某个数据项。设A的初值为0。3、若这三个事务允许并行执行,则请列举出有多少可能的正确结果。标准答案:有6种可能的正确结果,相应的6个串行调度是:T1-T2-T3:A=1T1-T3-T2:A=2T2-T1-T3:A=1T2-T3-T1:A=2T3-T1-T2:A=4T3-T2-T1:A=3知识点解析:暂无解析4、各个事务的内部结构如下所示。若事务不施加任何锁,则有多少可能的调度。T1:R1(GetAintot1;t1:=t1+1);U1(UpdateAfromt1);T2:R2(GetAintot2;t2:=t2*2);U2(UpdateAfromt2);T3:1t3(GetAintot3;displayt3);U3(UpdateAfrom1);标准答案:总共有90种可能的调度。知识点解析:暂无解析5、能否产生“正确”结果但不可串行化的调度?标准答案:能够产生。知识点解析:暂无解析6、若这三个事务都遵守两段锁协议,那么是否存在事实上可串行化但又不能形成的调度?标准答案:存在。知识点解析:在并行系统环境下,事务并发操作的调度的可串行性的标准如下:调度结果的正确:保持数据库的一致状态。几个事务的并行执行是正确的,当且仅当其结果与按某一次序串行的执行它们时的结果相同。可串行性是并行事务正确性的唯一准则。因此,若有3个事务并行执行时,可能的正确结果与3个事务串行执行的结果应该相同。由于3个事务串行执行有6种可执行方案,因此有6种可能的正确结果。若事务不施加任何锁,数据项则可以同时被读写。假设Ri,Rj,Rk分别表示三种检索操作R1,R2,R3,顺序无关紧要;类似地,Up,Uq,Ur分别表示更新操作U1,U2,U3,顺序也无关紧要。但事务内部操作顺序是固定的。因此,可能的调度是:Ri-Rj-Rk-Up-Uq-Ur:3*2*1*3*2*1=36Ri-Rj-Up-Rk-Uq-Ur:3*2*2*1*2*1=24Ri-Rj-Up-Uq-Rk-Ur:3*2*2*1*1*1=12Ri-Up-Rj-Rk-Uq-Ur:3*1*2*1*2*1=12Ri-Up-Rj-Uq-Rk-Ur:3*1*2*1*1*1=6由此可见,总共有90种可能的调度。本例能够产生“正确”结构但不可串行化的调度。例如:调度R1-R2-R3-U3-U2-U1得到的结果与6个可能的串行调度中的两个相同。这样,对于给定的初始值。恰好是“正确的”。但必须清楚这个正确只是巧合,完全是因为初始值恰好为。才得到的,对其他的初始值则未必如此。例如,考虑初始值为10而非0的情况,上面给出的调度R1-R2-R3-U3-U2-U1就不能得到正确的结果。因此,该调度是不可串行的。调度R1-R3-U1-U3-R2-U2是可串行的(等价于串行调度T1-T3-T2),但在T1,T2和T3都遵守两段锁协议时不能出现。因为在这一协议下,操作R3会代表事务T3.在A上获得s锁;这样事务T1中的操作U1就无法在该锁释放前进行,且直到T3结束时才会发生。事实上,事务T3和T1在操作U3到达时将发生死锁。7、阅读以下说明,回答问题1~4,将解答填入对应的解答栏内。[说明]假设二叉树采用连接存储结构进行存储,root指向根接点,p所指结点为任一给定的结点,编写一个求从根结点到p所指结点之间路径的函数。voidpath(root,p)btree*root,*p;{Btree*stack[m0],*s;inttag[m0],top=0,i,find=0;s=root;do{while(s!=NULL){stack[top]=s;tag[top]=0;((1))}if(top>0){((2))if(tag[top]==1){if((3)){for(i=1;i<=top;i++printf("%d",stack[i]->data);find=1;}elsetop--;}if((4)){p=p->right;((5))}}}while(find||(s!=NULL&&top!=0));}标准答案:(1)s=s->left;(2)s=stack[top];(3)(s==p)(4)(top>0&&!find)(5)tag[top]=1知识点解析:本题采用非递归后序遍历数root,当后序遍历访问到p所指结点时,此时stack中所有的结点均为P所指结点的祖先,由这些祖先便构成了一条从根结点到p所指结点之间的路径。8、阅读以下说明,回答问题,将解答填入对应的解答栏内。[说明]计算下列源代码的McCabe环数,画出控制流程图并用罗马数字标出区域。readx,y,z;type=“scalene”;if(x==yorx==zory==z)type=“isosceles”;if(x==yandx==z)type=“equilateral”;if(x>=y+zOry>=x+20rz>=x+y)type=“notatriangle”;if(x<=0ory<=0orz<=0)type=“badinputs”;printtype;标准答案:知识点解析:McCabe的环数是软件开发中继代码行之后最常使用的度量。它基于图论的环数。McCabe试图度量程序的复杂性。前提是该复杂性与程序的控制流相关。图论使用公式C=e-n+1来计算环数。McCabe稍加修改后的公式为:C=e-n+2p其中:e=边的数目n=结点的数目p=强连通组建的数目(通常为1)控制流程图如下:区域的数目为5,所以环数也为5。也可以用判断来数出环数。离开结点a、c、e、g的路径各有一个判断,因此,共有4个判断。环数为判断数加1,所以环数为5。也可以利用公式e-n+2来计算环数。这里,e=12,n=9,e-n+2=5二、选答题(本题共3题,每题1.0分,共3分。)9、阅读以下说明和c++码,将应填入(n)处的字名写在的对应栏内。[说明]以下函数完成求表达式的值,请填空使之完成此功能。floatsum(floatx){floats=0.0;intsign=1;(1);for(inti=1;(2);i++){t=t*x;s=s+(3);sign=-sign;(4);}标准答案:floatt=1.0;i<=100-sign*i/(t+sign*i)returns知识点解析:暂无解析10、阅读以下说明和Java码,将应填入(n)处的字名写在的对应栏内。[说明]编写一个学生类Student,要求:(1)学生类Student属性有:id:long型,代表学号name:String类对象,代表姓名age:int型,代表年龄sex:boolen型,代表性别(其中:true表示男,false表示女)phone:String类对象,代表联系电话(2)学生类Student的方法有:Student(longi,Stringn,inta,booleans,Stringp):有参构造函数,形参表中的参数分别初始化学号、姓名、年龄、性别和联系电话。intgetAge():获取年龄作为方法的返回值。booleangetSex():获取性别作为方法的返回值。StringgetPhone():获取联系电话作为方法的返回值。publicStringtoString():以姓名:性别:学号:联系电话的形式作为方法的返importjava.applet.Applet;importjava.awt.*;publicclassStudentextendsApplet{longid;Stringname,phone;intage;booleansex;Student(longi,Stringn,inta,booleans,Stringp){id=i;name=n;age=a;sex=s;phone=p;{publicvoidpaint(Graphicsg){Studentx=newStudent(5000,"xiaoliu",89,true,"8989898");(1);(2)g.drawstring(x.getPhone(),140,140);}intgetAge(){returnage;}booleangetsex(){returnsex;}StringgetPhone(){returnphone;}StringToString(){(3)}}标准答案:g.drawString(x.ToString(),20,100)g.drawString(x,getAge(),80,120);retum(“姓名”+name+“学号:”+id+“联系电话:”"+phone);知识点解析:暂无解析11、阅读以下说明和VisualBasic码,将应填入(n)处的字名写在的对应栏内[说明]在窗体上画一个列表框、一个命令按钮和一个标签,其名称分别为List1、Command1和Label1,通过属性窗口把列表框中的项目设置为:“第一个项目”、“第二个项目”、“第三个项目”、“第四个项目”。程序运行后,在列表框中选择一个项目,然后单击命令按钮,即可将所选择的项目删除,并在标签中显示列表框当前的项目数,运行情况如图所示(选择“第三个项目”的情况)。下面是实现上述功能的程序,请填空。1.PrivateSubCommand1_Click()IfList1.ListIndex>=(1)ThenList1.RemoveItem(2)Label1.Caption=(3)ElseMsgBox“请选择要删除的项目”EndIfEndSub标准答案:0List1.ListIndexList1.ListCount知识点解析:暂无解析软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷第4套一、必答题(本题共15题,每题1.0分,共15分。)阅读以下关于住宅安全系统的技术说明,根据要求回答问题1~问题4。[说明]基于某嵌入式系统的住宅安全系统可使用传感器(如红外探头、摄像头等)来检测各种意外情况,如非法进入、火警和水灾等。房主可以在安装该系统时配置安全监控设备(如传感器、显示器、报警器等),也可以在系统运行时修改配置,通过录像机和电视机监控与系统连接的所有传感器,并通过控制面板上的键盘与系统进行信息交互。在安装过程中,系统给每个传感器赋予一个ID编号和类型,并设置房主密码以启动和关闭系统,设置传感器事件发生时应自动拨出的电话号码。当系统检测到一个传感器事件时,就激活警报,拨出预置的电话号码,并报告关于位置和检测到的事件的性质等信息。住宅安全系统的顶层数据流图如图6-13所示,图6-14是住宅安全系统的第0层数据流图,图6-15是对住宅安全系统的第0层数据流图中加工4的细化图。1、需求分析是一个包括创建和维持系统需求文档所必需的一切活动的过程。一个通用的需求分析过程模型如图6-16所示,请从以下供选择的答案中选择合适的内容填写到图6-16中相应的位置中。[供选择的答案]A.用户需求和功能需求B.需求描述C.需求导出和分析D.需求有效性验证标准答案:这是一道要求读者掌握需求分析过程模型的理解识记题。本题所涉及的知识点如下。需求分析是一个包括创建和维持系统需求文档所必需的一切活动的过程。它通常包括5个通用的活动:系统可行性研究、需求导出和分析、需求描述和文档编写、需求有效性验证及需求管理。每个通用的活动的相关说明见表6-15。本试题完整的需求分析过程模型如图6-24所示,图中说明了这些活动之间的关系,也说明了在需求分析过程的每个阶段将产生哪些文档。知识点解析:暂无解析2、请将住宅安全系统的顶层数据流图(见图6-13)中(A)~(D)空缺处,以及第0层数据流图(见图6-14)中(E)空缺处的内容填写完整。标准答案:这是一道要求读者掌握分层数据流图中数据流的平衡原则的综合分析题。本题的解答思路如下。①为了表达复杂问题的处理过程,用一个数据流图往往不够。一般是按问题的层次结构进行逐步分解,并以分层的数据流图来反映这种结构关系。通常根据层次关系,将数据流图分为顶层数据流图、中间层数据流图和底层数据流图。把整个软件系统看成是一个大的加工,然后根据系统从哪些外部实体接收数据流,以及系统发送数据流到哪些外部实体,就可以画出系统的输入偷出图,即顶层数据流图。中间层数据流图是将父层数据流图中的某个加工进行细化,而它的某些加工还可以进一步细化,这样就形成了一层层的子加工。除顶层图外,其余分层数据流图从0开始编号,例如,0层图的加工号可以是“1,2,3,…”,其子图号可能是“1.1,1.2,1.3,…”,再下一层的子图可能是“1.1.1,1.1.2,,1.1.3,…”,依次类推。本题的图6-13并不是完整的顶层数据流图,解答时需通过题干的说明信息及第0层数据流图来分析顶层图并解答问题。②题干中提及的关键信息“房主可以在安装该系统时配置安全监控设备(如传感器、显示器、报警器等)”,在顶层数据流图(图6-13)中这3个名词并没有完整地出现,仅出现了“报警器”一词。在图6-13中“电视机”实际上起题干中关键信息“显示器”的作用。结合图6-13中“传感器状态”这一输出数据流信息可判断出,(D)空缺处应填入“传感器”这一外部实体。③由于子层数据流图是其父数据流图中某一部分内部的细节图(或加工图),因此子层数据流图的输入/输出数据流应该保持一致,即在上一级数据流图中有几条数据流,其子图也一定有同样的数据流,而且它们的输送方向是一致的。④在住宅安全系统第0层数据流图(见图6-14)中,加工5(信息及状态显示)的输出数据流为“TV信号”,其中“TV”是日常生活中电视机的英文缩写。在图6-13顶层数据流图中有一外部实体——“录像机、电视机”,因此可推理出图6-13中(B)空缺处的数据流就是“TV信号”。⑤根据数据流的方向可知,在图6-13顶层数据流图中(C)空缺处的数据流属于输出数据流。在第0层数据流图(见图6-14)中,共有“TV信号”、“电话拨号”、“告警类型”和“显示信息”4个输出数据流。在图6-13顶层数据流图中现已存在“TV信号”、“电话拨号”和“显示信息”3个输出数据流,因此可推理出图6-13中流向“报警器”外部实体的数据流是“告警类型”,即(C)空缺处填写的数据流应是“告警类型”。⑥根据数据流的方向可知,在图6-14所示的第0层数据流图中(E)空缺处的数据流属于输入数据流,且与“传感器监控”这一加工处理相关。在图6-13顶层数据流图中,外部实体“传感器”流入“住宅安全系统”的输入数据流是“传感器状态”,由此可推理出图6-13中(E)空缺处的数据流就是“传感器状态”。⑦同理,根据数据流的方向可知,在图6-13所示的顶层数据流图中(A)空缺处的数据流属于输入数据流。在第0层数据流图(见图6-14)中流入“住宅安全系统”加工的输入数据流共有4个,分别是“用户配置请求”、“开始/停止”、“用户密码”和“传感器状态”。在图6-13所示的顶层数据流图中现已存在“开始/停止”、“用户密码”和“传感器状态”3个输出数据流,因此可推理出图6-13中由“控制面板”外部实体流出的数据流是“用户配置请求”,即(A)空缺处填写的数据流应是“用户配置请求”。⑧将以上分析结果归纳整理,完整的住宅安全系统顶层数据流图如图6-25所示。知识点解析:暂无解析3、将图6-15所示的加工4的细化数据流图中的数据流补充完整,请按以下答题格式示例的要求回答问题。[答题格式示例][数据流的起点]→(数据流名称)→[数据流名称终点]或[数据流的起点]→(数据流名称)标准答案:本试题的解答思路也是根据数据流图的数据流平衡原则进行分析的,详细的解答步骤如下。①由于子图是其父图中某一部分内部的细节图(加工图),所以子图的输入/输出数据流应该保持一致。其含义是:在上一级中有几条数据流,其子图也一定有同样的数据流,而且它们的输送方向是一致的。②在第0层数据流图(见图6-14)中,“4传感器监控”加工模块有1条输入数据流——“传感器状态”和3条输出数据流——“电话拨号”、“传感器数据”和“告警类型”。③在图6-15所示的加工4的细化数据流图中,只有输出数据流“告警类型”,因此,该加工图缺少了“传感器状态”、“电话拨号”和“传感器数据”这3条数据流。④由于加工4的细化数据流图(见图6-15)的内部结构、数据流向已清晰地给出,因此只需将“传感器状态”、“电话拨号”和“传感器数据”这3条数据流进行对号入座。⑤根据常识可知,“电话拨号”是加工处理“4.5拨号”的输出数据流;“传感器状态”是“4.4读传感器”处理的输入数据流。⑥“传感器数据”应该是经“4.1格式显示”处理过的数据流,所以作为“4.1格式显示”的输出数据流。其中,“格式显示”处理是指将准备输出显示的传感器数据处理成第0层数据流图(见图6-14)中“5信息与状态显示”能够接受的传感器数据格式。⑦按照试题中答题格式示例的要求,将以上分析结果整理如下:[4.5拨号]→(电话拨号)(传感器状态)→[4.4读传感器][4.1格式显示]→(传感器数据)⑧另外,将以上分析结果归纳整理,完整的加工4的细化数据流图如图6-26所示。知识点解析:暂无解析4、修改在住宅安全系统第0层数据流图(见图6-14)中的数据存储“配置信息”,将会影响第0层数据流图中的哪些加工?标准答案:这是一道要求读者掌握数据流图(DFD图)中数据存储作用的综合分析题。本题的解答思

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论