问答题阅读以下说明和数据流图,回答问题1~3问题。[说明]研究生招生系统旨在用计算机对学校的研究生招生事务进行管理。研究生招生可分为报名阶段、考试阶段和录取阶段。招生报考前,招生处要进行考前准备工作,如统计招生导师、考试科目以及制定报考专业标准代码等。招生导师信息包括导师的姓名、性别、年龄、出生年月、所从事专业和研究方向以及所在系别。考试科目包含科目代码、科目的名称以及报考本科目的考试人数。在报名阶段,考生向招生处提交报名数据表,研究生系统根据考生的报考数据确定考生准考生号,并通知考生考试日期。在考试阶段,考试结束后,考生成绩录入研究生招生系统,考生可以从研究生招生系统中获取自己的考试成绩。在录取阶段,研究生招生系统根据考生的报考数据、考试成绩、外校调剂考生信息以及往年保留资格记录文件,确定录取数据,并形成录取文件。系统统计并记录相关招生信息,以供查询。对被录取的考生发放录取通知书,对需要保留资格的考生记录其信息,以供下年度招生使用。招生处可以从研究生招生系统中获得录取数据和招生情况的统计信息,以供咨询。数据流图11-1为研究生招生系统顶层图,数据流图11-2为研究生招生系统第0层DFD图,数据流图11-3为加工3的细化图。[数据流图11-1][数据流图11-2][数据流图11-3]
问答题某大型商场内安装了多个简易的纸巾售卖机,自动出售2元钱一包的纸巾,且每次仅售出一包纸巾。纸巾售卖机的状态图如图1所示。图1纸巾售卖机状态图采用状态(State)模式来实现该纸巾售卖机,得到如图2所示的类图。其中,类State为抽象类,定义了投币、退币、出纸巾等方法接口。类SoldState、SoldOutState、NoQuarterState和HasQuarterState分别对应图1中纸巾售卖机的4种状态:售出纸巾、纸巾售完、没有投币、有2元钱。图2用类图[Java代码]importjava.util.*;interfaceState{publicvoidinsertQuarter();//投币publicvoidejectQuarter();//退币publicvoidturnCrank();//按下“出纸巾”按钮publicvoiddispense();//出纸巾}classTissueMachine{{{U}}{{U}}{{/U}}{{/U}}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({{U}}{{U}}{{/U}}{{/U}});}//构造方法以及其余代码省略}classHasQuarterStateimplementsState{TiSsueMachinetiSsueMachine;publicvoidejectQuarter(){tissueMachine.setState({{U}}{{U}}{{/U}}{{/U}});}//构造方法以及其余代码省略}classSoldStateimplementsState{TissueMachinetissueMachine;publicvoiddispense(){if(tissueMachine.getCount()>0){tissueMachine.setState({{U}}{{U}}{{/U}}{{/U}});}else{tissueMachine.setState({{U}}{{U}}{{/U}}{{/U}});}}}
问答题【问题 4】(2 分)
根据图3-2 所示的播放器行为UML 状态图,给出从“关闭”状态到“播放”状态所经过的最短事件序列(假设电池一开始就是有电的)。
问答题[说明]研究生招生系统旨在用计算机对学校的研究生招生事务进行管理。研究生招生可分为报名阶段、考试阶段和录取阶段。招生报考前,招生处要进行考前准备工作,如统计招生导师、考试科目以及制定报考专业标准代码等。招生导师信息包括导师的姓名、性别、年龄、出生年月、所从事专业和研究方向以及所在系别。考试科目包含科目代码、科目的名称以及报考本科目的考试人数。在报名阶段,考生向招生处提交报名数据表,研究生系统根据考生的报考数据确定考生准考生号,并通知考生考试日期。在考试阶段,考试结束后,考生成绩录入研究生招生系统,考生可以从研究生招生系统中获取自己的考试成绩。在录取阶段,研究生招生系统根据考生的报考数据、考试成绩、外校调剂考生信息以及往年保留资格记录文件,确定录取数据,并形成录取文件。系统统计并记录相关招生信息,以供查询。对被录取的考生发放录取通知书,对需要保留资格的考生记录其信息,以供下年度招生使用。招生处可以从研究生招生系统中获得录取数据和招生情况的统计信息,以供咨询。数据流图11-1为研究生招生系统顶层图,数据流图11-2为研究生招生系统第0层DFD图,数据流图11-3为加工3的细化图。[数据流图11-1][数据流图11-2][数据流图11-3]
问答题[说明]对多个元素的聚合进行遍历访问时,需要依次推移元素,例如对数组通过递增下标的方式,数组下标功能抽象化、一般化的结果就称为迭代器(Iterator)。模式以下程序模拟将书籍(Book)放到书架(BookShelf)上并依次输出书名。这样就要涉及到遍历整个书架的过程。使用迭代器Iterator实现。图6-1显示了各个类间的关系。以下是JAVA语言实现,能够正确编译通过。[图6-1][Java代码]//Iterator.java文件publicinterfaceIteratorpublicabstractbooleanhasNext();publicabstractObjectnext();//Aggregate.java文件publicinterfaceAggregatepublicabstractIteratoriterator();//Book.javapublicclassBook//省略具体方法和属性//BookshelfIterator.java文件publicclassBookshelf工terator(1)IteratorprivateBookShelfbookShelf;privateintindex;publicBookshelfIterator(BookShelfbookShelf)this.bookShelf=bookShelf;this.index=0;publicbooleanhasNext()//判断是否还有下一个元素if(indexreturntrue;elsereturnfalse;publicObjectnext()f//取得下一个元素Bookbook=bookShelf.getBookAt(index);index++;returnbook;//BookShelf.javaimportjava.util.Vector;publicclassBookShelfprivateVectorbooks;publicBookShelf(intinitialsize)this.books=newVector(initialsize);publicBookgetBookAt(intindex)return(Book)books.get(index);publicintgetLength()returnbooks.size();publicIteratoriterator()returnnewBookShelfIterator((2));//Main.java文件publicclassMainpublicstaticvoidmain(Stringargs)BookShelfbookShelf=newBookShelf(4);//将书籍上架,省略代码Iteratorit=bookShelf.(3);while((4))//遍历书架,输出书名Bookbook=(Book)it.(5);System.out.printin(""+book.getName());
问答题【说明】 某教学管理系统的用户是教学管理人员、教师和学生。系统主要提供学生选课管理和学生成绩管理两方面的功能。 (1)学生选修课管理 主要功能是管理新学期开始时,学生对选修的课程进行选课注册工作。新学期开始后的前两周为学生试听、选课注册时间;允许校内各院系学生跨专业跨年级选修课程;学生可以在校园网的任何一个终端进行选课。 ①新学期选修课程表生成:各学院教学管理人员在新学期开始前,将准备开设的选修课程名称、课程代码、总课时、上课时间、学分、任课教师和上课教室录入系统,供学生选课使用。新学期开学两周后,系统自动将实际选课学生少于10人的课程停开,并删除该课程;教学管理人员打印学生选课注册名单和开课通知书,送交有关部门和任课教师。 ②学生选课注册:新学期开学前两周为学生试听、选课注册时间,并允许改变或取消注册申请。学生调用待选课程表,系统显示课程名、课程代码、任课教师、上课时间、总课时、上课教室、学分和本课程己选修人数。学生所选几门课程在上课时间上不能冲突:若一门课程实际选课学生已达到40人时,停止选课。当学生退出系统时,系统提示该学生所选的几门课程、任课教师、上课时间、教室、学分和学分总计。 ③选修课程查询:选修课程表信息查询,用户是教师、学生和教学管理人员。系统显示课程名、课程代码、任课教师、上课时间、总课时、上课教室、学分和本课程已选修人数。查询关键词可为学院名称、专业、授课教师等。 学生选课情况查询:教师和教学管理人员可以查看学生的选课情况。查询关键词可以为学生姓名(学号)、课程名称(课程代码)、授课教师等。学生只能查自己所选课程内容,不允许查其他同学选课情况。 教师简历查询:用户是学生、教师和教学管理人员。查询关键词可为教师姓名、性别、职称、年龄等单关键词或组合关键词。 ④信息统计与报表生成:各学院教学管理人员对学生选课注册信息进行统计(按课程、专业等),打印汇总报表。 ⑤把学生选课注册信息传送到财务管理系统,计算学生应交纳的费用。 (2)学生成绩管理 ①学生考试成绩录入:各学院教学管理人员将学生考试成绩录入系统。录入学生成绩时,系统自动检查财务系统传来的选课交费信息,核对该学生是否已经交纳本门课程的费用,没有交纳费用者,不给成绩。 ②成绩查询;教师和教学管理人员可查询学生各门课程的成绩。查询关键词可为学生姓名(学号),课程名(课程代码)等。学生只能查自己各门课程的成绩,不允许查其他同学成绩。 ③成绩汇总与报表生成:教学管理人员对学生考试成绩信息进行统计(按学生、课程、专业等),打印汇总报表。向学校教务管理系统发送汇总信息表格等,不反馈信息。
问答题
问答题[问题3](3分)
根据说明中的描述,将类C2和C3的属性补充完整(属性名使用说明中给出的英文词汇)。
问答题【说明】 (1)这是一个图书馆支持系统。 (2)图书馆应用系统可以将图书和杂志借给借书者,这些借书者已经在系统中注册了,图书和杂志也已经注册过了。 (3)图书馆负责新书的购买,一本流行图书会多买几本。当旧书和杂志已经过时或破旧不堪时,将它们从图书馆应用系统中删除。 (4)图书馆馆员是图书馆的员工。他们与客户(借书者)打交道,并且是在图书馆软件系统提供的支持下开展工作的。 (5)借书者可以预订图书馆中当前还没有的图书或杂志,这样,当某借书者所预订的图书或杂志归还回来或购进时,应用系统就通知这个预订人。当该借书者借阅了他所预订的图书或杂志后,或者通过一个显式的取消过程取消他的预订后,他的本次预订就被取消了。 (6)图书馆应用系统能够容易地建立、修改和删除系统中的信息,包括书名、借书者、借阅信息和预订信息。 (7)图书馆应用系统能够在所有流行的Web浏览器平台(Internet Explorer 5.1以上,Netscape 4.0以上等等)上运行。 (8)图书馆应用系统应该易于扩展新功能。
问答题【说明】某图书馆管理系统的主要功能是图书管理和信息查询。对于初次借书的读者,系统自动生成读者号,并与读者基本信息(姓名、单位、地址等)一起写入读者文件。系统的图书管理功能分为四个方面:购入新书、读者借书、读者还书以及图书注销。(1)购入新书时需要为该书编制入库单。入库单内容包括图书分类目录号、书名、作者、价格、数量和购书日期,将这些信息写入图书目录文件并修改文件中的库存总量(表示到目前为止,购入此种图书的数量)。(2)读者借书时需填写借书单。借书单内容包括读者号和所借图书分类目录号。系统首先检查该读者号是否有效,若无效,则拒绝借书;若有效,则进一步检查该读者已借图书是否超过最大限制数(假设每位读者能同时借阅的书不超过5本)。若已达到最大限制数,则拒绝借书;否则允许借书,同时将图书分类目录号、读者号和借阅日期等信息写入借书文件中。(3)读者还书时需填写还书单。系统根据读者号和图书分类目录号,从借书文件中读出与该图书相关的借阅记录,标明还书日期,再写回到借书文件中。若图书逾期,则处以相应的罚款。(4)注销图书时,需填写注销单并修改图书目录文件中的库存总量。系统的信息查询功能主要包括读者信息查询和图书信息查询。其中读者信息查询可得到读者的基本信息以及读者借阅图书的情况;图书信息查询可得到图书基本信息和图书的借出情况。图书管理系统的顶层图如图13-5所示;图书管理系统的第0层DFD图如图13-6所示,其中加工2的细化图如图13-7所示。
问答题【问题3】
关联(Association)和聚集(Aggregation)是UML中两种非常重要的关系。请说明关联和聚集的关系,并说明其不同点。
问答题阅读下列说明和图,回答问题。[说明]Pay&Drive系统(开多少付多少)能够根据驾驶里程自动计算应付的费用。系统中存储了特定区域的道路交通网的信息。道路交通网由若干个路段(RoadSegment)构成,每个路段由两个地理坐标点(Node)标定,其里程数(Distance)是已知的。在某些地理坐标点上安装了访问控制(AccessControl)设备,可以自动扫描行驶卡(Card)。行程(Trajectory)由一组连续的路段构成。行程的起点(Entry)和终点(Exit)都装有访问控制设备。系统提供了3种行驶卡。常规卡(RegularCard)有效期(ValidPeriod)为一年,可以在整个道路交通网内使用。季卡(SeasonCard)有效期为三个月,可以在整个道路交通网内使用。单次卡(MinitripCard)在指定的行程内使用,且只能使用一次。其中,季卡和单次卡都是预付卡(PrepaidCard),需要客户(Customer)预存一定的费用。系统的主要功能有客户注册、申请行驶卡、使用行驶卡行驶等。使用常规卡行驶,在进入行程起点时,系统记录行程起点、进入时间(DateOfEntry)等信息。在到达行程终点时,系统根据行驶的里程数和所持卡的里程单价(UnitPrice)计算应付费用,并打印费用单(Invoice)。季卡的使用流程与常规卡类似,但是不需要打印费用单,系统自动从卡中扣除应付费用。单次卡的使用流程与季卡类似,但还需要在行程的起点和终点上检查行驶路线是否符合该卡所规定的行驶路线。现采用面向对象方法开发该系统,使用UML进行建模。构建出的用例图和类图分别如图1和图2所示。图1图2
问答题【程序说明】 该程序定义了两个子函数strsort和strmerge。它们分别实现了将一个字符串按字母顺序排序和将两个字符串合并排序,并删去相同字符。在主函数里,先输入两个字符串s1和s2,然后调用strsort函数对它们分别排序,然后调用strmerge函数将s1和s2合并,将合并后的字符串赋给字符串s3,最后输出字符串s3。 【程序】 #include<stdio.h> void strmerge(char,a,char *b,char *c) //将字符串a,b合并到字符串c中 char t,*w; w=c; while( (1) ) //找到字符串a,b当前字符中较小的字符 if(*a< *b) t= *a; (2) ; else if (*a>*b) t= *b; (3) ; else //字符串a,b当前字符相等 t= *a; a++; b++; if( (4) ) //开始,可直接赋值 *w=t; else if(t!=*w) //如果a,b中较小的当前字符与c中当前字符不相等,才赋值 (5) ; if(*a!=/'/0') //如果字符串a还没有结束,则将a的剩余部分赋给C while(*a!='/0') if(*a!=*w) *(++w)=*a; a++; else (6) ; if(*6!='/0') //如果字符串b还没有结束,则将b的剩余部分赋给c while(*b!='/0') if(*b! = *w) *(++w)=*b; b++; else b++; (7) ; void strsort(char*s) //将字符串S中的字符排序 int i,j,n; char t,*w; W=S; for(n=0;*w!='/0';n++) //得到字符串长度n w++; for(i=0;i<n-1;i++) //对字符串s进行排序,按字母先后顺序 for(j=i+1;j<n;j++) if( (8) ) t=s[i]; s[i]=s[j]; (9) ; void main() char s1[100],s2[100],s3[100]; printf("/nPlease,input the first string:"); scanf("%s",s1); printf("/nPlease input the second string:"); scanf("%s",s2); strsort(s1); //将字符串s1排序 strsort(s2); //将字符串s2排序 printf("%s/n",s1); printf("%s/n",s2); s3[0]='/0'; //字符串s3的第一个字符先置'/0'结束标志 (10) //将s1和s2合并,按照字母顺序排列, //且要删去相同字符,存入s3中 printf("%s",s3);
问答题【说明】某医院收费系统的主要功能是收取病人门诊的各项费用。系统的收费功能分为3个方面:病历收费、挂号收费和根据处方单内容收取检查或药物费用。1.病人初次来该医院看病,首先购买病历,记录病人基本情况。2.病人看病前要挂号。根据病人的病历和门诊部门(内科、外科等),系统提供相应的挂号单和处方单,并收取费用。3.病人根据处方单进行进一步检查或取药前需交纳各项费用。系统首先根据病人基本情况检查处方单中病历号是否正确,记录合格的处方单,并提供收据。4.所有收费都必须依据定价表中的定价来计算,且所有收费都必须写入收费记录中。医院收费系统的顶层图如图2所示;医院收费系统的第0层DFD图如图3所示。其中,加工1的细化图如图4所示,加工2的细化图如图5所示。假定顶层图是正确的,“定价表”文件已由其他系统生成。【数据流图】
问答题【说明】某公司的用品采购流程如下所述。(1)由营业部门提出需求用品清单。(2)将需求用品清单交采购部门建立采购采买单据。(3)采购部门建立采购采买单据后,交财务部门,向财务部申请款项,预支定金。(4)财务部建立应付帐款单据后,核支款项。(5)采购部门再收到款项后,进行采买。(6)采买完成,执行:①发票核剩余款项交财务部,即由财务部门处理。②用品点交营业部门发放,即由营业部门处理。(7)进行财务结算处理,执行:①采购部门:采购单据结案。②财务部门:帐款冲销结案。【问题】完成下面的UML活动图对象流分析,1~11为活动,设计此采购活动的流程。
问答题【说明】某学校的教学系统描述如下。学生信息包括:学号(Sno)、姓名(Sname)、性别(Ssex)、年龄(Sage)、入学年份(Syear)、主修专业(Smajor),其中学号是入学时唯一编定的。教师信息包括:教工号(Tno)、姓名(Tname)、性别(Tsex)、年龄(Tage)、职称(Ttitle),其中教工号是唯一编定的。课程信息包括:课程号(Cno)、课程名称(Cname)、学时(Cperiod)、学分(Ccredit),其中课程号是唯一编定的。每个专业每个年级只有一个班级,这样班级就可用入学年份标识。每位教师只教授特定的一门的课程,每门课程可以有多个教师教授,各位老师的上课地点及上课时间有所不同。注意:一门课程至少有一位教师教授,否则这门课程就视为不存在。每位学生可以同时选修多门不同的课程,一门课程至少要有10位学生选修,否则就取消这门课程的开设。注意:选修课程时要指定任课教师,不能重复选修同一门课程。课程结束后,任课教师给选修该课程的学生一个成绩(Grade)。注意:教师不能给没有选修他所教授课程的学生成绩,即使选修了其他教师教授的同一门课也不行。如图9-11所示是经分析得到的E-R图。1.【问题1】根据题意,给出联系的属性。实体间的联系有“一对一”、“一对多”和“多对多”,指出各联系分别属于哪一种。
问答题【说明】某网络故障诊断系统,使用故障代理(aZent、Sm4PTrap等)来检测各种意外情况,如大幅丢包、路由冲突、广播风暴等。网络管理员可以在安装该系统时配置安全监控程序(如故障代理程序、实时诊断程序、报警器等),也可以在系统运行时修改配置,通过网络状态采集器和故障特征数据库,并通过控制面板上的键盘与系统进行信息交互。在安装过程中,系统给每个故障代理赋予一个编号(即id)和类型,并设置管理员密码以启动和关闭系统,设置故障代理事件发生时应自动拨出的电话号码。当系统检测到一个故障代理事件时,就激活警报,拨出预置的电话号码,并报告关于位置和检测到的事件的性质等信息。【数据流图】
问答题请认真阅读以下关于某传输系统的技术说明、状态转换图及C++代码,根据要求回答问题1~问题2。[说明]传输门是传输系统中的重要装置。传输门具有Open(打开)、Closed(关闭)、Opening(正在打开)、StayOpen(保持打开)和Closing(正在关闭)5种状态。触发状态的转换事件有click、complete和timeout3种。事件与其相应的状态转换如图7-15所示。下面的[C++代码1]与[C++代码2]分别用两种不同的设计思路对传输门进行状态模拟,请填补代码段中的空缺语句。[C++代码1]
问答题[预备知识]①对给定的字符集合及相应的权值,采用哈夫曼算法构造最优二叉树,并用结构数组存储最优二叉树。例如,给定字符集合a,b,c,d及其权值2、7、4、5,可构造如图3所示的最优二叉树和相应的结构数组Ht(数组元素Ht[0]不用)(见表5)。结构数组HT的类型定义如下:#defineMAXLEAFNUM20structnodecharch;/*当前结点表示的字符,对于非叶子结点,此域不用*/intweight;/*当前结点的权值*/intparent;/*当前结点的父结点的下标,为0时表示无父结点*/intIchild,rchild/*当前结点的左、右孩子结点的下标,为0时表示无对应的孩子结点*/Ht[2*MAXLEAFNUM];②用'0'或'1'标识最优二叉树中分支的规则是:从一个结点进入其左(右)孩子结点,就用'0'('1')标识该分支(示例如图3所示)。③若用上述规则标识最优二叉树的每条分支后,从根结点开始到叶子结点为止,按经过分支的次序,将相应标识依次排列,可得到由'0'、'1'组成的一个序列,称此序列为该叶子结点的前缀编码。如图3所示的叶子结点a、b、c、d的前缀编码分别是110、0、111、10。【函数5.1说明】函数voidLeafCode(introot,intn)的功能是:采用非递归方法,遍历最优二叉树的全部叶子结点,为所有的叶子结点构造前缀编码。其中形参root为最优二叉树的根结点下标;形参n为叶子结点个数。在构造过程中,将Ht[p].weight域用作被遍历结点的遍历状态标志。【函数5.1】char**Hc;voidLeafCode(introot,intn)/*为最优二叉树中的n个叶子结点构造前缀编码,root是树的根结点下标*/inti,p=root,cdlen=0;charcode[20];Hc=(char**)malloc(.(n+])*sizeof(char*));/*申请字符指针数组*/for(i=1;i<=p;++i)Ht[i].weight=0;/*遍历最优二叉树时用作被遍历结点的状态标志*/while(p)/*以非递归方法遍历最优二叉树,求树中每个叶子结点的编码*/if(Ht[p],weight==0)/*向左*/Ht[p].weight=1if(Ht[p],lchild!=0)p=Ht[P].lchild;code[cdlen++]='0';]elseif(Ht[p].rchild==0)/*若是叶子结点,则保存其前缀编码*/Hc[p]=(char*)malloc((cdlen+1)*sizeof(char));(1);strcpy(He[p],code);elseif(Ht[pi,weight==1)/*向右*/Ht[p].weight=2;if(Ht[p].rchild!=0)p=Ht[p].rchild;code[cdlen++]='1';else/*Ht[p].weight==2,回退*/Ht[p].weight=0;p=(2);(3);/*退回父结点*//*while结束*/【函数5.2说明】函数voidDecode(char*buff,introot)的功能是:将前缀编码序列翻译成叶子结点的字符序列并输出。其中形参root为最优二叉树的根结点下标;形参buff指向前缀编码序列。【函数5.2】voidDecode(char*buff,introot)Iintpre=root,p;while(*buff!='/0')p=root;while(p!=0)/*存在下标为p的结点*/pre=p;if((4))p=Ht[p].lchild;/*进入左子树*/elsep=Ht[p].rchild;/*进入右子树*./buff++;/*指向前缀编码序列的下一个字符*/(5);printf("%c",Ht[pre].ch);
问答题
