软件考试下午真题试题与参考答案文档格式.docx
- 文档编号:16501017
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:17
- 大小:23.46KB
软件考试下午真题试题与参考答案文档格式.docx
《软件考试下午真题试题与参考答案文档格式.docx》由会员分享,可在线阅读,更多相关《软件考试下午真题试题与参考答案文档格式.docx(17页珍藏版)》请在冰豆网上搜索。
(2)员工信息包括员工号、姓名、岗位、电话、工资,其中,员工号唯一标识员工关系中
的一个元组,岗位有经理、业务员。
(3)客房信息包括客房号(如1301、1302等)、客房类型、收费标准、入住状态(已入住
/未入住),其中客房号唯一标识客房关系中的一个元组,不同客房类型具有不同的收费标
准。
(4)客户信息包括客户号、单位名称、联系人、联系电话、联系地址,其中客户号唯一标
识客户关系中的一个元组。
(5)客户预订客房时,需要填写预订申请。
预订申请信息包括申请号、客户号、入住时间、
入住天数、客房类型、客房数量,其中,一个申请号唯一标识预订申请中的一个元组;
一位
客户可以有多个预订申请,但一个预订申请对应唯一的一位客户。
(6)当客户入住时,业务员根据客户的预订申请负责安排入住客房事宜。
安排信息包括客
房号、姓名、性别、身份证号、入住时间、天数、电话,其中客房号、身份证号和入住时间
唯一标识一次安排。
一名业务员可以安排多个预订申请,一个预订申请只由一名业务员安排,
而且可安排多间同类型的客房。
【概念模型设计】
根据需求阶段收集的信息,设计的实体联系图如图2-1所示。
【关系模式设计】
部门(部门号,部门名称,经理,电话)
员工(员工号,(a),姓名,岗位,电话,工资)
客户((b),联系人,联系电话,联系地址)
客房(客房号,客房类型,收费标准,入住状态)
预订申请((c),入住时间,天数,客房类型,客房数量)
安排(申请号,客房号,姓名,性别,(c),天数,电话,业务员)
根据问题描述,补充四个联系,完善图2-1,的实体联系图。
联系名可用联系1、联系2、
联系3和联系4代替,联系的类型为1:
1、1:
n和m:
n(或1:
1,和1:
*和*:
*)。
(8分)
(1)根据题意,将关系模式中的空(a)~(d)补充完整,并填入答题纸对应的位置上。
(2)给出“预订申请”和“安排”关系模式的主键和外键。
【关系模式设计】中的“客房”关系模式是否存在规范性问题,请用100字以内文字解释
你的观点(若存在问题,应说明如何修改“客房”关系模式)。
某种出售罐装饮料的自动售货机.(VendingMachine)的工作过程描述如下:
(1)顾客选择所需购买的饮料及数量。
(2)顾客从投币口向自动售货机中投入硬币(该自动售货机只接收硬币)。
硬币器收集
投入的硬币并计算其对应的价值。
如果所投入的硬币足够购买所需数量的这种饮料且饮料数
量足够,则推出饮料,计算找零,顾客取走饮料和找回的硬币;
如果投入的硬币不够或者所
选购的饮料数量不足,则提示用户继续投入硬币或重新选择饮料及数量。
(3)一次购买结束之后,将硬币器中的硬币移走(清空硬币器),等待下一次交易。
自
动售货机还设有一个退币按钮,用于退还顾客所投入的硬币。
已经成功购买饮料的钱是不会
被退回的。
现采用面向对象方法分析和设计该自动售货机的软件系统,得到如图3-1所示的用例图,其
中,用例“购买饮料”的用例规约描述如下。
参与者:
顾客。
主要事件流:
1.顾客选择需要购买的饮料和数量,投入硬币;
2.自动售货机检查顾客是否投入足够的硬币;
3.自动售货机检查饮料储存仓中所选购的饮料是否足够;
4.自动售货机推出饮料;
5.自动售货机返回找零。
各选事件流:
2a.若投入的硬币不足,则给出提示并退回到1;
3a.若所选购的饮料数量不足,则给出提示并退回到1。
根据用例“购买饮料”得到自动售货机的4个状态:
“空闲”状态、“准备服务”状态、
“可购买”状态以及“饮料出售”状态,对应的状态图如图3-2所示。
所设计的类图如图3-3所示。
(6分)
根据说明中的描述,使用说明中的术语,给出图3-2中的S1~S4所对应的状态名。
根据说明中的描述,使用说明中的术语,给出图3-2中的E1~E4所对应的事件名
根据说明中的描述,使用说明中的术语,给出图3-3中C1~C5所对应的类名。
3.
阅读下列说明和C代码,回答问题1至问题3,将解答写在答题纸的对应栏内。
模式匹配是指给定主串t和子串s,在主串t中寻找子串s的过程,其中s称为模式。
如
果匹配成功,返回s在t中的位置,否则返回-1。
KMP算法用next数组对匹配过程进行了优化。
KMP算法的伪代码描述如下:
1.在串t和串s中,分别设比较的起始下标i=j=0。
2.如果串t和串s都还有字符,则循环执行下列操作:
(1)如果j=-l或者t[i]=s[j],则将i和j分别加1,继续比较t和s的下一个字符;
(2)否则,将j向右滑动到next[j]的位置,即j=next[j]。
3.如果s中所有字符均已比较完毕,则返回匹配的起始位置(从1开始);
否则返回-1.
其中,next数组根据子串s求解。
求解next数组的代码已由get_next函数给出。
【C代码】
(1)常量和变量说明
t,s:
长度为悯铂Is的字符串
next:
next数组,长度为Is
(2)C程序
#include<
stdio.h>
stdlib.h>
string.h>
/*求next[]的值*/
voidget_next(int*next,char*s,intIs){
inti=0,j=-1;
next[0]=-1;
/*初始化next[0]*/
while(i<
ls){/*还有字符*/
if(j==-1lls[i]==s[j]){/*匹配*/
j++;
i++;
if(s[i]==s[j])
next[i]=next[j];
else
Next[i]=j;
}
j=next[j];
intkmp(int*next,char*t,char*s,intlt,intIs)
{
Inti=0,j=0;
while(i<
lt&
&
(1)){
if(j==-1||
(2)){
i++;
j++;
}else
(3);
if(j>
=ls)
return(4);
return-1;
根据题干说明,填充C代码中的空
(1)~(4).
(2分)
根据题干说明和C代码,分析出kmp算法的时间复杂度为(5)(主串和子串的长度分别为
It和Is,用O符号表示)。
根据C代码,字符串“BBABBCA”C的next数组元素值为(6)(直接写素值,之间用逗号隔
开)。
若主串为“AABBCBBABBCA”CCD,子串为“BBABBCA”C,则函数Kmp的返回值是
(7)。
4.
阅读下列说明和C++-代码,将应填入(n)处的字句写在答题纸的对应栏内。
某发票(lnvoice)由抬头(Head)部分、正文部分和脚注(Foot)部分构成。
现采用装
饰(Decorator)模式实现打印发票的功能,得到如图5-1所示的类图。
【C++代码】
iostream>
usingnamespacestd;
classInvoice{
public:
(1){
cout<
<
"
Thisisthecontentoftheinvoice!
endl;
};
classDecorator:
publicInvoice{
Invoice*ticket;
Decorator(lnvoice*t){ticket=t;
}
voidprintInvoice(){
if(ticket!
=NULL)
(2);
classHeadDecorator:
publicDecorator{
HeadDecorator(lnvoice*t):
Decorator(t){}
voidprintInvoice(){
"
Thisistheheaderoftheinvoice!
endl;
classFootDecorator:
FootDecorator(Invoice*t):
voidprintlnvoice(){
(4);
Thisisthefootnoteoftheinvoice!
intmain(void){
Invoicet;
FootDecoratorf(&
t);
HeadDecoratorh(&
f);
h.printInvoice();
”------------------------”<
FootDecoratora(NULL);
HeadDecoratorb((5));
b.printInvoice();
return0;
程序的输出结果为:
----------------------------
5.
阅读下列说明和java代码,将应填入(n)处的字句写在答题纸的对应栏内。
饰(Decorator)模式实现打印发票的功能,得到如图6-1所示的类图。
【java代码】
classinvoice{
publicvoidprintInvoice(){
System.out.println("
);
classDecoratorextendsInvoice{
protectedInvoiceticket;
publicDecorator(lnvoicet){
ticket=t;
=null)
(1);
classHeadDecoratorextendsDecorator{
publicHeadDecorator(lnvoicet){
super(t);
publicvoidprintInvoice(){
Systent.out.println("
(2);
classFootDecoratorextendsDecorator{
publicFootDecorator(Invoicet){
publicvoidprintlnvoice(){
(3);
Classtest{
publicstaticvoidmain(String[]args){
Invoicet=newInvioce();
Invoiceticket;
ticket=(4);
ticket.printInvoice();
Systent.out.println(--“----------------“);
ticket=(5);
参考答案
6.
参考答案:
问题1E1:
客户服务助理,E2:
客户,E3:
经纪人。
问题2D1:
客户记录,D2:
账户记录,D3:
交易记录。
问题3
数据流名称:
修改账户余额,起点:
存款,终点:
D2。
取款,终点:
交易信息存入交易记录(在线),起点:
证券交易(在线),终点:
D3。
交易信息存入交易记录(电话),起点:
证券交易(电话),终点:
问题4
图1增加外部实体“证券交易中心”,增加“证券交易平台”到“证券交易中心”,数据流:
交易信息
图2增加外部实体“证券交易中心”,增加“证券交易(在线)“到“证券交易中心”,数据
流:
图2增加“证券交易(电话)“到“证券交易中心”,数据流:
试题分析:
本题问题1要求识别E1-E3具体为哪个外部实体,通读试题说明,可以了解到适合充当外
部实体的包括:
客户、客户服务助理、经记人。
具体的对应关系,可以通过将顶层图与题目
说明进行匹配得知。
如:
从图中可看出E1会向交易平台发出数据流“开户信息”;
而从试
题说明“根据客户服务助理提交的开户信息,进行开户,并将客户信息存入客户记录中,账
户信息存入账户记录中”可以看出,E1对应是客户服务助理。
E2、E3同理可得。
本题问题2要求识别存储,解决这类问题,以图的分析为主,配合说明给存储命名,因为存
储相关的数据流一般展现了这个存储中到底存了些什么信息,如从图中可以看到D1中有客
户信息,而D2中有账户信息,题目说明中又有“根据客户服务助理提交的开户信息,进行
开户,并将客户信息存入客户记录中,账户信息存入账户记录中。
”自然D1应为客户记录,
D2应为账户记录。
同理,D3为交易记录。
问题3分析:
缺失数据流1
名称:
理由:
从试题说明“客户可以向其账户中存款,根据存款金额修改账户余额”可以看出,这
个功能有操作“根据存款金额修改账户余额”。
据此可以了解到从该功能应有数据流“存款”
至D2,而0层图没有。
缺失数据流2:
从试题说明“客户可以从其账户中取款,根据取款金额修改账户余额”可以看出,这
个功能有操作“根据取款金额修改账户余额”。
据此可以了解到从该功能应有数据流“取款”
缺失数据流3-4
交易信息存入交易记录,起点:
证券交易(分为在线与电话),终点:
从试题说明“客户和经纪人均可以进行证券交易,将交易信息存入交易记录中”可以
看出,这个功能有操作“将交易信息存入交易记录中”。
据此可以了解到从该功能应有数据
流“证券交易”至D3,而0层图没有。
fusional2016-11-18
存贮的时候,客户记录我写得客户记录表,账户记录,我写得账户记录表,对不对
MegumiIsh2016-11-20
没有影响的
7.
问题1:
1、经理与部门之间存在1:
1的联系。
2、部门与员工之间存在1:
n的联系。
3、客户与预订申请之间存在1:
4、业务员、客房、预订申请之间存在1:
m:
问题2:
(a)部门号。
(b)客户号、单位名称
(c)申请号、客户号。
(d)身份证号、入住时间。
“预订申请”关系模式中的主键是申请号,外键是申请号、客户号。
“安排”关系模式中的主键是:
(客房号、身份证号、入住时间),外键是:
申请号、客房号、
业务员。
问题3:
根据试题中的描述,客房信息中客房号是唯一标识客房关系的一个元组,即可以作为唯一的
主键。
在客房关系模式中,不存在其他部分依赖关系,但客户号->
类型->
收费标准,存在传
递函数依赖,所以冗余,添加异常,修改异常,删除异常均存在。
fusional2016-11-17
写员工关系模式时,应该填部门号吧,应为部门号才是主键,写客户关系模式时,不需要写
申请号和客房号吧,应为客户可以单独存在,还有最后最后一问,不同的客房类型具有不同
的收费标准,存在着数据曾与,及修改不一致的问题
MegumiIsh2016-11-18
答案已经做了修改
fusional2016-11-20
老师,我写预定申请关系模式时,我写的是客户号和申请号和业务员号,你们的答案是客户
号和申请号。
我主键写的是申请号,外键是客户号和业务员号。
因为预定申请需要客户申请,
业务员处理。
我记得哪年的真题和这个一样的,不知道我的想法对不?
flycity2016-11-25
预定的环节没有强调需要记录业务员信息,所以不需要写业务员号。
在现实的设计中,根据需要,可写业务员号,而在考试中,一般没有强调需要这个信息,我
们就不写。
fusional2016-11-29
老师,那不是这个我得不到分了哦?
flycity2016-12-02
这个得看评分时严格程度了,一般来说,评分时,看到合理答案但非标准答案,会组织阅卷
老师进行研讨,研讨之后若大家觉得这种解决方案也可行,会把这种答法纳入给分的范畴。
8.
S1:
空闲,S2:
准备服务,S3:
饮料出售,S4:
可购买。
E1:
饮料数量不足,E2:
硬币数量足够,E3:
推出饮料,E4:
返回找零。
C1:
自动售货机,C2:
硬币器,C3:
饮料储存仓,C4:
硬币,C5:
饮料。
本题问题1系统中的状态图,是对状态转换的图形化表达。
从题目的说明部分可知,在状态
转换过程中,涉及到的状态一共有四种:
空闲、准备服务、可购买、饮料出售。
从状态图涉
及的转换可知S1~S4分别为:
空闲、准备服务、饮料出售、可购买。
关于状态转换的分析
如下:
(1)清空硬币器后,自动售货机等待下一次交易,进入空闲状态。
此时可任意的进行饮料
选择数量,一旦顾客投入硬币,自动售货机便进入准备服务状态。
(2)当自动售货机进行准备服务状态时,开始计算硬币价值,如果硬币不够则提示顾客继
续投入硬币。
如果硬币足够,则进入可购买状态。
(3)进行可购买状态后,自动售货机判断饮料数量。
如果数量不够,则返回准备服务状态
提示用户重新选择饮料。
如果数量足够,则推出饮料进入饮料出售状态。
(4)进行饮料出售状态后,自动售货机计算找零,并返回进入空闲状态等待下一次交易。
本题问题2主要是分析四种状态中的跳转事件。
根据状态图和试题主要事件流的描述可以推
出事件E1是饮料数量不足,事件E2是硬币数量足够,事件E3是推出饮料,事件E4是返
回找零。
本题问题3根据主要事件流的描述,可以推断出C1~C5的类名分别对应自动售货机、硬币
器、饮料储存仓、硬币、饮料。
9.
(1):
j<
ls;
(2):
t[i]==s[j];
(3):
get_next(next,s,ls);
j=next[j];
(4):
i+1-ls;
(6):
[-1,-1,1,-1,-1,2,0,0],(7)6。
本题问题1根据KMP算法的伪代码描述进行推导。
根据伪代码中第2步可以推导
(1)是判断字符串s是否还有字符,即j<
ls。
i表示字符串t
的下标,j表示字符串s的下标。
根据伪代码第2.1步可以推导
(2)是判断字符串t和字符串s当前位置的字符是否相同,即
t[i]
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件 考试 下午 试题 参考答案