2022年上半年软件设计师考试下午真题(专业解析+参考答案)

news/2025/3/31 22:58:16/

题目:阅读下列说明和图,回答问题1至问题4,将解答填入答题纸的对应栏内。【说明】某公司欲开发一款外卖订餐系统,集多家外卖平台和商户为一体,为用户提供在线浏览餐品、订餐和配送等服务。该系统的主要功能是:1.入驻管理。用户注册、商户申请入驻,设置按时间段接单数量阈值等。系统存储商户/用户信息。2.餐品管理。商户对餐品的基本信息和优惠信息进行发布、修改、删除。系统存储相关信息。3.订餐。用户浏览商户餐单,选择餐品及数量后提交订餐请求。系统存储订餐订单。4.订单处理。收到订餐请求后,向外卖平台请求配送。外卖平台接到请求后发布配送单,由平台骑手接单,外卖平台根据是否有骑手接单返回接单状态。若外卖平台接单成功,系统给支付系统发送支付请求,接收支付状态。支付成功,更新订单状态为已接单,向商户发送订餐请求并由商户打印订单,给用户发送订单状态;若支付失败,更新订单状态为下单失败,向外卖平台请求取消配送,向用户发送下单失败。若系统接到外卖平台返回接单失败或超时未返回接单状态,则更新订单状态为下单失败,向用户发送下单失败。5.配送。商户备餐后,由骑手取餐配送给用户。送达后由用户扫描骑手出示的订单上的配送码后确认送达,订单状态更改为已送达,并发送给商户。6.订单评价。用户可以对订单餐品、骑手配送服务进行评价,推送给对应的商户、所在外卖平台,商户和外卖平台对用户的评价进行回复。系统存储评价。现采用结构化方法对外卖订餐系统进行分析与设计,获得如图1-1所示的上下文数据流图和图1-2所示的0层数据流图。图1-1 上下文数据流图图1-2 0层数据流图 
选项:<p>【问题1】(4分)<br>使用说明中的词语,给出图1-1中实体E1~E4的名称。<br>【问题2】(4分)<br>使用说明中的词语,给出图1-2中的数据存储D1-D4 的名称。<br>【问题3】(4分)<br>根据说明和图中术语,补充图1-2中缺失的数据流及其起点和终点。<br>【问题4】(3分)<br>根据说明,采用结构化语言对“订单处理”的加工逻辑进行描述。</p>
答案:<p>【问题1】(4分)<br>E1:商户<br>E2:外卖平台<br>E3:用户<br>E4:支付系统<br></p><p>【问题2】(4分)<br>D1:用户/商户信息<br>D2:订餐订单信息<br>D3:餐品信息<br>D4:评价信息<br></p><p>【问题3】(4分)【1条1分,满分4分】</p><p><img src="https://img.kuaiwenyun.com/images/shiti/2022-05/348/TNa7h4BH7N.png" style="max-width:100%;"><br></p><p>【问题4】(3分)</p><p><melo-data></melo-data></p><div><p>收到订餐请求后,向外卖平台请求配送;</p><p>外卖平台接到请求后发布配送单,由平台骑手接单;</p><p>外卖平台根据是否有骑手接单返回接单状态;</p><p>IF(外卖平台接单成功)THEN{</p><p>&nbsp;&nbsp;&nbsp;&nbsp;系统给支付系统发送支付请求,接收支付状态;</p><p>&nbsp;&nbsp;&nbsp;&nbsp;IF(支付成功)THEN{</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;更新订单状态为已接单;</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;向商户发送订餐请求并由商户打印订单;</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;给用户发送订单状态;}</p><p>&nbsp;&nbsp;&nbsp;&nbsp;ELSE{</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;更新订单状态为下单失败;</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;向外卖平台请求取消配送;</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;向用户发送下单失败;</p><p>&nbsp;&nbsp;&nbsp;&nbsp;}ENDIF</p><p>}ELSE IF(系统接到外卖平台返回接单失败或超时未返回接单状态)THEN{</p><p>&nbsp;&nbsp;&nbsp;&nbsp;更新订单状态为下单失败;</p><p>&nbsp;&nbsp;&nbsp;&nbsp;向用户发送下单失败;</p><p>}ENDIF</p></div>
解析:问题1:对于具体的加工和数据存储补充,可以根据0层图的图示描述来补充方便些。根据图示信息,以及描述:“用户注册:商户申请入驻,设置按时间段接单数量阈值等。”,可得E1为商户。根据图示信息,以及描述:“收到订餐请求后,向外卖平台请求配送。”,可得E2为外卖平台。根据图示信息,以及描述:“向商户发送订餐请求并由商户打印订单,给用户发送订单状态;”,可得E3为用户订单状态。根据图示信息,以及描述:“系统给支付系统发送支付请求,接收支付状态。”,可得E4为支付系统。问题2:数据存储的补充,根据题干给出的信息和图示数据流的描述可得:D1:用户/商户信息,D2:订餐订单信息,D3:餐品信息,D4:评价信息问题3:补充数据流,需要结合顶层图和0层图首先看其父子图是否保持平衡,和对应题干的描述去查找,这里补充的数据流可以是多条,写出任意四条即给满分。问题4:结构化语言需要注意几种结构,顺序结构,选择结构(IF-THEN-ELSE-ENDIF、CASE-OF-ENDCASE)、重复结构(DO-WHILE-ENDDO)合理即可。

