image

编辑人: 未来可期

calendar2025-06-15

message9

visits163

2021年5月软件设计师下午题答案及解析

一、[材料型]问答题

案例一(15分)

阅读下列说明和图回答问题1至问题4,将解答填入答题纸的对应栏内。

【说明】某停车场运营方为了降低运营成本,减员增效,提供良好的停车体验,欲开发无人值守停车系统,该系统的主要功能是:

1、 信息维护。管理人员对车位(总数、空余车位数等)、计费规则等基础信息进行设置。

2、 会员注册。车主提供手机号、车牌号等信息进行注册,提交充值信息(等级、绑定并授权支付系统进行充值或交费的支付账号)不同级别和充值额度享受不同停车折扣点。

3、 车牌识别。当车辆进入停车场时,若有(空余车位数大于1),自动识别车牌号后进行道闸控制,当车主开车离开停车场时,识别车牌号,计费成功后,请求道闸控制。

4、 计费。更新车辆离场时间,根据计费规则计算出停车费用,若车主是会员,提示停车费用:若储存余额够本次停车费用,自动扣费,更新余额,若储值余额不足,自动使用授权缴费账号请求支付系统进行支付,获取支付状态。若非会员临时停车,提示停车费用,车主通过扫描费用信息中的支付码调用支付系统自助交费,获取支付状态。

5、 道闸控制。根据道闸控制请求向道闸控制系统发送若干执行指令和接收道闸执行状态。若道闸执行状态为正常放行时,对入场车辆,将车牌号及其入场时间信息存入停车记录,修改空余车位数;对出厂车辆更新停车状态,修改空余车位数。当因道闸重置系统出现问题(断网断电或是故障为枱杆等情况),而无法在规定的时间内接收到其返回的执行状态正常放行时,系统向管理人员发送异常告警信息,之后管理人员安排故障排查处理,确保车辆有序出入停车场。

现采用结构化方法对无人值守停车系统进行分析与设计,获得如图1-1所示的上下文数据流图和图1-2所示的0层数据流图。



1、【问题1】(5分)

使用说明中的词语,给出图1-1中的实体E1~E5的名称。

参考答案:

问题1:

E1:汽车;E2:车主;E3:支付系统;E4:管理人员;E5:道闸控制系统

解析:

根据题目描述和提供的上下文数据流图,可以对应出图1-1中的实体E1~E5的名称。

E1表示进入停车场的车辆,这是无人值守停车系统的核心对象之一。

E2表示车主或使用停车服务的用户,他们是系统的服务对象之一,需要进行注册、充值、停车和支付等操作。

E3表示支付系统,这是无人值守停车系统中完成交易的重要部分,车主通过支付系统进行充值、支付停车费用等操作。

E4表示管理人员或运营人员,他们负责系统的运营和维护,包括设置信息、处理异常告警信息等。

E5表示道闸控制设备或道闸系统,这是控制车辆进出停车场的关键设备,根据系统的指令控制道闸的开启和关闭。

2、【问题2】(3分)

使用说明中的词语,给出图1-2中的数据存储D1~D3的名称。

参考答案:

问题2:

D1:,停车记录表, D2:会员信息表,D3:,基础信息

解析:

根据题目描述和图1-2的0层数据流图,可以得知系统中存在几个主要的数据存储。对于问题2,需要给出图1-2中的数据存储D1~D3的名称。

  • D1:停车记录表。这个数据存储应该包含车辆进入和离开停车场的记录,包括车牌号、入场时间、离场时间、停车费用等信息。这些记录是系统运营和管理的重要基础。
  • D2:会员信息表。这个数据存储主要存储车主的注册信息,包括车主的手机号、车牌号、等级、充值信息等。这是系统识别会员并进行相应服务的基础。
  • D3:计费规则信息表。这个数据存储应该包含系统的计费规则,如停车费率、折扣规则等。这是系统计算停车费用的依据。

因此,根据题目要求和系统功能的描述,给出了D1~D3的数据存储名称。

3、【问题3】(4分)

根据说明和图中术语,补充图1-2中缺失的数据流及其起点和终点。

参考答案:

