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