题目:按照下列图表,填写答题纸的对应栏内。【说明】为了提高接种工作的效率,并为了抗击疫情提供疫苗接种数据支撑,需要开发一个信息系统,根据下述需求完成该系统的数据库设计。(1)记录疫苗供应商的信息,包括供应商名称,地址和一个电话。(2)记录接种医院的信息,包括医院名称、地址和一个电话。(3)记录接种者个人信息,包括姓名、身份证号和一个电话。(4)记录接种者疫苗接种信息,包括接种医院信息,被接种者信息,疫苗供应商名称和接种日期,为了提高免疫力,接种者可能需要进行多次疫苗接种,(每天最多接种一次,每次都可以在全市任意一家医院进行疫苗接种)。【概念模型设计】根据需求分析阶段收集的信息,设计的实体联系图(不完整)如图2-1所示。图2-1 E-R图【逻辑结构设计】根据概念模型设计阶段完成的实体联系图,得出如下关系模式(不完整)供应商(供应商名称、地址、电话)医院(医院名称、地址、电话)供货(供应商名称、(a)、供货内容)被接种者(姓名、身份证号、电话)接种(接种者身份证号、(b)、医院名称、供应商名称) 
选项:<p>【问题1】(4分)<br>根据问题描述,补充图2-1的实体联系图(不增加新的实体)。<br>【问题2】(4分)<br>补充逻辑结构设计结果中的(a)(b)两处空缺,并标注主键和外键完整性约束。<br>【问题3】(7分)<br>若医院还兼有核酸检测的业务,检测时可能需要进行多次核酸检测(每天最多检测一次),但每次都可以在全市任意一家医院进行检测。请在图2-1中增加“被检测者”实体及相应的属性,医院与被检测者之间的“检测”联系及必要的属性,并给出新增加的关系模式。<br>“被检测者”实体包括姓名、身份证号、地址和一个电话。“检测”联系需要包括检测日期和检测结果等。<br></p>
答案:<p>【问题1】(4分)<br><img src="https://img.kuaiwenyun.com/images/shiti/2022-05/912/YFvUQyTv3R.png" style="max-width:50%;"><br></p><p>【问题2】(4分)<br>(a)医院名称<br>(b)接种时间<br><img src="https://img.kuaiwenyun.com/images/shiti/2022-05/31/nQpxsu8ghz.png" style="max-width:100%;"><br>【问题3】<br><img src="https://img.kuaiwenyun.com/images/shiti/2022-05/120/phA2Ak8MKm.png" style="max-width:50%;"><br>新增关系模式<br>被检测者(身份证号,姓名,地址,电话)<br>检测(被检测者身份证号,医院名称,检测日期,检测结果)</p>
解析:【问题1】根据信息描述:“包括接种医院信息,被接种者信息,疫苗供应商名称和接种日期,为了提高免疫力,接种者可能需要进行多次疫苗接种”,可知供应商、医院和被接种者之间三者存在三元联系,又因为三种都不止一次,所以三者的三元联系为多比多比多。另外根据图示的情况可以看出需要补充实体的属性,所以补充接种时间这个属性。【问题2】根据题干可知(a)处是“医院名称&nbsp;” ,(b)处是“接种时间”。主键和外键完整性约束分别如下:【问题3】根据题干要求在图上新增实体、联系即可。