问题3:

P3到D2:更新余额

P5到D3:更新车位信息

P1到P5:道闸控制请求 

D3到P3,:计费规则

解析:

根据无人值守停车系统的功能描述和上下文数据流图,可以确定缺失的数据流及其起点和终点。P3到D2的数据流表示车主充值或支付后的余额更新;P5到D3的数据流表示道闸控制模块更新车位信息;P1到P5的数据流表示车牌识别后发送的道闸控制请求;D3到P3的数据流表示计费规则在计费过程中的作用。这些数据流反映了系统中各模块之间的数据交互和逻辑关系。

4、【问题4】(3分)

根据说明,采用结构化语言对“道闸控制”的加工逻辑进行描述。

参考答案:

问题4:

if, 道闸执行状态正常

 , , ,if,车辆入场,then, 将车牌号及其入场时间信息存入停车记录,修改空余车位数

 , , ,else, if, ,车辆出厂,then, 更新停车状态,修改空余车位数

else, , 系统向管理人员发送异常告警信息

解析:

根据说明中的信息,道闸控制是无人值守停车系统中的一个关键功能。当车辆进出停车场时,系统需要根据道闸控制请求向道闸控制系统发送执行指令,并接收道闸的执行状态。结构化语言的描述方式可以更清晰地表达这一过程。具体逻辑如下:

  1. 首先,系统会接收到一个道闸控制请求。
  2. 然后,检查道闸的执行状态是否为正常放行。这是确保道闸能够正常工作的前提。
  3. 如果道闸状态正常,且检测到有车辆入场,则系统会进行一系列操作,包括记录车牌号和入场时间,并更新空余车位数。
  4. 如果道闸状态正常,但检测到车辆离场,则系统会更新停车状态并修改空余车位数,以反映停车场的实时情况。
  5. 如果在规定的时间内没有接收到道闸执行状态的正常放行信息,系统则认为出现了异常情况,并向管理人员发送告警信息,以便及时处理故障,确保车辆的有序出入。

案例二(15分)

阅读下列说明,回答问题1至问题3,将解答填入答题纸的对应栏内。

【说明】

某社区蔬菜团购网站,为规范商品收发流程,便于查询客户订单情况,需要开发一个信息系统,请根据下列需求描述完成该系统的数据库设计。

【需求描述】

(1) 记录蔬菜供应商的信息,包括供应商编号,地址和一个电话

(2) 记录社区团购点的信息,包括团购点编号、地址和一个电话。

(3) 记录客户信息,包括包括客户姓名和一个电话,客户可以在不同的社区团购点下订单,不直接与蔬菜供应商发生联系。

(4) 记录客户订单信息,包括订单编号、团购点编号、客户电话、订单内容和日期。

【概念模型设计】

根据需求阶段收集的信息,设计的实体联系图(不完整)如图2-1所示。


【逻辑结构设计】

根据概念模型设计阶段完成的实体联系图,得出如下关系模型(不完整):

蔬菜供应商 (供应商编号,地址,电话)

社区团购店点 (团购点编号,地址,电话)

供货(供货商编号,(a))

客户(姓名,客户电话)

订单(订单编号,团购点编号,(b),订单内容,日期)

5、【问题1】(6分)

根据问题描述,补充2-1的实体联系图

参考答案:【问题1】

解析:

根据需求描述,我们需要补充的实体联系图应涵盖所有的主要实体以及它们之间的关系。从需求描述中我们知道有四个主要的实体:蔬菜供应商、社区团购点、客户和订单。每个实体都有相应的属性,这些属性在实体联系图中应被明确地表示出来。另外,实体之间还存在一些关系,如蔬菜供应商向社区团购点供货,客户在不同的社区团购点下订单等,这些关系也需要在实体联系图中进行补充和完善。通过补充和完善后的实体联系图,我们可以更清晰地了解各个实体之间的关系以及数据的流动情况,从而为我们后续的逻辑结构设计和物理设计提供基础。

6、【问题2】(4分)

补充逻辑结构设计结构中的(a)(b)两处空缺及完整性的约束关系

参考答案:

【问题2】

