问答题阅读以下说明和数据流图,回答下面问题。[说明]现准备为某银行开发一个信用卡管理系统CCMS,该系统的基本功能为:(1)信用卡申请。非信用卡客户填写信用卡申请表,说明所要申请的信用卡类型及申请者的基本信息,提交CCMS。如果信用卡申请被银行接受,CCMS将记录该客户的基本信息,并发送确认函给该客户,告知客户信用卡的有效期及信贷限额;否则,该客户将会收到一封拒绝函。非信用卡客户收到确认函后成为信用卡客户。(2)信用卡激活。信用卡客户向CCMS提交激活请求,用信用卡号和密码激活该信用卡。激活操作结束后,CCMS将激活通知发送给客户,告知客户其信用卡是否被成功激活。(3)信用卡客户信息管理。信用卡客户的个人信息可以在CCMS中进行在线管理。每位信用卡客户可以在线查询和修改个人信息。(4)交易信息查询。信用卡客户使用信用卡进行的每一笔交易都会记录在CCMS中。信用卡客户可以通过CCMS查询并核实其交易信息(包括信用卡交易记录及交易额)。图1和图2分别给出了该系统的顶层数据流图和0层数据流图的初稿。图1顶层数据流图图20层数据流图
问答题阅读下列说明和C++代码,将应填入空白处的字句写在答题纸的对应栏内。[说明]某咖啡店当卖咖啡时,可以根据顾客的要求在其中加入各种配料,咖啡店会根据所加入的配料来计算费用。咖啡店所供应的咖啡及配料的种类和价格如表所示。咖啡及配料表咖啡价格/杯配料价格,份蒸馏咖啡(Espresso)25摩卡(Mocha)10深度烘焙咖啡(DarkRoast)20奶泡(Whip)8现采用装饰器(Decorator)模式来实现计算费用的功能,得到如图所示的类图。类图[C++代码]#include<iostream>#include<string>usingnamespacestd;constintESPRESSO_PRICE=25;constintDRAKROAST_PRICE=20;constintMOCHA_PRICE=10;constintWHIP_PRICE=8;classBeverage{//饮料______:stringdescription;public:______(){returndescription;}______;};classCondimentDecorator:publicBeverage{//配料protected:______;};classEspresso:publicBeverage{//蒸馏咖啡public:Espresso(){description="Espresso";}intcost(){returnESPRESSO_PRICE;}};classDarkRoast:publicBeverage{//深度烘焙咖啡public:DarkRoast(){description*"DardRoast";}intcost(){returnDRAKROAST_PRICE;}};classMocha:publicCondimentDecorator{//摩卡public:Mocha(Beverage*beverage){this->beverage=beverag;}stringgetDescription(){returnbeverage->getDescription()+",Mocha";}intcost(){returnMOCHA_PRICE+beverage->cost();}};classWhip:publicCondimentDecorator{//奶泡public:Whip(Beverage*beverage){this->beverage=beverage;}stringgetDescription(){returnbeverage->getDescription()+",Whip";}intcost(){returnWHIP_PRICE+beverage->cost();}};intmain(){Beverage*beverage=newDarkRoast();beverage=newMocha(______);beverage=newWhip(______);cout<<beverage->getDeScription()<<"¥"<<beverage->cost()endl;return0;}编译运行上述程序,其输出结果为:DarkRoast,Mocha,Whip¥38
问答题阅读下列说明和C代码,回答问题1至问题3,将解答写在对应栏内。[说明]堆数据结构定义如下:对于n个元素的关键字序列a1,a2,…,an),当且仅当满足下列关系时称其为堆。在一个堆中,若堆顶元素为最大元素,则称为大顶堆;若堆顶元素为最小元素,则称为小顶堆。堆常用完全二叉树表示,图21-16是一个大顶堆的例子。堆数据结构常用于优先队列中,以维护由一组元素构成的集合。对应于两类堆结构,优先队列也有最大优先队列和最小优先队列,其中最大优先队列采用大顶堆,最小优先队列采用小顶堆。以下考虑最大优先队列。假设现已建好大顶堆A,且已经实现了调整堆的函数heapify(A,n,index)。对C代码中需要完善的3个函数说明如下。(1)heapMaximum(A):返回大顶堆A中的最大元素。(2)heapExtractMax(A):去掉并返回大项堆A的最大元素,将最后一个元素“提前”到堆顶位置,并将剩余元素调整成大顶堆。(3)maxHeapInsert(A,key):把元素key插入到大顶堆A的最后位置,再将A调整成大顶堆。优先队列采用顺序存储方式,其存储结构定义如下:#definePARENT(i)i/2typedefstructarrayint*int_arrav;//优先队列的存储空间首地址intarray_size;//it先队列的长度intcapacity;//优先队列存储空间的容量ARRAY;[C代码](1)函数heapMaximumintheapMaximum(ARRAY*A)return(1);(2)函数heapExtractMaxintheapExtractMax(ARRAY*A)intmax;max=A->int_array[0];(2);A->array_size--;heapify(A,A->array_size,0);//将剩余元素调整成大顶堆returnmax;(3)函数maxHeapInsertintmaxHeapInsert(ARRAY*A,intkey)inti,*p;if(A->array_size==A->capacity)//存储空间的容量不够时扩充空间p=(int*)realloc(A->int_array,A->capacity*2*sizeof(int));if(!p)return-1;A->int_array=p;A->capacity=2*A->capacity;A->array_size++;i=(3);while(i>0&&(4))A->int_array[i]=A->int_array[PARENT(i)];i=PARENT(i);(5);return0;
问答题【问题2】
创建Customers表时,cid使用INTEGER数据类型,cname使用CHAR(80)数据类型,address使用CHAR(200)数据类型,cardnum使用CHAR(16)数据类型并且要求此列值唯一。请在下列用于创建表Customers的SQL语句空缺处填入正确的内容。
CREATE TABLE Customers(cid INTEGER NOT NULL,
cname CHAR(80) NOT NULL,
address CHAR(200),
eardnum CHAR(16) NOT NULL,
{{U}}(1) {{/U}},
{{U}}(2) {{/U}})
问答题阅读下列说明,回答下面问题。[说明]某集团公司在全国不同城市拥有多个大型超市,为了有效管理各个超市的业务工作,需要构建一个超市信息管理系统。[需求分析结果](1)超市信息包括:超市名称、地址、经理和电话,其中超市名称能唯一确定超市关系的每一个元组,每个超市只有一名经理。(2)超市设有计划部、财务部、销售部等多个部门,每个部门只有一名部门经理,有多名员工,每个员工只属于一个部门。部门信息包括:超市名称、部门名称、部门经理和联系电话。超市名称、部门名称能唯一确定部门关系的每一个元组。(3)员工信息包括:员工号、姓名、超市名称、部门名称、职位、联系方式和工资。其中,职位信息包括:经理、部门经理、业务员等。员工号能唯一确定员工关系的每一个元组。(4)商品信息包括:商品号、商品名称、型号、单价和数量。商品号能唯一确定商品关系的每一个元组。一名业务员可以负责超市内多种商品的配给,一种商品可以由多名业务员配给。[概念模型设计]根据需求分析阶段收集的信息,设计的实体联系图和关系模式(不完整)如下图所示。实体联系图[关系模式设计]超市(超市名称,经理,地址,电话)部门((a),部门经理,联系电话)员工((b),姓名,联系方式,职位,工资)商品(商品号,商品名称,型号,单价,数量)配给((c),配给时间,配给数量,业务员)
问答题【问题1】
根据E-R图中给出的词汇,按照“有关模式名(属性,属性,...)”的格式,将此E-R图转换为4个关系模式,并指出每个关系模式中的主键和外键,其中模式名根据需要取实体名或联系名。
问答题阅读下列说明,回答下面问题。
[说明]
现需在某城市中选择一个社区建一个大型超市,使该城市的其他社区到该超市的距离总和最小。用图模型表示该城市的地图,其中顶点表示社区,边表示社区间的路线,边上的权重表示该路线的长度。现设计一个算法来找到该大型超市的最佳位置:即在给定图中选择一个顶点,使该顶点到其他各项点的最短路径之和最小。算法首先需要求出每个顶点到其他任一顶点的最短路径,即需要计算任意两个顶点之间的最短路径;然后对每个顶点,计算其他各项点到该顶点的最短路径之和;最后,选择最短路径之和最小的顶点作为建大型超市的最佳位置。
问答题阅读下列说明和图,回答下面问题。[说明]某会议策划公司为了方便客户,便于开展和管理各项业务活动,需要构建一个基于网络的会议预定系统。[需求分析](1)会议策划公司设有受理部、策划部和其他部门,部门信息包括部门号、部门名称、部门主管、电话和邮箱号,每个部门有多名员工处理部门的日常事务,每名员工只能在一个部门工作,每个部门有一名主管负责管理本部门的事务和人员。(2)员工信息包括员工号、姓名、部门号、职位、联系方式和工资;其中,职位包括主管、业务员、策划员等。业务员负责受理会议申请,若申请符合公司规定,则置受理标志并填写业务员的员工号,策划部主管为已受理的会议申请制定策划任务,包括策划内容、参与人数、要求完成时间等。一个已受理的会议申请对应一个策划任务,一个策划任务只对应一个已受理的会议申请,但一个策划任务可由多名策划员参与执行,且一名策划员可以参与多项策划任务。(3)客户信息包括客户号、单位名称、通信地址、所属省份、联系人、联系电话、银行账号。其中,一个客户号唯一标识一个客户。一个客户可以提交多个会议申请,但一个会议申请对应唯一的一个客户号。(4)会议申请信息包括申请号、开会日期、会议地点、持续天数、会议人数、预算费用、会议类型、酒店要求、会议室要求、客房类型、客房数、联系人、联系方式、受理标志和业务员的员工号等。客房类型有豪华套房、普通套房、标准间、三人间等,且申请号和客房类型决定客房数。[概念模型设计]根据需求阶段收集的信息,设计的实体联系图和关系模式(不完整)如下图所示。实体联系图[关系模式设计]部门(部门号,部门名称,主管,电话,邮箱号)员工(员工号,姓名,(a),联系方式,工资)客户(客户号,单位名称,通信地址,所属省份,联系人,联系电话,银行账号)会议申请((b),开会日期,会议地点,持续天数,会议人数,预算费用,会议类型,酒店要求,会议室要求,客房数,联系人,联系方式,受理标志,员工号)策划任务((c),策划内容,参与人数,要求完成时间)执行策划((d),实际完成时间)
问答题阅读下列说明和图,回答下面问题。[说明]某家电销售电子商务公司拟开发一套信息管理系统,以方便对公司的员工、家电销售、家电厂商和客户等进行管理。[需求分析](1)系统需要维护电子商务公司的员工信息、客户信息、家电信息和家电厂商信息等,员工信息主要包括:工号、姓名、性别、岗位、身份证号、电话、住址,其中岗位包括部门经理和客服等;客户信息主要包括:客户ID、姓名、身份证号、电话,住址、账户余额;家电信息主要包括:家电条码、家电名称、价格、出厂日期、所属商;家电厂商信息包括:厂商ID、厂商名称、电话、法人代表信息、厂址。(2)电子商务公司根据销售情况,由部门经理向家电厂商订购各类家电,每个家电厂商只能由一名部门经理负责。(3)客户通过浏览电子商务公司网站查询家电信息,与客服沟通获得优惠后,在线购买。[概念模型设计]根据需求阶段收集的信息,设计的实体联系图(不完整)如下图所示。[逻辑结构设计]根据概念模型设计阶段完成的实体联系图,得出如下关系模式(不完整)。●客户(客户ID、姓名、身份证号、电话、住址、账户余额)●员工(工号、姓名、性别、岗位、身份证号、电话、住址)●家电(家电条码、家电名称、价格、出厂日期、(1))●家电厂商(厂商ID、厂商名称、电话、法人代表信息、厂址、(2))●购买(订购单号、(3)、金额)
问答题阅读下列说明和图,回答问题。[说明]某运输公司决定为新的售票机开发车票销售的控制软件。图10.8给出了售票机的面板示意图以及相关的控制部件。售票机相关部件的作用如下所述。(1)目的地键盘用来输入行程目的地的代码(例如,200表示总站)。(2)乘客可以通过车票键盘选择车票种类(单程票、多次往返票和坐席种类)。(3)继续/取消键盘上的取消按钮用于取消购票过程,继续按钮允许乘客连续购买多张票。(4)显示屏显示所有的系统输出和用户提示信息。(5)插卡口接受MCard(现金卡),硬币口和纸币槽接受现金。(6)打印机用于输出车票。假设乘客总是支付恰好需要的金额而无需找零,售票机的维护工作(取回现金、放入空白车票等)由服务技术人员完成。系统采用面向对象方法开发,使用UML进行建模。系统的顶层用例图和类图分别如图10.9和图10.10所示。[问题1]根据说明中的描述,给出图10.9中A1和A2所对应的参与者,U1所对应的用例,以及(1)、(2)处所对应的关系。[问题2]根据说明中的描述,给出图10.10中缺少的C1~C4所对应的类名以及(3)~(6)处所对应的多重度。[问题3]图10.10中的类图设计采用了中介者(Mediator)设计模式,请说明该模式的内涵。
问答题阅读下列说明和Java代码,将应填入______处的字句写在下面。[说明]某咖啡店当卖咖啡时,可以根据顾客的要求在其中加入各种配料,咖啡店会根据所加入的配料来计算费用。咖啡店所供应的咖啡及配料的种类和价格如下表所示。咖啡价格/杯(¥)配料价格/杯(¥)蒸馏咖啡(Espresso)25摩卡(Mocha)10深度烘焙咖啡(DarkRoast)20奶泡(Whip)8现采用装饰器(Decorator)模式来实现计算费用的功能,得到如下图所示的类图。[Java代码]importjava.util.*:______classBeverage{//饮料Stringdescription="UnknownBeverage";public______(){returndescription;}public______;}abstractclasscondimentDecoratorextendsBeverage{//配料______;}classEspressoextendsBeverage{//蒸馏咖啡privatefinalintESPRESSOPRICE=25;publiCEspresso(){description="Espresso";}publicintcost(){returnESPRESSOPRICE;}}classDarkRoastextendsBeverage(//深度烘焙咖啡privatefinalintDARKROASTPRICE=20;publicDarkRoast(){description="DarkRoast";}publicintcost(){rcturnDARKROASTPRICE;}}classMochaextendsCondimentDecorator{//摩卡privatefinalintMOCHAPRICE=10;publicMocha(Beveragebeverage){this.beverage=beverage;}publicStringgetDescription(){returnbeverage.getDeScription0+",Mocha";}publicintcost(){returnMOCHA_PRICE+beverage.cost();}}classWhipextendsCondimentDecorator{//奶泡privatefinalintWHIPPRICE=8;publicWhip(Beveragebeverage){this.beverage=beverage;}publicStringgetDescription(){returnbeverage.getDescription()+",Whip";}publicintcost(){returnWHIP_PRICE+beverage.cost();}}publicclassCoffee{publicstaticvoidmain(Stringargs[]){Beveragebeverage=newDarkRoast();beverage=newMocha(______);beverage=newWhip(______);System.out.print1n(beverage.getDescription()+"¥"+beverage.cost());}}编译运行上述程序,其输出结果为:DarkRoast,Mocha,Whip¥38
问答题阅读下列说明和C代码,回答下面问题。[说明]用两台处理机A和B处理n个作业。设A和B处理第i个作业的时间分别为ai和bi。由于各个作业的特点和机器性能的关系,对某些作业,在A上处理时间长,而对某些作业在B上处理时间长。一台处理机在某个时刻只能处理一个作业,而且作业处理是不可中断的,每个作业只能被处理一次。现要找出一个最优调度方案,使得n个作业被这两台处理机处理完毕的时间(所有作业被处理的时间之和)最少。算法步骤:(1)确定候选解上界为最短的单台处理机处理所有作业的完成时间m,(2)用p(x,y,k)=1表示前k个作业可以在A用时不超过x且在B用时不超过y时间内处理完成,则p(x,y,k)=p(x-ak,y,k-1)||p(x,y-bk,k-1)(||表示逻辑或操作)。(3)得到最短处理时间为min(max(x,y))。[C代码]下面是该算法的C语言实现。(1)常量和变量说明●n:作业数。●m:候选解上界。●a:数组,长度为n,记录n个作业在A上的处理时间,下标从0开始。●b:数组,长度为n,记录n个作业在B上的处理时间,下标从0开始。●k:循环变量。●p:三维数组,长度为(m+1)*(m+1)*(n+1)。●temp:临时变量。●max:最短处理时间。(2)C代码#include<stdio.h>intn,m;inta[60],b[60],p[100][100][60];voidread(){/*输入n、a、b,求出m,代码略*/)voidSchedule(){/*求解过程*/intx,y,k;for(x=0;x<=m;x++){for(y=0;y<m;y++){______for(k=1;k<n;k++)p[x][y][k]=0;}}for(k=1;k<n;k++){for(x=0;x<=m;x++){for(y=0;y<=m;y++){if(x-a[k-1]>=0)______;if(______)P[x][y][k]=(p[x][y][k]||p[x][y-b[k-1]][k-1]);}})}voidwrite()(/*确定最优解并输出*/intx,y,temp,max=m;for(x=0;x<=m;x++){for(y=0;y<=m;y++){if(______){temp=______;if(temp<max)max=temp;}}}printf("\n%d\n",max);}voidmain(){read();Schedule();write();}
问答题阅读下列说明和Java代码,将应填入空白处的字句写在答题纸的对应栏内。[说明]某大型商场内安装了多个简易的纸巾售卖机,自动出售2元钱一包的纸巾,且每次仅售出一包纸巾。纸巾售卖机的状态图如图1所示。图1纸巾售卖机的状态图采用状态(State)模式来实现该纸巾售卖机,得到如图2所示的类图。其中类State为抽象类,定义了投币、退币、出纸巾等方法接口。类SoldState、SoldOutState、NoQuarterState和HasQuarterState分别对应图1中纸巾售卖机的4种状态:售出纸巾、纸巾售完、没有投币、有2元钱。图2类图[Java代码]importjava.util.*;interfaceState{publicvoidinsertQuarter();//投币publicvoidejectQuarter();//退币publicvoidturnCrank();//按下取纸巾按钮publicvoiddispense();//出纸巾}classTissueMachine{______soldOutState,noQuarterState,hasQuarterState,soldState,state;state=soldOutState;intcount=0;//纸巾数publicTissueMachine(intnumbers){/*实现代码省略*/}publicStategetHasQuarterState(){returnhasQuarterState;}publicStategetNoQuarterState(){returnnoQuarterState;}publicStategetSoldState(){returnSoldState;}publicStategetSoldOutState(){returnsoldOutState;}publicintgetCount(){returncount;}//其余代码省略}classNoQuarterStateimplementsState{TissueMachinetissueMachine;publicvoidinSertQuarter(){tiSsueMachine.setState(______);}//构造方法以及其余代码省略}classHasQuarterStateimplementsState{TissueMachinetissueMaehine;publicvoidejectQuarter(){tissueMachine.setState(______);}//构造方法以及其余代码省略}classSoldStateimplementsState{TissueMachinetissueMachine;publicvoiddispense(){if(tissueMachine.getCount()>0){tissueMachime.setState(______);}else{tissueMachine.setState(______);}}}
问答题阅读下列说明和图,回答问题1至问题4,将解答填入对应栏内。[说明]某大型企业的数据中心为了集中管理、控制用户对数据的访问并支持大量的连接需求,欲构建数据管理中间件,其主要功能如下:(1)数据管理员可通过中间件进行用户管理、操作管理和权限管理。用户管理维护用户信息,用户信息(用户名、密码)存储在用户表中;操作管理维护数据实体的标准操作及其所属的后端数据库信息,标准操作和后端数据库信息存放在操作表中;权限管理维护权限表,该表存储用户可执行的操作信息。(2)中间件验证前端应用提供的用户信息。若验证不通过,则返回非法用户信息;若验证通过,中间件将等待前端应用提交操作请求。(3)前端应用提交操作请求后,中间件先对请求进行格式检查。如果格式不正确,则返回格式错误信息;如果格式正确,则进行权限验证(验证用户是否有权执行请求的操作),若用户无权执行该操作,则返回权限不足信息,否则进行连接管理。(4)连接管理连接相应的后台数据库并提交操作。连接管理先检查是否存在空闲的数据库连接,如果不存在,则新建连接;如果存在,则重用连接。(5)后端数据库执行操作并将结果传给中间件,中间件对收到的操作结果进行处理后,将其返回给前端应用。现采用结构化方法对系统进行分析与设计,获得如图15-22所示的顶层数据流图和如图15-23所示的第0层数据流图。
问答题阅读下列说明和图,回答问题。[说明]在线会议审稿系统(ORS:OnlineReviewingSystem)主要处理会议前期的投稿和审稿事务,其功能描述如下。(1)用户在初始使用系统时,必须在系统中注册(register)成为作者或审稿人。(2)作者登录(login)后提交稿件和浏览稿件审阅结果。提交稿件必须在规定提交时间范围内,其过程为先输入标题和摘要、选择稿件所属主题类型、选择稿件所在位置(存储位置)。上述几步若未完成,则重复;若完成,则上传稿件至数据库中,系统发送通知。(3)审稿人登录后可设置兴趣领域、审阅稿件给出意见以及罗列录用和(或)拒绝的稿件。(4)会议委员会主席是一个特殊审稿人,可以浏览提交的稿件、给审稿人分配稿件、罗列录用和(或)拒绝的稿件以及关闭审稿过程。其中关闭审稿过程须包括罗列录用和(或)拒绝的稿件。系统采用面向对象方法开发,使用UML进行建模,在建模用例图时,常用的方式是先识别参与者,然后确定参与者如何使用系统来确定用例,每个用例可以构造一个活动图。参与者名称、用例和活动名称分别参见表10.7、表10.8和表10.9。系统的部分用例图和提交稿件的活动图分别如图10.23和图10.24所示。表10.7参与者列表名称说明名称说明User用户Author作者Reviewer审稿人PCChair委员会主席表10.8用例名称列表名称说明名称说明login登录系统register注册submitpaper提交稿件browsereviewresults浏览稿件审阅结果closereviewingprocess关闭审稿过程assignpapertoreview分配稿件给审稿人setpreferences设定兴趣领域enterreview审阅稿件给出意见listaccepted/rejectedpaper罗列录用或/和拒绝的稿件browsesubmittedpapers浏览提交的稿件表10.9活动名称列表名称说明名称说明selectpaperlocation选择稿件位置uploadpaper上传稿件selectsubjectgroup选择主题类型sendnotification发送通知entertitleandabstract输入标题和摘要[问题1]根据说明中的描述,使用表10.7中的英文名称,绘出图10.22中A1~A4所对应的参与者。[问题2]根据说明中的描述,使用表10.8中的英文名称,给出图10.22中U1~U3所对应的用例。[问题3]根据说明中的描述,给出图10.22中(1)和(2)所对应的关系。[问题4]根据说明中的描述,使用表10.8和表10.9中的英文名称,给出图10.23中Action1~Action4对应的活动。
问答题阅读下列说明和Java代码,将应填入______的字句写在下面。[说明]某实验室欲建立一个实验室环境监测系统,能够显示实验室的温度、湿度以及洁净度等环境数据,当获取到最新的环境测量数据时,显示的环境数据能够更新现在采用观察者(observer)模式来开发该系统,观察者模式的类图如下图2所示。[Java代码]importjava.uti1.*interfaceObserver{Publicvoidupdate(floattemp,floathumidity,floatcleanness);}interfaceSubject{PublicvoidregisterObserver(Observero);//注册对主题感兴趣的观察者PublicvoidremoveObserver(Observero);//删除观察者Publicvoidnotifyobservers0;//当主题发生变化时通知观察者}ClassEnvironmentDataimplements______{PrivateArrayListobservers;Privatefloattemperature,humidity,cleanness;PublicEnvironmentData0{observers=newArrayList0;}PublicvoidregisterObserver(Observero){observers.add(o);}PublicvoidremoveObserver(Observero){/*代码省略*/}publicvoidnotifyObserVers(){For(inti=0;i<observers.size();i++){Observerobserver=(Observer)observers.get(i);______;}publicvoidmeasurementsChanged(){______;}publicvoidsetMeasurements(floattemperature,floathumidity,floatcleanness){this.temperature=temperature;this.humidity=humidity;this.cleanness=cleanness;______;}}ClassCurrentConditionsDisplayimplements______privatefloattemperature;privatefloathumidity;privatefloatcleanness;privateSubjectenvData;publicCurrentConditionsDisplay(SubjectenvData){this.envData=envData;______;}Publicvoidupdate(floattemperature,floathumidity,floatcleanness){this.temperature=temperature;this.humidity=humidity;this.cleanness=cleanness;Display();}Publicvoiddisplay0(/*代码省略*/)}ClassEnvironmentMonitor{Publicstaticvoidmain(String[]args){EnvironmentDataenvData=newEnvironmentData0;CurrentCondit\onsDisplaycurrentDisplay=newCnrrentConditionsDisplay(envOata);envData.setMeasurements(80,65,30.4f);}Publicvoiddisplay()(/*代码省略*/)}ClassEnvironmentMonitor{Publicstaticvoidmain(String[]args){EnvironmentDataenvData=newEnvironmentData0;CurrentConditionsDisplaycurrentDisplay=newCnrrentConditionsDisplay(envData);envData.setMeasurements(80,65,30.4f);}}
问答题阅读下列说明和C++代码,将应填入横线处的字句写在下面。[说明]某实验室欲建立一个实验室环境监测系统,能够显示实验室的温度、湿度以及洁净度等环境数据,当获取到最新的环境测量数据时,显示的环境数据能够更新现在采用观察者(observer)模式来开发该系统,观察者模式的类图如下图所示。C++代码如下。#include<iostream>#include<vector>Usingnamespacestd;ClassObserver{Public:Virtualvoidupdate(floattemp,floathumidity,floatcleanness)=0;};ClassSubject{Public:VirtualvoidregisterObserver(Observer*o)=0;//注册对主题感兴趣的观察者VirtualvoidremoveObserver(Observer*o)=0;//删除观察者VirtualvoidnotifyObservers()=0;//当主题发生变化时通知观察者}ClassEnvironmentData:public______{Private:Vector<Observer*>observers;Floattemperature,humidity,cleanness;Public:VoidregisterObserver(Observer*o){observers.push_back(0);}VoidremoveObserver(Observer*o){/*代码省略*/)Voidnotifyobservers(){for(vector<Observe*>::constiteratorit=observers.begin();it!=observems.end();it++){______;}}VoidmeasurementsChanged(){______;}VoidsetMeasurements(floattemperature,floathumidity,floatcleanness){this->temperature=temperature;this->humidity=humidity;this->cleanness=cleanness;______;}};ClassCurrentConditionsDisplay:public______{private:floattemperature,humidity,cleanness;Subject-envData;Public:CurrentConditionsDisplay(Subject*envData){this->envData=envData;______;}Voidupdate(floattemperature,floathumidity,floatcleanness){this->temperature=temperature;This->humidity=humidity;This->cleanness=cleanness;display();}Voiddisplay(){/*代码省略*/)};intmain(){EnvironmentData*envData=newEnvironmentData0;CurrentConditionsDisplay*currentDisplay=newCurrentConditionsDisplay(envData);envData->setMeasurements(80,65,30.4f);return0;}
问答题阅读下列说明和C代码,回答下面问题。
[说明]
某应用中需要对100000个整数元素进行排序,每个元素的取值在0~5之间。排序算法的基本思想是:对每一个元素x,确定小于等于x的元素个数(记为m),将x放在输出元素序列的第m个位置。对于元素值重复的情况,依次放入第m-1、m-2……个位置。例如,如果元素值小于等于4的元素个数有10个,其中元素值等于4的元素个数有3个,则4应该在输出元素序列的第10个位置、第9个位置和第8个位置上。算法具体的步骤如下。
步骤1:统计每个元素值的个数。
步骤2:统计小于等于每个元素值的个数。
步骤3:将输入元素序列中的每个元素放入有序的输出元素序列。
下面是该排序算法的C语言实现。
(1)常量和变量说明
R:常量,定义元素取值范围中的取值个数,如上述应用中R值应取6
i:循环变量
n:待排序元素个数
a:输入数组,长度为n
b:输出数组,长度为n
c:辅助数组,长度为R,其中每个元素表示小于等于下标所对应的元素值的个数
(2)函数sort
void sort(intn, int a[], intb[]){
intc[R], i;
for (i=0; i<______; i++){
c[i]=0;
}
for(i=0; i<n; i++){
c[a[i]]=______;
}
for(i=1; i<R; i++){
c[i]=______;
}
for(i=0; i<n; i++){
b[c[a[i]]-1]=______;
c[a[i]]=c[a[i]]-1;
}
}
问答题【问题4】
原来的“职员”关系模式存在什么问题?在不增加新关系模式的前提下,请给出修改后的“职员”和“部门”关系模式。
问答题【问题3】
如下的SQL语句是书店用于查询“所有订购了bid为‘123-456’图书的用户订购其他图书的情况”的不完整语句,请在空缺处填入正确的内容。
Select bid From orderlist A
Where not exists (Select * from Orders B
where A.ordemum=B.ordemum and B.cid {{U}}(3) {{/U}}
(Select cid from orderlist C,orders D
where {{U}}(4) {{/U}}.bid='123-456'
and {{U}}(5) {{/U}}=D.ordemum))