题目:阅读下列说明和图,回答问题1至问题3,将解答填入答题纸的对应栏内。[说明]某公司的人事部门拥有一个地址簿(AddressBook)管理系统(AddressBookSystem),用于管理公司所有员工的地址记录(PersonAddress)。员工的地址记录包括:姓名、住址、城市、省份、邮政编码以及联系电话等信息。管理员可以完成对地址簿中地址记录的管理操作,包括:(1)管理地址记录。根据公司的人员变动情况,对地址记录进行添加、修改、删除等操作。(2)排序。按照员工姓氏的字典顺序或邮政编码对系统中的所有记录进行排序。(3)打印地址记录。以邮件标签的格式打印一个地址单独的地址簿。系统会对地址记录进行管理,为便于管理,管理员在系统中为公司的不同部门建立员工的地址簿的操作,包括:(1)创建地址簿。新建一个地址簿并保存。(2)打开地址簿。打开一个已有的地址簿。(3)修改地址簿。对打开的地址簿进行修改并保存。系统将提供一个GUI(图形用户界面)实现对地址簿的各种操作。现采用面向对象方法分析并设计该地址簿管理系统,得到如图3-1所示的用例图和图3-2所示的类图。图3-2 类图 
选项:<p><melo-data></melo-data></p><div><div><p>[问题1](6分)</p><p>根据说明中的描述,给出图3-1中U1~U6所对应的用例名。</p><p>[问题2](5分)</p><p>根据说明中的描述,给出图3-2中类AddressBook的主要属性和方法以及类PersonAddress的主要属性(可以使用说明中的文字)。</p><p>[问题3](4分)</p><p>根据说明中的描述以及图3-1所示的用例图,请简要说明extend和include关系的含义是什么?</p></div></div>
答案:<p><melo-data></melo-data></p><div><p>【问题1】</p><p>U1:按姓氏字典顺序排序;U2:按邮政编码排序(其中U1和U2可互换);</p><p>U3:创建地址簿;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; U4:修改地址簿;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; U5:打开地址簿;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;U6:保存地址簿。</p><p>【问题2】</p><p>类PersonAddress的主要属性包括:姓名、住址、城市、省份、邮政编码以及联系电话等。</p><p>类AddressBook的主要属性包括:部门名/编号,姓名、住址、城市、省份、邮政编码以及联系电话等。</p><p>类AddressBook的需要包括创建地址簿、打开地址簿、修改地址簿。综上,类AddressBook的方法包括:添加、修改、删除、创建、打开、打印、排序等。</p><p>【问题3】</p><p>extend属于用例图的三种关系之一,表示的是扩展关系。</p><p>描述为:如果一个用例明显地混合了两种或两种以上的不同场景,即根据情况可能会发生多种分支,则可以将这个用例分为一个基本用例和一个或多个扩展用例,关系图示指向为扩展用例指向基本用例。<br>如图所示,创建和打开就是一对扩展关系,创建成功之后可以直接保存关闭之后,如果想要进行后续修改工作,就需要打开地址簿,由扩展用例指向基本用例。</p><p>include属于用例图的三种关系之一,表示的是包含关系。</p><p>描述为:当可以从两个或两个以上用例中提取公共行为的时候,应该使用包含关系来表示它们。其中这个提取出来的公共用例称之为抽象用例,而把原始用例称为基本用例和基础用例。<br>如图所示:创建、修改和保存就是一对包含关系,在创建和修改它们都有公共的行为保存,提取出来称之为抽象用例,用包含关系表示它们。</p><p><br></p><p><br></p></div>
解析:【问题1】本题根据题干描述可以找到相应的用例名称有维护地址记录、排序、打印地址记录、创建地址簿、打开地址簿、修改地址簿,又根据图示可知,U1、U2与排序有泛化关系,此时根据排序的用例描述“按照员工姓氏的字典顺序或邮政编码对系统中的所有记录进行排序”,排序有两种方式,按姓氏字典顺序排序或按邮政编码排序,也就是对应用例U1和U2。根据题干描述“(1)创建地址簿。新建一个地址簿并保存。...(3)修改地址簿。对打开的地址簿进行修改并保存。”也就是说创建地址簿和修改地址簿,都需要保存地址簿,都包含保存地址簿用例,因此被包含用例也就是include箭头指向的U6应该是保存地址簿。U3和U4分别为创建地址簿和修改地址簿。图示最后一个扩展关系,满足条件才需要扩展,根据题干描述“(3)修改地址簿。对打开的地址簿进行修改并保存。&nbsp;”这里存在隐含的扩展关系,修改地址簿时需要对打开的地址簿进行修改,如果没有,则需要先打开地址簿,因此这里的U5是满足没有打开地址簿条件时需要的扩展用例打开地址簿,U4是修改地址簿,那么U3就是创建地址簿。本题由于题目信息不全,答案仅供参考。【问题2】类PersonAddress也就是员工地址记录,根据题干描述“员工的地址记录包括:姓名、住址、城市、省份、邮政编码以及联系电话等信息”,因此类PersonAddress的主要属性包括:姓名、住址、城市、省份、邮政编码以及联系电话等。类AddressBook也就是地址簿用于管理公司所有员工的地址记录,由于“管理员在系统中为公司的不同部门建立员工的地址簿”,因此类AddressBook的主要属性除了员工地址记录信息以外,还需要增加部门信息。此时类AddressBook的主要属性包括:部门名/编号,姓名、住址、城市、省份、邮政编码以及联系电话等。“管理地址记录。根据公司的人员变动情况,对地址记录进行添加、修改、删除等操作”,因此类AddressBook的需要包括添加、修改、删除等操作。又因为“管理员在系统中为公司的不同部门建立员工的地址簿的操作,包括:(1)创建地址簿。(2)打开地址簿。(3)修改地址簿。”,因此类AddressBook的需要包括创建地址簿、打开地址簿、修改地址簿。综上,类AddressBook的方法包括:添加、修改、删除、创建、打开等。【问题3】extend属于用例图的三种关系之一,表示的是扩展关系。描述为:如果一个用例明显地混合了两种或两种以上的不同场景,即根据情况可能会发生多种分支,则可以将这个用例分为一个基本用例和一个或多个扩展用例,关系图示指向为扩展用例指向基本用例。include属于用例图的三种关系之一,表示的是包含关系。描述为:当可以从两个或两个以上用例中提取公共行为的时候,应该使用包含关系来表示它们。其中这个提取出来的公共用例称之为抽象用例,而把原始用例称为基本用例和扩展用例。还需结合用例图说明扩展用例、包含用例的应用。此处题干说明不全,暂未确定。

