阅读下列说明,回答问题1至问题3,将解答填入答题纸的对应栏内。【说明】某服装销售公司拟开发一套服装采购管理系统,以便对服装采购和库存进行管理。【需求分析】(1)采购系统需要维护服装信息及服装在仓库中的存放情况,服装信息主要包括:服装编码、服装描述、服装类型、销售价格、尺码和面料,其中,服装类型为销售分类,服装按销售分类编码。仓库信息包括:仓库编码、仓库位置、仓库容量和管理员。系统记录库管员的库管员编码、姓名和级别。一个库管员可以管理多个仓库,每个仓库有一名库管员。一个仓库中可以存放多类服装,一类服装可能存放在多个仓库中。(2)当库管员发现一类或者多类服装缺货时,需要生成采购订单。一个采购订单可以包含多类服装。每类服装可由多个不同的供应商供应,但具有相同的服装编码。采购订单主要记录订单编码、订货日期和应到货日期,并详细记录所采购的每类服装的数量、采购价格和对应的多个供应商。(3)系统需记录每类服装的各个供应商信息和供应情况。供应商信息包括:供应商编码、供应商名称、地址、企业法人和联系电话。供应情况记录供应商所供应服装的服装类型和服装质量等级。一个供应商可以供应多类服装,一类服装可由多个供应商供应。库管员根据入库时的服装质量情况,设定或修改每个供应商所供应的每类服装的服装质量等级,作为后续采购服装时,选择供应商的参考标准。【概念模式设计】根据需求阶段收集的信息,设计的实体联系图(不完整)如图14—14所示。【逻辑结构设计】根据概念设计阶段完成的实体联系图,得出如下关系模式(不完整):库管员(库管员编码,姓名,级别)仓库信息((1),仓库位置,仓库容量)服装(服装编码,服装描述,服装类型,尺码,面料,销售价格)供应商(供应商编码,供应商名称,地址,联系电话,企业法人)供应情况((2),服装质量等级)采购订单((3))采购订单明细((4))
阅读下列说明和C代码,回答问题1至问题3,将解答写在答题纸的对应栏内。【说明】对有向图进行拓扑排序的方法是:(1)初始时拓扑序列为空:(2)任意选择一个入度为0的顶点,将其放入拓扑序列中,同时从图中删除该顶点以及从该顶点出发的弧;(3)重复(2),直到不存在入度为0的顶点为止(若所有顶点都进入拓扑序列则完成拓扑排序,否则由于有向图中存在回路无法完成拓扑排序)。函数int*TopSoa(LinkedDigraphG)的功能是对有向图G中的顶点进行拓扑排序,返回拓扑序列中的顶点编号序列,若不能完成拓扑排序,则返回空指针。其中,图G中的顶点从1开始依次编号,顶点序列为v1,v2,…,vn,图G采用邻接表示,其数据类型定义如下:#defineNAXVNUM50/*最大顶点数*/typedefstructArcNode(/*表节点类型*/intadjvex;/*邻接顶点编号*/structArcNode*nextarc;/*指示下一个邻接顶点*/}ArcNode:typedefstructAdjList(/*头节点类型*/charvdata;/*顶点的数据信息*/ArcNode*firstarc;/*指向邻接表的第一个表节点*/}AdjList;typedefstructLinkedDigraph(/*图的类型*/intn;/*图中顶点个数*/AdjLiStVhead[MAXVNUM];/*所有顶点的头节点数组*/}LinkedDigraph;例如,某有向图G如图15.3所示,其邻接表如图15-4所示。函数T0pSon中用到了队列结构(Queue的定义省略),实现队列基本操作的函数原型如表15—2所示:【C代码】int*TopSort(LinkedDigraphG){ArcNode*P;/*临时指针,指示表节点*/QueueQ;/*临时队列,保存入度为0的顶点编号*/intk=0;/*临时变量,用作数组元素的下标*/intj=0,W=0;/*临时变量,用作顶点编号*/int*toporder,*inDegree;toporder=(int*)malloc((G.n+1)*Sizeof(int));/*存储拓扑序列中的顶点编号*/inDegree=(int*)malloc((G.n+1)*sizeof(int));/*存储图G中各顶点的入度*/if(!inDegreeII!toporder)returnNULL;(1);/*构造一个空队列*/for(j=1;J<=G.n;J++)(/*初始化*/toporder[J]=0;inDegree[j]=0;}for(J=1;J<=G.n;J++)/*求图G中各项点的入度*/for(P=G.Vhead[j].firstarc;P;P=p一>nextarc)inDegree[p一>adjvex]+=1;for(j=1;J<=G.n;j++)/*将图G中入度为0的顶点保存在队列中*/if(0==inDegree[j])EnQueue(&Q,j);while(!IsEmpty(Q))((2);/*队头顶点出队列并用W保存该顶点的编号*/toporder[k++]=W;/*将顶点W的所有邻接顶点的入度减1(模拟删除顶点w及从该项点出发的弧的操作)*/for(p=G.Vhead[w].firstarc;P;P=P一>nextarc)((3)一=1;if(0==(4))EnQueue(&Q,P一>adjvex);}/*for*/}/*while*/free(inDegree);if((5))returnNULL;returntopOrder;}/*TopSort*/
现欲开发一个软件系统,要求能够同时支持多种不同的数据库,为此采用抽象工厂模式设计该系统。以SQLSerVer和Access两种数据库以及系统中的数据库表Depanment为例,其类图如图17—3所示。[Java代码]importjava.util*;clasSDepartment(/*代码省略*/)interfaceIDepartment((1);(2);}classSqlserVerDepar七men七:(3){public:voidInsert(Departmentdepartment){System.out.printin(”InsertarecordintoDepartmentinSQLServer\n”);//其余代码省略}publicDepartmentGetDepar七men七(intid)</*代码省略*/}}ClassAccessDepartment:(4){publicvoidInsert(Departmentdepartment){system.out.printin(”InsertarecordintoDepartmentinACCESSI\n”};//其余代码省略}publicDepartmentGetDepar七ment(intid)(/*代码省略*/}};(5){(6);}classSqlSerVerFac七oryimplementSIFactory(public工DepartmentCreateDepartment()(returnnewSqlserverDepartment();}//其余代码省略};ClassAccessFactoryimplementsIFactory(publicIDepartmentCreateDepartment()(returnnewAcceSsDepartment();}//其余代码省略};
阅读以下说明和Java代码,将应填入(n)处的字句写在对应栏内。【说明】欲开发一个绘图软件,要求使用不同的绘图程序绘制不同的图形。以绘制直线和圆形为例,对应的绘图程序如表17—1所示。该绘图软件的扩展性要求,将不断扩充新的图形和新的绘图程序。为了避免出现类爆炸的情况,现采用桥接(Bridge)模式来实现上述要求,得到如图17—2所示的类图。[Java代码](1)Drawing((2);(3);}ciassDPI(staticpublicvoiddrawaline(doublexl,doubley1,doublex2,doubley2)(/*代码省略*/)staticpublicvoiddraw—a—circle(doublex,doubley,doubler)(/*代码省略*/)};ClassDP2{staticpubiicvoiddrawline(doublex1,doublex2,doubley1,doubley2)(/*代码省略*/)staticpublicvoiddrawcircle(doublex,doubleY,doubler)(/*代码省略*/)};classVlDrawingimplementsDrawing(publicvoiddrawLine(doublexl,doubleyl,doublex2,doubIey2)(/*代码省略*/)publicvoiddrawCircle(doubleX,doubleY,doubler)((4);)};classV2DrawingimplementSDrawing(publicvoiddrawLine(doublexl,doubleyl,doublex2,doubley2){/*代码省略*/)publicvoiddrawCircie(doubieX,doubley,doubler)((5);)};abstractclassShape(privateDrawing—dp;(6);Shape(Drawingdp){_dp=dp;)publicvoiddrawLine(doublexl,doubleyl,doublex2,doubley2)(_dp.drawLine(x1,y1,x2,y2);)publicvoiddrawCircle(doubleX,doubleY,doubler)(一dp.drawCircle(x,y,r);)};ClassRectangleextendsShape(privatedouble_x1,_x2,_y1,_y2;publicRectangle(Drawingdp,doublexl,doubleyl,doublex2,doubley2){/*代码省略*/}publicvoiddraw()(/‘代码省略。/)};ClasSCircleextendsShape{privatedoublex,_y,_r;publicCircle(Drawingdp,doublex,doubleY,doubler)(/*代码省略*/}publicvoiddraw()(drawCircle(_x,_y,_r);}};
阅读下列说明和C++代码,将应填入___________(n)处的字句写在答题纸的对应栏内。【说明】某大型购物中心欲开发一套收银软件,要求其能够支持购物中心在不同时期推出的各种促销活动,如打折、返利(例如,满300返100)等。现采用策略(Strategy)模式实现该要求,得到如图5-1所示的类图。【C++代码】#includeusingnamespacestd;enumTYPE{NORMAL,CASHDISCOUNT,CASHRETURN};classCashSuper{public:__________(1);};classCashNormal:publicCashSuper{//正常收费子类public:doubleacceptCash(doublemoney){returnmoney;}};classCashDiscount:publicCashSuper{private:doublemoneyDiscount;//折扣率public:CashDiscount(doublediscount){moneyDiscount=discount;)doubleacceptCash(doublemoney){returnmoney*moneyDiscount;)};classCashReturn:publicCashSuper{//满额返利private:doublemoneycondition;//满额数额doublemoneyReturn;//返利数额public:CashReturn(doublemoneyCondition,doublemoneyReturn){this->moneyCondition=moneyCondition;this->moneyReturn=moneyReturn;}doubleacceptCash(doublemoney){doubleresult=money;if(money>=moneyCondition)result=money-(int)(money/moneyCondition)*moneyReturn;returnresult;}};ClassCashContext{private:CashSuper*cs;public:CashContext(inttype){switch(type){caseNORMAL://正常收费____________(2);break;caseCASH_RETURN://满300返100____________(3);break;caseCASH_DISCOUNT://打8折___________(4);break;}}doubleGetResult(doublemoney){___________(5);}};//此处略去main()函数
某营销企业拟开发一个销售管理系统,其主要动能描述如下。(1)接受客户订单,检查库存货物是否满足订单要求。如果满足,进行供货处理,即修改库存记录文件,给库房开具备货单并且保留客户订单至订单记录文件;否则进行缺货处理,即将缺货记录单存入缺货记录文件。(2)根据缺货记录文件进行缺货统计,将缺货通知单发给采购部门。(3)根据采购部门提供的进货通知单进行进货处理,即修改库存记录文件,并从缺货记录文件中取出缺货订单进行供货处理。(4)根据保留的客户订单进行销售统计,打印统计报表给经理。现采用结构化方法对销售管理系统进行分析与设计,获得如图12-6所示的顶层数据流图和如图12-7所示的0层数据流图。
阅读下列说明,回答问题1至问题3,将解答填入答题纸的对应栏内。【说明】某医院拟开发一套住院病人信息管理系统,以方便对住院病人、医生、护士和手术等信息进行管理。【需求分析】(1)系统登记每个病人的住院信息,包括:病案号、病人的姓名、性别、地址、身份证号、电话号码、入院时间及病床号信息,每个病床有唯一所属的病区及病房,如表14一1所示。其中病案号唯一标识病人本次住院的信息。(2)在一个病人的一次住院期间,由一名医生对该病人的病情进行诊断,并填写一份诊断书,如表14—2所示。对于需要进行一次或多次手术的病人,系统记录手术名称、手术室、手术日期、手术时间、主刀医生及多名协助医生,每名医生在手术中的责任不同,如表14—3所示,其中手术室包含手术室号、楼层、地点和类型等信息。(3)护士分为两类:病床护士和手术室护士。每个病床护士负责护理一个病区内的所有病人,每个病区由多名护士负责护理。手术室护士负责手术室的护理工作。每个手术室护士负责多个手术室,每个手术室由多名护士负责,每个护士在手术室中有不同的责任,并由系统记录其责任。【概念模型设计】根据需求阶段收集的信息,设计的实体联系图(不完整)如图14—8所示。【逻辑结构设计】根据概念模型设计阶段完成的实体联系图,得出如下关系模式(不完整):病床(病床号,病房,病房类型,所属病区)护士(护士编号,姓名,类型,性别,级别)病床护士(1)手术室(手术室号,楼层,地点,类型)手术室护士(2)病人(3),姓名,性别,地址,身份证号,电话号码,入院时间)医生(医生编号,姓名,性别,职称,所属科室)诊断书(4),诊断,诊断时间)手术安排(病案号,手术室号,手术时间,手术名称)手术医生安排(5),医生责任)
阅读下列说明和C++代码,将应填入(n)处的字句写在答题纸的对应栏内。【说明】某公司的组织结构图如图16.10所示,现采用组合(Composition)设计模式来构造该公司的组织结构,得到如图16一11所示的类图。其eOCompany为抽象类,定义了在组织结构图上添加(Add)和删除(Delete)分公司/办事处或者部门的方法接口。类ConcreteCompany表示具体的分公司或者办事处,分公司或办事处下可以设置不同的部门。类HRDepartment和FinanceDepartment分别表示人力资源部和财务部。【C++代码】#include#include#includeUSingnamespacestd;classCompany(//抽象类protected:Stringname;public:Company(stringname)((1)=name;)(2);//增加子公司、办事处或部门(3);//删除子公司、办事处或部门};clasSConcreteCompany:publicCompany(private:listchildren;//存储子公司、办事处或部门public:ConcreteCompany(stringname):Company(name)()voidAdd(Company*C)(5).pushback(c);)voidDelete(Company*C){6).remove(C);)};ClassHRDepartment:publicCompany(public:HRDepartment(stringname):Company(name){}//其他代码省略};classFinanceDepartment:publicCompany{public:FinanceDepartment(stringname):Company(name)()//其他代码省略};VOidmain(){ConcreteCompany*root=newComcreteCompany(“北京总公司”);root一>Add(newHRDepartment(“总公司人力资源部”));root一>Add(newFinanceDepartment(“总公司财务部”));ConcreteCompany*comp=newConcreteCompany(“上海分公司”);comp一>Add(newHRDepartment(“上海分公司人力资源部”));comp一>Add(newFinanceDepartment(“上海分公司财务部”));(7);ConcreteCompany*compl:newConcreteCompany(“南京办事处”);comp1一>Add(newHRDepartment(“南京办事处人力资源部”));comp1一>Add(newFinanceDepartment(“南京办事处财务部”));(8);//其他代码省略
阅读下列说明和c++代码,将应填入(n)处的字句写在答题纸的对应栏内。【说明】现要求实现一个能够自动生成求职简历的程序,简历的基本内容包括求职者的姓名、性别、年龄及工作经历。希望每份简历中的工作经历有所不同,并尽量减少程序中的重复代码。现采用原型模式(Prototype)来实现上述要求,得到如图16.1所示的类图。【C++代码】#includeUsingnamespacestd;ClasSCloneable{public:(1);};ClassworkExperience:publicCloneable{//工作经历Private:StringworkDate;Stringcompany;PubliC:Cloneable’Clone(){(2);Obj一>workDate=this一>workDate;Obj一>company=this一>company;Returnobj;}//其余代码省略};ClassResume:publicCloneable{//简历Private:Stringname;stringsex;stringage;WorkExperience。work;Resume(WorkExperience*work)(This->work:(3);}PubliC:Resume(stringname)(/*实现省略*/)VoidSetPersonalInfo(stringsex,stringage)(/*实现省略*/)VoidsetworkExperience(stringworkDate,stringcompany)(/*实现省略*/)Cloneable*Clone(){(4);Obj一>name:this一>name;Obj一>sex=this一>sex;Obj一>age=this一>age;Returnobj;}};Intmain(){Resume*a=newResume(”张三”);A一>SetPersonalInfo(”男”,”29”);A一>setworkExperience(”1998~2000”,“XXX公司”);Resume*b=(5);B一>SetWorkExperience(“2001~2006”,“YYY公司”);Return0;}
阅读以下说明和C代码,根据要求回答问题1~问题3。【说明】某工程计算中要完成多个矩阵相乘(链乘)的计算任务。两个矩阵相乘要求第一个矩阵的列数等于第二个矩阵的行数,计算量主要由进行乘法运算的次数决定。采用标准的矩阵相乘算法,计算Am×n*Bn×p,需要m*n*p次乘法运算。矩阵相乘满足结合律,多个矩阵相乘,不同的计算顺序会产生不同的计算量。以矩阵A110×100,A2100×5,A35×50三个矩阵相乘为例,若按(A1*A2)*A3计算,则需要进行10*100*5+10*5*50=7500次乘法运算;若按A1*(A2*A3)计算,则需要进行100*5*50+10*100*50=75000次乘法运算。可见不同的计算顺序对计算量有很大的影响。矩阵链乘问题可描述为:给定n个矩阵n>,矩阵Ai的维数为Pi-1×Pi,其中i=1,2,…,n。确定一种乘法顺序,使得这n个矩阵相乘时进行乘法的运算次数最少。由于可能的计算顺序数量非常庞大,对较大的n,用蛮力法确定计算顺序是不实际的。经过对问题进行分析,发现矩阵链乘问题具有最优子结构,即若AI*A2*…*An的一个最优计算顺序从第k个矩阵处断开,即分为A1*A2*…*Ak和Ak+1*Ak+2*…*An两个子问题,则该最优解应该包含A1*A2*…*Ak的一个最优计算顺序和Ak+1*Ak+2*…*An的一个最优计算顺序。据此构造递归式,其中,cost[i][j]表示Ai+1*Ai+2*…*Aj+1的最优计算的计算代价。最终需要求解cost[0][n—1]。【C代码】算法实现采用自底向上的计算过程。首先计算两个矩阵相乘的计算量,然后依次计算3个矩阵、4个矩阵……n个矩阵相乘的最小计算量及最优计算顺序。下面是该算法的C语言实现。(1)主要变量说明n:矩阵数seq[]:矩阵维数序列cost[][]:二维数组,长度为n*n,其中元素cost[i][j]表示Ai+1*Ai+2*……*Aj+l的最优计算的计算代价trace[][]:二维数组,长度为n*n,其中元素trace[i][j]表示Ai+1*Ai+2:i:…*Aj+1的最优计算对应的划分位置,即k(2)函数cmm#defineN100intcost[N]IN];inttrace[N][N];intcmm(intn,intseq[]){inttempCost;inttempTrace;inti,j,k,P;inttemp;for(i=0;itemp){tempCost=temp;(4)}}cost[i][j]=tempCost;trace[i][j]=tempTrace:}}returncost[0][n—1];}
阅读下列说明和图,回答问题1~问题4,将解答填入答题纸的对应栏内。【说明】某学校开发图书管理系统,以记录图书馆藏图书及其借出和归还情况,提供给借阅者借阅图书功能,提供给图书馆管理员管理和定期更新图书表功能。主要功能的具体描述如下:(1)处理借阅。借阅者要借阅图书时,系统必须对其身份(借阅者ID)进行检查。通过与教务处维护的学生数据库、人事处维护的职工数据库中的数据进行比对,以验证借阅者ID是否合法,若合法,则检查借阅者在逾期未还图书表中是否有逾期未还图书,以及罚金表中的罚金是否超过限额。如果没有逾期未还图书并且罚金未超过限额,则允许借阅图书,更新图书表,并将借阅的图书存入借出图书表,借阅者归还所借图书时,先由图书馆管理员检查图书是否缺失或损坏,若是,则对借阅者处以相应罚金并存入罚金表;然后,检查所还图书是否逾期,若是,执行“处理逾期”操作;最后,更新图书表,删除借出图书表中的相应记录。(2)维护图书。图书馆管理员查询图书信息;在新进图书时录入图书信息,存入图书表;在图书丢失或损坏严重时,从图书表中删除该图书记录。(3)处理逾期。系统在每周一统计逾期未还图书,逾期未还的图书按规则计算罚金,并记入罚金表,并给有逾期未还图书的借阅者发送提醒消息。借阅者在借阅和归还图书时,若罚金超过限额,管理员收取罚金,并更新罚金表中的罚金额度。现采用结构化方法对该图书管理系统进行分析与设计,获得如图12-8所示的项层数据流图和图12-9所示的0层数据流图。
阅读下列说明和图,回答问题l至问题3,将解答填入答题纸的对应栏内。【说明】一个简单的图形编辑器提供给用户的基本操作包括:创建图形、创建元素、选择元素以及删除图形。图形编辑器的组成及其基本功能描述如下:(1)图形由文本元素和图元元素构成,图元元素包括线条、矩形和椭圆。(2)图形显示在工作空间中,一次只能显示一张图形(即当前图形,current)。(3)编辑器提供了两种操作图形的工具:选择工具和创建工具。对图形进行操作时,一次只能使用一种工具(即当前活动工具,active)。①创建工具用于创建文本元素和图形元素。②对于显示在工作空间中的图形,使用选择工具能够选定其中所包含的元素,可以选择一个元素,也可以同时选择多个元素。被选择的元素成为当前选中元素(selected)。③每种元素都具有相应的控制点。拖拽选定元素的控制点,可以移动元素或者调整元素的大小。现采用面向对象方法开发该图形编辑器,使用UML进行建模。构建出的用例图和类图分别如图13一11和13一12所示。
阅读下列算法说明和算法,将应填入(n)的字句写在对应的栏内。[说明]下列最短路径算法的具体流程如下:首先构造一个只含n个顶点的森林,然后依权值从小到大从连通网中选择不使森林中产生回路的边加入到森林中去,直至该森林变成一棵树为止,这棵树便是连通网的最小生成树。该算法的基本思想是:为使生成树上总的权值之和达到最小,则应使每一条边上的权值尽可能地小,自然应从权值最小的边选起,直至选出n-1条互不构成回路的权值最小边为止。[算法]/*对图定义一种新的表示方法,以一维数组存放图中所有边,并在构建图的存储结构时将它构造为一个“有序表”。以顺序表MSTree返回生成树上各条边。*/typedefstruct{VertexTypevex1;VertexTypevex2;VRTypeweight;}EdgeType;typedefElemTypeEdgeType;typedefstruct{//有向网的定义VertexTypevexs[MAX_VERTEX_NUM];//顶点信息EdgeTypeedge[MAX_EDGE_NUM];//边的信息intvexnum,arcnum;//图中顶点的数目和边的数目IELGraph;voidMiniSpanTree_Kruskal(ELGraphG,SqListInitSet(F,G.vexnum);//将森林F初始化为N棵树的集合InitList(MSTree,G.vexnum);//初始化生成树为空树i=0;k=1;while(k<(1)){e=G.edge[i];//取第i条权值最小的边/*函数fix_mfset返回边的顶点所在树的树的根代号,如果边的两个顶点所在树的树根相同,则说明它们已落在同一棵树上。*/ri=fix_mfset(F,LocateVex(e.vex1));r2=(2);//返回两个顶点所在树的树根if(r1(3)r2){//选定生成树上第k条边if(Listlnsert(MSTree,k,e){(4);//插入生成树mix_mfset(E,r1,r2);//将两棵树归并为一棵树}(5);//继续考察下一条权值最小边}DestroySet(F);}}
阅读下列说明和图,回答问题1至问题3,将解答填入答题纸的对应栏内。【说明】某会议策划公司为了方便客户,便于开展和管理各项业务活动,需要构建一个基于网络的会议预定系统。【需求分析】(1)会议策划公司设有受理部、策划部和其他部门,部门信息包括部门号、部门名称、部门主管、电话和邮箱号,每个部门有多名员工处理部门的日常事务,每名员工只能在一个部门工作,每个部门有一名主管负责管理本部门的事务和人员。(2)员工信息包括员工号、姓名、部门号、职位、联系方式和工资;其中,职位包括主管、业务员、策划员等。业务员负责受理会议申请,若申请符合公司规定,则置受理标志并填写业务员的员工号,策划部主管为已受理的会议申请制定策划任务,包括策划内容、参与人数、要求完成时间等。一个已受理的会议申请对应一个策划任务,一个策划任务只对应一个已受理的会议申请,但一个策划任务可由多名策划员参与执行,且一名策划员可以参与多项策划任务。(3)客户信息包括客户号、单位名称、通信地址、所属省份、联系人、联系电话、银行账号。其中,一个客户号唯一标识一个客户。一个客户可以提交多个会议申请,但一个会议申请对应唯一的一个客户号。(4)会议申请信息包括申请号、开会日期、会议地点、持续天数、会议人数、预算费用、会议类型、酒店要求、会议室要求、客房类型、客房数、联系人、联系方式、受理标志和业务员的员工号等。客房类型有豪华套房、普通套房、标准间、三人间等,且申请号和客房类型决定客房数.【概念模型设计】根据需求阶段收集的信息,设计的实体联系图和关系模式(不完整)如图14-6所示。【关系模式设计】部门(部门号,部门名称,主管,电话,邮箱号)员工(员工号,姓名,(a),联系方式,工资)客户(客户号,单位名称,通信地址,所属省份,联系人,联系电话,银行账号)会议申请((b),开会日期,会议地点,持续天数,会议人数,预算费用,会议类型,酒店要求,会议室要求,客房数,联系人,联系方式,受理标志,员工号)策划任务((c),策划内容,参与人数,要求完成时间)执行策划((d),实际完成时间)
阅读下列说明,回答问题1至问题3,将解答填入答题纸的对应栏内。【说明】某企业拟构建一个高效、低成本、符合企业实际发展需要的办公自动化系统。工程师小李主要承担该系统的公告管理和消息管理模块的研发工作。公告管理模块的主要功能包括添加、修改、删除和查看公告。消息管理模块的主要功能是消息群发。小李根据前期调研和需求分析进行了概念模型设计,具体情况分述如下。【需求分析结果】(1)该企业设有研发部、财务部、销售部等多个部门,每个部门只有一名部门经理,有多名员工,每名员工只属于一个部门。部门信息包括:部门号、名称、部门经理和电话,其中部门号唯一确定部门关系的每一个元组。(2)员工信息包括:员工号、姓名、岗位、电话和密码。员工号唯一确定员工关系的每一个元组;岗位主要有经理、部门经理、管理员等,不同岗位具有不同的权限。一名员工只对应一个岗位,但一个岗位可对应多名员工。(3)消息信息包括:编号、内容、消息类型、接收人、接收时间、发送时间和发送人。其中(编号,接收人)唯一标识消息关系中的每一个元组。一条消息可以发送给多个接收人,一个接收人可以接收多条消息。(4)公告信息包括:编号、标题、名称、内容、发布部门、发布时间。其中编号唯一确定公告关系的每一个元组。一份公告对应一个发布部门,但一个部门可以发布多份公告;一份公告可以被多名员工阅读,一名员工可以阅读多份公告。【概念模型设计】根据需求分析阶段收集的信息,设计的实体联系图(不完整)如图2-1所示。【逻辑结构设计】根据概念模型设计阶段完成的实体联系图,得出如下关系模式(不完整):部门(____________(a),部门经理,电话)员工(员工号,姓名,岗位号,部门号,电话,密码)岗位(岗位号,名称,权限)消息(__________(b),消息类型,接收时间,发送时间,发送人)公告(__________(c),名称,内容,发布部门,发布时间)阅读公告(__________(d),阅读时间)
阅读下列说明和C代码,回答问题1至问题3,将解答写在答题纸的对应栏内。【说明】计算两个字符串x和y的最长公共子串(LongestCommonSubstring)。假设字符串x和字符串y的长度分别为m和n,用数组c的元素c[i][j]记录x中前i个字符和y中前j个字符的最长公共子串的长度。c[i][j]满足最优子结构,其递归定义为:计算所有c[i][j](O≤i≤m,0≤j≤n)的值,值最大的c[i][j]即为字符串x和y的最长公共子串的长度。根据该长度即i和j,确定一个最长公共子串。【C代码】(1)常量和变量说明x.y:长度分别为m和n的字符串。c[i][j]:记录x中前i个字符和y中前j个字符的最长公共子串的长度。max:x和y的最长公共子串的长度。maxi,maxj:分别表示x和y的某个最长公共子串的最后一个字符在x和y中的位置(序号)。(2)C程序#include#includeintc[50][50];intmaxi;intmaxj;int1cs(char*x,intm,char*y,intn){inti,j;intmax=0;maxi=0;maxj=0;for(i=0;i<=m;i++)c[i][0]=0;for(i=1;i<=n;i++)C[0][i]=0;for(i=1;i<=m;i++){for(j=1;j<=n;j++){if(___________(1)){c[i][j]=C[i—1][j一1]+1;if(max<c[i][j]){___________(2);maxi=i;maxj=j;}}else___________(3);}}returnmax;}voidprintLCS(intmax,char*x){inti=0;if(max==0)return;for(___________(4);i<maxi;i++)printf("%c",x[i]);}voidmain(){char*x="ABCADAB";cnar*y="BDCABA";intmax=0;intm=strlen(x);intn=strlen(y);max=lcs(x,m,y,n);printLCS(max,x);}
阅读下列说明和图,回答问题1至问题3,将解答填入答题纸的对应栏内。【说明】某学校拟开发一套实验管理系统,对各课程的实验安排情况进行管理。【需求分析】一个实验室可进行多种类型不同的实验。由于实验室和实验员资源有限,需根据学生人数分批次安排实验室和实验员。一门课程可以为多个班级开设,每个班级每学期可以开设多门课程。一门课程的一种实验可以根据人数、实验室的可容纳人数和实验类型,分批次开设在多个实验室的不同时间段。一个实验室的一次实验可以分配多个实验员负责辅导实验,实验员给出学生的每次实验成绩。(1)课程信息包括:课程编号、课程名称、实验学时、授课学期和开课的班级等信息;实验信息记录该课程的实验进度信息,包括:实验名、实验类型、学时、安排周次等信息,如表14—6所示。(2)以课程为单位制定实验安排计划信息,包括:实验地点,实验时间、实验员等信息,实验计划如表14.7所示。(3)由实验员给出每个学生每次实验的成绩,包括:实验名、学号、姓名、班级、实验成绩等信息,实验成绩如表14—8所示。(4)学生的实验课程总成绩根据每次实验的成绩以及每次实验的难度来计算。【概念模型设计】根据需求阶段收集的信息,设计的实体联系图(不完整)如图14一19所示。【逻辑结构设计】根据概念模型设计阶段完成的实体联系图,得出如下关系模式(不完整):课程(课程编号,课程名称,授课院系,实验学时)班级(班级号,专业,所属系)开课情况((1),授课学期)实验((2),实验类型,难度,学时,安排周次)实验计划((3),实验时间,人数)实验员((4),级别)实验室(实验室编号,地点,开放时间,可容纳人数,实验类型)学生((5),姓名,年龄,性别)实验成绩((6),实验成绩,评分实验员)
阅读下列说明和图,回答问题1至问题3,将解答填入答题纸的对应栏内。【说明】某网上购物平台的主要功能如下:(1)创建订单。顾客(Customer)在线创建订单(Order),主要操作是向订单中添加项目、从订单中删除项目。订单中应列出所订购的商品(Product)及其数量(quantities)。(2)提交订单。订单通过网络来提交。在提交订单时,顾客需要提供其姓名(name)、收货地址(address)以及付款方式(formofpayment)(预付卡、信用卡或者现金)。为了制订送货计划以及安排送货车辆,系统必须确定订单量(volume)。除此之外,还必须记录每种商品的名称(name)、造价(costprice)、售价(saleprice)以及单件商品的包装体积(cubicvolume)。(3)处理订单。订单处理人员接收来自系统的订单,根据订单内容,安排配货,制订送货计划。在送货计划中不仅要指明发货日期(deliverydate),还要记录每个订单的限时发送要求(DeliveryTimeWindow)。(4)派单。订单处理人员将已配好货的订单转交给派送人员。(5)送货/收货。派送人员将货物送到顾客指定的收货地址。当顾客收货时,需要在运货单(deliveryslip)上签收。签收后的运货单最终需交还给订单处理人员。(6)收货确认。当订单处理人员收到签收过的运货单后,会和顾客进行一次再确认。现采用面向对象方法开发上述系统,得到如图13—7所示的用例图和图13—8所示的类图。
阅读下列说明,回答问题1至问题4。[说明]甲公司的经营销售业务目前是手工处理的,随着业务量的增长,准备采用关系数据库对销售信息进行管理。经销业务的手工处理主要涉及三种表:订单表、客户表和产品表(见表2,表3和表4)。为了用计算机管理销售信息,甲公司提出应达到以下要求:产品的单价发生变化时,应及时修改产品表中的单价数据。客户购货计价采用订货时的单价?订货后,即使单价发生变化,计算用的单价也不变。在设计数据库时,经销部的王先生建立了如图4所示的数据模型。其中,方框表示实体,单向箭头表示1对多的联系,双向箭头表示多对多的联系。由于上述模型对建立关系数据库是不合适的,因此王先生又修改了数据模型,并设计了如下几个关系(带下划线的数据项是关键项,最后一个关系中没有指出关键项):Customer(CustomerNo,CustomerName,Address,Phone)Product(productNo,ProductName,UnitPdce)Order(Orderno,CustomerNo,Date)OrderDetail(OrderNo,ProductNo,Quantity)
某软件公司现欲开发一款飞机飞行模拟系统,该系统主要模拟不同种类飞机的飞行特征与起飞特征。需要模拟的飞机种类及其特征如表16—4所示。为支持将来模拟更多种类的飞机,采用策略设计模式(Strategy)设计的类图如图16一12所示。图16—12中,AirCraft为抽象类,描述了抽象的飞机,而类Helicopter、AirPlane、Fighter和Harrier分别描述具体的飞机种类,方法ny()和takeOff()分别表示不同飞机都具有飞行特征和起飞特征;类FlyBehavior与TakeOffiehaVior为抽象类,分别用于表示抽象的飞行为与起飞行为;类SubSonicFly与SuperSonicFly分别描述亚音速飞行和超音速飞行的行为;类VerticalTakeOff与LongDistanceTakeOff分别描述垂直起飞与长距离起飞的行为。【C++代码】#includeUSingnamespacestd;ClasSFlyBehaVior{public:virtualvoidfly()=0;};classSubSonicFly:publicFlyBehavior(public:voidfly()(cout
