计算机类
公务员类
工程类
语言类
金融会计类
计算机类
医学类
研究生类
专业技术资格
职业技能资格
学历类
党建思政类
计算机软件水平考试
全国计算机应用水平考试(NIT)
计算机软件水平考试
计算机等级考试(NCRE)
全国高校计算机等级考试CCT
行业认证
信息素养
软件设计师(中级)
信息系统项目管理师(高级)
系统分析师(高级)
系统架构设计师(高级)
网络规划设计师(高级)
系统规划与管理师(高级)
软件评测师(中级)
软件设计师(中级)
网络工程师(中级)
多媒体应用设计师(中级)
嵌入式系统设计师(中级)
电子商务设计师(中级)
系统集成项目管理工程师(中级)
信息系统监理师(中级)
信息安全工程师(中级)
数据库系统工程师(中级)
信息系统管理工程师(中级)
软件过程能力评估师(中级)
计算机辅助设计师(中级)
计算机硬件工程师(中级)
信息技术支持工程师(中级)
程序员(初级)
网络管理员(初级)
信息处理技术员(初级)
电子商务技术员(初级)
信息系统运行管理员(初级)
网页制作员(初级)
多媒体应用制作技术员(初级)
PMP项目管理员资格认证
填空题阅读以下说明和C代码,将应填入 (n) 处的字句写在对应栏内。 [说明] 在一公文处理系统中,开发者定义了一个公文结构OfficeDoc,其中定义了公文应该具有的属性。当公文类的内容或状态发生变化时,与之相关联的DocExplorer结构的值都需要发生改变。一个OfficeDoc结构能够关联一组DocExplorer结构。当OfficeDoc结构的内容或状态发生变化时,所有与之相关联的DocExplorer结构都将被更新,这种应用被称为观察者模式。以下代码采用C语言实现,能够正确编译通过。 [C代码] #include<stdio.h> #define OBS_MAXNUM 20/*一个OfficeDoc变量最多能够关联的DocExplorer变量的个数*/ typedef void( (1) )(struc OfficeDoc *,struct DocExplorer *); Struet DocExplorer func update; /*DocExplorer结构采用的更新函数*/ /*其他的结构字段省略*/ ; struct OffiCeDoc (2) myObs[OBS_MAXNUM]; /*存储所有与OfficeDoc相关联的DocExplorer结构指针*/ int index;/*与OfficeDoc结构变量相关联的DocExplorer结构变量的个数*/ ; void attach(struct OfficeDoc *doc,struct DocExplorer *ob) /*关联Obersver结构ob与OfficeDoc结构doc*/ int loop=0; if(doc->index>=OBS_MAXNUM||ob==NULL)return; for(loop=0;loop<doc->index;loop++) if(doc->myObs[loop]==ob)return; doc->myObs[doc->index]=ob; doc->index++; void detach(Struct OfficeDoc *doc,struct DocExplorer *ob) /*解除doc结构与ob结构间的关系*/ int loop; if(ob==NULL)return; for(loop=0;loop<doc->index;loop++) if(doc->myObs[loop]==ob) if(loop<=doc->index-2) doc->myObs[loop]=doc->myObs[ (3) ]; doc->myObs[doc->index-1]=NULL; doc->index--; breack; void updatel(Struct OfficeDoc *doc,struct DocExplorer *ob) /*更新ob结构的值,更新代码省略*/ void update2(struct OfficeDoc *doc,struct DocExplorer *ob) /*更新ob结构的值,更新代码省略*/ void notifyObs(struct OfficeDoc *doc) /*当doc结构的值发生变化时,通知与之关联的所有DocExplorer结构变量*/ int loop; for(loop=0;loop<doc->index;loop++) (doc->myObs[loop])->update( (4) ); void msin() struct OfficeDoc doc; /*定义一个OfficeDoc变量*/ struct DocExplorer explorer1,explorer2; /*定义两个DocExplorer变量*/ /*初始化与OfficeDoc变量相关的DocExplorer变量个数为0*/ doc.index=0; explorer1.update=update1; /*设置explorer1变量的更新函数*/ explorer2.update=update2; /*设置explorer2变量的更新函数*/ attach(&doc,&explorer1);/*关联explorer1与doc对象*/ attach(&doc,&explorer2);/*关联explorer2与doc对象*/ /*其他代码省略*/ (5) ;/*通知与OfficeDoc相关的所有DocExplorer变量*/ return;
进入题库练习
填空题阅读下列说明和C++代码,将应填入(n)处的字句写在对应栏内。[说明]某软件公司现欲开发一款飞机飞行模拟系统,该系统主要模拟不同种类飞机的飞行特征与起飞特征。需要模拟的飞机种类及其特征如表18-6所示。表18-6飞机种类及其特征飞机种类起飞特征飞行特征直升机(Helicopter)垂直起飞(VerticalTakeOff)亚音速飞行(SubSonicFly)客机(AirPlane)长距离起飞(LongDistanceTakeOff)亚音速飞行(SubSonicFly)歼击机(Fighter)长距离起飞(LongDistanceTakeOff)超音速飞行(SuperSonicFly)鹞式战斗机(Harrier)垂直起飞(VerticalTakeOff)超音速飞行(SuperSonicFly)为支持将来模拟更多种类的飞机,采用策略设计模式(Strategy)设计的类图如图18-21所示。在图18-21中,AirCraft为抽象类,描述了抽象的飞机,而类Helicopter、AirPlane、Fighter和Harrier分别描述具体的飞机种类,方法fly()和takeOff()分别表示不同飞机都具有飞行特征和起飞特征;类FlyBehavior与TakeOffBehavior为抽象类,分别用于表示抽象的飞行行为与起飞行为;类SubSonicFly与SuperSonicFly分别描述亚音速飞行和超音速飞行的行为;类VerticalTakeOff与LongDistanceTakeOff分别描述垂直起飞与长距离起飞的行为。[C++代码]#include<iostream>usingnamespacestd;classFlyBehaviorpublic:virtualvoidfly()=0;;classSubSonicFly:publicFlyBehaviorpublic:voidfly()cout<<"亚音速飞行!"<<end1;;ClassSuperSonicFly:publicFlyBehaviorpublic:voidfly()cout<<"超音速飞行!"<<end1;;classTakeOffBehaviorpublic:virtualvoidtakeOff()=0;;classVerticalTakeoff:publicTakeOffBehaviorpublic:voidtakeOff()cout<<"垂直起飞!"<<end1;;classLongDistanceTakeoff:publicTakeOffBehaviorpublic:voidtakeOff()cout<<"长距离起飞!"<<end1;;classAirCraftprotected:(1);(2);public:voidfly()(3);voidtakeOff()(4);;;classHelicopter:publicAirCraftpublic:Helicopter()flyBehavior=new(5);takeoffBehavior=Flew(6);(7)if(!flyBehavior)deleteflyBehavior;if(!takeOffBehavior)deletetakeOffBehavior;;//其他代码省略
进入题库练习
填空题阅读下列说明和Java代码,将应填入(n)处的字句写在对应栏内。[说明]已知某企业欲开发一个家用电器遥控系统,即用户使用一个遥控器即可控制某些家用电器的开与关。遥控器如图18-13所示。该遥控器共有4个按钮,编号分别是0~3,按钮0和2能够遥控打开电器1和电器2,按钮1和3则能遥控关闭电器1和电器2。由于遥控系统需要支持形式多样的电器,因此,该系统的设计要求具有较高的扩展性。现假设需要控制客厅电视和卧室电灯,对该遥控系统进行设计所得类图如图18-14所示。在图18-14中,类RomoteController的方法onPressButton(intbutton)表示当遥控器按键按下时调用的方法,参数为按键的编号;Command接N中的On()和off()方法分别用于控制电器的开与关;Light中的mrnLight(intdegree)方法用于调整电灯灯光的强弱,参数degree值为0时表示关灯,值为100时表示开灯,并且将灯光亮度调整到最大;TV中的setChannel(intchannel)方法表示设置电视播放的频道,参数channel值为0时表示关闭电视,值为1时表示打开电视并将频道切换为第1频道。[Java代码]classLight//电灯类publicvoidturnLight(intdegree)//调整灯光亮度,0表示关灯,100表示亮度最大;classTV//电视机类PublicvoidsetChannel(intchannel)//0表示关机,1表示开机并切换到第1频道;interfaceCommand//抽象命令类voidon();voidoff();;classRemoteController//遥控器类protectedCommand[]commands=newCommand[4];//遥控器有4个按钮,按照编号分别对应4个Command对象publicvoidonPressButton(intbutton)//按钮被按下时执行命令对象中的命令if(button%2==0)commands[button].on();elsecommands[button].off();publicvoidsetCommand(intbutton,Commandcommand)(1)=command;//设置每个按钮对应的命令对象;classLightCommandimplementsCommand//电灯命令类protectedLightlight;//指向要控制的电灯对象publicvoidon()light.turnLight(100);;publicvoidoff()light.(2):;publicLightCommand(Lightlight)this.light=light;;;classTVCommandimplementsCommand//电视机命令类protectedTvtv;//指向要控制的电视机对象publicvoidon()(tv.(3);;publicvoidoff()tv.setChannel(0);;publicTVCommand(TVtv)(this.tv=tv;;;publicclassrspublicstaticvoidmain(String[]args)Lightlight=newLight();TVtv=newTV();//创建电灯和电视对象LightCommandlightCommand=newLightCommand(light);TVCommandtvCommand=newTVCommand(tv);RemoteControllerremoteControllet=newRemoteController();//设置按钮和命令对象remoteController.setCommand(0,(4);…//此处省略设置按钮1、按钮2和按钮3的命令对象代码本题中,应用命令模式能够有效让类(5)和类(6)、类(7)之间的耦合性降至最小。
进入题库练习
填空题阅读下列说明和Java代码,将应填入(n)处的字句写在对应栏内。[说明]某游戏公司现欲开发一款面向儿童的模游戏,该游戏主要模拟现实世界中各种鸭子的发声特征、飞行特征和外观特征。游戏需要模拟的鸭子种类及其特征如表18-5所示。表18-5鸭子各类及其特征鸭子种类发声特征飞行特征外现特征灰鸭(MallaIdDuck)发出“嘎嘎”声(Quack)用翅膀飞行(FlyWithWings)灰色羽毛红头鸭(RedHeadDuck)发出“嘎嘎”声(Quack)用翅膀飞行(FlyWithWings)灰色羽毛、头部红色棉花鸭(CottonDuck)不发声(QuackNoWay)不能飞行(FlyNoWay)白色橡皮鸭(RubberDuck)发出橡皮与空气摩擦声(Squeak)不能飞行(FlyNoWay)黑色橡皮颜色为支持将来能够模拟更多种类鸭子的特征,采用策略设计模式(Strategy)设计的类图如图18-8所示。其中,Duck为抽象类,描述了抽象的鸭子,而类RubberDuck、MallardDuck、CottonDuck和RedHeadDuck分别描述具体的鸭子种类,方法fly()、quack()和display()分别表示不同种类的鸭子都具有飞行特征、发声特征和外观特征;接NFlyBehavior与QuackBehavior分别用于表示抽象的飞行行为与发声行为;类FlyNoWay与FlyWithWings分别描述不能飞行的行为和用翅膀飞行的行为;类Quack、Squeak与QuackNoWay分别描述发出“嘎嘎”声的行为、发出橡皮与空气摩擦声的行为与不发声的行为。请填补以下Java代码中的空缺。[Java代码](1)FlyBehaviorpublicvoidfly();;(2)QuackBehaviorpublicvoidquack();;classFlyWithWingsimplementsFlyBehaViorpublicvoidfly()(System.out.println("使用翅膀飞行!");;classFlyNoWayimplementsFlyBehaViorpublicvoidfly()(System.out.println("不能飞行!");;classQuackimplementsQuackBehaviorpublicvoidquack()(System.out.println("发出/'嘎嘎/'声!");;classSqueakimplementsQuackBehaviorpublicvoidquack()(System.out.println("发出空气与橡皮摩擦声!");;classQuackNoWayimplementsQuackBehaViorpublicvoidquack()(System.out.println("不能发声!");;abstractclassDuckprotectedFlyBehavior(3);protectedQuackBehavior(4);publicvoidfly()((5);publicvoidquack()(6);;public(7)voiddisplay();;classRubberDuckextendsDuckpublicRubberDuck()flyBehavior=Fiew(8);quackBehavior=new(9);publicvoiddisplay()/*此处省略显示橡皮鸭的代码*/;//其他代码省略
进入题库练习
填空题阅读下列说明和C++代码,将应填入(n)处的字句写在对应栏内。[说明]已知某企业欲开发一个家用电器遥控系统,即用户使用一个遥控器即可控制某些家用电器的开与关。遥控器如图18-11所示。该遥控器共有4个按钮,编号分别是0~3,按钮0和2能够遥控打开电器1和电器2,按钮1和3则能遥控关闭电器1和电器2。由于遥控系统需要支持形式多样的电器,因此,该系统的设计要求具有较高的扩展性。现假设需要控制客厅电视和卧室电灯,对该遥控系统进行设计所得类图如图18-12所示。在图18-12中,类RomoteController的方法onPressButton(intbutton)表示当遥控器按键按下时调用的方法,参数为按键的编号;Command接口中的on()和off()方法分别用于控制电器的开与关;Light中的mrnLight(intdegree)方法用于调整电灯灯光的强弱,参数degree值为0时表示关灯,值为100时表示开灯,并且将灯光亮度调整到最大;TV中的setChannel(intchannel)方法表示设置电视播放的频道,参数channel值为0时表示关闭电视,值为1时表示打开电视并将频道切换为第1频道。[C++代码]classLight//电灯类public:voidturnLight(intdegree)//调整灯光亮度,0表示关灯,100表示亮度最大;;classTV//电视机类public:voidsetChannel(intchannel)//调整频道,0表示关机,1表示开机并切换到第1频道;;classCommand//抽象命令类public:virtualvoidon()=0;virtualvoidoff()=0;;classRemoteController//遥控器类protected:Command*commands[4];//遥控器有4个按钮,按照编号分别对应4个Command对象public:voidonPressButton(intbutton)//按钮被按下时执行命令对象中的命令if(button%2==0)commands[button]->on();elsecommands[button]->off();voidsetCommand(intbutton,Command*command)(1)=command;//设置每个按钮对应的命令对象;classLightCommand:publicCommand//电灯命令类protected:Light*light;//指向要控制的电灯对象public:voidon()light->turnLight(100);;voidoff()light->(2);;LightCommand(Light*light)(this->light=light;;;classTVCommand:publicCommand//电视机命令类protected:TV*tv;//指向要控制的电视机对象public:voidon()(tv->(3);;voidoff()(tv->setChannel(0);;TVCommand(TV*tv)(this->tv=tv;;;voidmain()Lightlight;Tvtv;//创建电灯和电视对象LightCommandlightCommand(&light);TVCommandtvCommand(&tv);RemoteControilerremoteController;remoteController.setCommand(0,(4));//设置按钮0的命令对象……//此处省略设置按钮1、按钮2和按钮3的命令对象代码本题中,应用命令模式能够有效让类(5)和类(6)、类(7)之间的耦合性降至最小。
进入题库练习
填空题阅读下列说明和C++代码,将应填入(n)处的字句写在对应栏内。[说明]某游戏公司现欲开发一款面向儿童的模拟游戏,该游戏主要模拟现实世界中各种鸭子的发声特征、飞行特征和外观特征。游戏需要模拟的鸭子种类及其特征如表18-4所示。表18-4鸭子各类及其特征鸭子种类发声特征飞行特征外现特征灰鸭(MallardDuck)发出“嘎嘎”声(Quack)用翅膀飞行(FlyWithWings)灰色羽毛红头鸭(RedHeadDuck)发出“嘎嘎”声(Quack)用翅膀飞行(FlyWithWings)灰色羽毛、头部红色棉花鸭(CottonDuck)不发声(QuackNoWay)不能飞行(FlyNoWay)白色橡皮鸭(RubberDuck)发出橡皮与空气摩擦声(Squeak)不能飞行(FlyNoWay)黑色橡皮颜色为支持将来能够模拟更多种类鸭子的特征,采用策略设计模式(Strategy)设计的类图如图18-7所示。其中,Duck为抽象类,描述了抽象的鸭子,而类RubberDuck、MallardDuck、CottonDuck和RedHeadDuck分别描述具体的鸭子种类,方法fly()、quack()和display()分别表示不同种类的鸭子都具有飞行特征、发声特征和外观特征;类FlyBehavior与QuackBehavior为抽象类,分别用于表示抽象的飞行行为与发声行为;类FlyNoWay与FlyWithWings分别描述不能飞行的行为和用翅膀飞行的行为;类Quack、Squeak与QuackNoWay分别描述发出“嘎嘎”声的行为、发出橡皮与空气摩擦声的行为与不发声的行为。请填补以下C++代码中的空缺。[C++代码]#include<iostream>usingnamespace(1);classFlyBehaviorpublic:(2)fly()=0;;classQuackBehaviorpublic:(3)quack()=0;;classFlyWithWings:publicFlyBehaviorpublic:voidfly()cout<<"使用翅膀飞行!">>end1;;classFlyNoWay:publicFlyBehaviorpublic:voidfly()cout"不能飞行!"end1;;classQuack:publicQuackBehaviorpublic:voidquack()"cout发出/'嘎嘎/'声!”end1;;classSqueak:publicQuackBehaviorpublic:voidquack()cout<<"发出空气与橡皮摩擦声!">>end1;;classQuackNoWay:publicQuackBehaviorpublic:voidquack()cout<<"不能发声!">>end1;;classDuckprotected:FlyBehavior*(4);QuackBehavior*(5);public:voidfly()(6);voidquack()(7);;virtualvoiddisplay()=0;;classRubberDuck:publicDuckpublic:RubberDuck()flyBehavior=new(8);quackBehavior=new(9);RubberDuck()if(!flyBehavior)deleteflyBehavior;if(!quackBehavior)deletequackBehavior;voiddisplay()/*此处省略显示橡皮鸭的代码*/;//其他代码省略
进入题库练习
填空题阅读下列说明、图及Java程序,将应填入(n)处的字句写在对应栏内。[说明]某订单管理系统的部分UML类图如图18-4所示。在图18-4中,Product表示产品,ProductList表示所销售产品的列表,Order表示产品订单,OrderItem表示产品订单中的一个条目,OrderList表示订单列表,SalesSystem提供订单管理系统的操作接口。各个类的部分属性和方法说明如表18-3所示。表18-3类的部分属性和方法说明表类成员说明ProductListArrayList<Product>productsProductStringcode产品编号Stringdescription产品描述doubleprice产品单价Booleanequals(Objectobject)若两个产品相同则返回true,否则返回falseOrderltemProductproduct订单项中的产品intquantity产品的订购数量ProductgetPmduct()获取单项中的产品OrderArrayList<Orderltern>items订单中包含的单项OrderListArrayList<Order>orders订单voidaddOrder(Orderorder)向订单列表中添加新订单intgetNumberOfOrders()状取订单列表中的订单总数SalesSystemProductListcatalog产品目录OrderListsales订单列表voidstatistic()依次统计产品目录中每个产品的订购总量,并打印出每个产品的编号、说明、订购总量和订购金额可以使用类Java.util.ArrayList<E>来实现对象的聚集关系,如图18-4中OrderList与Order之间的聚集关系。for-each循环提供了一种遍历对象集合的简单方法。在for-each循环中,可以指定需要遍历的对象集合,以及用来接收集合中每个元素的变量。其语法如下:for(用来接收集合中元素的变量:需要遍历的对象集合)如果要使用for-each循环遍历对象集合,那么包含该对象集合的类必须实现接口Java.util.Iterable<T>。Java程序1和Java程序2分别给出了类OrderList和方法statistic()的Java代码。[Java程序1]importjava.util.*;publicclassOrderList(1)privateArrayList<Order>orders;publicOrderLiSt()this.orders=newArrayList<Order>();publicvoidaddOrder(Orderorder)this.orders.add(order);publicIterator<Order>iterator()return(2);publicintgetNumberoforders()returnthis.orders.slze();[Java程序2]importJava.util.*;publicclassSalesSystemprivateProductListcatalog;privateOrderListsales;privatestaticPrintWriterstdOut=newPrintWriter(System.out,true);publicvoidstatistiC()for(Productproduct:(3))intnumber=0;for(Orderorder:(4))for((5):order)if(product.equals(item.getProduct()))number+=item.getQuantity();stdOut.printIn(product.getCode()+""+product.getDescription()+""+number+""+number*product.getPrice());//其余的方法未列出
进入题库练习
填空题阅读以下说明和C语言函数,将应填入(n)处的字句写在对应栏内。[说明]在一个分布网络中,资源(石油、天然气、电力等)可从生产地送往其他地方。在传输过程中,资源会有损耗。例如,天然气的气压会减少,电压会降低。我们将需要输送的资源信息称为信号。在信号从信源地送往消耗地的过程中,仅能容忍一定范围的信号衰减,称为容忍值。分布网络可表示为一个树形结构,如图21-7所示。信号源是树根,树中的每个结点(除了根)表示一个可以放置放大器的子结点,其中某些结点同时也是信号消耗点,信号从一个结点流向其子结点。每个结点有一个d值,表示从其父结点到该结点的信号衰减量。例如,在图21-7中,结点w、p、q的d值分别为2、1、3,树根结点表示信号源,其d值为0。每个结点有一个M值,表示从该结点出发到其所有叶子结点的信号衰减量的最大值。显然,叶子结点的M值为0。对于非叶子结点j,M[j)=maxM(k)+d(k)k是j的孩子结点)。在此公式中,要计算结点的M值,必须先算出其所有子结点的M值。在计算M值的过程中,对于某个结点i,其有一个子结点k满足d(k)+M(k)大于容忍值,则应在k处放置放大器;否则,从结点i到某叶子结点的信号衰减量会超过容忍值,使得到达该叶子结点时信号不可用,而在结点i处放置放大器并不能解决到达叶子结点的信号衰减问题。例如,在图21-7中,从结点p到其所有叶子结点的最大衰减值为4。若容忍值为3,则必须在s处放置信号放大器,这样可使得结点p的M值为2。同样,需要在结点q、v处放置信号放大器,如图21-8中阴影结点所示。若在某结点放置了信号放大器,则从该结点输出的信号与信号源输出的信号等价。函数placeBoosters(TreeNode*root)的功能是:对于给定树形分布网络中各个结点,计算其信号衰减量的最大值,并确定应在树中的哪些结点放置信号放大器。全局变量Tolerance保存信号衰减容忍值。树的结点类型定义如下:typedefstructTreeN(Ddeintid;/*当前结点的识别号*/intchildNum;/*当前结点的子结点数目*/intd;/*父结点到当前结点的信号衰减值*/structTreeN()de**childptr;/*向量,存放当前结点到其所有子结点的指针*/intM;/*当前结点到其所有子结点的信号衰减值中的最大值*/boolboost;/*是否在当前结点放置信号放大器的标志*/TreeNode;[C语言函数]voidplaceB00sters(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->Doost=true;p->M=0;if(p->d+p->M>degradation)degradation=p->d+p->M;root->M=(5);
进入题库练习
填空题阅读下列说明、图和C++代码,将应填入(n)处的字句写在对应栏内。[说明]某订单管理系统的部分UML类图如图18-3所示。在图18-3中,Product表示产品,ProductList表示产品目录,Order表示产品订单,OrderItem表示产品订单中的一个条目,OrderList表示订单列表,SalesSystem提供订单管理系统的操作接口。请完善类Order的成员函数getOrderedAmount()和类SalesSystem的statistic()方法,各个类的属性及部分方法定义参见下面的C++代码。[C++代码]classProduct//产品类private:stringpid;//产品识别码stringdescription;//产品描述doubleprice;//产品单价public:voidsetProductPrice(doubleprice);//设置产品单价stringgetProductld();//获取产品识别码stringgetProductDescription();//获取产品描述doublegetProductPrice();//获取产品单价//其他成员省略;classProductList(//产品列表类private:vector<Product>products;public:ProductList();ProductgetProductByIndex(inti);//获得产品列表中的第i件产品voidaddProduct(Productt);//在产品列表中加入一件产品Product*getProductBylD(stringpid);//获得识别码为pid的产品指针unsignedintgetProductAmount();//获得产品列表中的产品数量;classOrderItem(//订单条目类private:Product*productPtr;//指向被订购产品的指针intquantity;//订购数量public:OrderItem(Product*,int);Product*getProductptr();//获取指向被订购产品的指针intgetQuantity();//获取被订购产品的数量;classOrder(//订单类private:unsignedintorderid;//订单识别号vector<OrderItem>items;//订单内容(订单项)public:Order(unsignedintorderid);//获得识别码为tid的产品在当前订单中被订购的数量intgetOrderedAmount(stringtid);voidadditem(Product*productPtr,unsignedintn);//在订单中增加一个项//其他成员省略;classOrderList//订单列表类prtvate:vector<Order>orders;public:OrderList();//Begin()返回指向订单列表第一个元素的迭代器(指针)virtualvector<Order>::iteratorOrderList::Begin();//End0返回指向订单列表最后一个元素之后的迭代器(指向一个不存在的元素)virtualvector<Order>::iteratorOrderList::End();voidaddOrder(Ordert);//在订单列表中加入一份订单//其他成员省略;classSalesSystemprivate:ProductListcatalog://产品目录OrderListsales;//订单列表Public:SalesSystem();voidstatistic();//统计所有产品的订购情况//其他成员省略;//在订单中查找识别码为tid的产品的订购数量,若该产品没有被订购,则返回0intOrder::getOrderedAmount(stringtid)for(intk=0;k<items.size();k++)if((1)==tid)return(2);return0;//方法statistic()依次统计产品目录中每个产品的订购总量//并打印输出每个产品的识别码、描述、订购总量和订购金额voidSalesSystem::statistic()unsignedintk,t,ordered_qty=0;vector<Order>::iteratorit;Productp;cout<<"产品识别码/t描述/t/t订购数量/t金额"<<end1;for(k=0;k<catalog.getProductAtnount();k++)//遍历产品列表p=(3);//从产品列表中取得一件产品信息存入变量pordered_qty=0;//通过迭代器变量it遍历订单列表中的每一份订单for(it=sales.Begin();(4);it++)//根据产品识别码获得产品P在当前订单中被订购的数量t=(5)(p.getProductId());ordered_qty+=t;cout<<p.getProductId()<<"/t/t"<<p.getProductDescription()<<"/t/t";cout<<ordered_qty<<"/t/t"<<p.getProductPrice()*ordered_qty<<end1;
进入题库练习
填空题阅读以下说明和Java代码,将应填入(n)处的字句写在对应栏内。[说明]某绘图系统存在Point、Line、Square三种图元,它们具有Shape接口,图元的类图关系如图18-2所示。现要将Circle图元加入此绘图系统以实现功能扩充。已知某第三方库已经提供了XCircle类,且完全满足系统新增的Circle图元所需的功能,但XCircle不是由Shape派生而来的,它提供的接口不能被系统直接使用。代码18.3既使用了XCircle又遵循了Shape规定的接口,既避免了从头开发一个新的Circle类,又可以不修改绘图系统中已经定义的接口。代码18.4根据用户指定的参数生成特定的图元实例,并对之进行显示操作。绘图系统定义的接口与XCircle提供的显示接口及其功能如表18-2所示。表18-2显示接口及其功能ShapeXCircle功能display()DisplayIt()显示图元[代码18.3]classCircle(1)private(2)pxc;publicCircle()pxc=new(3);publicvoiddisplay()pxc(4);[代码18.4]publicclassFactorypublic(5)getShapeInstance(inttyoe)(//生成特定类实例switch(type)case0:returnnewpoint();case1:returnnewRectangle();case2:returnnewline();Case3:returnnewCircle();default:retUrnnull;publicClassApppublicstatiCviodmain(Stringargv[])if(argv.length!=1)system.out.printin("errorparameters!|");Return;inttype=(newInteger(argv[0])).intValue();Factoryfactory=newFactory();shapes;S=factory.(6);if(s==null)system.out.printin("Errorgetinstance!");Return;s.display();return;
进入题库练习
填空题阅读下列说明和Java代码,将应填入(n)处的字句写在对应栏内。[说明]现欲实现一个图像浏览系统,要求该系统能够显示BMP、JPEG和GIF三种格式的文件,并且能够在Windows和Linux两种操作系统上运行。系统首先将BMP、JPEG和GIF三种格式的文件解析为像素矩阵,然后将像素矩阵显示在屏幕上。系统需具有较好的扩展性,以支持新的文件格式和操作系统。为满足上述需求并减少所需生成的子类数目,采用桥接(Bridge)设计模式进行设计所得类图如图18-18所示。采用该设计模式的原因在于:系统解析BMP、GIF与JPEG文件的代码仅与文件格式相关,而在屏幕上显示像素矩阵的代码则仅与操作系统相关。[Java代码]classMatrix//各种格式的文件最终都被转换为像素矩阵//此处代码省略;abstractclassImageImppublicabstractvoiddoPaint(Matrixm);//显示像素矩阵m;classwinImpextendsImageImppublicvoiddoPaint(Matrixm)/*调用windows系统的绘制函数绘制像素矩阵*/;classLinuxImpextendsImageImppublicvoiddoPaint(Matrixm)/*调用Linux系统的绘制函数绘制像素矩阵*/;abstractclassImagepublicvoidsetImp(ImageImpimp)(1)=imp;publicabstractvoidparseFile(StringfileName);protected(2)imp;;classBMPextendsImagepublicvoidparseFile(StringfileName)//此处解析BMP文件并获得一个像素矩阵对象m(3);//显示像素矩阵m;xlassGIFextendsImage//此处代码省略;classJPEGextendsImage//此处代码省略;publicclassJavaMainpublicstaticvoidmain(String[]args)//在Windows操作系统上查看demo.bmp图像文件Imageimagel=(4);ImageImpimageImpl=(5);(6);imagel.parseFile("demo.bmp");现假设该系统需要支持10种格式的图像文件和5种操作系统,不考虑类Matrix和类javaMain,若采用桥接设计模式则至少需要设计(7)个类。
进入题库练习
填空题阅读下列说明和C++代码,将应填入(n)处的字句写在对应栏内。[说明]现欲实现一个图像浏览系统,要求该系统能够显示BMP、JPEG和GIF三种格式的文件,并且能够在Windows和Linux两种操作系统上运行。系统首先将BMP、JPEG和GIF三种格式的文件解析为像素矩阵,然后将像素矩阵显示在屏幕上。系统需具有较好的扩展性,以支持新的文件格式和操作系统。为满足上述需求并减少所需生成的子类数目,采用桥接(Bridge)设计模式进行设计所得类图如图18-17所示。采用该设计模式的原因在于:系统解析BMP、GIF与JPEG文件的代码仅与文件格式相关,而在屏幕上显示像素矩阵的代码则仅与操作系统相关。[C++代码]clasSMatrix//各种格式的文件最终都被转换为像素矩阵//此处代码省略;classImageImppublic:virtualvoiddoPaint(Matrixm)=0;//显示像素矩阵m;classWinlmp:publicImageImppublic:voiddoPaint(Matrixm)/*调用Windows系统的绘制函数绘制像素矩阵*/;classLinuxlmp:publicImagelmppublic:voiddoPaint(Matrixm)/*调用Linux系统的绘制函数绘制像素矩阵*/;classImagepublic:voidsetImp(Imagelmp*imp)(1)=imp;virtualvoidparseFiie(stringfileName)=0;protected:(2)*imp;;classBMP:publicImagepublic:voidparseFile(stringfileName)//此处解析BMP文件并获得一个像素矩阵对象m(3);//显示像素矩阵m;classGIF:publicImage//此处代码省略;classJPEG:publicImage//此处代码省略;voidmain()//在Windows操作系统上查看demo.bmp图像文件Image*imagel=(4);ImageImp*imageImpl=(5);(6);imagel->parseFile("demo.bmp");现假设该系统需要支持10种格式的图像文件和5种操作系统,不考虑类Matrix,若采用桥接设计模式则至少需要设计(7)个类。
进入题库练习
填空题火车售票点T1、T2分别售出了两张2009年10月20号到北京的硬座票,但是数据库里的剩余票却只减少了两张,造成了数据的不一致性,原因是______。
进入题库练习
填空题阅读以下说明和C代码,将应填入 (n) 处的字句写在对应栏内。 [说明] 在一个简化的绘图程序中,支持的图形种类有点(point)和圆(ckcle),在设计过程中采用面向对象思想,认为所有的点和圆都是一种图形(shape),并定义了类型shape_t、point_t和circle_t分别表示基本图形、点和圆,并且点和圆具有基本图形的所有特征。 [C代码] typedef enumpoint,circle)shape_type; /*程序中的两种图形:点和圆*/ typedef struct /*基本的图形类型*/ shape_type type; /*图形种类标识:点或者圆*/ void(*destroy)(); /*销毁图形操作的函数指针*/ void(*draw)(); /*绘制图形操作的函数指针*/ shape_t; typedef struct(shape_t common;int x;int y;)point_t; /*定义点类型,x、y为点坐标*/ void destroyPoint(point_t* this) free(this);printf("Point destoryed!/n"); /*销毁点对象*/ void drawPoint(point_t* this) printf("P(%d,%d)",this->x,this->y); /*绘制点对象*/ shape_t* createPoint(va_list* ap)/*创建点对象,并设置其属性*/ point_t* p_point; if((p_point=(point_t*)malloc(sizeof(point_t)))==NULL)return NULL; p_point->common.type=point;p_point->common.destroy=destroyPoint; p_point->common.draw=drawPoint; p_point->x=va_arg(*ap,int); /*设置点的横坐标*/ p_point->y=va_arg(*ap,int); /*设置点的纵坐标*/ return(shape_t*)p_point; /*返回点对象指针*/ typedef struct/*定义圆类型*/ shape_t common; point_t*center; /*圆心点*/ int radius; /*圆半径*/ circle_t; void destroyCircle(Circle_t* this) free( (1) );free(this);printf("Circle destoryed!/n"); void drawCircle(Circle_t* this) printf<"C<">; (2) .draw(this->center); /*绘制圆心*/ printf(".%d)",this->radius); shape_t* createCircle(va_list* ap) /*创建一个圆,并设置其属性*/ Circle_t* p_circle; if((p_circle=(circle_t*)malloc(Sizeof(circle_t)))==NULL)return NULL; p_circle->common.type=circle;p_circle->common.destroy=destroyCircle; p_circle->common.draw=drawCircle; (3) =createPoint(ap); /*设置圆心*/ p_circle->radius=va_arg(*ap,int); /*设置圆半径*/ return p_circle; shape_t* createShape(shape_type st,…)/*创建某一种具体的图形*/ va_list ap; /*可变参数列表*/ shape_t* p_shape=NULL; (4) (ap,st); if(st==point)p_shape=createPoint(&ap); /*创建点对象*/ if(st==circle) p_shape=createCircle(&ap); /*创建圆对象*/ va_end(ap); return p_shape; int main() int i; /*循环控制变量,用于循环计数*/ shape_t* shapes[2]; /*图形指针数组,存储图形的地址*/ shapes[0]=createShape(point,2,3);/*横坐标为2,纵坐标为3*/ shapes[1]=createShape(Circle,20,40,10); /*圆心坐标为(20,40),半径为10*/ for(i=0;i<2;i++)(shapes[i]->draw(shapes[i]);printf("/n"); /*绘制数组中图形*/ for(i=1;i>=0;i--) shapes[i]->destroy(shapes[i]); /*销毁数组中图形*/ return 0; [运行结果] P(2,3) (5) Circle destoryed! Point destoryed!
进入题库练习
填空题阅读下列说明和C++代码,将应填入空(n)处的字句写在对应栏内。[说明]某饭店在不同的时段提供多种不同的餐饮,其菜单的结构图如图18-27所示。现在采用组合(Composition)模式来构造该饭店的菜单,使得饭店可以方便地在其中增加新的餐饮形式,得到如图18-28所示的类图。其中MenuComponent为抽象类,定义了添加(add)新菜单和打印饭店所有菜单信息(print)的方法接口。类Menu表示饭店提供的每种餐饮形式的菜单,如煎饼屋菜单、咖啡屋菜单等。每种菜单中都可以添加子菜单,例如图18-27中的甜点菜单。类MenuItem表示菜单中的菜式。[C++代码]#include<iostream>#include<list>#Include<string>usingnamespacestd;classMenuComponentprotected:stringname;public:MenuComponent(Stringname)(this->name=name;stringgetName()returnname;(1);//添加新菜单virtualvoidprint()=0;//打印菜单信息;classMenultem:publicMenuComponentprivate:doubleprice;public:Menultem(stringname,doubleprice):MenuComponent(name)(this->price=price;doublegetPrice()returnprice;voidadd(MenuComponent*menuComponent)retum;//添加新菜单voidprint()cout<<""<<getName0<<","<<getPrice0<<end1;;classMenu:publicMenuC0mponentprivate:list<(2)>menuComponents;public:Menu(stringname):MenuComponent(name)voidadd(MenuComponent*menuComponent)//添加新菜单(2);VOidprint()cout<<"/n"<<getNameO<<"/n---------------"<<end1;Std::list<MenuComponent*>::iteratoriter,for(iter=menuComponents.begin0;iter!=menuComponents.end0;iter++)(4)->print();;voidmain()MenuComponent*alIMenus=newMenu("ALLMENUS");MenuComponent*dinerMenu=newMenu("DINERMENU");……∥创建更多的Menu对象,此处代码省略alIMenus->add(dinerMenu);∥将dinerMenu添加到餐厅菜单中……∥为餐厅增加更多的菜单,此处代码省略(5)->printO;∥打印饭店所有菜单的信息
进入题库练习
填空题阅读下列说明和c函数,将应填入(n)处的字句写在对应栏内。[说明]已知集合A和B的元素分别用不含头结点的单链表存储,函数Difference()用于求解集合A与B的差集,并将结果保存在集合A的单链表中。例如,若集合A=5,10,20,15,25,30,集合B=5,15,35,25,如图21-10(a)所示,运算完成后的结果如图21-10(b)所示。链表结点的结构类型定义如下:typedefstructNodeElemTypeelem;structNode*next;NodeType;[C函数]voidDifference(NodeType**LA,NodeType*LB)NodeType*pa,*pb,*pre,*q;pre=NULL;(1);while(pa)pb=LB;while((2))pb=pb->next;if((3))if(!pre)*LA=(4);else(5)=pa->next:q=pa;pa=pa->next;free(q);else(6);pa=pa->next;
进入题库练习
填空题设供应商供应零件的关系模式为SP(Sno,Pno,Qty),其中Sno表示供应商号,Pno表示零件号,Qty表示零件数量。现查询至少包含了供应商“168”所供应的全部零件的供应商号。请补全下列SQL语句: ______ FROM SP SPX WHERE______ (SELECT* FROM SP SPY WHERE______ AND NOT EXISTS (SELECT* FROM SP SPZ WHERE______))
进入题库练习
填空题阅读下列说明,回答问题1至问题3,将解答填入对应栏内。 [说明] 快速排序是一种典型的分治算法。采用快速排序对数组A[p..r]排序的3个步骤如下: (1)分解:选择一个枢轴(pivot)元素划分数组。将数组A[p..r]划分为两个子数组(可能为空)A[p..q-1]和A[q+1..r],使得A[q]大于等于A[p..q-1]中的每个元素,小于A[q+1..r]中的每个元素。q的值在划分过程中计算。 (2)递归求解:通过递归的调用快速排序,对子数组A[p..q-1]和A[q+1..r]分别排序。 (3)合并:快速排序在原地排序,故不需要合并操作。 [问题1] 下面是快速排序的伪代码,请填补其中的空缺。 伪代码中的主要变量说明如下: A:待排序数组; p,r:数组元素下标,从p到r; q:划分的位置; x:枢轴元素; i:整型变量,用于描述数组下标。下标小于或等于i的元素的值小于或等于枢轴元素的值: j:循环控制变量,表示数组元素下标。 QUICKSORT(A,P,r) if(p<r) q=PARTITION(A,p,r); QUICKSORT(A,p,q-1); QUICKSORT(A,q+1,r); PARTITION(A,p,r) X=A[r];i=p-1; for(j=p;j≤r-1;j++) if(A[j]≤x) i=i+1; 交换A[j]和A[j] 交换 (1) 和 (2) //注:空(1)和空(2)答案可以互换,但两个空全部答对方可得分 return (3) [问题2] (1)假设要排序包含n个元素的数组,请给出在各种不同的划分情况下,快速排序的时间复杂度,用O记号。最佳情况为 (4) ,平均情况为 (5) ,最坏情况为 (6) 。 (2)假设要排序的n个元素都具有相同值时,快速排序的运行时间复杂度属于哪种情况? (7) 。(最佳、平均、最坏) [问题3] (1)待排序数组是否能被较均匀地划分对快速排序的性能有重要影响,因此枢轴元素的选取非常重要。有人提出从待排序的数组元素中随机地取出一个元素作为枢轴元素,下面是随机化快速排序划分的伪代码——利用原有的快速排序的划分操作,请填充其中的空缺处。其中,RANDOM(i,j)表示随机取i到j之间的一个数,包括i和j。 RANDOMIZED-PARTITION(A,p,r) i=RANDOM(p,r); 交换 (8) 和 (9) ;//注:空(8)和空(9)答案可以互换,但两个空全部答对方可得分 return PARTITION(A,p,r); (2)随机化快速排序是否能够消除最坏情况的发生? (10) 。(是或否)
进入题库练习
单选题采用三级结构/两级映像的数据库体系结构,如果对数据库的一张表创建聚簇索引,改变的是数据库的( )
进入题库练习
单选题面向对象分析过程中,从给定需求描述中选择( )来识别对象
进入题库练习