题目:阅读下列说明和C代码,回答问题1至问题3,将解答写在答题纸的对应栏内。【说明】某工程计算中经常要完成多个矩阵相乘(链乘)的计算任务,对矩阵相乘进行以下说明。(1)两个矩阵相乘要求第一个矩阵的列数等于第二个矩阵的行数,计算量主要由进行乘法运算的次数决定,假设采用标准的矩阵相乘算法,计算Amxn*Bnxp需要m*n*p次行乘法运算的次数决定、乘法运算,即时间复杂度为O(m*n*p)。(2)矩阵相乘满足结合律,多个矩阵相乘时不同的计算顺序会产生不同的计算量。以矩阵A15×100,A2100*8,A38x50三个矩阵相乘为例,若按(A1*A2)*A3计算,则需要进行5*100*8+5*8*50=6000次乘法运算,若按A1*(A2*A3)计算,则需要进行100*8*50+5*100*50=65000次乘法运算。矩阵链乘问题可描述为:给定n个矩阵,对较大的n,可能的计算顺序数量非常庞大,用蛮力法确定计算顺序是不实际的。经过对问题进行分析,发现矩阵链乘问题具有最优子结构,即若A1*A2**An的一个最优计算顺序从第k个矩阵处断开,即分为A1*A2*…*Ak和Ak+1*Ak+2*...*An两个子问题,则该最优解应该包含A1*A2*…*Ak的一个最优计算顺序和Ak+1*Ak+2*...*An&nbsp; 的一个最优计算顺序。据此构造递归式,其中,cost[i][j]表示Ai+1*Ai+2*...Aj+1的最优计算的计算代价。最终需要求解cost[0][n-1]。【C代码】算法实现采用自底向上的计算过程。首先计算两个矩阵相乘的计算量,然后依次计算3个矩阵、4个矩阵、…、n个矩阵相乘的最小计算量及最优计算顺序。下面是该算法的语言实现。(1) 主要变量说明n:矩阵数seq[]:矩阵维数序列cost[i][j]:二维数组,长度为n*n,其中元素cost[i][j]表示Ai+1*Ai+2**Aj+1的最优的计算代价。trace[][]:二维数组,长度为n*n,其中元素trace[i][j]表示Ai+1*Ai+2**Aj+1的最优计算顺序对应的划分位置,即k。(2)函数cmm#define N100 int cost[N[N];int trace[N][N];&nbsp;int cmm(int n,int seq[]){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int tempCost;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int tempTrace;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int i,j,k,p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int temp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for( i=0;i&lt;n;i++){ cost[i][i] = 0;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(p=1;p&lt;n;p++){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;&nbsp;i&lt;n-p;i++){&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;(1) &nbsp;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tempCost = -1;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for(k = i;&nbsp; (2) ;k++){ &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp=&nbsp;&nbsp;(3) &nbsp;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(tempCost==-1 || tempCost&gt;temp){ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempCost = temp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tempTrace=k;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cost[i][j] = tempCost;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(4) &nbsp;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return cost[0][n-1];&nbsp;}&nbsp; 
选项:<p>【问题1】(8分)<br>根据以上说明和C代码,填充C代码中的空(1)~(4)。<br>【问题2】(4分)<br>根据以上说明和C代码,该问题采用了(5)算法设计策略,时间复杂度为(6)(用O符号表示)。<br>【问题3】(3分)<br>考虑实例n=4,各个矩阵的维数为A1为15*5,A2为5*10,A3为10*20,A4为20*25,即维度序列为15,5,10,20和25。则根据上述C代码得到的一个最优计算顺序为(7)(用加括号方式表示计算顺序),所需要的乘法运算次数为 (8)。</p>
答案:<p>【问题1】<br>(1) j=i+p<br>(2)k&lt;j</p><p><j<br>(3) cost[i][k]+cost[k+1][j]+seq[i]*seq[k+1]*seq[j+1]<br>(4) trace[i][j] = tempTrace<br></j<br>【问题2】<br>(5)动态规划算法<br>(6)O(n<sup>3</sup>)<br>【问题3】<br>(7)A1*((A2*A3)*A4)<br>(8)5375<br><melo-data></melo-data>
</p>
解析:【问题3】先计算A2*A3,乘法次数为5*10*20=1000,结果B1维数为5*20接着计算B1*A4,乘法次数为5*20*25=2500,结果B2维数为5*25最后计算A1*B2,乘法次数为15*5*25=1875。总计算次数为1000+2500+1875=5375计算次序为A1*((A2*A3)*A4)

