中级软件设计师下午试题模拟29有答案文档格式.docx
《中级软件设计师下午试题模拟29有答案文档格式.docx》由会员分享,可在线阅读,更多相关《中级软件设计师下午试题模拟29有答案文档格式.docx(14页珍藏版)》请在冰豆网上搜索。
![中级软件设计师下午试题模拟29有答案文档格式.docx](https://file1.bdocx.com/fileroot1/2022-12/13/708bbd27-f285-42d7-aa4e-a17513530104/708bbd27-f285-42d7-aa4e-a175135301041.gif)
过分析流程,"
住房分配表〃应该由1.6加工“制作住房分配报告〃流出。
在加工1子图中,1.1加工需要使用住户基本信息文件,所以该图中遗漏了从〃住户基本信息文件〃到1.1加工的数据流。
在加工1子图中,没有其他的遗漏。
同理,寻找加工2子图中的遗漏数据流。
问题3,在子加工2.3中可以查出的不合格交费凭证是:
交费凭证中有非法字符(语法错误),凭证文件中不存在相应的记录(语义错误)。
试题二
阅读以下说明,回答问题1至问题3,将答案写在对应栏内。
关于一位花商有以下一些事实。
(1)销售在不同地区生长的花,这些地区一年的量低温度在一定范围内变化。
(2)想用编号来表示发货类型。
(3)要出售某些类型的花。
假定已经通过SQL语句建立了基本表:
CREATETABLEZone
(
IDChar
(2)PRIMARYKEY,
LowerTempNumber(3),
UpperTempNumber(3)
);
CREATETABLEDelivery
IDchar
(2)PRIMARYKEY,
CategoryVarChar(5),
DelSizeNumber(5,3)
):
CREATETABLEFlowerinfo
IDChar(3)CONSTRAINT
Flowerinfo_id_pkPRIMARYKEY,
ComNameVarChar(25),
LatNameVarChar(30),
CzoneNumber(3),
HzoneNumber(3),
DeliveredNumber(3),
SunNeedChar(3),
PRIMARYKEY(ID)
):
地区(ID,最高温度,最低温度)
发货(ID,发货类型,发货规格)
花的信息(ID,普通名,拉丁名,花能够生长的最冷地区,花能够生长的最热地区,发货类型,日光需求)1.【问题1】
写出语句,将(ID=1,Category=pot,DelSize=1.5)的数据插入DELIVERY表中。
INSERTINTODelivery(ID,Category,DelSize)VALUE(,l,,'
pot'
1.5);
写出实现语句:
查询以花瓶(pot)形式发货的所有鲜花的ID,普通名以及花瓶的规格。
得到结果表按普通名的字母逆序打印。
SELECTFlowerinfo.ID,Flowerinfo.ComName,Delivery.DelSize
FromFLOWERINFOASF,DELIVERYASD
WHEREF.Delivered=D.idANDD.Category='
pot‘
ORDERBYF.ComNameDESC:
3.【问题3】
⑴把对表ZONE的INSERT权限授予用户Smith,并允许他再将此权限授予其他人。
⑵收回已经授予Tom的对Flowerinfo中属性ComName的修改权限。
(3)建立视图viewpot,表现问题2的功能。
(l)GRANTINSERTONTABLEZONETOSMITHWITHGRANTOPTION;
(2)REVOKEUPDATE(ComName)ONTABLEFLOWERINFOFROMTOM;
(3)CREATEVIEWViewpot(ID,ComName,DelSize)
AS
SELECTFlowerinfo.ID,Flowerinfo.ComName,Delivery.DelSize
FromFLOWERINFOASP,DELIVERYASD
WHEREF.Delivered=D.IDANDD.Category='
ORDERBYF.ComNameDESC;
[解答]问题1的插入语句很简单,只是考查考生基本的SQL语言能力。
Insert语句的基本格式如下:
INSERTINTO基本表名(字段名[,字段名]…)
VALUES(常量[,常量]...);
问题2中的查询需要两个表:
delivery和flowerinfo,必须知道如何连接这两个表。
SELECT语句的基本格式如下:
SELECT[ALLIDISTINCT]<H标列表达式>[别名][,V目标列表达式〉[别名]]...
FROM<表名或视图名>[别名][,V表名或视图名>别名]]...
[WHERE<条件表达式>]
[GROUPBY<列名1>[HAVING<条件表达办>]]
[ORDERBY<列名2>[ASCIDESC]];
SQL语言中的数据控制语句有授权(GRANT),收回权限(REVOKE),一般考生对这两个语句的掌握可能会不熟悉。
SQL语言用CREATEVIEW命令建立视图,其一般格式为:
CREATEVIEW<视图名>[(V列名〉(V,V列名>)...)]
ASV子查询>
[WITHCHECKOPTION]:
SQL语言用GRANT语句向用户授予操作权限,GRANT语句的一般格式为:
GRANT<权限>[,V权限〉]...
[01\1<对象类型>〈对象名>]
TOV用户>[,用户>]...
[WITHGRANTOPTION];
其语义是将对指定操作对象的指定操作权限授予指定的用户。
[WITHGRANTOPTION]是可将获得的权限授予他人。
授予的权限可以由DBA或其他授权者用REVOKE语句收回。
REVOKE语句的一般格式为:
REVOKE<权限>[,V权限〉]...
[01\!
<时象类型>〈对象名>]
FROMV用户>[,V用户〉]…;
试题三
阅读以下说明和图,回答问题1和问题2,将答案写在对应栏内。
某教学管理系统的用户是教学管理人员、教师和学生。
系统主要提供学生选课管理和学生成绩管理两方面的功能。
(1)学生选修课管理
主要功能是管理新学期开始时,学生对选修的课程进行选课注册工作。
新学期开始后的前两周为学生试听、选课注册时间;
允许校内各院系学生跨专业跨年级选修课程;
学生可以在校园网的任何一个终端进行选课。
1新学期选修课程表生成:
各学院教学管理人员在新学期开始前,将准备开设的选修课程名称、课程代码、总课时、上课时间、学分、任课教师和上课教室录入系统,供学生选课使用。
新学期开学两周后,系统自动将实际选课学生少于10人的课程停开,并删除该课程;
教学管理人员打印学生选课注册名单和开课通知书,送交有关部门和任课教师。
2学生选课注册:
新学期开学前两周为学生试听、选课注册时间,并允许改变或取消注册申请。
学生调用待选课程表,系统显示课程名、课程代码、任课教师、上课时间、总课时、上课教室、学分和本课程己选修人数。
学生所选儿门课程在上课时间上不能冲突:
若一门课程实际选课学生已达到40人时,停止选课。
当学生退出系统时,系统提示该学生所选的儿门课程、任课教师、上课时间、教室、学分和学分总计。
3选修课程查询:
选修课程表信息查询,用户是教师、学生和教学管理人员。
系统显示课程名、课程代码、任课教师、上课时间、总课时、上课教室、学分和本课程已选修人数。
查询关键词可为学院名称、专业、授课教师等。
学生选课情况查询:
教师和教学管理人员可以查看学生的选课情况。
查询关键词可以为学生姓名(学号)、课程名称(课程代码)、授课教师等。
学生只能查自己所选课程内容,不允许查其他同学选课情况。
教师简历查询:
用户是学生、教师和教学管理人员。
查询关键词可为教师姓名、性别、职称、年龄等单关键词或组合关键词。
4信息统计与报表生成:
各学院教学管理人员对学生选课注册信息进行统计(按课程、专业等),打印汇总报表。
5把学生选课注册信息传送到财务管理系统,计算学生应交纳的费用。
(2)学生成绩管理
1学生考试成绩录入:
各学院教学管理人员将学生考试成绩录入系统。
录入学生成绩时,系统自动检查财务系统传来的选课交费信息,核对该学生是否已经交纳本门课程的费用,没有交纳费用者,不给成绩。
2成绩查询;
教师和教学管理人员可查询学生各门课程的成绩。
查询关键词可为学生姓名(学号),课程名(课程代码)等。
学生只能查自己各门课程的成绩,不允许查其他同学成绩。
3成绩汇总与报表生成:
教学管理人员对学生考试成绩信息进行统计(按学生、课程、专业等),打印汇总报表。
向学校教务管理系统发送汇总信息表格等,不
反馈信息。
完成下面的教学管理系统最高层用例图。
1——教学管理员
2——财务系统
3——学校教务系统
4——选修课管理
5—一学生成绩管理
2.【问题2]
说明用例模型的功能,用例图的主要组成部分,用例建模的步骤。
用例模型是表达系统外部事物(行为者)与系统之间交互的可视化工具。
一个系统的用例模型由若干用例图组成,用例图的主要成分有用例、行为者和系统,它用简单的图标元素准确地描述了行为者(角色)与系统的交互情况和系统的功能(用例)。
用例建模的步骤是:
(1)确定系统的范围和边界。
(2)确定角色和用例。
(3)对用例进行描述。
(4)定义用例之间的关系。
(5)审核用例模型。
[解答]首先分析系统边界,这个教学管理系统与学校教务管理系统和财务管理系统有系统边界,学校教务管理系统只接受学院教学管理系统的汇总信息报表等,不反馈信息;
财务管理系统接收学院学生选课情况信息作为收费依据,反馈学生交费信息。
试题中给出的最高层用例图中显示,有5名参与者,并且已经标出教师和学生,可以从已知中得出还有教学管理员。
角色2和角色3都只对一个用例发生关系,并且角色3与用例5是单向传递,综合分析可得出角色3是学校教务管理系统,用例5是学生成绩管理,那么,角色2就是财务系统,用例4是选修课管理,角色1是教学管理员。
试题四
阅读下列C程序和程序说明,将应填入(n)处的字句写在对应栏内。
1.【说明】设某城市有n个车站,并有m条公交线路连接这些车站,设这些公交车都是单向的,这n个车站被顺序编号为。
至n-l。
本程序,输入该城市的公交线路数、车站个数,以及各公交线路上的各站编号,求得从站0出发乘公交车至站n-l的最少换车次数。
程序利用输入信息构建一张有向图G(用邻接矩阵g表示),有向图的顶点是车站,若有某条公交线路经i站到达j站,就在顶点i到顶点j之间设置一条权为1的有向边<
ij>
o如果这样,从站点x至站点y的最少上车次数便对应图G中从点x到点y的最短路径长度。
而程序要求的换车次数就是上车次数减lo
#include<
stdio.h>
#defineM20
#defineN50
inta[N+l]:
/*用于存放一条线路上的各站编号*/
intg[N][N];
/*严存储对应的邻接矩阵*/
intdist[N]:
/*严存储站0到各站的最短路径*/
intm,n:
voidbuildG()
(inti,j,k,sc,dd
printf(〃输入公交线路数,公交站数\n〃);
scanf("
%d%d"
&
m,&
n):
for(i=0:
i<
n:
i++)/*邻接矩阵清0*/
for(j=0;
j<
j++)
g[i]D]=O;
m:
i++)
(printf(”沿第%d条公交线路的务站编号(0<
=编号V=%d,-1结束):
\n)"
i+l,n-1);
sc=O;
/*当前线路站计数器*/
while
(scanf("
%d"
dd);
if(dd=-l)break;
if(dd>
=0&
&
dd<
n);
)
a[sc]=-l;
for(k=l;
a[k]>
=0;
k++)/*处理第i+1条公交线路*/
for(j=0:
k:
g=1;
intminLen()
(intj,k;
distU]=g[O]U];
dist[O]=l:
do(
for(k=-l,j=0:
j++)/*找下一个最少上车次数的站*/
if(dist[j]>
O&
(k==-lIIdist[j]<
dist[k]))
k=j:
if(k<
0IIk==n-l)
break:
dist[k]=-dist[k];
/*设置k站已求得上车次数的标记*/
for(j=l:
n;
j++)/*调整经过k站能到达的其余各站的上车次数*/
if(&
(dist[j]=OII-dist[k]+l<
dist[j]))
dist[j]=;
)while;
j=dist[n-l];
return;
voidmain()
(intt;
buildG();
if((t=minLen())<
O)
printf(”无解!
\n"
else
printf(“从0号站到%d站需换车%€1次\/,n-1,t):
[解答]
(1)a[sc++]=dd
将dd献值给当前线路的a[sc],并同时将当前线路站计数器加lo
(2)[a[J][a[k]]
将a[j]和a[k]之间置为通路1。
(3)dist[j]>
g[k][j]==l
若dist[j]并且k和j之间有通路,或・dist[k]+lVdist[j],也就是经过k对于j来说上车次数更少,则调整经过k站能到达的其余各站的上车次数。
(4)-dist[k]+l
让dist[j]取经过k的更少上车次数-dist[k]+lo
(5)k<
0?
-l:
j-1
若k小于0,表示无解;
否则返回j-1也就是上车次数减1。
试题五
阅读下列C++程序和程序说明,将应填入(n)处的字句写在对应栏内。
1.【说明】[程序6说明]单源最短路径的分支限界算法。
constintMAXNUM=29999;
#include<
iostream>
vector>
#include〈algorithm〉
functional>
usingnamespacestd:
template<
classVertexType^lassEdgeType>
classMinNode(〃程序中使用的最小化堆的结点说明
friendclassGraph<
VertexType,EdgeType>
public:
MinNode(intnl,EdgeTypelengthl)
(VexNum=nl;
length=lengthl;
booloperator>
(constMinNode<
p)const
(return>
p.length;
private:
intVexNum;
〃记录源点序号,序号数组p及distance下标相一致。
源点为初始扩展顶点
EdgeTypelength;
〃记录源点到本顶点的当前最短路径的长度,源点到自身的长度为0
}
template<
classVertexType,classEdgeType>
voidGraph<
:
shortestpath(VertexTypestart)(
intj,k,source;
//source记录源点的序号。
EdgeType*distance=;
int*p=newint[MaxNumVertex];
vector<
MinNode<
VertexTypezEdgeType>
>
H;
for(source=0:
source<
MaxNumVertex;
source++)
(if(NodeList[source]==start)break;
}
if(source>
=MaxNumVertex)(cout<
<
,Thisiserror!
”VVendl;
return;
)
VertexType,EdgeType>
;
for(k=0;
k<
MaxNumVertex;
k++)
(distance[k]:
MAXXUM:
〃记录源点到本顶点k的最终的最短路径的长度
p[k]=source;
〃记录最短路径上的本顶点的直接前驱顶点的序号
distance[source]=0;
p[source]=-l;
//m是源点,前一顶点不存在
vectorVMinNodeVVertexType,EdgeType>
iteratorq:
while(
j<
MaxNumVertex;
if((AdjMatrix[E.VexNum*MaxNumVertex+j]<
MAXNUM)
(<
distance[j]))
(distance[j]=E.length+AdjMatrix[E.VexNum*MaxNumVertex+j]:
p[j]=E.VexNum;
〃记录顶点j的前一顶点
VertexType,EdgeType>
H.push_back(N);
push_heap(H.begin。
,H.end(),greaterVMinNodeVVertexType,
EdgeType>
>
());
if(H.empty()=true)break;
〃若优先队列为空,那么算法结束
else(
pop_heap(H.begin(),H.end(),greater<
VertexType,
q=H.end()-l;
〃从最小化堆中取路径最短的顶点
E=*q:
H.pop_back();
〃删除从最小化堆中"
挤〃出的顶点
)//endwhile
k++)(
cout<
"
Shorstestpathfromvertex"
k<
l,isn<
distance[k]<
endl;
j=k;
coutV<
”Allverticesare:
;
while(j!
=source)(cout<
j<
->
j=p[j];
VsourceVVendl;
)〃打印顶点的最短路径长度和至源点的最短路径上经过的顶点序列return:
(l)this->
length或(*this).length
操作符,的成员函数,比较两个对象的最短路径的长度length.大于则返回真
⑴。
(2)newEdgeTypefMaxNumVertex]
动态申请EdgeType类的对象数组distance,长度为MaxNumVertex,存放最短路径的长度。
(3)E(source,0)
定义最小化堆模板类MinNode<
的对象E(source,0)。
(4)E.length+AdjMatrix[E.VcxNum*MaxNumVertex+j]
若E.length+AdjMatrix[E.VexNum*MaxNumVertex+j]小于distance。
],则distance。
]取这个更小值。
(5)N(j,distance—)
VertexType»
EdgeType>
的对象N(j,distance。
])。
试题六
阅读下列Java程序和程序说明,将应填入(n)处的字句写在对应栏内。
1.【说明】清点盒子。
本程序当用户输入一个整数值时,一切正常;
当输入其他数值时,程序就出错。
现在已做了改进,请填空。
importjava.text.NumberFormat;
PublicclassInventoryLoop
publicstaticvoidmain(Stringargs[])
StringnumBoxesIn:
IntnumBoxes;
DoubleboxPrice=3.25;
BooleangotGoodInput=false:
NumberFormatcurrency=NumberFormat.;
do
System.out.print("
Howmanyboxesdowehave?
”);
numBoxesln=DummieslO.;
try
numBoxes=lnteger.parselnt();
system,out.print(nThevalueis11);
system.out