●试题一
阅读下列说明和有关的图表,回答问题1至问题3,将解答填入答题纸的对应栏内。
【说明】
A公司决定为该市车站开发自动售票系统,系统的要求如下:
1.乘客能按以下三步操作购票:选定目的地;投入钱币;获得一张票;
2.当且仅当乘客选定目的地后,系统才接收投钱,每次投入的钱只购买一张票;
3.只要投入的钱不少于所需的票价,且票库中有所要求的票,则应尽快出票;
4.如需找钱,则在出票的同时应退还多余的钱;
5.如果乘客投入的钱不够票价,或者票库中没有所要求的票时,系统将全额退钱,并允许乘客另选目的地,继续购票;
6.出票前乘客可以按"取消"按钮取消购票,系统将全额退出该乘客投入的钱,并允许乘客另选目的地,继续购票;
7.出票结束(包括退还多余的钱)后,系统应保存销售记录,并等待乘客购票。
该系统还要求快速响应和操作同步,所以它应是一个实时系统。为此,A公司在该系统的数据流程图中附加了过程控制部分,形成转换图。在该图中,控制流(事件流)用虚线表示,数据流用实线表示。图中的数据流并没有画全,需要考生填补。转换图如图1所示。
图1转换图
程进行的控制可以用系统内部各个状态之间的迁移来描述,从而形成状态迁移图。在状态迁移图中,用双线框表示状态,用有向边表示状态的迁移。引起状态迁移的事件以及由该事件引起的动作,在有向边旁用"事件 动作"形式注明。状态迁移图如图2所示。
图2状态迁移图
该公司还制作了一个过程启动表,用以表明状态迁移图中的4个动作与转换图中的4个过程之间的"启动"关系,即说明哪个动作将启动哪个过程。用1表示启动,用0表示不启动。启动的过程将根据获得的输入数据产生输出数据,未启动的过程则不会产生输出数据。该表中没有列出的过程,其执行与否与事件无关。过程启动表见表1:
【问题1】
转换图中缺少哪三条数据流?请指明每条数据流的名称、起点和终点。
【问题2】
在状态迁移图中,a,b,c分别表示什么事件?请用转换图中给出的事件名解答。
【问题3】
在过程启动表中,d,e处应填什么?请分别用4位二进制码表示。
第1题
试题三(共 15 分)
阅读下列说明和图,回答问题 1 至问题 4,将解答填入答题纸的对应栏内。
【说明】
已知某唱片播放器不仅可以播放唱片,而且可以连接电脑并把电脑中的歌曲刻录到唱片上(同步歌曲) 。连接电脑的过程中还可自动完成充电。 关于唱片,还有以下描述信息:
1.每首歌曲的描述信息包括:歌曲的名字、谱写这首歌曲的艺术家以及演奏这首歌曲的艺术家。只有两首歌曲的这三部分信息完全相同时,才认为它们是同一首歌曲。艺术家可能是一名歌手或一支由 2 名或2 名以上的歌手所组成的乐队。一名歌手可以不属于任何乐队,也可以属于一个或多个乐队。
2.每张唱片由多条音轨构成;一条音轨中只包含一首歌曲或为空,一首歌曲可分布在多条音轨上;同一首歌曲在一张唱片中最多只能出现一次。
3. 每条音轨都有一个开始位置和持续时间。一张唱片上音轨的次序是非常重要的,因此对于任意一条音轨, 播放器需要准确地知道, 它的下一条音轨和上一条音轨是什么 (如果存在的话) 。 根据上述描述,采用面向对象方法对其进行分析与设计,得到了如表 3-1 所示的类列表、如图 3-1 所示的初始类图以及如图 3-2 所示的描述播放器行为的 UML 状态图。
【问题 1】 (3 分)
根据说明中的描述,使用表 3-1给出的类的名称,给出图 3-1 中的 A~F所对应的类。
【问题 2】 (6 分)
根据说明中的描述,给出图 3-1 中(1)~(6)处的多重度。
【问题 3】 (4 分)
图 3-1 中缺少了一条关联,请指出这条关联两端所对应的类以及每一端的多重度。
【问题 4】 (2 分)
根据图 3-2 所示的播放器行为 UML 状态图,给出从“关闭”状态到“播放”状态所经过的最短事件序列(假设电池一开始就是有电的) 。
第2题
试题一(共 15 分)
阅读以下说明和图,回答问题1至问题4,将解答填入答题纸的对应栏内。
【说明】
某高校欲开发一个成绩管理系统,记录并管理所有选修课程的学生的平时成绩和考试成绩,其主要功能描述如下:
1. 每门课程都有 3 到 6 个单元构成,每个单元结束后会进行一次测试,其成绩作为这门课程的平时成绩。课程结束后进行期末考试,其成绩作为这门课程的考试成绩。
2. 学生的平时成绩和考试成绩均由每门课程的主讲教师上传给成绩管理系统。
3. 在记录学生成绩之前,系统需要验证这些成绩是否有效。首先,根据学生信息文件来确认该学生是否选修这门课程,若没有,那么这些成绩是无效的;如果他的确选修了这门课程,再根据课程信息文件和课程单元信息文件来验证平时成绩是否与这门课程所包含的单元相对应,如果是,那么这些成绩是有效的,否则无效
4. 对于有效成绩,系统将其保存在课程成绩文件中。对于无效成绩,系统会单独将其保存在无效成绩文件中,并将详细情况提交给教务处。在教务处没有给出具体处理意见之前,系统不会处理这些成绩。
5. 若一门课程的所有有效的平时成绩和考试成绩都已经被系统记录,系统会发送课程完成通知给教务处,告知该门课程的成绩已经齐全。教务处根据需要,请求系统生成相应的成绩列表,用来提交考试委员会审查。
6. 在生成成绩列表之前,系统会生成一份成绩报告给主讲教师,以便核对是否存在错误。主讲教师须将核对之后的成绩报告返还系统。
7. 根据主讲教师核对后的成绩报告,系统生成相应的成绩列表,递交考试委员会进行审查。考试委员会在审查之后,上交一份成绩审查结果给系统。对于所有通过审查的成绩,系统将会生成最终的成绩单,并通知每个选课学生。 现采用结构化方法对这个系统进行分析与设计,得到如图 1-1 所示的顶层数据流图和
图 1-2 所示的 0 层数据流图。
【问题 1】 (4 分)
使用说明中的词语,给出图 1-1 中的外部实体 E1~E4 的名称。
【问题 2】 (3 分)
使用说明中的词语,给出图 1-2 中的数据存储 D1~D5 的名称。
【问题 3】 (6 分)
数据流图 1-2 缺少了三条数据流,根据说明及数据流图 1-1 提供的信息,分别指出这三条数据流的起点和终点
【问题 4】 (2 分)
数据流图是在系统分析与总体设计阶段宏观地描述系统功能需求的重要图形化工具,程序流程图也是软件开发过程中比较常用的图形化工具。简要说明程序流程图的适用场合与作用。
第3题
●试题三
阅读下列说明,回答问题1~问题3,将解答填入答题纸的对应栏内。
【说明】
某超市的销售业务由一个销售业务管理系统进行管理,该系统每完成一次交易都需要提供顾客发票,其格式见表6所示。
对于这样一个销售业务管理系统,分别给出了以下两种关系数据库的设计(下划线表示主关键字)
设计一:
顾客Customer(顾客代码Cno,姓名name,住址address,联系电话phone)
收银员Salesman(收银员代码Sno,身份证号idno,姓名name,住址address,联系电话phone)
商品Merchandise(商品代码Mno,商品名称Mname,价格price)
发票Invoice(发票号码Ino,交易日期Idate,顾客代码Cno,收银员代码Sno,商品代码Mno,单价unitprice,数量amount)
设计二:
顾客Customer(顾客代码Cno,姓名name,住址address,联系电话phone)
收银员Salesman(收银员代码Sno,身份证号idno,姓名name,住址address,联系电话phone)
商品Merchandise(商品代码Mno,商品名称Mname,价格price)
发票Ivoice(发票号码Ino,交易日期Idate,顾客代码Cno,收银员代码Sno)
发票明细Invoicedetail(发票号码Ino,商品代码Mno,单价unitprice,数量amount)
【问题1】
设计一的关系模式Invoice最高满足第几范式?为什么?设计一和设计二哪个更加合理?为什么?
【问题2】
根据设计二中关系模式,以下SQL语句是用于"建立2005年1月期间每张发票的发票号,交易日期,交易商品件数和交易总金额的视图"的不完整语句,请填补其中的空缺。
CREATE VIEW Invoice -total (1)
SELECT Invoice.Ino,Idate, (2) , (3)
FROM Invoice,Invoicedetail
WHERE (4) AND
Idate BETWEEN′2005-01-01′AND′2005-01-31′
GROUPBY (5) ;
【问题3】
根据设计二中关系模式,以下SQL语句是用于"查询从未售出的商品信息"的不完整语句,请填补其中的空缺。
SELECT Mno,Mname,price
FROM Merchandise (1)
WHERE (2)
(SELECT (3)
FROM Invoicedetail
WHERE A.Mno=Invoicedetail.Mno);
【问题4】
设计二中关系Merchandise中由属性price表示商品价格,关系Invoicedetail中的属性unitprice也表示商品价格。两个是否有必要同时存在?为什么?
第4题
●试题三
根据题意回答以下问题:
设某商业集团数据库中有3个实体集:一是"商店"实体集,属性有商店编号,商店名,地址等;二是"商品"实体集,属性有商品号,商品名,规格,单价等;三是"职工"实体集,属性有职工编号,姓名,性别,业绩等。商店与商品间存在"销售"联系,每个商店可以销售多种商品,每种商品也可以在多个商店和职工间存在"聘用"联系,每个商店有许多职工,每个职工只能在一个商店工作,商店聘用职工有聘期和月薪。
问题:
1.请根据题意完善下面ER图。
2.将ER图转换成关系模型,并注明主键和外键。
3.请写出要查出员工"小李"在三月份的销售业绩的关系代数式。
第5题
●试题一
阅读下列说明、图1和图2,回答问题1、问题2和问题3。
【说明】
下面是某租车信息管理系统的介绍:该车库中备有若干车辆,每辆车有车号、车牌、车名、价格等属性。车库不定期地购买并注册新车供用户借用,也可将报废的旧车注销以停止租用。
车库可为众多用户提供服务。每个用户在借车之前需注册姓名、地址等内容。每个用户最多可同时借3辆车。每辆车借期7天;若有一辆车超期,则不可再借其他车。一辆车超期一天罚款250元。若一辆车超期3周不归还,则发布通告。若用户借的车丢失,在罚款处理之前不能借车,每辆报失的车罚款该车目前市价(包括折旧)的1.2倍。注册新用户不受限制;而注销用户之前,该用户必须归还所有借的车,或者报失并接受罚款。
【状态图1】
【问题1】
分析车辆的状态和事件,指出图1中的 (1) 、 (2) 、 (3) 、 (4) 分别是什么?
【问题2】
分析用户的状态和事件,指出图2中的 (5) 、 (6) 、 (7) 、 (8) 分别是什么?(注意,用户与车辆在状态图中的关系)。
【问题3】
指出UML中活动图的含义,并说明活动图和状态图的区别与联系。
【状态图2】
图2 用户的状态图
第6题
●试题六
【说明】
下面是一个Applet程序,其功能是建立2个文本区域,一个为编辑区,一个为只读区;建立2个按钮,一个实现将编辑区中被鼠标选定的文本内容拷贝到只读区中,一个实现将只读区的全部文本内容清空。
程序运行结果如图3所示。
图3
import javA.awt.*;
import javA.applet.*;
/*
<applet code="ex3_6.class" width=800 height=400 >
</applet>
*/
public class ex3_6 extends Applet{
private Button okBtn, clearBtn;
private String strMessage;
private TextArea tArea1, tArea2;
public void init(){
strMessage = "Hello! Welcome to the test! \n" +
"Wish you good luck!";
tArea1 = new TextArea( 10, 25 );
(1) ;
tArea2 = new TextArea( 10, 25 );
(2) ;
okBtn = new Button( "Copy" );
clearBtn = (3) ;
add( tArea1 );
add( tArea2 );
add( okBtn );
add( clearBtn );
}
public boolean action( Event e, Object o ){
if( e.target == okBtn )
tArea2.setText( (4) );
else if( e.target == clearBtn )
(5) ;
return true;
}
}
ex3_6.html
<HTML>
<HEAD>
<TITLE>ex3_6</TITLE>
</HEAD>
<BODY>
<applet code="ex3_6.class" width=800 height=400 >
</applet>
</BODY>
</HTML>
第7题
●试题七
【说明】
下面是一个Applet程序,其功能是根据给出的小时,分钟和秒数计算相等的秒数,即将1分钟化为60秒,依此类推。要求建立一个时间类,时间参数均作为类的成员变量,并且给出换算时间的方法,也作为这个类的成员函数,可以供外部对象进行调用。同时还需要在输出窗口中显示换算结果,并且将结果写到out3_3.txt文件中,本题给出确定的时间为4小时23分47秒,要求换算成以秒做单位的时间。
程序运行结果如图11所示。
图11
import javA.io.*;
import javA.awt.*;
import javA.applet.*;
/*
<applet code=ex7_7.class width=800 height=400>
</applet>
*/
public class ex7_7 extends Applet{
public void paint(Graphics g){
int nSum;
class myTime7_7{
public int h;
public int m;
public int s;
public int out;
public int caculateSecond(){
(1) ;
return out;
}
}
myTime7_7 objTime7_7 = new myTime7_7();
objTime7_7.h = 4;
objTime7_7.m = 23;
objTime7_7.s = 47;
nSum = objTime7_7. (2) ;
g.drawString ("时:"+objTime7_7.h, 20, 30);
g.drawString ("分:"+objTime7_7.m, 20, 50);
g.drawString ("秒:"+objTime7_7.s, 20, 70);
g.drawString ( (3) );
try {
FileOutputStream fos7_7 = new FileOutputStream("out7_7.txt");
BufferedOutputStream bos7_7=new BufferedOutputStream(fos7_7,1024);
PrintStream ps7_7=new PrintStream(bos7_7,false);
System.setOut(ps7_7);
System.out.println( (4) );
ps7_7.close();
} catch(IOException ioe) {
(5) (ioe);
}
}
}
ex7_7.html
<HTML>
<HEAD>
<TITLE>ex7_7</TITLE>
</HEAD>
<BODY>
<applet code="ex7_7.class" width=800 height=400 >
</applet>
</BODY>
</HTML>
第8题
●试题一
阅读以下算法说明和流程图,回答问题1和问题2。
【算法说明】
下面是一段插入排序的程序,将R[k+1]插入到R[1…k]的适当位置。R[0]=R[k+1];j=k;
while (R[j]>R[0])
{
R[j+1]=R[j];j--;
}
R[j+1]=R[0];
【流程图】
【测试用例设计】
(while循环次数为0、1、2次)
【问题1】
指出算法的流程图中 (1) ~ (3) 处的内容。
【问题2】
指出测试用例设计中 (4) ~ (9) 处的内容。
第9题
●试题一
阅读以下说明和流程图(如图1所示),回答问题1至问题4,将答案写在答卷的对应栏内。
【说明】
本流程图是将中缀表示的算术表达式转换成后缀表示。如中缀表达式
(A-(B*C+D)*E)/(F+G))
的后缀表示为
ABC*D+E*-FG+/
为了方便,假定变量名为单个英文字母,运算符只有+、-、*、/(均为双目运算符,左结合),并假定所提供的算术表达是非空且语法是正确的。另外,中缀表示形式中无空格符,但整个算术表达式以空格符结束。流程图中使用的符号的意义如下:
数组IN[]存储中缀表达式;
数组POLISH[]存储其后缀表达式;
数组S[]是一个后进先出栈;
函数PRIOR(CHAR)返回符号CHAR的优先级,各符号的优先级见表2:
【问题1】
填充流程图中①的判断条件。
【问题2】
写出子程序A的功能,并顺序写出实现该功能的操作
【问题3】
写出子程序B的功能,并顺序写出实现该功能的操作。
【问题4】
中缀表达式
(A+B-C*D)*(E-F)/G
经该流程图处理后的输出是什么?
【流程图】
图1
第10题
●试题四
阅读下列算法说明和算法,将应填入(n)的字句写在答题纸的对应栏内。
【说明】
下列最短路径算法的具体流程如下:首先构造一个只含n个顶点的森林,然后依权值从小到大从连通网中选择不使森林中产生回路的边加入到森林中去,直至该森林变成一棵树为止,这棵树便是连通网的最小生成树。该算法的基本思想是:为使生成树上总的权值之和达到最小,则应使每一条边上的权值尽可能地小,自然应从权值最小的边选起,直至选出n-1条互不构成回路的权值最小边为止。
图5算法流程图
【算法】
/*对图定义一种新的表示方法,以一维数组存放图中所有边,并在构建图的存储结构时将它构造为一个"有序表"。以顺序表MSTree返回生成树上各条边。*/
typedef struct{
VertexType vex1;
VertexType vex2;
VRType weight;
}EdgeType;
typedef ElemType EdgeType;
typedef struct{//有向网的定义
VertexType vexs[MAX_VERTEX_NUM];//顶点信息
EdgeType edge[MAX_EDGE_NUM];//边的信息
int vexnum,arcnum;//图中顶点的数目和边的数目
}ELGraph;
void MiniSpanTree_Kruskal(ELGraph G,SqList& MSTree){
//G.edge 中依权值从小到大存放有向网中各边
//生成树的边存放在顺序表MSTree中
MFSetF;
InitSet(F,G.vexnum);//将森林F初始化为n棵树的集合
InitList(MSTree,G.vexnum);//初始化生成树为空树
i=0;k=1;
while(k< (1) ){
e=G.edge[i];//取第i条权值最小的边
/*函数fix_mfset返回边的顶点所在树的树根代号,如果边的两个顶点所在树的树根相同,则说明它们已落在同一棵树上。*/
rl=fix_mfset(F,LocateVex(e.vex1));
r2= (2) //返回两个顶点所在树的树根
if(r1 (3) r2){//选定生成树上第k条边
if(ListInsert(MSTree,k,e){ (4) ;//插入生成树
mix_mfset(E,rl,r2);//将两棵树归并为一棵树
}
(5) ;//继续考察下一条权值最小边
}
DestroySet(F);
}
为了保护您的账号安全,请在“上学吧”公众号进行验证,点击“官网服务”-“账号验证”后输入验证码“”完成验证,验证成功后方可继续查看答案!