题目:阅读下列说明和C++代码。将应填入(n)处的字句写在答题纸的对应栏内。【说明】在软件系统中,通常不会给用户提供取消、不确定或者错误操作的选择,允许将系统恢复到原先的状态。现使用备忘录(Memento)模式实现该要求,得到如图5-1所示的类图。Memento 包含了要被恢复的状态。Originator创建并在Memento中存储状态。Caretaker负责从Memento中恢复状态。图5-1 类图【C++代码】#include #include #include using namespace std;class Memento{private:string state;public:Memento(string state){ this-&gt;state=state; }string getState(){ return state; }}class Originator{private:string state;public:void setState(string state){this&gt;sate=state;}string getState(){return state;}Memento saveStateToMemento(){return (1)}void getStateFromMemento(Memento Memento){state (2)}class CareTaker{private:vector&nbsp;mementoList;pubilc:viod(3){mementoList.push back(state)(4);return mementoList(index);}int mian(){Originator*originator=new Originator();CareTaker*careTaker=new CareTaker();originator-&gt;setState("State #1");originator-&gt;setState("State #2");careTaker-&gt;add(_(5)_);originator-&gt;setState("State #3");careTaker-&gt;add((6));originator-&gt;setState("State #4");cout &lt;&lt;"Current State:"&lt;&lt;"+" &lt;&lt;originator-&gt;getState( )&lt;&lt;endl;originator-&gt;getStateFromMemento(careTaker-&gt;get(0);cout&lt;&lt;"First saved State:"&lt;&lt;originator-&gt;getStatee( )&lt;&lt;endl;originator-&gt;getStateFromMemento(careTaker-&gt;get(1);cout&lt;&lt;"second save State"&lt;&lt;"+" &lt;&lt;originator&gt;getState( )&lt;&lt;endl;return 0;} 
选项:<p><br></p>
答案:<p>本题代码存在缺失,暂未给出答案。请参照JAVA代码题。</p>
解析:本题代码存在缺失,暂未给出答案。请参照JAVA代码题。

