问答题阅读下列说明,回答问题。 [说明] 某餐厅供应各种标准的营养套餐。假设菜单上共有n项食物m1,m2,...,mn,每项食物mi的营养价值为vi,价格为Pi,其中i=1,2…,n,套餐中每项食物至多出现一次。客人常需要一个算法来求解总价格不超过M营养价值最大的套餐。 [问题1] 下面是用动态规划策略求解该问题的伪代码,请填充其中的空缺(1)、(2)和(3)处。伪代码中的主要变量说明如下。 n:总食物项数。 v:营养价值组,下标从1~n,对应第1到第n页食物的营养价值。 p:价格数组,下标从1~n,对应第1到n项食物的价格。 M:总标准即套餐的价格不超过M。 x:解向量(数组),下标从1~n,其元素值为0或1,其中元素值为0表示对应的食物不出现在套餐中,元素值为1表示对应的食物出现在套餐中。 nv:n+1行M+1列的二维数组,其中行和列的下标均从0开始,nv[i][j]表示由前i项食物组合且价格不超过项j套餐的最大营养价值。问题最终要求的套餐的最大营养价值为nv[n][M]。伪代码如下: MaxNutrientValue(n,v,p,M,x) 1 for i=0 to n 2 nv[i][0]=0 3 for j=1 to M 4 nv[0][j] =0 5 for i=1 to n 6 for j=1 to M 7 if j< p[i]//若食物mi不能加入到套餐中 8 nv[i] [jl =nv[i-1][j] 9 else if (1) 10 nv[i][j] =nv[i-1][j] 11 else 12 nv[i] [j] =nv[i-1][j-p[i]]+v[i] 13 j=M 14 for i=n downto 1 15 if (2) 16 x[i] =0 17 else 18 x[i] =1 19 (3) 20 return x and nv[n] [M] [问题2] 现有5项食物, 每项食物的营养价值和价格如表9.3所示。 表9.3食物营养价值及价格表 编码 营养价值 价格 m1 200 50 m2 180 30 m3 225 45 m4 200 25 m5 50 5 若要求总价格不超过100的营养价值最大的套餐,则套餐应包含的食物有 (4) (用食物项的编码表示),对应的最大营养价值为 (5) 。 [问题3] 问题1中伪代码的时间复杂度为 (6) (用O符号表示)。
问答题阅读下列说明,回答问题。[说明]现需在某城市中选择一个社区建一个大型超市,使该城市的其他社区到该超市的距离总和最小。用图模型表示该城市的地图,其中顶点表示社区,边表示社区间的路线,边上的权重表示该路线的长度。现设计一个算法来找到该大型超市的最佳位置,即在给定图中选择一个顶点,使该顶点到其他各项点的最短路径之和最小。算法首先需要求出每个顶点到其他任一顶点的最短路径,即需要计算任意两个顶点之间的最短路径;然后对每个顶点,计算其他各项点到该顶点的最短路径之和;最后,选择最短路径之和最小的顶点作为建大型超市的最佳位置。[问题1]本题采用Floyd-Warshall算法求解任意两个顶点之间的最短路径。已知图G的顶点集合为V=1,2,...,n),W=Wij,n*n为权重矩阵。设为从顶点i到顶点,的一条最短路径的权重。当k=0时,不存在中间顶点,因此。当k>0时,该最短路径上所有的中间顶点均属于集合1,2,…,k,若中间顶点包括顶点k,则,若中间顶点不包括顶点k,则。于是得到如下递归式。因为对于任意路径,所有的中间顶点都在集合1,2,…,n内,因此矩阵n*n给出了任意两个顶点之间的最短路径,即对所有表示顶点i到顶点,的最短路径。下面是求解该问题的伪代码,请填充其中空缺的(1)~(6)处。伪代码中的主要变量说明如下。W:权重矩阵;n:图的顶点个数;SP:最短路径权重之和数组,SP[i]表示顶点f到其他各顶点的最短路径权重之和,i从1到n;min_SP:最小的最短路径权重之和;min_v:具有最小的最短路径权重之和的顶点;i:循环控制变量;j:循环控制变量;k:循环控制变量;LOCATE-SHOPPINGMALL(W,n)1D(0)=W2for(1)3fori=1ton4forj=1ton56(2)7else8(3)9fori=1ton10Sp[i]=011forj=1ton12(4)13min_SP=SP[1]14(5)15fori=2ton16ifmin_SP>SP[i]17min_SP=SP[i]18min_v=i19return(6)[问题2]问题1中伪代码的时间复杂度为______(用O符号表示)。
问答题阅读下列说明和C++代码,将应填入______处的字句写在下面。[说明]某大型商场内安装了多个简易的纸巾售卖机,自动售出2元钱一包的纸巾,且每次仅售出一包纸巾。纸巾售卖机的状态如图1所示。图1纸巾售卖机状态图采用状态(State)模式来实现该纸巾售卖机,得到如图2所示的类图。其中类State为抽象类,定义了投币、退币、出纸巾等方法接口。类SoldState、SoldOutState、NoQuanerstate和HasQuanerState分别对应图1中纸巾售卖机的4中状态:售出纸巾、纸巾售完、没有投币、有2元钱。图2类图[C++代码]#includeusingnamespacestd;//以下为类的定义部分classTissueMachine;//类的提前引用classState{public:virtualvoidinsertQuarter()=0;//投币virtualvoidejectQuarter()=0;//退币virtualvoidturnCrank()=0;//按下"出纸巾"按钮virtualvoiddispense()=0;//出纸巾};/*类SoldOutState、NoQuarterState、HasQuarterState、SoldState的定义省略,每个类中均定义了私有数据成员TissueMachine*tissueMachine*/ClassTissueMachine{private:______*soldOutState,*noQuarterState,*hasQuarterState,*soldState,*state;intcount;//纸巾数public:TissueMachine(intnumber);voidsetState(State*state);State*getHasQuarterState();State*getNoQuarterState();State*getSoldState();State*getSoldOutState();intgetCount();//其余代码省略};//以下为类的实现部分voidNoQuarterState::insertQuarter(){tissureMachine->setState______;}voidHasQuarterstate::ejectQuarter(){tissureMachine->setstate(______);}voidSoldState::dispense(){if(tissueMachine->getCount()>0){tissureMachine->setState______;}Else{tissureMachine->setState(______);}}//其余代码省略StatetissueMachine->getHasQuaiterState()或newHasQuarterStatetissueMachine->getNoQuarterState()或newNoQuarterStatetissueMachine->getNoQuarterState()或newNoQuarterStatetissueMachine->getSoldOutState()或newSoldOutState[解析]根据题意,本题使用的是状态模式,判断纸巾售卖机的状态,根据不同的状态执行不同的动作。State定义了纸巾售卖机所对应的一些状态,售出纸巾、纸巾售完等状态。类SoldOutState、NoQuarterState、HasQuarterState、SoldState均有类State派生而来。voidinsertQuarter()定义了一个“投币”的方法:在没有“2元钱”时,客户投币的方法。tissureMachine.setState是改变纸巾售卖机的状态,此时,客户已投入2元钱,故将此时的状态改为“有2元钱”的状态,纸巾售卖机调用“有2元钱”状态的方法即可。voidejectQuarter()定义了一个“退币”的方法:在有2元钱的状态下,用户按下“退币”按钮,纸巾售卖机将此时的状态改为“没有投币”状态,故直接调用getNoQuarterState()即可。根据纸巾售卖机状态图可知,当售出纸巾,并且纸巾数量仍大于O时,将返回“没有投币”状态,同第(3)小题的分析,此处应调用getNoQualterState()。根据纸巾售卖机状态图可知,当售出纸巾,并且纸巾数量等于0时,将返回“纸巾售完”状态,此处用了if…else判断语句,当纸巾数量仍大于0时,返回“没有投币”状态,否则,纸巾数量一定等于0,本段程序第五空是else下的一条语句,故此处是判断count为0时,纸巾售卖机的状态,显然,应调用getSoldOutState()。
问答题阅读下列说明,回答下面问题。[说明]某服装销售公司拟开发一套服装采购管理系统,以便对服装采购和库存进行管理。[需求分析](1)采购系统需要维护服装信息及服装在仓库中的存放情况。服装信息主要包括:服装编码、服装描述、服装类型、销售价格、尺码和面料,其中,服装类型为销售分类,服装按销售分类编码。仓库信息包括:仓库编码、仓库位置、仓库容量和库管员。系统记录库管员的库管员编码、姓名和级别。一个库管员可以管理多个仓库,每个仓库有一名库管员。一个仓库中可以存放多类服装,一类服装可能存放在多个仓库中。(2)当库管员发现有一类或者多类服装缺货时,需要生成采购订单。一个采购订单可以包含多类服装。每类服装可由多个不同的供应商供应,但具有相同的服装编码。采购订单主要记录订单编码、订货日期和应到货日期,并详细记录所采购的每类服装的数量、采购价格和对应的多个供应商。(3)系统需记录每类服装的各个供应商信息和供应情况。供应商信息包括:供应商编码、供应商名称、地址、企业法人和联系电话。供应情况记录供应商所供应服装的服装类型和服装质量等级。一个供应商可以供应多类服装,一类服装可由多个供应商供应。库管员根据入库时的服装质量情况,设定或修改每个供应商所供应的每类服装的服装质量等级,作为后续采购服装时,选择供应商的参考标准。[概念模型设计]根据需求阶段收集的信息,设计的实体联系图(不完整)如图所示。实体联系图[逻辑结构设计]根据概念模型设计阶段完成的实体联系图,得出如下关系模式(不完整)。库管员(库管员编码,姓名,级别)仓库信息(______,仓库位置,仓库容量)服装(服装编码,服装描述,服装类型,尺码,面料,销售价格)供应商(供应商编码,供应商名称,地址,联系电话,企业法人)供应情况(______,服装质量等级)采购订单(______)采购订单明细(______)
问答题阅读以下说明和C程序,将应填入空白处的字句。[说明]现有n(n<1000)节火车车厢,顺序编号为1、2、3、…、n,按编号连续依次从A方向的铁轨驶入,从B方向铁轨驶出,一旦车厢进入车站(Station)就不能再回到A方向的铁轨上;一旦车厢驶入B方向铁轨就不能再回到车站,如图所示,其中Station为栈结构,初始为空且最多能停放1000节车厢。车站示意图下面的C程序判断能否从B方向驶出预先指定的车厢序列,程序中使用了栈类型STACK,关于栈基本操作的函数原型说明如下。voidInitStack(STACK*s):初始化栈。voidPush(STACK*s,inte):将一个整数压栈,栈中元素数目增1。voidPop(STACK*s):栈顶元素出栈,栈中元素数目减1。intTop(STACKs):返回非空栈的栈项元素值,栈中元素数目不变。intIsEmpty(STACKs):若是空栈则返回1,否则返回0。#include<stdio.h>/*此处为栈类型及其基本操作的定义,省略*/intmain(){STACKstation;intstate[1000];intn;/*车厢数*/intbegin,i,j,maxNo;/*maxNo为A端正待入栈的车厢编号*/printf("请输入车厢数:");scanf("%d",printf("请输入需要判断的车厢编号序列(以空格分隔):");if(n<1)return-1;for(i=0;i<n;i++)/*读入需要驶出的车厢编号序列,存入数组state[]*/scanf("%d",______;/*初始化栈*/maxNo=1;for(i=0;i<n;){/*检查输出序列中的每个车厢号state[i]是否能从栈中获取*/if(______){/*当栈不为空时*/if(state[i]=Top(station)){/*栈顶车厢号等于被检查车厢号*/printf("%d",Top(station));Pop(i++;}elseif(______){printf("error\n");return1;}else{begin=______;for(j=begin+1;j<=state[i];j++){Push(}}}else{/*当栈为空时*/begin=maxNo;for(j=begin;j<=state[i];j++){Push(}maxNo=______;}}printf("OK");return0;}
问答题【问题4】
请说明逻辑数据流图(LogicalData Flow Diagram)和物理数据流图(PhysicalData Flow Diagram)之间的主要差别。
问答题【问题1】
(1)数据流图1-3缺少了一条数据流(在图1-4中也未给出该数据流),请给出此数据流的起点和终点,并采用说明中的词汇给出此数据流名。
(2)数据流图1-4中缺少了与“查询房屋”加工相关的数据流,请指出此数据流的起点和终点。
问答题【说明】一个印刷电路板的布线区域可分成n×m个方格,如图4-1(a)所示,现在需要确定电路板中给定的两个方格的中心点之间的最短布线方案。电路只能沿水平或垂直方向布线,如图4-1(b)中虚线所示。为了避免线路相交,应将已布过线的方格做成封锁标记,其他线路不允许穿过被封锁的方格。设给定印刷电路板的起始方格x与目的方格y尚未布线,求这两个方格间最短布线方案的基本思路是:从起始方格x开始,考查与起始方格距离为k的某一个可达方格是目标方格y时为止,或者由于不存在从x到y的布线方案而终止。布线区域中的每一个方格与其相邻的上、下、左、右4个方格之间的距离为1,依次沿下、右、上、左这4个方向考查,并用一个队列记录可达方格的位置。表4-1给出了沿这4个方向前进1步时相对于当前方格的相对偏移量。{{B}}表4-1相对偏移量{{/B}}搜索顺序i方向行偏移量列偏移量0上-101右012上-103左0-1 例如,设印刷电路板的布线区域可划分为一个6×8的方格阵列,如图4-2(a)所示,其中阴影表示已封锁方格。从起始方格x(位置[3,2],标记为0)出发,按照下、右、上、左的方向依次考查,所标记的可达方格如图4-2(a)所示,目标方格为y)位置[4,7],标记为10),相应的最短布线路径如图4-2(b)虚线所示。 如图4-3和图4-4所示的流程图即利用上述思路,在电路板方格阵列中进行标记,图中使用的主要符号如表4-2所示。在图4-4中,设置电路板初始格局,即将可布线方格置为数值-1、已布线方格(即封锁方格)置为-9。设置方格阵列“围墙”的目的是省略方格位置的边界条件判定,方法是在四周附加格,并将其标记为-9(与封锁标记相同)。 {{B}}表4-2主要符号{{/B}}符号含义 Grid 全局二维数组Grid[N+2,M+2],表示电路板方格阵列,初始时数组元素Grid[i,j]的值为-1表示当前方格可布线,为-9表示前方格不可布线 offset 一维数组offset[4]:offset[i](0≤I≤3)的分量为r(行偏移景)和c(列偏移量),按照表4-1的内容设置其值 Startpos、 Endpos、 Cuapos、T 分别表示起始方格、目标方格、当前方格和临时方格,其位置用分量度row和col确定 Q.insen(s) 将方格s的位置信息加入队列 Q.delete() 删除非空队列的队头元素,并返回该元素 Q.emply() 若队列Q为空,则返回true;否则返回false供选择的答案:[a]Found≠true[b]Found=true[c]T=EndPos[d]Q.insert(T)[e]T←Q.delete()[f]CurPos=EndPos[g]i4[h]CurPos←Q.delete()[i]Grid[T.row,T.col]=-1[j]Grid[T.row,T.col]≠-1
问答题试题六阅读下列说明和Java代码,将应填入(n)处的字句写在答题纸的对应栏内。【说明】某软件系统中,已设计并实现了用于显示地址信息的类Address(如图6-1所示),现要求提供基于Dutch语言的地址信息显示接口。为了实现该要求并考虑到以后可能还会出现新的语言的接口,决定采用适配器(Adapter)模式实现该要求,得到如图6-1所示的类图。
问答题试题一阅读下列说明和图,回答问题1至问题4,将解答填入答题纸的对应栏内。【说明】某会议中心提供举办会议的场地设施和各种设备,供公司与各类组织机构租用。场地包括一个大型报告厅、一个小型报告厅以及诸多会议室。这些报告厅和会议室可提供的设备有投影仪、白板、视频播放/回放设备、计算机等。为了加强管理,该中心欲开发一会议预订系统,系统的主要功能如下。(1)检查可用性。客户提交预订请求后,检查预订表,判定所申请的场地是否在申请日期内可用;如果不可用,返回不可用信息。(2)临时预订。会议中心管理员收到客户预定请求的通知之后,提交确认。系统生成新临时预订存入预订表,并对新客户创建一条客户信息记录加以保存。根据客户记录给客户发送临时预订确认信息和支付定金要求。(3)分配设施与设备。根据临时预订或变更预定的设备和设施需求,分配所需设备(均能满足用户要求)和设施,更新相应的表和预订表。(4)确认预订。管理员收到客户支付定金的通知后,检查确认,更新预订表,根据客户记录给客户发送预订确认信息。(5)变更预订。客户还可以在支付余款前提交变更预订请求,对变更的预订请求检查可用性,如果可用,分配设施和设各;如果不可用,返回不可用信息。管理员确认变更后,根据客户记录给客户发送确认信息。(6)要求付款。管理员从预订表中查询距预订的会议时间两周内的预定,根据客户记录给满足条件的客户发送支付余款要求。(7)支付余款。管理员收到客户余款支付的通知后,检查确认,更新预订表中的已支付余款信息。现采用结构化方法对会议预定系统进行分析与设计,获得如图1-1所示的上下文数据流图和图1-2所示的0层数据流图(不完整)。
问答题【问题3】
为建立功能完善的库存管理系统,除了查询、统计、报表输出功能外,还应具有哪些对提高企业效益至关重要的功能?
问答题阅读下列说明和图,回答下面问题。[说明]某大型企业的数据中心为了集中管理、控制用户对数据的访问并支持大量的连接需求,欲构建数据管理中间件,其主要功能如下。(1)数据管理员可通过中间件进行用户管理、操作管理和权限管理。用户管理维护用户信息,用户信息(用户名、密码)存储在用户表中;操作管理维护数据实体的标准操作及其所属的后端数据库信息,标准操作和后端数据库信息存放在操作表中;权限管理维护权限表,该表存储用户可执行的操作信息。(2)中间件验证前端应用提供的用户信息。若验证不通过,返回非法用户信息;若验证通过,中间件将等待前端应用提交操作请求。(3)前端应用提交操作请求后,中间件先对请求进行格式检查。如果格式不正确,返回格式错误信息;如果格式正确,则进行权限验证(验证用户是否有权执行请求的操作),若用户无权执行该操作,则返回权限不足信息,否则进行连接管理。(4)连接管理连接相应的后台数据库并提交操作。连接管理先检查是否存在空闲的数据库连接,如果不存在,新建连接;如果存在,则重用连接。(5)后端数据库执行操作并将结果传给中间件,中间件对收到的操作结果进行处理后,将其返回给前端应用。现采用结构化方法对系统进行分析与设计,获得如图1所示的顶层数据流图和如图2所示的0层数据流图。图1顶层数据流图图20层数据流图
问答题阅读下列说明和图,回答问题。[说明]某学校拟开发一套实验管理系统,对各课程的实验安排情况进行管理。[需求分析]一个实验室可进行多种类型不同的实验。由于实验室和实验员资源有限,需根据学生人数分批次安排实验室和实验员。一门课程可以为多个班级开设,每个班级每学期可以开设多门课程。一门课程的一种实验可以根据人数、实验室的可容纳人数和实验类型,分批次开设在多个实验室的不同时间段。一个实验室的一次实验可以分配多个实验员负责辅导实验,实验员给出学生的每次实验成绩。(1)课程信息包括:课程编号、课程名称、实验学时、授课学期和开课的班级等信息;实验信息记录该课程的实验进度信息,包括:实验名、实验类型、学时、安排周次等信息,如表7.9所示。表7.9课程及实验信息课程编号15054037课程名称数字电视原理实验学时12班级电0501,信0501,计0501授课院系机械与电气工程授课学期第三学期序号实验名实验类难度学时安排周次1505403701音视频AD-DA实验验证性1231505403702音频编码实验验证性2251505403703视频编码实验演示性0.519(2)以课程为单位制定实验安排计划信息,包括:实验地点,实验时间、实验员等信息,实验计划如表7.10所示。表7.10实验安排计划课程编号15054037课程名称数字电视原理安排学期2009年秋总人数220实验编号实验名实验员试验时间地点批次号人数1505403701音视频AD-DA实验盛×,陈×第3周周四晚上实验三楼3101601505403701音视频AD-DA实验盛×,陈×第3周周四晚上实验三楼3102601505403701音视频AD-DA实验吴×,刘×第3周周五晚上实验三楼3113601505403701音视频AD-DA实验吴×第3周周五晚上实验三楼3114401505403702音频编码实验盛×,刘×第5周周一下午实验四楼410170(3)由实验员给出每个学生每次实验的成绩,包括:实验名、学号、姓名、班级、实验成绩等信息,实验成绩如表7.11所示。表7.11实验成绩实验员: 盛×实验名音视频AD-DA实验课程名数字电视原理学号姓名班级实验成绩030501001陈民信050187学号姓名班级实验成绩030501002刘志信050178040501001张勤计050186(4)学生的实验课程总成绩根据每次实验的成绩以及每次实验的难度来计算。[概念模型设计]根据需求阶段收集的信息,设计的实体联系图(不完整)如图7.3所示。[逻辑结构设计]根据概念模型设计阶段完成的实体联系图,得出如下关系模式(不完整):课程(课程编号,课程名称,授课院系,实验学时)班级(班级号,专业,所属系)开课情况((1),授课学期)实验((2),实验类型,难度,学时,安排周次)实验计划((3),实验时间,人数)实验员((4),级别)实验室(实验室编号,地点,开放时间,可容纳人数,实验类型)学生((5),姓名,年龄,性别)实验成绩((6),实验成绩,评分实验员)1.7.3中的联系和联系的类型。
问答题现有如下两个关系模式: Employees(Eid,Name,DeptNO) Departments(DeptNO,DeptName,TotalNumber) Employees关系模式描述了职工编号、姓名和所在部门;Depa rtments关系模式描述了部门编号、名称和职工总数。 请按SQL Server所采用的Transact—SQL语法格式编写具有以下功能的后触发性触发器:每当在Employees中插入一行数据时,相应部门的职工总数就加1。
问答题阅读下列说明,回答下面问题。
[说明]
某公司拟开发一多用户电子邮件客户端系统,部分功能的初步需求分析结果如下。
(1)邮件客户端系统支持多个用户,用户信息主要包括用户名和用户密码,且系统中的用户名不可重复。
(2)邮件账号信息包括邮件地址及其相应的密码,一个用户可以拥有多个邮件地址(如user1@123.com)。
(3)一个用户可拥有一个地址簿,地址簿信息包括联系人编号、姓名、电话、单位、地址、邮件地址1、邮件地址2、邮件地址3等信息。地址簿中一个联系人只能属于一个用户,且联系人编号唯一标识一个联系人。
(4)一个邮件账号可以含有多封邮件,一封邮件可以含有多个附件。邮件主要包括邮件号、发件人地址、收件人地址、邮件状态、邮件主题、邮件内容、发送时间、接收时间。其中,邮件号在整个系统内唯一标识一封邮件,邮件状态有己接收、待发送、已发送和已删除4种,分别表示邮件是属于收件箱、发件箱、己发送箱和废件箱的。一封邮件可以发送给多个用户。附件信息主要包括附件号、附件文件名、附件大小。一个附件只属于一封邮件,附件号仅在一封邮件内唯一。
问答题阅读下列说明和C++代码,将应填入______处。[说明]现要求实现一个能够自动生成求职简历的程序,简历的基本内容包括求职者的姓名、性别、年龄及工作经历。希望每份简历中的工作经历有所不同,并尽量减少程序中的重复代码。现采用原型模式(Prototype)来实现上述要求,得到如下图所示的类图。类图[C++代码]#include<string>Usingnamespacestd;ClassCloneable{Public:______;};ClassWorkExperience:publicCloneable{//工作经历Private:StringworkDate;Stringcompany;PubliC:Cloneable*Clone(){______;Obj->workDate=this->workDate;Obj->company=this->company;Returnobj;}//其余代码省略};ClassResume:publicCloneable{//简历Private:Stringname;stringsex;stringage;WorkExperience*work;Resume(WorkExperience*work){This->work=______;}Public:Resume(stringname)(/*实现省略*/}VoidsetPersonalInfo(stringsex,stringage){/*实现省略*/}VoidsetWorkExperience(stringworkDate,stringcompany){/*实现省略*/}Cloneable*Clone(){______;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=______;B->SetWorkExperience("2001~2006","YYY公司");Return0;}
问答题阅读下列说明,回答问题。[说明]假设某大型商业企业由商品配送中心和连锁超市组成,其中商品配送中心包括采购、财务、配送等部门。为实现高效管理,设计了商品配送中心信息管理系统,其主要功能描述如下。(1)系统接收由连锁超市提出的供货淆求,并将其记录到供货请求记录文件。(2)在接到供货请求后,从商品库存记录文件中进行商品库存信息查询。如果库存满足供货请求,则给配送处理发送配送通知;否则,向采购部门发出缺货通知。(3)配送处理接到配送通知后,查询供货请求记录文件,更新商品库存记录文件,并向配送部门发送配送单,在配送货品的同时记录配送信息至商品配送记录文件。(4)采购部门接到缺货通知后,与供货商洽谈,进行商品采购处理,合格商品入库,并记录采购清单至采购清单记录文件、向配送处理发出配送通知,同时通知财务部门给供货商支付货款。该系统采用结构化方法进行开发,得到待修改的数据流图,如图4.11所示。1.使用说明中的词语,给出图4.11中外部实体E1~E4的名称和数据存储D1~D4的名称。
问答题阅读下列说明和C++代码,将应填入______处的字句写在下面。[说明]某饭店在不同的时段提供多种不同的餐饮,其菜单的结构图如图1所示。现在采用组合(Composition)模式来构造该饭店的菜单,使得饭店可以方便地在其中添加新的餐饮形式,得到如图2所示的类图,其中MenuComponent为抽象类,定义了添加(add)新菜单和打印饭店所有菜单信息(print)的方法接口。类Menu表示饭店提供的每种餐饮形式的菜单,如煎饼屋菜单、咖啡屋菜单等。每种菜单中都可以添加子菜单,例如图1中的甜点菜单,类MenuItem表示菜单中的菜式。图1菜单结构图图2类图[C++代码]#include<iostream>#include<list>#include<string>usingnamespacestd;classMenuComponent{protected:stringname;public:MenuComponent(stringname){this->name=name;}stinggetName(){returnname;}______//添加新菜单virtualvoidprint()=0;//打印菜单信息};classMenuItem:publicMenuComponent{private:doubleprice;public:MenuItem(stringname,doubleprice):MenuComponent(name){this->price=price;}doublegetPrice(){returnprice;}voidadd(MenuComponent*menuComponent)(return;)//添加新菜单voidprint(){cout<<""<<getName()<<","<<getPrice<<end1;}};classMenu:publicMenuComponent{private:list<______>menuComponents;public:Menu(stringname):MenuComponent(name){}voidadd(MenuComponent*menuComponent)//添加新菜单{______;}voidprint(){cout<<"\n"<<getName()<<"\n----------------"<<end1;std::list<MenuComponent*>::iteratoriter;for(iter=menuComponents.begin();iter!=menuComponents.end();iter++)______->print();}};voidmain(){MenuComponent*allMenus=newMenu("ALLMENUS");MenuComponent*dinerMenu=newMenu("DINERMENU");//创建更多的Menu对象,此处代码省略allMenus->add(dinerMenu);//将dinerMenu添加到餐厅菜单中……//为餐厅增加更多的菜单,此处代码省略______->print();//打印饭店所有菜单信息}
问答题阅读下列说明,回答问题。[说明]现准备为某银行开发一个信用卡管理系统CCMS,该系统的基本功能为:(1)信用卡申清。非信用卡客户填写信用卡申请表,说明所要申请的信用卡类型及申请者的基本信息,提交CCMS。如果信用卡申请被银行接受,CCMS将记录该客户的基本信息,并发送确认函给该客户,告知客户信用卡的有效期及信贷限额;否则该客户将会收到一封决绝函。非信用卡客户收到确认函后成为信用卡客户。(2)信用卡激活。信用卡客户向CCMS提交激活清求,用信用卡号和密码激活该信用卡。激活操作结束后,CCMS将激活通知发送给客户,告知客户其信用卡是否被成功激活。(3)信用卡客户信息管理。信用卡客户的个人信息可以在CCMS中进行在线管理。每位信用卡客户可以在线查询和修改个人信息。(4)交易信息查询。信用卡客户使用信用卡进行的每一笔交易都会记录在CCMS中。信用卡客户可以通过CCMS查询并核实其交易信息(包括信用卡交易记录及交易额)。图4.9和图4.10分别给出了该系统的顶层数据流图和0层数据流图的初稿。
问答题阅读下列说明和C++代码,在(n)处填入适当的字句。[说明]现欲实现一个图像浏览系统,要求该系统能够显示BMP、JPEG和GIF三种格式的文件,并且能够在Windows和Linux两种操作系统上运行。系统首先将BMP、JPEG和GIF三种格式的文件解析为像素矩阵,然后将像素矩阵显示在屏幕上。系统需具有较好的扩展性以支持新的文件格式和操作系统。为满足上述需求并减少所需生成的子类数目,采用桥接(Bridge)设计模式进行设计所得类图如图10.20所示。采用该设汁模式的原因在于:系统解析BMP、GIF与JPEG文件的代码仅与文件格式相关,而在屏幕上显示像素矩阵的代码则仅与操作系统相关。[C++代码]classMatrix//各种格式的文件最终都被转化为像素矩阵//此处代码省略;classimageImppublic:virtualvoiddoPaint(Matrixm)=0;//显示像素矩阵m;classWinImp:publicImageImppublic:voiddoPaint(Matrixm)/*调用windows系统的绘制函数绘制像素矩阵*/;classLinuxImp:publicImageImppublic:voiddoPaint(Matrixm)/*调用Linux系统的绘制函数绘制像素矩阵*/;classImagepublic:voidsetImp(imageImp*imp)(1)=imp;virtualvoidparseFile(stringfileName)=0;protected:(2)*imp;;classBMP:publicImagepublic:voidparseFile(stringfileName)//此处解析BMP文件并获得…个像素矩阵对象m(3);//显示像素矩阵m;classGIF:publicImage//此处代码省略;classJPEG:publicImage//此处代码省略;voidmain()//在Windows操作系统上查看demo.bmp图像文件Image*image1=(4);ImageImp*ImageImp1=(5);(6);image1->parseFile("demo.bmp");现假设该系统需要支持10种格式的图像文件和5种操作系统,不考虑类Matrix,若采用桥接设计模式则至少需要设计(7)个类。