a:团购点编号    b:客户电话

供货关系主键:(团购点编号、供货商编号);外键:团购点编号、供货商编号

订单关系主键:订单编号;外键:团购点编号、客户电话

解析:

根据题目描述和需求,我们可以知道:

  1. 蔬菜供应商的信息包括供应商编号、地址和电话。
  2. 社区团购点的信息包括团购点编号、地址和电话。
  3. 客户的信息包括客户姓名和电话,客户可以在不同的社区团购点下订单。
  4. 客户订单的信息包括订单编号、团购点编号、客户电话、订单内容和日期。

对于逻辑结构设计中的空缺(a)和(b):

  • (a)处应填写“供应商编号”,表示供货关系中需要关联到蔬菜供应商的供应商编号。
  • (b)处应填写“客户电话”,表示订单关系中需要关联到客户的电话。

关于完整性约束关系:

  • 供货关系的主键应由团购点编号和供货商编号共同组成,同时它们也是外键,关联到社区团购店点和蔬菜供应商。
  • 订单关系的主键为订单编号,其中团购点编号和客户电话作为外键,分别关联到社区团购店点和客户。

这样,整个逻辑结构设计就完整了,并且满足了完整性的约束关系。

7、【问题3】(5分)

若社区蔬菜团购网站还将有代收快递的业务,请增加新的“快递”实体,并给出客户实体和快递实体之间的“收取”联系,对图2-1进行补充,“快递”关系模式包括快递编号、客户电话和日期。

参考答案:【问题3】

解析:

为了满足社区蔬菜团购网站的代收快递业务,我们需要对原系统进行扩展。具体来说,我们需要增加一个表示快递的实体,以记录快递的相关信息。根据题目描述,“快递”关系模式应包括快递编号、客户电话和日期。

同时,为了表示客户与快递之间的关联,我们需要在实体联系图中增加一条从客户实体指向快递实体的有向线段。这条线表示客户与快递之间的“收取”联系,即客户收取快递的动作。这样,通过实体联系图,我们可以更直观地表示出各个实体之间的关系。

案例三(15分)

阅读下列说明和图,回答问题1至问题3,将解答填入答题纸的对应栏内。

【说明】

某中医医院拟开发一套线上抓药APP,允许患者凭借该医院医生开具的处方线上抓药,并提供免费送药上门服务。该系统的主要功能描述如下:

(1)注册。患者扫描医院提供的二维码进行注册,注册过程中,患者需提供其病历号,系统根据病历号自动获取患者基本信息。

(2)登录。已注册的患者可以登录系统进行线上抓药,未注册的患者系统拒绝其登陆。

(3)确认处方。患者登录后,可以查看医生开具的所有处方。患者选择需要抓药的处方和数量(需要抓几副药),同时说明是否需要煎制。选择取药方式:自行到店取药或者送药上门,若选择送药上门,患者需要提供提供收货人姓名、联系方式和收货地址。系统自动计算本次抓药的费用,患者可以使用微信或支付宝等支付方式支付费用。支付成功之后,处方被发送给药师进行药品配制。

(4)处理处方。药师根据处方配置好药品。若患者要求煎制,药师对配置好的药品进煎制。煎制完成,药师将该处方设置为已完成。若患者选择的是自行取药,取药后确认已取药。

(5)药品派送。处方完成后,对于选择送药上门的患者,系统将给快递人员发送药品配送信息,等待快递人员取药;并给患者发送收货验证码。

(6)送药上门。快递人员将配制好的药品送到患者指定的收货地址。患者收货时,向快递人员出示收货验证码,快递人员使用该验证码确认药品已送到。

现采用面向对象分析与设计方法开发上述系统,得到如图3-1所示的用例图以及图3-2所示的类图。




8、【问题1】(7分)

根据说明中的描述,给出图 3-1中 A1~A3 所对应的参与者名称和U1~U4处所对应的用例名称。

参考答案:

【问题1】

A1:患者;A2:快递员;A3:药师

U1:确认处方;U2:支付;U3:微信支付;U4:支付宝支付

解析:

根据说明中的描述,我们可以对应出图3-1中A1~A3的参与者名称和U1~U4的用例名称。