题目:阅读下列说明和Java代码,将应填入(n)处的字句写在答题纸的对应栏内。【说明】在软件系统中,通常都会给用户提供取消、不确定或者错误操作的选择,允许将系统恢复到原先的状态。现使用备忘录(Memento)模式实现该要求,得到如图6-1所示的类图。Memento包含了要被恢复的状态。Originator创建并在Memento中存储状态。Caretaker负责从Memento中恢复状态。图6-1 类图【Java代码】import java.util.*;class Memento {&nbsp;&nbsp;&nbsp;&nbsp;private String state;&nbsp;&nbsp;&nbsp;&nbsp;public Memento(String state){this.state=state;}&nbsp;&nbsp;&nbsp;&nbsp;public String getState(){return state;}}class Originator{&nbsp;&nbsp;&nbsp;&nbsp;private String state;&nbsp;&nbsp;&nbsp;&nbsp;public void setState(String state){this.state=state;}&nbsp;&nbsp;&nbsp;&nbsp;public String getState(){ retum state;}&nbsp;&nbsp;&nbsp;&nbsp;public Memento saveStateToMemento( ){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return (1);&nbsp;&nbsp;&nbsp;&nbsp;}}public void getStateFromMemento(Memento Memento){&nbsp;&nbsp;&nbsp;&nbsp;state =(2);}class CareTaker{&nbsp;&nbsp;&nbsp;&nbsp;private List&lt;Memento&gt; mementoList= new ArrayList&lt;Memento&gt;();&nbsp;&nbsp;&nbsp;&nbsp;public(3){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mementoList.add(state);&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;public (4){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return memensoList.get(index);&nbsp;&nbsp;&nbsp;&nbsp;}}class MementoPaneDems{&nbsp;&nbsp;&nbsp;&nbsp;public static void main(String[] args) {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Originator originator =new Originator();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CareTaker careTaker=new careTaker();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;originator.setState("State #1");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;originator.setState("State #2");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;careTaker.add( (5) );&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;originator.setState("State #3");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;careTaker.add( (6) );&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;originator.setState("State #4");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("Current State"+originator.getState());&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;originator.getStateFromMemento(careTaker.get(0));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("Frist saved State"+originator.getState());&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;originator.getStateFromMemento(careTaker.get(1));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("Second saved State"+originator.getState());&nbsp;&nbsp;&nbsp;&nbsp;}} 
选项:<p><br></p>
答案:<p>(1) new Memento(state)<br>(2) Memento.getState()<br>(3) void add(Memento state)<br>(4) Memento get(int index)<br>(5) originator.saveStateToMemento()<br>(6) originator.saveStateToMemento()<br></p>
解析:(1) new Memento(state)(2) Memento.getState()(3) void add(Memento state)(4) Memento get(int index)(5) originator.saveStateToMemento()(6) originator.saveStateToMemento()


http://www.ppmy.cn/news/7298.html

相关文章

Web应用怎样获取Access Token?

1.在联盟创建服务器应用 参考文档&#xff1a;开发准备 2.获取用户级Access Token 2.1 获取code 参考文档&#xff1a;接入华为帐号获取凭证 2.1.1 先按照跳转链接进行配置url https://oauth-login.cloud.huawei.com/oauth2/v3/authorize? response_typecode& acces…

【BF算法】

BF 算法 BF 算法精讲 在学习到字符串的匹配问题时&#xff0c;了解到了BF算法和KMP算法。 对比这两个算法&#xff0c;先了解BF算法&#xff1b; 字符串匹配问题&#xff0c;比如说&#xff1a;有一个主串 “abbbcdef” &#xff0c; 子串 “bbc”&#xff0c;该问题就是在主…

JavaScript基础

一、JavaScript的介绍 JavaScript 是一种运行在 客户端的脚本语言&#xff0c;作为web标准的行为层&#xff0c;最初出现时只是为了实现网页端和用户之间的交互。在正式学习JS之前&#xff0c;我们首先需要对JS的产生和发展历史有一定的了解。 1. JS发展历史 1995年&#xf…

servlet(三)文件的下载

主要有几个步骤: 1、获取要下载的文件名 2、读取要下载的文件内容 (通过 ServletContext 对象可以读取,这个也是 ServletContext的应用) 3、获取要下载的文件类型 4、在回传前&#xff0c;通过响应头告诉客户端返回的数据类型 5、还要告诉客户端收到的数据是用于下载使用&#…

整合Kafka

Main Concepts 一些服务器形成了存储层&#xff0c;被称为broker&#xff0c;其他服务器运行kafka连接去不断地导入和导出数据作为事件流&#xff0c;将kafka和关系型数据库等存在的系统集成。 Servers: Kafka is run as a cluster of one or more servers that can span mult…

【工具类】后台Mock工具类

目录一、介绍二、使用方法1. Controller层定义接口2. 编写json文件3. 开启AOP4. 调用接口验证三、源码一、介绍 Controller层定义完接口后&#xff0c;不需要写业务逻辑。编写Json文件&#xff0c;调用接口时返回json文件的数据。 优点&#xff1a; 设计阶段即可定义好接口&…

写一个计算器【后缀表达式】(C++)

前言&#xff1a; 闲来无事&#xff0c; 用后缀表达式写了个计算器。。。 支持加()、减(-)、乘(*)、除(/)、乘方(^) 啥是后缀表达式&#xff1a; 波兰逻辑学家卢卡西维奇发明的表示表达式的方法 后缀式即逆波兰式&#xff0c;是波兰逻辑学家卢卡西维奇&#xff08;&#…

uTools V3.3.0 效率工具集

前言 uTools是一款基于electron开发的工具集软件&#xff0c;通过快捷唤醒搜索&#xff0c;直接打开各种功能&#xff0c;非常方便。 uTools uTools是一个极简、插件化、跨平台的现代化桌面软件。通过自由选配丰富的插件&#xff0c;打造你得心应手的工具集合。 通过快捷键…