问答题【说明】某考务处理系统具有以下功能:(1)输入报名单;(2)自动编制准考证号;(3)输出准考证;(4)输入成绩清单;(5)输出成绩通知单;(6)输出成绩分布表;(7)输入合格标准、输出录取通知单;(8)试题难度分析,并输出试题难度分析表。这里给出了实现上述要求的部分不完整的数据流图,其中部分数据流的组成如下所示。报名单=报名号+姓名+通信地址考生名册=报名号+准考证号+姓名+通信地址成绩册=准考证号+(课程号+成绩)(其中{W}表示W重复多次)准考证=报名号+姓名+准考证号【问题1】指出0层图中可以删去的部分。【问题2】在加工1子图中将遗漏的数据流添加在答题纸上。【问题3】加工2子图分解成如图所示的4个子加工及相关的文件(即数据存储)。试在此基础上将相关的DFD成份添加在答题纸上,以完成该加工子图。
问答题【说明】 中国教育科研网受理了许多用户(高校和研究机构)中请在指定IP上开设网络访问业务。网络访问包括国内流量和国际流量。教育科研网管理中心保存了网络访问用户档案和网络访问业务档案。 网络访问用户档案的记录格式为: 用户编码 用户名 用户地址 网络访问业务档案的记录格式为: IP地址 用户编码 国内流量许可标志 国际流量许可标志 用户每次上网流量的计费数据都自动地记录在管理中心的服务器上。计费数据的记录格式为: 日期 IP地址 受访问的IP地址 访问开始时间 持续时间 管理中心为了用计算机自动处理流量收费以提高工作效率,开发计费管理系统。该系统每月能为每个用户打印出网络流量缴费通知单。缴费通知单的记录格式为: IP地址 用户编码 国内流量费用 国际流量费用 总额 【流程图】 下面的流程图描述了该系统的数据处理过程。该系统每天对原始的计费数据进行分类排序,并确定每个网络访问记录的访问类型(本地/国内/国际),冉根据流量费用单价文件,算出每个记录应收取的费用。因此,形成的日计费文件中增加了两个数据项:访问类型和话费。该系统每日对日计费文件进行累计(按IP地址和访问类型,对该类型的费用进行累计,得到该p地址该访问类型的当月费用总计),形成月计费文件。月计费文件经过出账处理形成流量费用账单文件。流量费用账单文件的记录格式为: 月份 用户编码 IP地址 国内费用 国际费用 1. 【问题1】 (1)请说明流程图中的文件F0、F1分别是哪个文件。 (2)处理1和处理5分别按照哪些数据项进行分类?
问答题阅读以下关于工作流系统模型建立和性能分析的叙述,根据要求回答问题1~问题4。[说明]某软件开发公司向客户交付系统产品后,由技术支持部门负责向客户提供技术服务。该技术支持部门的业务流程如下:①当该技术支持部门接到一个客户问询电话时,由客户服务代表(CSR)接听该电话。客户服务代表根据客户问询内容产生一份服务请求文件,并开始解决客户提出的问题;②若客户服务代表解决了客户提出的问题,这份服务请求文件被标记为“已解决”;③如果客户服务代表在2个小时内未能解决这个问题,客户服务代表将服务请求文件转交给技术支持代表(TSR)处理;④如果技术支持代表也无法解决这个问题,他/她将邀请助理工程师(ENGR)来一起处理这个问题;⑤若助理工程师解决了这个问题,该服务请求文件被标记为“已解决”;⑥若技术支持代表和助理工程师认为,是由于系统的错误引起的问题,则告知客户该问题目前无法解决;并把服务请求文件转交给本公司的工程部门处理;⑦对已经解决的服务请求,每个月底进行一次归档(放入归档数据库)。该软件公司正在创建一个相应的工作流管理系统,目前正处于过程定义阶段,即创建工作流模型阶段。对于这些工作流模型,除了要考虑工作流的正确性外,工作流的性能也是十分重要的。工作流性能主要反映工作流定量方面的特性,例如,任务的完成时间、单位时间内处理的任务数量、资源的利用率及在预定时间标准内完成任务的百分比等。图7-14所示的是一个简单的工作流模型(其中单位时间为1小时),它表示这样一个执行过程:每小时将会有20个任务到达c1,这20个任务首先经过处理task1,再经过处理task2,最终将结果传递到c3。处理task1和处理task2相互独立。假设性能评价模型符合M/M/1排队模型,在计算性能指标的过程中可以使用下列公式进行计算:其中,ρ表示资源利用率,λ表示单位时间内到达的任务数,μ表示该资源单位时间内能够完成的任务数。
问答题[问题1] 请用DFD 图描绘该功能的需求。
问答题【问题1】
请按[说明]中的要求画出修改后的数据模型。
问答题 阅读以下说明,回答问题1至问题3,将答案写在对应栏内。
【说明】 关于一位花商有以下一些事实。
(1)销售在不同地区生长的花,这些地区一年的量低温度在一定范围内变化。
(2)想用编号来表示发货类型。 (3)要出售某些类型的花。
假定已经通过SQL语句建立了基本表: CREATE TABLE Zone
( ID Char(2) PRIMARY KEY, LowerTemp Number
(3), UpperTemp Number (3) );
CREATE TABLE Delivery ( ID char(2)PRIMARY
KEY, Category VarChar (5), DelSize Number
(5,3) ): CREATE TABLE FlowerInfo
( ID Char(3) CONSTRAINT
Flowerinfo_ id _ pk PRIMARY KEY, ComName VarChar
(25), LatName VarChar (30), Czone Number
(3), Hzone Number (3), Delivered Number
(3), SunNeed Char (3), PRIMARY KEY
(ID) ): 地区(ID,最高温度,最低温度)
发货(ID,发货类型,发货规格)
花的信息(ID,普通名,拉丁名,花能够生长的最冷地区,花能够生长的最热地区,发货类型,日光需求)
问答题【说明】传输门是传输系统中的重要装置。传输门具有Open(打开)、Closed(关闭)、Opening(正在打开)、StayOpen(保持打开)和Closing(正在关闭)五种状态。触发传输门状态转换的事件有click、complete和timeout三种。事件与其相应的状态转换如下图所示。下面的C++代码1与C++代码2分别用两种不同的设计思路对传输门进行状态模拟,请填补代码中的空缺。【C++代码1】constintCLOSED=1;constintOPENING=2;constintOPEN=3;constintCLOSING=4;constintSTAYOPEN=5;//定义状态变量,用不同整数表示不同状态classDoor{Private:intstate;//传输门当前状态voidsetState(intstate){this->state=state;}//设置当前状态public:Door():state(CLOSED){};voidgetState(){//根据当前状态输出相应的字符串switch(state){caseOPENING:cout<<"OPENING"<<endl;break;caseCLOSED:cout<<"CLOSED"<<endl;break;caseOPEN:cout<<"OPEN"<<endl;break;caseCLOSING:cout<<"CLOSING"<<endl;break;caseSTAYOPEN:cout<<"STAYOPEN"<<endl;break;}};voidclick(){//发生click事件时进行状态转换if({{U}}(1){{/U}})setState(OPENING);elseif({{U}}(2){{/U}})setState(CLOSING);elseif({{U}}(3){{/U}})setState(STAYOPEN);}voidtimeout(){//发生timeout事件时进行状态转换if(state==OPEN)setState(CLOSING);}voidcomplete(){//发生complete事件时进行状态转换if(state==OPENING)setState(OPEN);elseif(state==CLOSING)setState(CLOSED);}};intmain(){DooraDoor;aDoor.getState();aDoor.click();aDoor.getState();aDoor.complete();aDoor.getState();aDoor.click();aDoor.getState();aDoor.click();aDoor.getState();return0;}【C++代码2】classDoor{public:DoorState*CLOSED,*OPENING,*OPEN,*CLOSING,*STAYOPEN,*state;Door();virtual~Door(){……//释放申请的内存,此处代码省略);voidsetState(DoorState*state){this->state=state;}voidgetState(){//此处代码省略,本方法输出状态字符串,//例如,当前状态为CLOSED时,输出字符串为“CLOSED”};voidclick();voidtimeout();voidcomplete();};Door::Door(){CLOSED=newDoorClosed(this);OPENING=newDoorOpening(this);OPEN=newDoorOpen(this);CLOSING=newDoorClosing(this);STAYOPEN=newDoorStayOpen(this);state=CLOSED;}voidDoor::click(){{{U}}(4){{/U}};)voidDoor::timeout(){{{U}}(5){{/U}};)voidDoor::complete(){{{U}}(6){{/U}};}classDoorState//定义一个抽象的状态,它是所有状态类的基类{protected:Door*door;public:DoorState(Door*door){this->door=door;}virtual~DoorState(void);virtualvoidclick(){}virtualvoidcomplete(){}virtualvoidtimeout(){}};classDoorClosed:publicDoorState{//定义一个基本的Closed状态public:DoorClosed(Door*door):DoorState(door){}virtual~DoorClosed(){}voidclick();};voidDoorClosed::click(){{{U}}(7){{/U}};}//其他状态类的定义与实现代码省略intmain(){DooraDoor;aDoor.getState();aDoor.click();aDoor.getState();aDoor.complete();aDoor.getState();aDoor.timeout();aDoor.getState();return0;}
问答题【程序】下面是一段求最大值的程序,其中datalist是数据表,n是datalist的长度。intGetMax(intn,intdatalist[])intk=0;for(intj=1;j<n;j++)if(datalist[j]>datalist[k])k=j;returnk;【控制流图】1.【问题1】该程序的控制流图中A~E分别是什么?
问答题【说明】一棵非空二叉树中“最左下”结点定义为:若树根的左子树为空,则树根为“最左下”结点;否则,从树根的左子树根出发,沿结点的左孩子分支向下查找,直到某个结点不存在左孩子时为止,该结点即为此二叉树的“最左下”结点。例如:图13-26所示的以A为根的二叉树的“最左下”结点为D,以C为根的子二叉树中的“最左下”结点为C。二叉树的结点类型定义如下:typedefstructBSTNode{intdata;structBSTNode*lch,*rch;//结点的左、右孩子指针}*BSTree;代码13-7中,函数BSTreeFind_Del(BSTreeroot)的功能是:若root指向一棵二茶树的根结点,则找出该结点的右子树上的“最左下”结点*p,并从树中删除以*p为根的子树,函数返回被删除子树的根结点指针;若该树根的右子树上不存在“最左下”结点,则返回空指针。【代码13-7】BSTreeFind_Del(BSTreeroot){BSTreep,pre;If(!root)/*root指向的二叉树为空树*/returnNULL;{{U}}(1){{/U}};/*令p指向根结点的右子树*/if(!p)returnNULL;{{U}}(2){{/U}};/*设置pre的初值*/while(p->lch){/*查找“最左下”结点*/pre=p;p={{U}}(3){{/U}};}if({{U}}(4){{/U}}==root)/*root的右子树根为“最左下”结点*/pre->rch=NULL;else{{U}}(5){{/U}}=NULL;/*删除以“最左下”结点为根的子树*/returnp;}
问答题【说明】在一公文处理系统中,开发者定义了一个公文结构OfficeDoc,其中定义了公文应该具有的属性。当公文的内容或状态发生变化时,与之相关联的DocExplorer结构的值都需要发生改变。一个OfficeDoc结构能够关联一组DocExplorer结构。当OfficeDoc结构的内容或状态发生变化时,所有与之相关联的DocExplorer结构都将被更新,这种应用被称为观察者模式。以下代码采用C语言实现,能够正确编译通过。【代码13-4】#include<stdio.h>#defineOBS_MAXNUM20/*一个OfficeDoc变量最多能够关联的DocExplorer变量的个数*/typedefvoid({{U}}(1){{/U}})(strucOffieeDoc*,structDoeExplorer*)I;structDocExplorer{funcupdate;/*DocExplorer结构采用的更新函数*//*其它的结构字段省略*/};struetOffieeDoc{{{U}}(2){{/U}}myObs[OBS_MAXNUM;/*存储所有与OfficeDoc相关联的DocExplorer结构指针*/intindex;/*与OffieeDoc结构变量相关联的DoeExplorer结构变量的个数*/};voidattaeh(structOfficeDoc*doc,structDocExplorer*ob){/*关联Observer结构ob与OffieeDoe结构doe*/intloop=0;if(doc->index>=OBS_MAXNUM||ob==NULL)return;for(loop=0,loop<doc->index;loop++)if(doc->myObs[loop]==ob)return;doc->myObs[doe->index]=ob;doc->index++;}voiddetaeh(structOfficeDoc*doc,structDocExplorer*ob){/*解除doc结构与ob结构间的关联*/intloop;if(ob==NULL)return;for(loop=0;loop<doc->index;loop++){if(doe->myObs[loop]==ob){if(loop<=doc->index-2)doc->myObs[loop]=doc->myObs[{{U}}(3){{/U}}];doc->myObs[doc->index-1]=NULL;doc->index——;breack;}}}voidupdatel(structOfficeDoe*doe,structDoeExplorer*ob){/*更新ob结构的值,更新代码省略*/}voidupdate2(structOffieeDoc*doc,struetDocExplorer*ob){/*更新ob结构的值,更新代码省略*/}voidnotifyObs(structOfficeDoc*doc){/*当doc结构的值发生变化时,通知与之关联的所有DocExplorer结构变量*/intloop;for(loop=0;loop<doc->index;loop++){(doc->myObs[loop)->update({{U}}(4){{/U}});}}voidmain(){structOfficeDocdoc;/*定义一了OfficeDoe变量*/structDocExplorerexplorer1,explorer2;/*定义两个DocExplorer变量*//*初始化与OfficeDoc变量相关的DocExplorer变量个数为0*/doc.index=0;explorer1.update=update1;/*设置explorer1变量的更新函数*/explorer2.update=update2;/*设置explorer2变量的更新函数*/attach(/*关联explorer1与doc对象*/attach(/*关联explorer2与doc对象*//*其它代码省略*/{{U}}(5){{/U}};/*通知与OfficeDoe相关的所有DoeExploer变量*/return;}
问答题[问题2]
数据流图8-5中缺少了与“年度汇总”加工相关的数据流,请指出此数据流的起点和终点。
数据流图8-5中缺少了与“查询”加工相关的数据流,请指出此数据流的起点和终点。
问答题[说明] 在学校中,存在以下关系:(a)一个系有若干学生,但一个学生只能在一个系;(b)一个学生可以选修多门课程,每门课程有若干学生选修;(c)每个学生所学的每门课程都有一个成绩。 该校在学生信息管理数据库设计了三个基本表,分别为表一、表二、表三。(a)表一:学生信息表STUDENT(STID,NAME,AGE,DEPTNO),其中,STID表示学号,NAME表示学生姓名,AGE表示年龄,DEPTNO表示系号。(b)表二:课程表COURSE(COID,NAME),其中,COID表示课程号,NAME表示课程名。(c)表三:成绩表SCORE(SCID,COID,GRADE),其中,SCID表示学号,COID表示课程号, GRADE表示成绩,成绩为空时表示这学期正在上的课程。1. [问题1] 根据要求将SQL语句补充完整。 (1)查询各系的学生数 SELECT (1) ,COUNT(*) (2) GROUP BY DEPTNO; (2)更改课程号为C601的课程名为“大学物理” UPDATE (3) SET (4) (3)基于学生信息表,建立一个计算机系(系编号为D01)的学生视图。写出命令。 CREATE OR REPLACE VIEW V_STUDENT AS (5)
问答题[问题1]
请在下列选项中选择合适的答案,填入图3-1、图3-2的方框a和方框b。
B的公钥,B的私钥,摘要算法,A的私钥,A的公钥,会话密钥
问答题有下列关于运动会管理系统的ER图,如图10所示。图中矩形表示实体,圆表示属性,双圆表示关键字属性,菱形表示实体之间的关系。假定已通过下列SQL语言建立了基本表。CREATETABLEATHLETEANAMECHAR(20),ASEXCHAR(1),ATEAMCHAR(20));CREATETABLE|TEM(INOCHAR(6)NOTNULL,INAMECHAR(20),ITIMECHAR(12),IPLACECHAR(20);CREATETABLEGAMES(ANOCHAR(6)NOTNULL,INOCHAR(6)NOTNULL,SCORRECHAR(10));为了答题的方便,图中的实体和属性同时给出了中英文两种文字,回答问题时只需写出英文名即可。【E-R图】【问题】填充下列SQL程序1~4中的(1)~(7),使它们分别完成相应的功能:程序1:统计参加比赛时男运动员人数。SELECT(1)FROMATHLETEWHEREASEX='M';程序2:查100872号运动员参加的所有项目及其比赛时间和地点。SELECTITEM,INO,INAME,ITIME,IPLACEFROMGAMES,ITEMWHERE(2);AND(3);程序3:查参加100035项目的所有运动员名单。SELECTANO,ANAME,ATEAMFROMATHLETEWHERE(4);(SELECT(4)(5)FROMGAMESWHEREGAMESANO=ATHLETE.ANOANDINO='100035');程序4:建立运动员成绩视图。(6)ATHLETE-SCOREASSELECTATHLETE,ANO,ANAME,ATEAM,INAME,SCOREFORM(7)WHEREATHLETE.ANO=GAMES.ANOANDGAMES.INO=ITEM.INO;
问答题某咖啡店当卖咖啡时,可以根据顾客的要求在其中加入各种配料,咖啡店会根据所加入的配料来计算费用。咖啡店所供应的咖啡及配料的种类和价格如表所示。咖啡及配料的种类和价格表咖啡价格/杯配料价格/份蒸馏咖啡(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{//饮料{{U}}{{U}}{{/U}}{{/U}}:stringdescription;public:{{U}}{{U}}{{/U}}{{/U}}(){returndescription;}{{U}}{{U}}{{/U}}{{/U}};};classCondimentDecorator:publicBeverage{//配料protected:{{U}}{{U}}{{/U}}{{/U}};};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=beverage;)stringgetDescription(){returnbeverage->getDescription()+",Mocha";)intcost(){returnMOCHA_PRiCE+beverage->cost();}};classwhip:publiccondimentDecorator{//奶泡publio:Whip(Beverage*beverage){this->beverage=beverage;)stringgetDescription(){returnbeverage->getDescription()+",Whip";]intcost()(returnWHIP_PRiCE+beverage->cost();}};intmain(){Beverage*beverage=newDarkRoast();beverage=newMocha({{U}}{{U}}{{/U}}{{/U}});beverage=newWhip({{U}}{{U}}{{/U}}{{/U}});cout<<beverage->getDescription()<<"¥"<<beverage->cost()end1;return0;}编译运行上述程序,其输出结果为:DarkRoast,Mocha,Whip¥38
问答题某公司的主要业务是出租图书和唱碟。由于业务需求,该公司委托希赛公司开发一套信息管理系统。该系统将记录所有的图书信息、唱碟信息、用户信息、用户租借信息等。希赛公司决定采用面向对象的分析和设计方法开发此系统。图1所示为某类图书或唱碟被借阅时应记录的信息,图2描述了系统定义的两个类Book和CD,分别表示图书和唱碟的信息。图1借阅时应记录的信息图2借阅时应记录的信息
问答题[问题2] 将ER图转换成关系模型,并说明主键和外键。
问答题[说明]已知某企业欲开发一家用电器遥控系统,即用户使用一个遥控器就可控制某些家用电器的开与关。遥控器如下图1所示。该遥控器共有4个按钮,编号分别是0~3,按钮0和按钮2能够遥控打开电器1和电器2,按钮1和按钮3则能遥控关闭电器1和电器2。由于遥控系统需要支持形式多样的电器,因此该遥控系统的设计要求具有较高的扩展性。现假设需要控制客厅电视和卧室电灯,对该遥控系统进行设计所得类图如下图2所示。在图2中,类RomoteController的方法onPressButton(intbutton)表示当遥控器按键按下时调用的方法,参数为按键的编号;Command接口中on和off方法分别用于控制电器的开与关;Light中turnLight(intdegree)方法用于调整电灯光的强弱,参数degree值为0时表示关灯,值为100时表示开灯,并且将灯光亮度调整到最大;TV中setChannei(intchannel)方法表示设置电视播放的频道,参数channel值为0时表示关闭电视,为1时表示开机并将频道切换为第1频道。[C++程序]classLight{//电灯类public:voidturnLight(intdegree){//调整灯光亮度,0表示关灯,100表示亮度最大};classTV{//电视机类public:voidsetChannel(intchannel){//N整电视频道,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){______=command;//设置每个按钮对应的命令对象}};classLightCommand:publicCommand{//电灯命令类protected:Light*light;//指向要控制的电灯对象public:voidon(){light→turnLight(100);};voidoff(){light→______);LightCommand(Light*light){this→light=light;};};classTVCommand:publicCommand{//电视机命令类protected:TV*tv;//指向要控制的电视机对象public:voidon(){tv→______;};voidoff(){tv→setChannel(0);};TVCommand(TV*tv){this→tv=tv;};};voidmain(){Lightlight;TVtv;//创建电灯和电视对象LightCommandlightCommand(&light);TVCommandtvCommand(&tv);RemoteControllerremoteController;remotecontroller.setCommand(0,______);//设置按钮0的命令对象…//此处省略设置按钮1、按钮2和按钮3的命令对象代码}本题中,应用命令模式能够有效地让类______和类______、类______之间的耦合性降至最小。
问答题试题五(共15分)阅读下列说明和C++代码,将应填入(n)处的字句写在答题纸的对应栏内。【说明】现欲构造一文/目录树,采用组合(Composite)设计模式来设计,得到的类图如5-1所示:图5-1类图
问答题[说明] 某超市管理系统的前台销售子系统以最基本的方式处理销售业务。系统的功能需求如下: ①记录每种商品的编号、单价和现有数量; ②为顾客选购的商品计价、收费,并打印清单; ③帮助商家找出哪种商品将脱销,从而及时补充货源; ④随时按上级系统的要求报告当前的款货数量、增减商品的种类或修改商品定价; ⑤交接班时结算货款数目和商品数目。 每台收款机可以处理任何数目的销售事件,但一个销售事件只能由一台收款机处理。每个销售事件从收款机响应收款人员的指令开始,先向商品发送检索请求消息来查找将被出售的商品。如果该商品的数量少于下限,则向供货员发送缺货登记消息。每名供货员可以提供一种或多种商品,同一品牌的商品只能由一位供货员来提供。接着收款机发送计价和入账消息请求售出操作,再由销售事件发送记账消息给相应的账册,并控制流程返回收款机等待下一次销售操作。每本销售账册可以记录任何数目的销售事件,但一个销售事件只能由一本销售账册记录。 该销售子系统采用面向对象方法开发,系统中的类及类之间的关系用UML类图表示,图1-11是该系统类图中的一部分;系统的动态行为采用UML序列图表示,图1-12是销售事件部分的序列图。