A1处代表的是患者,因为患者需要进行注册、登录、确认处方等操作。
A2处代表的是快递员,因为快递员需要进行药品派送的操作。
A3处代表的是药师,因为药师需要处理处方,包括配置药品、煎制药品等。

U1对应的用例名称应为“注册”,因为患者在系统中首先需要注册。
U2对应的用例名称应为“登录”,因为已注册的患者可以登录系统进行线上抓药。
U3对应的用例名称应为“确认处方”,这是患者在登录后需要进行的操作。
U4对应的用例名称应为“药品派送”,这是快递员在系统中需要进行的操作。

因此,根据上述分析,我们得出问题1的答案为:A1:患者;A2:快递员;A3:药师;U1:注册;U2:登录;U3:确认处方;U4:药品派送。

9、【问题2】(5分)

根据说明中的描述,给出图 3-2中 C1~C5 所对应的类名。

参考答案:

【问题2】

C1:支付方式 C2 :微信支付 C3:支付宝支付 C4 :处方 C5:药品

解析:

根据说明中的描述,我们可以对应出图3-2中C1~C5所表示的类名。C1表示用户注册的相关操作和信息,可以命名为“用户注册类”;C2表示处方的信息,可以命名为“处方信息类”;C3表示药品的信息,可以命名为“药品信息类”;C4表示支付相关的信息,可以命名为“支付信息类”;C5表示药品配送的信息,可以命名为“药品配送信息类”。

10、【问题 3】(3 分)

简要解释用例之间的 include, extend 和 generalie 关系的内涵。

参考答案:

【问题3】

答案:包含(include): include为包含关系,当两个或多个用例中共用一组相同的动作,这时可以将这组相同的动作抽出来作为一个独立的子用例,供多个基用例所共享。因为子用例被抽出,基用例并非一个完整的用例,所以include关系中的基用例必须和子用例一起使用才够完整,子用例也必然被执行。include关系在用例图中使用带箭头的虚线表示(在线上标注<<include>>),箭头从基用例指向子用例。

扩展(extend): extend关系是对基用例的扩展,基用例是一个完整的用例,即使没有子用例的参与,也可以完成一个完整的功能。extend的基用例中将存在一个扩展点,只有当扩展点被激活时,子用例才会被执行。 extend关系在用例图中使用带箭头的虚线表示(在线上标注<<extend>>),箭头从子用例指向基用例。

泛化(generalization):泛化关系是一种继承关系,子用例将继承基用例的所有行为,关系和通信关系,也就是说在任何使用基用例的地方都可以用子用例来代替。泛化关系在用例图中使用空心的箭头表示,箭头方向从子用例指向基用例。

解析:

问题3要求对用例之间的三种关系——包含(include)、扩展(extend)和泛化(generalization)的内涵进行简要解释。

  1. 包含(include)关系:指的是当多个用例有共同的动作或步骤时,这些共同的动作或步骤可以被提取出来作为一个独立的子用例,这个子用例可以被多个基用例所共享。基用例因为不包含这些动作,所以必须和子用例一起使用才完整。
  2. 扩展(extend)关系:是对基用例的额外补充。基用例是一个完整的用例,即使没有子用例的参与也能完成功能。但子用例提供了在特定条件下对基用例的额外动作或步骤。只有当扩展点被激活时,子用例才会被执行。
  3. 泛化(generalization)关系:是一种继承关系,子用例会继承基用例的所有行为、关系和通信关系。这意味着在任何地方可以使用子用例来替代基用例,并且子用例会具有基用例的所有特性。

答案中的描述对这三种关系的内涵进行了简明扼要的解释,并辅以图示进行说明,符合题目的要求。

案例四(15分)



11



11、【问题1】(8分)

根据说明和C代码,填充C代码中的空(1)~(4)。

参考答案:

【问题1】

(1)r<=N

(2),j,=,i+r,-1;

(3)temp,<,m[i][j]

(4)s[i][j],+,1,,,j

解析:

题目描述的是基于动态规划求解多边形权重的问题。关于填充的C代码中的空(1)~(4),我们可以根据题目的描述和动态规划的基本思想进行解析:

