根据以上C代码,分析该排序算法是否稳定。若稳定,请简要说明(不超过100字);若不稳定,请修改其中代码使其稳定(给出要修改的行号和修改后的代码)。
阅读下列说明和图,回答问题1至问题3,将解答填入答题纸的对应栏内。【说明】某出版社拟开发一个在线销售各种学术出版物的网上商店(ACShop),其主要的功能需求描述如下:(1)ACShop在线销售的学术出版物包括论文、学术报告或讲座资料等。(2)ACShop的客户分:为两种:未注册客户和注册客户。(3)未注册客户可以浏览或检索出版物,将出版物添加到购物车中。未注册客户进行注册操作之后,成为ACShop注册客户。(4)注册客户登录之后,可将待购买的出版物添加到购物车中,并进行结账操作。结账操作的具体流程描述如下:①从预先填写的地址列表中选择一个作为本次交易的收货地址。如果没有地址信息,可以添加新地址信息。②选择付款方式。ACShop支持信用卡付款或银行转账两种方式。注册客户可以从预先填写的信用卡或银行账号中选择一个付款,若没有付款方式信息,则可以添加新付款方式。③确认提交购物车中待购买的出版物,ACShop会自动生成与之相对应的订单。(5)管理员负责维护在线销售的出版物目录,包括添加新出版物或者更新在售出版物信息等操作。现采用面向对象方法分析并设计该网上商店ACShop,得到如图3-1所示的用例图和图3-2所示的类图。
阅读下列说明和图,回答问题1至问题3,将解答填入答题纸的对应栏内。【说明】Pay&Drive系统(开多少付多少)能够根据驾驶里程自动计算应付的费用。系统中存储了特定区域道路交通网的信息。道路交通网由若干个路段(RoadSegment)构成,每个路段由两个地理位置坐标点(.Node)标定,其里程数(Distance)是己知的。在某些地理坐标点上安装了访问控制(AccessControl)设备,可以自动扫描行驶卡(Card)。行程(Trajectory)由一组连续的路段构成。行程的起点(Entry)和终点(Exit)都装有访问控制设备。系统提供了3种行驶卡。常规卡(RegularCard)有效期(ValidPeriod)为一年,可以在整个道路交通网内使用。季卡(SeasonCard)有效期为三个月,可以在整个道路交通网内使用。单次卡(MinitripCard)在指定的行程内使用,且只能使用一次。其中,季卡和单次卡都足预付卡(PrepaidCard),需要客户(Customer。)预存一定的费用。系统的主要功能有:客户注册、申请行驶卡、使用行驶卡行驶等。使用常规卡行驶,在进入行程起点时,系统记录行程起点、进入时间(DateofEntry)等信息。在到达行程终点时,系统根据行驶的里程数和所持卡的里程单价(UnitPrice)计算应付费用,并打印费用单(Invoice)。季卡的使用流程与常规卡类似,但是不需要打印费用单,系统自动从卡中扣除应付费用。单次卡的使用流程与季卡类似,但还需要存行程的起点和终点上检查行驶路线是否符合该卡所规定的行驶路线。现采用面向对象方法开发该系统,使用LIML进行建模。构建出的用例图和类图分别如图13—9和图13一10所示。
某基于微处理器的住宅系统,使用传感器(如红外探头、摄像头等)来检测各种意外情况,如非法进入、火警、水灾等。房主可以在安装该系统时配置安全监控设备(如传感器、显示器、报警器等),也可以在系统运行时修改配置,通过录像机和电视机监控与系统连接的所有传感器,并通过控制面板上的键盘与系统进行信息交互。在安装过程中,系统给每个传感器赋予一个编号(即ID)和类型,并设置房主密码以启动和关闭系统,设置传感器事件发生时应自动拨出的电话号码。当系统检测到一个传感器事件时,就激活警报,拨出预置的电话号码,并报告关于位置和检测到的事件的性质等信息。住宅安全系统顶层数据流图和第0层数据流图如图12-3和图1-4所示。
阅读下列说明和Java代码,将应填入(n)处的字句写在答题纸的对应栏内。【说明】某大型商场内安装了多个简易的纸巾售卖机,自动售出2元钱一包的纸巾,且每次仅售出一包纸巾。纸巾售卖机的状态如图17—7所示。采用状态(State)模式来实现该纸巾售卖机,得到如图17-8所示的类图。其中类State为抽象类,定义了投币、退币、出纸巾等方法接口。类SoldState、SoldOutState、NoQuarterState31HasQuarterState分别对应图17—7中纸巾售卖机的4中状态:售出纸巾、纸巾售完、没有投币、有2元钱。[Java代码]ImportJava.util.*interfaceState{PublicvoidinsertQuarter();//投币publicvoidejectQuarter();//退币DublicvoidturnCrank();//按下“出纸巾”按钮publicvoiddispense();//出纸巾}ClasSTiSsueMachine{(1)soldOutState,noQuarterState,hasQuarterSta七e,soldState,state;State=s01dOutState;intcount:0;//纸巾数DublicTissueMachine(intnumber)(/*实现代码省略*/)publicStategetHasQuarterState()(returnhasQuarterState;)publicStategetNoQuarterState()(returnnoQuarterState;)publicStategetSoldState()(returnsoldState;)publicStategetSoldoutState()(returnsoldOutState;)intgetCount(returncount;)//其余代码省略};ClassNoQuarterStateimplementState{TiSsueMachinetiSsueMachine;publicvoidinsertQuarter(){tissureMachine.setState((2));}//构造方法以及其余代码省略}ClassHasQuarterStateimplementState{TissueMachinetissueMachine;publiCvoidejectQuarter(){tiSsureMachine.setState((3));}//构造方法以及其余代码省略}ClasSSoldStateimplementState(TissueMachinetiSsueMachine:publicvoiddispense()(if(tiSsueMachine.getCount()>0){tiSsureMachine.setState((4));}e1Se{tissureMachine.setState((5));}}
阅读下列说明,回答问题1至问题3,将解答填入答题纸的对应栏内。【说明】某电视台拟开发一套信息管理系统,以方便对全台的员工、栏目、广告和演播厅等进行管理。【需求分析】(1)系统需要维护全台员工的详细信息、栏目信息、广告信息和演播厅信息等。员工的信息主要包括:工号、姓名、性别、出生日期、电话、住址等。栏目信息主要包括:栏目名称、播出时间、时长等。广告信息主要包括:广告编号、价格等。演播厅信息包括:房间号、房间面积等。(2)电视台分局调度单来协调各档栏目、演播厅和场务。一销售档栏目只会占用一个演播厅,但会使用多名场务来进行演出协调。演播厅和场务可以被多个栏日循环使用。(3)电视台根据栏目来插播广告。每档栏目可以插播多条广告,每条广告也可以在多档栏目插播。(4)一档栏目可以有多个主持人,但一名主持人只能主持。一档栏目。(5)一名编辑人员可以编辑多条广告,一条广告只能由…一名编辑人员编辑。【概念模型设计】根据需求阶段收集的信息设计的实体联系图(不完整)如图14一1所示。【逻辑结构设计】根据概念模型设计阶段完成的实体联系图,得出如下关系模式(不完整):演播厅(房间号,房间面积)栏目(栏目名称,播出时间,时长)广告(广告编号,销售价格,(1))员工(工号,姓名,性别,出生日期,电话,住址)主持人(主持人工号,(2))插播单((3),播出时间)调度单((4))
阅读下列说明和图,回答问题1至问题4,将解答填入答题纸的对应栏内。【说明】某慕课教育平台欲添加在线作业批改系统,以实现高效的作业提交与批改,并进行统计。学生和讲师的基本信息已经初始化为数据库中的学生表和讲师表。系统的主要功能如下。(1)提交作业。验证学生标识后,学生将电子作业通过在线方式提交,并进行存储。系统给学生发送通知表明提交成功,通知中包含唯一编号;并通知讲师有作业提交。(2)下载未批改作业。验证讲师标识后,讲师从系统中下载学生提交的作业。下载的作业将显示在屏幕上。(3)批改作业。讲师按格式为每个题目进行批改打分,并进行整体评价。(4)上传批改后的作业。将批改后的作业(包括分数和评价)返回给系统,进行存储。(5)记录分数和评价。将批改后的作业的分数和评价记录在学生信息中,并通知学生作业已批改。(6)获取已批改作业。根据学生标识,给学生查看批改后的作业,包括提交的作业、分数和评价。(7)作业抽检。根据教务人员标识抽取批改后的作业样本,给出抽检意见,然后形成抽检报告给讲师。现采用结构化方法对在线作业批改系统进行分析与设计,获得如图1-1所示的上下文数据流图和图1-2所示的0层数据流图。
阅读下列说明SDC++代码,将应填入(n)处的字句写在答题纸的对应栏内。【说明】某大型商场内安装了多个简易的纸巾售卖机,自动售出2元钱一包的纸巾,且每次仅售出一包纸巾。纸巾售卖机的状态如图16.6所示。采用状态(State)模式来实现该纸巾售卖机,得到如图16—7所示的类图。其中类State为抽象类,定义了投币、退币、出纸巾等方法接口。类SoldState、SoldOutState、NoQuarterState和HasQuarterState分别对应图16—4中纸巾售卖机的4中状态:售出纸巾、纸巾售完、没有投币、有2元钱。【C++代码】#includeUSingnamespaceStd;//以下为类的定义部分ClassTissueMachine;//类的提前引用C1assState{publiC:virtualvoidinsertQuar七er()=0;//投币virtualvoidejectQuarter()=0;//退币virtualvoidturnCrank()=0;//按下“出纸巾”按钮virtualvoiddispense()=0;//出纸巾);/*类SoldOutState、NoQuarterState、HasQuarterState、SoldState的定义省略,每个类中均定义了私有数据成员TissueMachine*tissueMachine*/ClasSTiSsueMachine(private:1*soldOutState,*noQuarterState,*hasQuartersta七e,*soldState,*state;intcount;//纸巾数public:TiSsueMachine(intnumber);voidsetState(State*state);State*getHasQuarterState();State*getNoQuarterState();State*getSoidState();State*getS01dOurState();intgetCount();//其余代码省略};//以下为类的实现部分voidNoQuarterState::inserQuarter()(tissureMachine->setState(2);}voidHasQuarterstate::ejectQuarter(){tissureMachine->setState(3);}voidSoldState::dispense()(if(tiSsueMachine一>getCount()>0)(tissureMachine->setState(4);}e1Se{tissureMachine->setState(5);}}//其余代码省略
阅读下列说明,回答问题1至问题3,将解答填入答题纸的对应栏内。【说明】某物流公司为了整合上游供应商与下游客户,缩短物流过程,降低产品库存,需要构建一个信息系统以方便管理其业务运作活动。【需求分析结果】(1)物流公司包含若干部门,部门信息包括部门号、部门名称、经理、电话和邮箱。一个部门可以有多名员工处理部门的日常事务,每名员工只能在一个部门工作。每个部门有一名经理,只需负责管理本部门的事务和人员。(2)员工信息包括员工号、姓名、职位、电话号码和工资;其中,职位包括:经理、业务员等。业务员根据托运申请负责安排承运货物事宜,例如:装货时间、到达时间等。一个业务员可以安排多个托运申请,但一个托运申请只由一个业务员处理。(3)客户信息包括客户号、单位名称、通信地址、所属省份、联系人、联系电话、银行账号,其中,客户号唯一标识客户信息的每一个元组。每当客户要进行货物托运时,先要提出货物托运申请。托运申请信息包括申请号、客户号、货物名称、数量、运费、出发地、目的地。其中,一个申请号对应唯一的一个托运申请;一个客户可以有多个货物托运申请,但一个托运申请对应唯一的一个客户号。【概念模型设计】根据需求阶段收集的信息,设计的实体联系图和关系模式(不完整)如图13-5所示。【关系模式设计】部门(部门号,部门名称,经理,电话,邮箱)员工(员工号,姓名,职位,电话号码,工资,(a))客户((b),单位名称,通信地址,所属省份,联系人,联系电话,银行账号)托运申请((c),货物名称,数量,运费,出发地,目的地)安排承运,((d),装货时间,到达时间,业务员)
阅读下列说明和图,回答问题1至问题3,将解答填入答题纸的对应栏内。【说明】某运输公司决定为新的售票机开发车票销售的控制软件。图13-15给出了售票机的面板示意图以及相关的控制部件。售票机相关部件的作用如下所述:(1)目的地键盘用来输入行程目的地的代码(例如,200表示总站)。(2)乘客可以通过车票键盘选择车票种类(单程票、多次往返票和座席种类)。(3)继续/取消键盘上的取消按钮用于取消购票过程,继续按钮允许乘客连续购买多张票。(4)显示屏显示所有的系统输出和用户提示信息。(5)插卡口接受MCard(现金卡),硬币口和纸币槽接受现金。(6)打印机用于输出车票。假设乘客总是支付恰好需要的金额而无需找零,售票机的维护工作(取回现金、放入空白车票等)由服务技术人员完成。系统采用面向对象方法开发,使用UML进行建模。系统的顶层用例图和类图分别如图13—16和图13—17所示。
阅读下列说明和C语言代码,将应填入(n)处的字句写在答题纸的对应栏内。
【说明】
设某一机器由n个部件组成,每一个部件都可以从m个不同的供应商处购得。供应商j供应的部件i具有重量W
ij
和价格C
ij
设计一个算法,求解总价格不超过上限cc的最小重量的机器组成。采用回溯法来求解该问题:首先定义解空间。解空间由长度为n的向量组成,其中每个分量取值来自集合{1,2,…,m},将解空间用树形结构表示。接着从根节点开始,以深度优先的方式搜索整个解空间。从根节点开始,根节点成为活节点,同时也成为当前的扩展节点。向纵深方向考虑第一个部件从第一个供应商处购买,得到一个新节点。判断当前的机器价格(C
11
)是否超过上限(cc),重量(W
11
)是否比当前已知的解(最小重量)大,若是,应回溯至最近的一个活节点;若否,则该新节点成为活节点,同时也成为当前的扩展节点,根节点不再是扩展节点。继续
向纵深方向考虑第二个部件从第一个供应商处购买,得到一个新节点。同样判断当前的机器价格(C
11
+C
21
)是否超过上限(cc),重量(W
11
+W
21
)是否比当前已知的解(最小重量)大。若是,应回溯至最近的一个活节点;若否,则该新节点成为活节点,同时也成为当前的扩展节点,原来的节点不再是扩展节点。以这种方式递归地在解空间中搜索,直到找到所要求的解或者解空间中已无活节点为止。
【C语言代码】
下面是该算法的C语言实现。
(1)变量说明
n:机器的部件数
m:供应商数
cc:价格上限
w[][]:二维数组,w[i][j]表示第j个供应商供应的第i个部件的重量
c[][]:二维数组,c[i][j]表示j个供应商供应的第i个部件的价格
bestlW:满足价格上限约束条件的最小机器重量
bestC:最小重量机器的价格
bestX[]:最优解,一维数组,bestX[i]表示第i个部件来自哪个供应商
CW:搜索过程中机器的重量
cp:搜索过程中机器的价格
x[]:搜索过程中产生的解,x[i]表示第i个部件来自哪个供应商
i:当前考虑的部件,从0到n—1
j:循环变量
(2)函数backtrack
intn=3;
intm=3;
int CC=4;
intw[3][3]={(1,2,3),(3,2,1),(2,2,2}};
intc[3][3]={(1,2,3),(3,2,1),(2,2,2}};
int bestW=8;
int bestC=0;
int bestX[3]=(0,0,0);
int CW=0;
int cp=0;
int x[3]=(0,0,0);
int backtrack(int i){
int j=0;
int found=0;
if(i>n一1){/*得到问题解*/
beStW=cw:
bestC=cp;
for(j=0;j
阅读以下说明和图,根据要求回答问题1~问题3。【说明】某航空公司会员积分系统(CFrequentFlyer)的主要功能描述如下:乘客只要办理该航空公司的会员卡,即可成为普卡会员(CBasic)。随着飞行里程数的积累,可以从普卡会员升级到银卡会员(CSilver)或金卡会员(CGold)。非会员(CNonMember)不能累积里程数。每年年末,系统根据会员在本年度累积的里程数对下一年会员等级进行调整。普卡会员在一年内累积的里程数若满25,000英里但不足50,000英里,则自动升级为银卡会员;若累积的里程数在50,000英里以上,则自动升级为金卡会员。银卡会员在一年内累积的里程数若在50,000英里以上,则自动升级为金卡会员。若一年内没有达到对应级别要求的里程数,则自动降低会员等级。金卡会员一年内累积的里程数若不足25,000英里,则自动降级为普卡会员;若累积的里程数达到25,000英里,但是不足50,000英里,则自动降级为银卡会员。银卡会员一年内累积的里程数若不足25,000英里,则自动降级为普卡会员。采用面向对象方法对会员积分系统进行分析与设计,得到如图13—3所示的状态图和图13—4所示的类图。
阅读下列说明,回答问题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);//其他代码省略
