计算机类
公务员类
工程类
语言类
金融会计类
计算机类
医学类
研究生类
专业技术资格
职业技能资格
学历类
党建思政类
计算机软件水平考试
全国计算机应用水平考试(NIT)
计算机软件水平考试
计算机等级考试(NCRE)
全国高校计算机等级考试CCT
行业认证
信息素养
问答题【说明】 假设需要将N个任务分配给N个工人同时去完成,每个人都能承担这N个任务,但费用不同。下面的程序用回溯法计算总费用最小的一种工作分配方案,在该方案中,为每个人分配 1个不同的任务。 程序中,N个任务从0开始依次编号,N个工人也从。开始依次编号,主要的变量说明如下。 · c[i][j]:将任务i分配给工人j的费用。 · task[i]:值为0表示任务i未分配,值为j表示任务i分配给工人j。 · worker[k]:值为0表示工人k未分配任务,值为1表示工人k已分配任务。 · mincost:最小总费用。 【C程序】 #include<stdio.h> #define N 8 /*N 表示任务数和工人数*/ int c[N][N]; unsigned int mincost=65535; /*设置的初始值,大于可能的费用*/ int task[N], temp[N], worker[N]; void plan(int k, unsigned int cost) { int i; if({{U}} (1) {{/U}} for(i=0; i<N; i++)temp[i]=task[i]; }else{ for(i=0; i<N;i++)/*分配任务 k*/ if(worker[i]==0 task[k]={{U}} (3) {{/U}}; plan({{U}} (4) {{/U}},cost+c[k][i]); {{U}}(5) {{/U}}; task[k]=0; }/*if*/ } }/*Plan*/ void main() { int i,j; for(i=0; i<N; i++){ /*设置每个任务由不同工人承担时的费用及全局数组的初值*/ worker[i]=0; task[i]=0; temp[i]=0; for(j=0; j<N; j++) scanf(%d", } plan(0,0);/*从任务0开始分配*/ printf("/n最小差用=%d/n", mincost); for(i=0;i<N;i++) printf("Task%d is assigned to Worker%d/n",i,temp[i]); }/*main*/
进入题库练习
问答题阅读下列说明,回答问题。[说明]假设某大型商业企业由商品配送中心和连锁超市组成,其中商品配送中心包括采购、财务、配送等部门。为实现高效管理,设计了商品配送中心信息管理系统,其主要功能描述如下。(1)系统接收由连锁超市提出的供货淆求,并将其记录到供货请求记录文件。(2)在接到供货请求后,从商品库存记录文件中进行商品库存信息查询。如果库存满足供货请求,则给配送处理发送配送通知;否则,向采购部门发出缺货通知。(3)配送处理接到配送通知后,查询供货请求记录文件,更新商品库存记录文件,并向配送部门发送配送单,在配送货品的同时记录配送信息至商品配送记录文件。(4)采购部门接到缺货通知后,与供货商洽谈,进行商品采购处理,合格商品入库,并记录采购清单至采购清单记录文件、向配送处理发出配送通知,同时通知财务部门给供货商支付货款。该系统采用结构化方法进行开发,得到待修改的数据流图,如图4.11所示。
进入题库练习
问答题设有一个音像租赁管理数据库系统,需要对顾客、音像制品、租赁信息以及音像制品的供货商进行管理。 顾客(Cust)的信息包括:顾客号(CNO)、顾客姓名(CName)、顾客地址(CAdd)、顾客联系电话(CPhone)、账户余额(CBal)。 音像制品(AVP)的信息包括:音像制品编号(AVNO)、音像制品名称(AVName)、音像制品名称类别(AVType)。 供货商(Prov)的信息包括:供货商编号(PNO)、供货商名称(PName)、供货商地址(PAdd)。 租赁系统的管理规则如下: Ⅰ.顾客号是顾客的唯一标识;音像制品编号是音像制品的唯一标识;供货商编号是供货商的唯一杯识; Ⅱ.一个顾客可以租赁多个音像制品,一个音像制品只能被一个顾客租赁;租赁时标明租赁日期(RDate),归还日期(GDate)和租金(Value); Ⅲ.一个供货商可供应多个音像制品,一个音像制品只能由一个供应商供应。 请针对以上描述,完成下列设计内容: ①构建租赁系统的ER图。 ②根据构建的ER图,设计满足3NF的关系模式,并标出每个关系模式的主码和外码。
进入题库练习
问答题试题四 阅读下列说明和C代码,回答问题1至问题3,将解答写在答题纸的对应栏内。 【说明】 在一块电路板的上下两端分别有n个接线柱。根据电路设计,用(i,π(i))表示将上端接线柱i与下端接线柱π(i)相连,称其为该电路板上的第i条连线。如图4-1所示的π(i)排列为{8,7,4,2,5,1,9,3,10,6}。对于任何1≤iπ(j)。 在制作电路板时,要求将这n条连线分布到若干绝缘层上,在同一层上的连线不相交。现在要确定将哪些连线安排在一层上,使得该层上有尽可能多的连线,即确定连线集Nets={(i,π(i)),1≤i≤n}的最大不相交子集。 【分析问题】 记N(i,j)={t|(t,π(t))∈Nets,t≤i,π(t)≤j}。N(i,j)的最大不相交子集为MNS(i,j),size(i,j)=|MNS(i,j)|。 经分析,该问题具有最优子结构性质。对规模为n的电路布线问题,可以构造如下递归式: 【C代码】 下面是算法的C语言实现。 (1)变量说明 size[i][j]:上下端分别有i个和j个接线柱的电路板的第一层最大不相交连接数 pi[i]:π(i),下标从1开始 (2)C程序
进入题库练习
问答题阅读下列说明和C函数,在(n)处填入适当的字句。[说明]已知集合A和B的元素分别用不含头节点的单链表存储,函数Difference()用于求解集合A与B的差集,并将结果保存在集合A的单链表中。例如,若集合A=5,10,20,15,25,30,集合B=5,15,35,25,如图8.13(a)所示,运算完成后的结果如图8.13(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->nex七;
进入题库练习
问答题阅读下列说明和C++代码,将应填入空白处的字句写在答题纸的对应栏内。[说明]某饭店在不同的时段提供多种不同的餐饮,其菜单的结构图如图1所示。图1菜单的结构图现在采用组合(Composition)模式来构造该饭店的菜单,使得饭店可以方便地在其中增加新的餐饮形式,得到如图2所示的类图。其中MenuComponent为抽象类,定义了添加(add)新菜单和打印饭店所有菜单信息(print)的方法接口。类Menu表示饭店提供的每种餐饮形式的菜单,如煎饼屋菜单、咖啡屋菜单等。每种菜单中都可以添加子菜单,例如图1中的甜点菜单。类MenuItem表示菜单中的菜式。图2类图[C++代码]#include<iostream>#include<list>#include<string>usingnamespacestd;classMenuComponent{protected:stringname;public:MenuComponent(Stringname){this->name=name;}stringgetName(){returnname;}______;//添加新菜单virtualvoidprint()=0;//打印菜单信息};classMenultem:publicMenuComponent{private:doubleprice;public:Menultem(stringname,doubleprice):MenuComponent(name){this->price=price;}doublegetPrice(){returnprice;}voidadd(MenuComponent*menuComponent){return;}//添加新菜单voidprint(){cout<<""<<getName()<<","<<getPrice()<<endl;}};classMenu:publicMenuComponent{private:list<______>menuComponents;public:Menu(stringname):MenuC0mponent(name){}voidadd(MenuComponent*menuComponent)//添加新菜单{______;}voidprint(){cout<<"\n"<<getName()<<"\n-----------------"<<endl;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();//打印饭店所有菜单的信息}
进入题库练习
问答题【问题2】 根据说明,结合问题1的解答,指出在该系统的顶层数据流图中应有哪些数据流。请采用说明中的词汇给出这些数据流的起点、终点及数据流名称,如表1-1所示给出了数据流的部分信息,请填充空缺处。 {{B}}表1-1 数据流信息{{/B}} 序 号 起 点 终 点 数据流名称  1  {{U}}(1){{/U}}  网上作业提交与管理系统  作业申请  2  {{U}}(2){{/U}}  网上作业提交与管理系统  提交的作业  3  网上作业提交与管理系统  {{U}}(3){{/U}}  需完成的作业  4  网上作业提交与管理系统  {{U}}(4){{/U}}  {{U}}(5){{/U}}  5  网上作业提交与管理系统  {{U}}(6){{/U}}  作业申请  6  网上作业提交与管理系统  {{U}}(7){{/U}}  {{U}}(8){{/U}}  7  {{U}}(9){{/U}}  网上作业提交与管理系统  选课学生名单  8  {{U}}(10){{/U}}  网上作业提交与管理系统  {{U}}(11){{/U}}  9  {{U}}(12){{/U}}  网上作业提交与管理系统  账号和密码  10  {{U}}(13){{/U}}  网上作业提交与管理系统  账号和密码
进入题库练习
问答题阅读下列说明和C代码,在(n)处填入适当的子句。[说明]栈(Stack)结构是计算机语言实现中的一种重要数据结构。对于任意栈,进行插入和删除操作的一端称为栈顶(StackTop),而另一端称为栈底(StackBottom)。栈的基本操作包括:创建栈(NewStack)、判断栈是否为空(IsEmpty)、判断栈是否己满(IsFull)、获取栈顶数据(Top)、压栈/入栈(Push)、弹栈/出栈(Pop)。当设计栈的存储结构时,可以采取多种方式。其中,采用链式存储结构实现的栈中各数据项不必连续存储,如图8.14所示。以下C代码采用链式存储结构实现一个整数栈操作。[C代码]typedefstructListintdata;//栈数据structList*next;//上次入栈的数据地址List;typedefstructStackList*pTop;//当前栈顶指针Stack;Stack*NewStack()return(Stack*)calloc(1,sizeof(Stack));intIsEmpty(Stack*s)(//判断栈s是否为空栈If((1))return1;return0;intTop(Stack*s)//获取栈顶数据。若栈为空,则返回机器可表示的最小整数if(IsEmpty(S))returnINT_MIN;return(2);voidPush(Stack*s,inttheData)//将数据theData压栈List*newNode;newNode=(List*)calloc(1,sizeof(List));newNode->data=theData;newNode->next=S->pTop;S->pTop=(3);voidPop(Stack*s)//弹栈List*lastTop;If(IsEmpty(S))return;lastTop=S->pTop;S->pTop=(4);Free(lastTop);#defineMD(a)a<<2intmain()inti;Stack*myStack;myStack=NewStack();Push(myStack,MD(1));Push(myStack,MD(2));Pop(myStack);Push(myStack,MD(3)+1);while(!IsEmpty(myStack))printf("%d",Top(myStack));Pop(myStack);return0;以上程序运行时的输出结果为:(5)。
进入题库练习
问答题【预备知识】①对给定的字符集合及相应的权值,采用哈夫曼算法构造最优二叉树,并用结构数组存储最优二叉树。例如,给定字符集合{a,b,c,d}及其权值2、7、4、5,可构造如图5-6所示的最优二叉树和相应的结构数组Ht(数组元素Ht[0]不用)。结构数组Ht的类型定义如下:#defineMAXLEAFNUM20structnode{charch;/*当前节点表示的字符,对于非叶子节点,此域不用*/intweight;/*当前节点的权值*/intparent;/*当前节点的父节点的下标,为0时表示无父节点*/intlchild,rchild;/*当前节点的左、右孩子节点的下标,为0时表示无对应的孩子节点*/}Ht[2*MAXLEAFNUM];②用“0”或“1”标识最优二叉树中分支的规则是:从一个节点进入其左(右)孩子节点,就用“0”(“1”)标识该分支(示例见图5-6)。③若用上述规则标识最优二叉树的每条分支后,从根节点开始到叶子节点为止,按经过分支的次序,将相应标识依次排列,可得到由“0”、“1”组成的一个序列,称此序列为该叶子节点的前缀编码。例如图5-6所示的叶子节点a、b、c、d的前缀编码分别是110、0、111、10。【函数5-6说明】函数voidLeafCode(introot,intn)的功能是:采用非递归方法,遍历最优二叉树的全部叶子节点,为所有的叶子节点构造前缀编码。其中形参root为最优二叉树的根节点下标,形参n为叶子节点个数。在构造过程中,将Ht[P].weight域用做被遍历节点的遍历状态标志。【函数5-6】char**Hc;voidLeafCode(introot,intn)/*为最优二叉树中的n个叶子节点构造前缀编码,root是树的根节点下标*/{inti,p=root,cdlen=0;charcode[20];Hc=(char**)maloc((n+1)*sizeof(char*));/*申请字符指针数组*/for(i=1;i<=p;++i)Ht[i].weight=0;/*遍历最优二叉树时用做被遍历节点的状态标志*/while(p){/*以非递归方法遍历最优二叉树,求树中每个叶子节点的编码*/if(Ht[p].weight==0){/*向左*/Ht[p].weight=1;if(Ht[p].lchild!=0){p=Ht[p].lchild;code[cdlen++]='0';}elseif(Ht[p].rchild==0){/*若是叶子节点,则保存其前缀编码*/Hc[p]=(char*)malloc((cdlen+1)*sizeof(char));{{U}}(1){{/U}};strcpy(Hc[p],code);}}elseif(Ht[p].weight==1)(/*向右*/Ht[p].weight=2;if(Ht[p].rchild!=0){p=Ht[p].rchild;code[edlen++]='1';}}else{/*Ht[p].weight==2,回退*/Ht[p].weight=0;p={{U}}(2){{/U}};{{U}}(3){{/U}};/*退回父节点*/}}/*while结束*/}【函数5-7说明】函数voidDecode(char*buff,introot)的功能是:将前缀编码序列翻译成叶子节点的字符序列,并输出。其中形参root为最优二叉树的根节点下标,形参buff指向前缀编码序列。【函数5-7】voidDecode(char*buff,introot){intpre=root,p;while(*buff!='/0'){p=root;while(p!=0){/*存在下标为p的节点*/pre=p;if({{U}}(4){{/U}})p=Ht[p].lchild;/*进入左子树*/elsep=Ht[p].rchild;/*进入右子树*/buff++;/*指向前缀编码序列的下一个字符*/}{{U}}(5){{/U}};printf("%c",Ht[pre].ch);}}
进入题库练习
问答题试题三 阅读下列说明和图,回答问题1至问题3,将解答填入答题纸的对应栏内。 【说明】 某软件公司欲设计实现一个虚拟世界仿真系统。系统中的虚拟世界用于模拟现实世界中的不同环境(由用户设置并创建),用户通过操作仿真系统中的1~2个机器人来探索虚拟世界。机器人维护着两个变量b1和b2,用来保存从虚拟世界中读取的字符。 该系统的主要功能描述如下: (1)机器人探索虚拟世界(Run Robots)。用户使用编辑器(Editor)编写文件以设置想要模拟的环境,将文件导入系统(Load File)从而在仿真系统中建立虚拟世界(Setup World)。机器人在虚拟世界中的行为也在文件中进行定义,建立机器人的探索行为程序(Setup Program)。机器人在虚拟世界中探索时(Run Program),有2种运行模式: ①自动控制(Run):事先编排好机器人的动作序列(指令(Instruction)),执行指令,使机器人可以连续动作。若干条指令构成机器人的指令集(Instruction Set)。 ②单步控制(Step):自动控制方式的一种特殊形式,只执行指定指令中的一个动作。 (2)手动控制机器人(Manipulate Robots)。选定1个机器人后(Select Robot),可以采用手动方式控制它。手动控制有4种方式: ①Move:机器人朝着正前方移动一个交叉点。 ②Left:机器人原地沿逆时针方向旋转90度。 ③Read:机器人读取其所在位置的字符,并将这个字符的值赋给b1;如果这个位置上没有字符,则不改变b1的当前值。 ④Write:将b1中的字符写入机器人当前所在的位置,如果这个位置上已经有字符,该字符的值将会被b1的值替代。如果这时b1没有值,即在执行Write动作之前没有执行过任何Read动作,那么需要提示用户相应的错误信息(Show Errors)。 手动控制与单步控制的区别在于,单步控制时执行的是指令中的动作,只有一种控制方式,即执行下个动作;而手动控制时有4种动作。 现采用面向对象方法设计并实现该仿真系统,得到如图3-1所示的用例图和图3-2所示的初始类图。图3-2中的类“Interpreter”和“Parser”用于解析描述虚拟世界的文件以及机器人行为文件中的指令集。
进入题库练习
问答题【说明】 函数DeleteNode(Bitree*r,inte)的功能是:在树根节点指针为r的二叉查找(排序)树上删除键值为e的节点,若删除成功,则函数返回0,否则函数返回-1。二叉查找树节点的类型定义为: typedef struct Tnode{ int data;/*节点的键值*/ struct Tnode *Lchild,*Rchiid;/*指向左、右子树的指针*/ }*Bitree; 在二叉查找树上删除一个节点时,要考虑3种情况。 ①若待删除的节点p是叶子节点,则直接删除该节点。 ②若待删除的节点p只有一个子节点,则将这个子节点与待删除节点的父节点直接连接,然后删除节点。 ③若待删除的节点p有两个子节点,则在其左子树上,用中序遍历寻找关键值最大的节点 s,用节点s的值代替节点p的值,然后删除节点s,节点s必属于上述①、②情况之一。 【函数5-5】 int DeleteNode(Bitree *r,int e){ Bitree p=*r,pp,s,c; while({{U}} (1) {{/U}}{/*从树根节点出发查找键值为e的节点*/ pp=p; if(e<p->data)p=p->Lchild; else p=p->Rehild; } if(!p)retrn -1;/*查找失败*/ if(p->Lchild pp=p; while({{U}} (3) {{/U}}){pp=s;s=s->Rchild;} p->data=s->data;p=s; } /* 处理情况①、②*/ if({{U}} (4) {{/U}})c=p->Lchild; else c=p->Rchild; if(p== *r)*r=c; else if({{U}} (5) {{/U}})pp->Lchild=c; else pp->Rchild=c; free(p); return 0; }
进入题库练习
问答题【问题3】 根据说明中的叙述,抽象出如表3-2所示的方法,请指出图3-1中的类 CustomerInformafionSystem和InstitutionalCustomer应分别具有其中的哪些方法。 {{B}}表3-2类的方法{{/B}} 功能描述 方法名  向系统中添加客户  addCustomer  根据给定的客户标识,在系统中查找该客户  getCustomer  根据给定的客户标识,从系统中删除该客户  removeCustomer  创建新的联系人  addContact  在系统中查找指定的联系人  getContact  从系统中删除指定的联系人  removeContact
进入题库练习
问答题阅读下列说明和Java代码,在(n)处填入正确的字句。[说明]某公司的组织结构图如图10.6所示,现采用组合(Composition)设计模式来设计,得到如图10.7所示的类图。其中Company为抽象类,定义了在组织结构图上添加(Add)和删除(Delete)分公司/办事处或者部门的方法接口。类ConcreteCompany表示具体的分公司或者办事处,分公司或办事处下可以设置不同的部门。类HRDepartment和FinanceDepartment分别表示人力资源部和财务部。[Java代码]importjavA.util.*:(1)CompanyprotectedStringname;publicCompany(Stringname)((2)=name;publicabstractvoidAdd(Companyc);//增加子公司、办事处或部门publicabstractvoidDelete(Companyc);//删除子公司、办事处或部门classConcreteteCompanyextendsCompanyprivateList<(3)>children-newArrayList<(4)>();//存储子公司、办事处或部门publicConcreteCompany(Stringname)super(name);publicvoidAdd(Companyc)(5).add(c);publicvoidDelete(Companyc)(6).remove(c);classHRDepartmentextendsCompanypublicHRDepartment(Stringname)super(name);//其他代码省略classFinanceDepartmentextendsCompanypublicFinanceDepartment(Stringname)(super(name);//其他代码省略publicclassTestpublicstaticvoidmain(String[]args)ConcreteCompanyroot=newConcreteCompany("北京总公司");root.Add(newHRDepartment("总公司人力资源部"));root.Add(newFinanceDepartment("总公司财务部"));ConcreteCompanycomp=newConcreteCompany("上海分公司");comp.Add(newHRDepartment("上海分公司人力资源部"));comp.Add(newFinanceDepartment("上海分公司财务部"));(7);ConcreteCompanycomp1=newConcreteCompany("南京办事处");comp1.Add(newHRDepartment("南京办事处人力资源部"));comp1.Add(newFinanceDepartment("南京办事处财务部");(8);//其他代码省略
进入题库练习
问答题【问题1】 数据流图1-7中有两条数据流是错误的,请指出这两条数据流的起点和终点。
进入题库练习
问答题阅读下列说明,回答下面问题。[说明]假设某大型商业企业由商品配送中心和连锁超市组成,其中商品配送中心包括采购、财务、配送等部门。为实现高效管理,设计了商品配送中心信息管理系统,其主要功能描述如下。(1)系统接收由连锁超市提出的供货请求,并将其记录到供货请求记录文件。(2)在接到供货请求后,从商品库存记录文件中进行商品库存信息查询。如果库存满足供货请求,则给配送处理发送配送通知;否则,向采购部门发出缺货通知。(3)配送处理接到配送通知后,查询供货请求记录文件,更新商品库存记录文件,并向配送部门发送配送单,在配送货品的同时记录配送信息至商品配送记录文件。(4)采购部门接到缺货通知后,与供货商洽谈,进行商品采购处理,合格商品入库,并记录采购清单至采购清单记录文件,向配送处理发出配送通知,同时通知财务部门给供货商支付货款。该系统采用结构化方法进行开发,得到待修改的数据流图(如图所示)。数据流图
进入题库练习
问答题阅读下列说明,回答下面问题。[说明]某服装销售公司拟开发一套服装采购管理系统,以便对服装采购和库存进行管理。[需求分析](1)采购系统需要维护服装信息及服装在仓库中的存放情况,服装信息主要包括:服装编码、服装描述、服装类型、销售价格、尺码和面料,其中,服装类型为销售分类,服装按销售分类编码。仓库信息包括:仓库编码、仓库位置、仓库容量和管理员。系统记录库管员的库管员编码、姓名和级别。一个库管员可以管理多个仓库,每个仓库有一名库管员。一个仓库中可以存放多类服装,一类服装可能存放在多个仓库中。(2)当库管员发现一类或者多类服装缺货时,需要生成采购订单。一个采购订单可以包含多类服装。每类服装可由多个不同的供应商供应,但具有相同的服装编码。采购订单主要记录订单编码、订货日期和应到货日期,并详细记录所采购的每类服装的数量、采购价格和对应的多个供应商。(3)系统需记录每类服装的各个供应商信息和供应情况。供应商信息包括:供应商编码、供应商名称、地址、企业法人和联系电话。供应情况记录供应商所供应服装的服装类型和服装质量等级。一个供应商可以供应多类服装,一类服装可由多个供应商供应。库管员根据入库时的服装质量情况,设定或修改每个供应商所供应的每类服装的服装质量等级,作为后续采购服装时,选择供应商的参考标准。[概念模式设计]根据需求阶段收集的信息,设计的实体联系图(不完整)如图1所示。图1实体联系图[逻辑结构设计]根据概念设计阶段完成的实体联系图,得出如下关系模式(不完整):库管员(库管员编码,姓名,级别)仓库信息(______,仓库位置,仓库容量)服装(服装编码,服装描述,服装类型,尺码,面料,销售价格)供应商(供应商编码,供应商名称,地址,联系电话,企业法人)供应情况(______,服装质量等级)采购订单(______)采购订单明细(______)
进入题库练习
问答题阅读下列说明和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(){returnESPRESSOPRICE;}};classDarkRoast:publicBeverage{//深度烘焙咖啡public:DarkRoast(){description="DardRoast";}intcost(){returnDRAKROAST_PRICE;}};classMocha:publicCondimentDecorator{//摩卡public:Mocha(Beverage*beverage){this->beverage=beverage;}stringgetDescription(){returnbeverage->getDescription()+",Mocha";}intcost(){returnMOCHAPRICE+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()<<end1;return0;}编译运行上述程序,其输出结果为:DarkRoast,Mocha,Whip,¥38
进入题库练习
问答题[说明]某大型企业的数据中心为了集中管理、控制用户对数据的访问并支持大量的连接需求,欲构建数据管理中间件,其主要功能如下。(1)数据管理员可通过中间件进行用户管理、操作管理和权限管理。用户管理维护用户信息,用户信息(用户名、密码)存储在用户表中;操作管理维护数据实体的标准操作及其所属的后端数据库信息,标准操作和后端数据库信息存放在操作表中;权限管理维护权限表,该表存储用户可执行的操作信息。(2)中间件验证前端应用提供的用户信息。若验证不通过,返回非法用户信息;若验证通过,中间件将等待前端应用提交操作请求。(3)前端应用提交操作请求后,中间件先对请求进行格式检查。如果格式不正确,返回格式错误信息;如果格式正确,则进行权限验证(验证用户是否有权执行请求的操作),若用户无权执行该操作,则返回权限不足信息,否则进行连接管理。(4)连接管理连接相应的后台数据库并提交操作。连接管理先检查是否存在空闲的数据库连接,如果不存在,新建连接;如果存在,则重用连接。(5)后端数据库执行操作并将结果传给中间件,中间件对收到的操作结果进行处理后,将其返回给前端应用。现采用结构化方法对系统进行分析与设计,获得如图4.7所示的顶层数据流图和图4.8所示的0层数据流图。1.使用说明中的词语,给出图4.7中的实体E1~E3的名称。
进入题库练习
问答题【说明5-1】B树是一种多叉平衡查找树。一棵m阶的B树,或为空树,或为满足下列特性的m叉树:①树中每个节点至多有m棵子树;②若根节点不是叶子节点,则它至少有两棵子树;③除根之外的所有非叶子节点至少有[m/2]棵子树;④所有的非叶子节点中包含下列数据信息(n,A0,K1,A1,K2,A2,…,Kn,An),其中:Ki(i=1,2,…,n)为关键字,且Ki<Ki+1(i=1,2,…,n-1),Ai(i=0,1,…,n)为指向子树根节点的指针,且指针Ai-1所指子树中所有节点的关键字均小于Ki,Ai+1所指子树中所有节点的关键字均大于Ki,n为节点中关键字的数目;⑤所有的叶子节点都出现在同一层次上,并且不带信息(可以看成是外部节点或查找失败的节点,实际上这些节点不存在,指向这些节点的指针为空)。例如,一棵4阶B树如图5-1所示(节点中关键字的数目省略)。B树的阶M、bool类型、关键字类型及B树节点的定义如下:#defineM4/*B树的阶*/typedefenum{FALSE=0,TRUE=1}bool;typedefintElemKeyType;typedefstructBTreeNode{intnumkeys;/*节点中关键字的数目*/structBTreeNode*parent;/*指向父节点的指针,树根的父节点指针为空*/structBTreeNode*A[M];/*指向子树节点的指针数组*/ElemKeyTypeK[M];/*存储关键字的数组,K[0]闲置不用*/}BTreeNode;函数SearchBtree(BTreeNode*root,ElemKeyTypeakey,BTreeNode**ptr)的功能是:在给定的一棵M阶B树中查找关键字akey所在节点,若找到则返回TRUE,否则返回FALSE。其中,root是指向该M阶B树根节点的指针,参数ptr返回akey所在节点的指针,若akey不在该B树中,则ptr返回查找失败时空指针所在节点的指针。例如,在如图5-1所示的4阶B树中查找关键字25时,ptr返回指向节点e的指针。注:在节点中查找关键字akey时采用二分法。【函数5-1】boolSearchBtree(BTreeNode*root,ElemKeyTypeakey,BTreeNode**ptr){intlw,hi,mid;BTreeNode*p=root;*pb=NULL;while(p){lw=1;hi={{U}}(1){{/U}};while(lw<=hi){mid=(lw+hi)/2;if(p->K[mid]==akey){*Ptr=p;returnTRUE;}elseif({{U}}(2){{/U}})hi=mid-1;elselw=mid+1;}*ptr=p;p={{U}}(3){{/U}};}returnFALSE;}【说明5-2】在M阶B树中插入一个关键字时,首先在最接近外部节点的某个非叶子节点中增加一个关键字,若该节点中关键字的个数不超过M-1,则完成插入;否则,要进行节点的“分裂”处理。所谓“分裂”,就是把节点中处于中间位置上的关键字取出来并插入其父节点中,然后以该关键字为分界线,把原节点分成两个节点。“分裂”过程可能会一直持续到树根,若树根节点也需要分裂,则整棵树的高度增1。例如,在如图5-1所示的B树中插入关键字25时,需将其插入节点e中,由于e中已经有3个关键字,因此将关键字24插入节点e的父节点b,并以24为分界线将节点e分裂为e1和e2两个节点,结果如图5-2所示。函数Isgrowing(BTreeNode*root,ElemKeyTypeakey)的功能是:判断在给定的M阶B树中插入关键字akey后,该B树的高度是否增加,若增加则返回TRUE,否则返回FALSE。其中,root是指向该M阶B树根节点的指针。在函数Isgrowing中,首先调用函数SearchBtree(即函数5-1)查找关键字akey是否在给定的M阶B树中,若在则返回FALSE(表明无须插入关键字akey,树的高度不会增加);否则,通过判断节点中关键字的数目考察插入关键字akey后该B树的高度是否增加。【函数5-2】boolIsgrowing(BTreeNode*root,ElemKeyTypeakey){BTreeNode*t,*f;if(!SearchBtree({{U}}(4){{/U}})){t=f;while({{U}}(5){{/U}}){t=t->parent;}if(!t)returnTRUE;}returnFALSE;}
进入题库练习
问答题阅读下列说明和图,回答问题1至问题4,将解答填入对应栏内。[说明]某医院欲开发病人监控系统。该系统通过各种设备监控病人的生命体征,并在生命体征异常时向医生和护理人员报警。该系统的主要功能如下:(1)本地监控。定期获取病人的生命体征,如体温、血压、心率等数据。(2)格式化生命体征。对病人的各项重要生命体征数据进行格式化,然后存入日志文件中并检查生命体征。(3)检查生命体征。将格式化后的生命体征与生命体征范围文件中预设的正常范围进行比较。如果超出了预设范围,系统就发送一条警告信息给医生和护理人员。(4)维护生命体征范围。医生在必要时(如:新的研究结果出现时)添加或更新生命体征值的正常范围。(5)提取报告。在医生或护理人员请求病人生命体征报告时,从日志文件中获取病人生命体征生成体征报告,并返回给请求者。(6)生成病历。根据日志文件中的生命体征,医生对病人的病情进行描述,形成病历存入病历文件中。(7)查询病历。根据医生的病历查询请求,查询病历文件,给医生返回病历报告。(8)生成治疗意见。根据日志文件中的生命体征和病历,医生给出治疗意见,如处方等,并存入治疗意见文件中。(9)查询治疗意见。医生和护理人员查询治疗意见,据此对病人进行治疗。现采用结构化方法对病人监控系统进行分析与设计,获得如图15-26所示的顶层数据流图和如图15-27所示的第0层数据流图。
进入题库练习