(1)r<=N:这是一个循环条件,表示在处理某个点集时,遍历的半径r不应超过总点数N。

(2)j=i+r-1:这是一个赋值语句,用于确定在某一半径r下,与当前点i构成多边形的另一个点的索引j。这里的“-1”是为了确保不包含当前点i自身。

(3)temp<m[i][j](或 m[i][j]>temp):这是一个比较语句,用于确定是否更新某个中间值或存储的值。具体的比较方向取决于具体的逻辑需求,可能是寻找最大值或最小值。

(4)s[i][j]+=1:这是一个累加操作,用于累加多边形权重的值。在多边形权重计算中,通常会累加所有可能的组合权重,以得到最终的多边形权重值。这里的“+=”表示累加操作,而不是赋值操作。因此,正确的代码应该是对已有的值进行累加,而不是重新赋值。

12、【问题2】(7分)

根据说明和C代码,该算法采用的设计策略为 (5) ,算法的时间复杂度为 (6) ,空间复杂度为 (7) (用O表示)。

参考答案:【问题2】
(5)动态规划

(6)O(n^3)

(7)O(n^2)

解析:

根据题目中提供的C代码和说明,可以看出该算法采用了动态规划的设计策略。动态规划是一种通过分解问题为子问题,并保存子问题的解,以避免重复计算的有效方法。关于算法的时间复杂度和空间复杂度,根据代码的逻辑和结构,可以推断出该算法的时间复杂度为O(n^3),空间复杂度为O(n^2)。

二、问答题

案例六(15分)

阅读下列说明和Java代码,将应填入(n)处的字句写在答题纸的对应栏内。

【说明】

层叠菜单是窗口风格的软件系统中经常采用的一种系统功能组织方式。层叠菜单(如图6-1示例)中包含的可能是一个菜单项(直接对应某个功能),也可能是一个子菜单,现在采用组合(composite)设计模式实现层叠菜单,得到如图6-2所示的类图。

Composite组合模式:

将对象组合成树形结构以表示“部分-整体”的层次结构。Composite使得客户对单个对象和复合对象的使用具有一致性。

组合模式描述了如何将容器对象和叶子对象进行递归组合,使得用户在使用时无须对它们进行区分,可以一致地对待容器对象和叶子对象。


Composite组合模式:




13、案例六(15分)

阅读下列说明和Java代码,将应填入(n)处的字句写在答题纸的对应栏内。

【说明】

层叠菜单是窗口风格的软件系统中经常采用的一种系统功能组织方式。层叠菜单(如图6-1示例)中包含的可能是一个菜单项(直接对应某个功能),也可能是一个子菜单,现在采用组合(composite)设计模式实现层叠菜单,得到如图6-2所示的类图。

Composite组合模式:

将对象组合成树形结构以表示“部分-整体”的层次结构。Composite使得客户对单个对象和复合对象的使用具有一致性。

组合模式描述了如何将容器对象和叶子对象进行递归组合,使得用户在使用时无须对它们进行区分,可以一致地对待容器对象和叶子对象。


Composite组合模式:



参考答案: 

解析:

根据给出的说明和Java代码,层叠菜单由菜单项和子菜单组成,这些菜单项和子菜单都是通过组合模式进行组织的。组合模式描述了如何将容器对象和叶子对象进行递归组合。在这个场景中,菜单项和子菜单都是组合对象的一部分,它们共同组成了一个树形结构来表示“部分-整体”的层次结构。根据面向对象的设计原则,这些具体的菜单项和子菜单类型应该继承自一个更抽象的基类,这个基类提供了共同的行为和属性。根据提供的类图,这个抽象基类应该是抽象菜单类(AbstractMenu)。因此,菜单项类(MenuItem)和子菜单类(SubMenu)都是抽象菜单类(AbstractMenu)的派生类。

喵呜刷题:让学习像火箭一样快速,快来微信扫码,体验免费刷题服务,开启你的学习加速器!

创作类型:
原创

本文链接:2021年5月软件设计师下午题答案及解析

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。
分享文章
share