问答题{{B}}试题1~试题4是必答题{{/B}}阅读以下说明和图,根据要求回答问题1~问题4。[说明]某音像制品出租商店欲开发一个音像管理信息系统,管理音像制品的租借业务。需求如下。1.系统中的客户信息文件保存了该商店的所有客户的用户名、密码等信息。对于首次来租借的客户,系统会为其生成用户名和初始密码。2.系统中音像制品信息文件记录了商店中所有音像制品的详细信息及其库存数量。3.根据客户所租借的音像制品的品种,会按天收取相应的费用。音像制品的最长租借周期为1周,每位客户每次最多只能租借6件音像制品。4.客户租借某种音像制品的具体流程如下。(1)根据客户提供的用户名和密码,验证客户身份。(2)若该客户是合法客户,查询音像制品信息文件,查看商店中是否还有这种音像制品。(3)若还有该音像制品,且客户所要租借的音像制品数小于等于6个,就可以将该音像制品租借给客户。这时,系统给出相应的租借确认信息,生成一条新的租借记录并将其保存在租借记录文件中。(4)系统计算租借费用,将费用信息保存在租借记录文件中并告知客户。(5)客户付清租借费用之后,系统接收客户付款信息,将音像制品租借给该客户。5.当库存中某音像制品数量不能满足客户的租借请求数量时,系统可以接受客户网上预约租借某种音像制品。系统接收到预约请求后,检查库存信息,验证用户身份,创建相应的预约记录,生成预约流水号给该客户,并将信息保存在预约记录文件中。6.客户归还到期的音像制品,系统修改租借记录文件,并查询预约记录文件和客户信息文件,判定是否有客户预约了这些音像制品。若有,则生成预约提示信息,通知系统履行预约服务,系统查询客户信息文件和预约记录文件,通知相关客户前来租借音像制品。现采用结构化方法对音像管理信息系统进行分析与设计,获得如图7-10所示的顶层数据流图和图7-11所示的0层数据流图。
问答题[C++代码]
#include <iostream>
const OBS_MAXNUM=20;//最多与OfficeDoc对象相关联的DocExplorer对象的个数
{{U}} (1) {{/U}};
class DocExplorer{ //关注OfficeDoc公文对象的类
public:
DocExplorer({{U}} (2) {{/U}} *doc); //构造函数
{{U}} (3) {{/U}} void update(OfficeDoc *doc)=0;//更新自身状态的函数
//其他相关属性和方法省略
};
class OfficeDoc{ //公文类
private:
DocExplorer *myObs[OBS_MAXNUM];
//关注此公文类的DocExplorer类对象指针数组
int index; //与OfficeDoc对象关联的DocExplorer对象的个数
public:
OfficeDoe()
index=0;
}
void attach(DocExplorer *o){
//将一DoeExplorer对象与OfficeDoe对象相关联
if(index >=OBS_MAXNUM ||o=NULL)return;
for(int loop=0; loop<index; loop++)
if(myObs[loop]==o) return;
myObs[index]=o;
index++;
}
void detaeh(DocExplorer *o){
//接触某DoeExplorer对象与OfficeDoc对象的关联
if(0==NULL) return;
for(int loop=0; loop<index; loop++){
if(myObs[loop]==o){
if(loop<=index-2)myObs[loop]=myObs[index-1];
myObs[index-1]=NULL;
index--;
break;
}
}
}
private:
void notifyObs(){ //通知所有的DocExplorer对象更改自身状态
for(int loop=0; loop<index; loop++){
myObs[loop]->{{U}} (4) {{/U}}; //DocExplorer对象更新自身状态
}
}
//其他公文类的相关属性和方法
};
DocExplorer::DocExplorer(OfficeDoc *doc){//DocExplorer 类对象的构造函数
doc->{{U}} (5) {{/U}}; //将此DocExplorer对象与doc对象相关联
}
问答题
问答题【说明】 应用Prim算法求解连通网络的最小生成树问题。请阅读程序后填空。
const int MaxInt=INT MAX; //INT MAX的值在<limits.h>中
const int n=6; //图的顶点数,应由用户定义
typedef int AdjMatrix[n][n]; //用二维数组作为邻接矩阵表示
typedef struct{ //生成树的边结点
int fromVex,to Vex; //边的起点与终点
int weight; //边上的权值
}TreeEdSenode;
typedef TreeEdgeNode MST[n-1]; //最小生成树定义
void PrimMST (AdjMatrix G,MST T,int rt){
//从顶点rt出发构造图G的最小生成树T,rt成为树的根结点
TreeEdgeNode e; int i,k=0,min,minpos,v;
for(i=0;i<n;i++) //初始化最小生成树T
if(i!=rt){
T[k].fromVex=rt;
{{U}} (1) {{/U}};
T[k++].weight=G[rt][i];
}
for(k=0;k<n-1;k++){ //依次求MST的候选边
{{U}} (2) {{/U}};
for(i=k;i<n-1;i++) 八遍历当前候选边集合
if(T[i].weight<min) //选具有最小权值的候选边
{min=T[i].weight;{{U}} (3) {{/U}};}
if(min==MaxInt) //图不连通,出错处理
{cerr<<“Graph is disconnected!”<<endl; exit(1);}
e=T[minpos];T[minpos]=T[k];{{U}} (4) {{/U}};
v=T[k].to Vex;
for(i=k+1;i<n-1;i++) //修改候选边集合
if(G[v][T[i].to Vex]<T[i].weight){
T[i].weight=G[v][T[i].toVex];
{{U}} (5) {{/U}};
}
}
}
问答题[说明] 在多道程序系统中,各个程序之间是并发执行的,共享系统资源。CPU需要在各个运行的程序之间来回地切换,这样的话,要想描述这些多道的并发活动过程就变得很困难。为此,操作系统设计者提出了进程的概念。 进程是具有独立功能的程序关于某个数据集合上的一次动态执行过程,是系统进行资源分配和调度的独立单位。
问答题阅读以下算法说明,根据要求回答问题1~问题3。
[说明]
快速排序是一种典型的分治算法。采用快速排序对数组A[p..r]排序的3个步骤如下。
1.分解:选择一个枢轴(pivot)元素划分数组。将数组A[p..r]划分为两个子数组(可能为空)A[p..q-1]和A[q+1..r],使得A[q]大于等于A[p..q-1]中的每个元素,小于A[q+1..r]中的每个元素。q的值在划分过程中计算。
2.递归求解:通过递归的调用快速排序,对子数组A[p..q-1]和A[q+1..r]分别排序。
3.合并:快速排序在原地排序,故无需合并操作。
问答题【说明】 本流程图实现从成绩文件生成学生成绩一览表。 某中学某年级的学生成绩数据(分数)登录在成绩文件10中,其记录格式见表2: 表2 学号 姓名 课程1成绩 课程2成绩 …… 课程6成绩 由该成绩文件生成见表3的学生成绩一览表。生成的学生成绩一览表按学号升序排列。表中的名次是指该生相应课程在年级中的名次。 表3 学号 姓名 课程1 课程2 …… 课程6 成绩 名次 成绩 名次 …… …… 成绩 名次 流程图中的顺序文件F0是学生成绩文件,F0文件经处理1处理后产生顺序文件F,然后经过处理2至处理4对文件F进行处理和更新。在处理5中,仅对文件F的纪录进行学生成绩一览表的编排输出,不进行排序和增加名次等处理。1. 【问题1】 流程图中文件F的纪录格式设定为见表4形式: 表4 学号 姓名 课程代码 ① ②其中的①、②应定义为何种数据项?
问答题请仔细阅读以下关于某传输系统的技术说明、状态转换图及Java程序,根据要求回答问题1~问题2。[说明]传输门是传输系统中的重要装置。传输门具有Open(打开)、Closed(关闭)、Opening(正在打开)、StayOpen(保持打开)和Closing(正在关闭)5种状态。触发状态的转换事件有click、complete和timeout3种。事件与其相应的状态转换如图7-16所示。下面的[Java代码1]与[Java代码2]分别用两种不同的设计思路对传输门进行状态模拟,请填补代码段中的空缺语句。[Java代码1]
问答题阅读以下说明和数据流图,回答问题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
