2022年上半年软件设计师上午真题及答案解析

目录

1.外卖订餐系统的数据流图

2.疫苗接种系统的数据库设计

3.地址簿类图

4.矩阵相乘

5.备忘录(Java)


1.外卖订餐系统的数据流图

阅读下列说明和图,回答问题1至问题4,将解答填入答题纸的对应栏内。
【说明】
某公司欲开发一款外卖订餐系统,集多家外卖平台和商户为一体,为用户提供在线浏览餐品、订餐和配送等服务。该系统的主要功能是:
1.入驻管理。用户注册:商户申请入驻,设置按时间段接单数量阅值等。系统存储商户/用户信息。
2.餐品管理。商户对餐品的基本信息和优惠信息进行发布、修改、删除。系统存储相关信息。
3.订餐。用户浏览商户餐单,选择餐品及数量后提交订餐请求。系统存储订餐订单。
4.订单处理。收到订餐请求后,向外卖平台请求配送。外卖平台接到请求后发布配送单,由平台骑手接单,外卖平台根据是否有骑手接单返回接单状态。若外卖平台接单成功,系统给支付系统发送支付请求,接收支付状态。支付成功,更新订单状态为已接单,向商户发送订餐请求并由商户打印订单,给用户发送订单状态:若支付失败,更新订单状态为下单失败,向外卖平台请求取消配送,向用户发送下单失败。若系统接到外卖平台返回接单失败或超时未返回接单状态,则更新订单状态为下单失败,向用户发送下单失败。
5.配送。商户备餐后,由骑手取餐配送给用户。送达后由用户扫描骑手出示的订单上的配送码后确认送达,订单状态更改为已送达,并发送给商户。
6.订单评价。用户可以对订单餐品、骑手配送服务进行评价,推送给对应的商户、所在外卖平台,商户和外卖平台对用户的评价进行回复。系统存储评价。现采用结构化方法对外卖订餐系统进行分析与设计,获得如图1-1所示的上下文数据流图和图1-2所示的0层数据流图。

图1-1上下文数据流图

图1-2 0层数据流图

问题1(4分)
使用说明中的词语,给出图1-1的实体E1~E4的名称。

E1:商户
E2:外卖平台
E3:用户
E4:支付系统

问题2(4分)
使用说明中的词语,给出图1-2中的数据存储D1-D4 的名称。

D1:用户/商户信息
D2:订餐订单信息
D3:餐品信息
D4:评价信息

问题3(4分)
根据说明和图中术语,补充图1-2中缺失的数据流及其起点和终点。


问题4(3分)
根据说明,采用结构化语言对“订单处理”的加工逻辑进行描述。

收到订餐请求后,向外卖平台请求配送;
外卖平台接到请求后发布配送单,由平台骑手接单;
外卖平台根据是否有骑手接单返回接单状态;
IF(外卖平台接单成功)THEN{
系统给支付系统发送支付请求,接收支付状态;
IF(支付成功)THEN{
更新订单状态为已接单;
向商户发送订餐请求并由商户打印订单;
给用户发送订单状态;
}ELSE{
更新订单状态为下单失败;
向外卖平台请求取消配送;
向用户发送下单失败;}
ENDIF}
ELSE IF(系统接到外卖平台返回接单失败或超时未返回接单状态)THEN{
更新订单状态为下单失败;
向用户发送下单失败;}ENDIF
}ENDIF
}ENDIF

2.疫苗接种系统的数据库设计

按照下列图表,填写答题纸的对应栏内。
[说明]
为了提高接种工作,提高效率,并未了抗击疫情提供疫苗接种数据支撑,需要开发一个信息系统,下述需求完成该系统的数据库设计。
(1)记录疫苗供应商的信息,包括供应商名称,地址和一个电话。
(2)记录接种医院的信息,包括医院名称、地址和一个电话。
(3)记录接种者个人信息,包括姓名、身份证号和一个电话。
(4)记录接种者疫苗接种信息,包括接种医院信息,被接种者信息,疫苗供应商名称和接种日期,为了提高免疫力,接种者可能需要进行多次疫苗接种,(每天最多接种一次,每次都可以在全市任意一家医院进行疫苗接种)。
【概念模型设计】
阶段的信息,设计的实体联系图(不完整)如图2-1所示。

图2-1 E-R图

【逻辑结构设计】
根据概念模型设计阶段完成的实体联系图,得出如下关系模式(不完整)
供应商(供应商名称、地址、电话)医院(医院名称、地址、电话)
供货(供应商名称,(a),供货内容)被接种者(姓名、身份证号、电话)
接种(接种者身份证号,(b),医院名称、供应商名称)

[问题1](4分)
根据问题描述,补充图2-1的实体联系图(不增加新的实体)

 [问题2](4分)
补充逻辑结构设计结果中的(a)(b)两处空缺,并标注主键和外健完整性约束。

(a)医院名称
(b)接种时间

[问题3](7分)
若医院还兼有核酸检测的业务,检测石可能需要进行多次植酸检测(每天最多检测一次),但每次都可以在全市任意一家医院进行检测。
请在图2-1中增加“被检测者”、实体及相应的属性。医院与被检测者之间的“检测”联系及必要的属性,并给出新增加的关系模式。
“被检测者”实体包括姓名。身份证号。在址和一个电话。“检测”联系需要包括检测日期和检测结果等。

新增关系模式
被检测者(身份证号,姓名,地址,电话)
检测(被检测者身份证号,医院名称,检测日期,检测结果)

3.地址簿类图

阅读下列说明和图,回答问题1至问题3,将解答填入答题纸的对应栏内。
[说明]
某公司的人事能门拥有一个地址博AddressBookSystem),管理系统ddressBookSystem),用于管理公司所有员工的地址记录(PersonAddress)。员工的地址记录包括:姓名、住址、
城市、省份、邮政编码以及联系电话等等信息。
管理员可以完成对地址簿中地址记录的管理操作,包括:
(1)维护地址记录。根据司的人员变动情况,对地址记录进行添加、修改、删除等操作;
(2)排序。按照员工姓氏的字典顺序或邮政编码对址领中的所有记录。
(3)打印地址记录。以邮件标签的格式打印一个地址单独的地址簿。系统会记录管理为便于管理,管理员在系统中为公可的不同部门建立员对每个地址簿的修改操作,包括:
(1)创建地址簿。新建个地址簿并保存。
(2)打开地址簿。打开一一个已有的地址簿。
(3)修改地址簿。对打开的地址簿进行修改并保存
系统将提供一个GUI(图形用户界面)实现对地址簿的各种操作。
现采用面向对象方法分析并设计该地址簿管理系统,得到如图3-1所示的用例图和图3-2所示的类图。

图3-2 类图

[问题1](6分)
根据说明中的描述,给出图3-1中U1~U6所对应的用例名。

U1:按姓氏字典顺序排序;U2:按邮政编码排序U1和U2可互换U3~U6题目信息不全,暂未确定。

[问题2](5分)
根据说明中的描述,给出图3-2中类Adresk的主要属性和方法以及类Pernoddress的主要属性(可以使用说明中的文字)。

类PersonAddress也就是员工地址记录,根据题干描述“员工的地址记录包括:姓名、住址、城市、省份、邮政编码以及联系电话等信息”,因此类PersonAddress的主要属性包括:姓名、住址、城市、省份、邮政编码以及联系电话等。类AddressBook也就是地址簿用于管理公司所有员工的地址记录,由于“管理员在系统中为公司的不同部门建立员工的地址簿”,因此类AddressBook的主要属性除了员工地址记录信息以外,还需要增加部门信息。此时类AddressBook的主要属性包括:部门名/编号,姓名、住址、城市、省份、邮政编码以及联系电话等。“管理地址记录。根据公司的人员变动情况,对地址记录进行添加、修改、删除等操作”,因此类AddressBook的需要包括添加、修改、删除等操作。又因为“管理员在系统中为公司的不同部门建立员工的地址簿的操作,包括:(1)创建地址簿。(2)打开地址簿。(3)修改地址簿。”,因此类AddressBook的需要包括创建地址簿、打开地址簿、修改地址簿。综上,类AddressBook的方法包括:添加、修改、删除、创建、打开等。

[问题3](4分)
的相形送明中的描述以及图31所示的用例图,请阅enedecx系cxe关的含义是什么?

extend属于用例图的三种关系之一,表示的是扩展关系。描述为:如果一个用例明显地混合了两种或两种以上的不同场景,即根据情况可能会发生多种分支,则可以将这个用例分为一个基本用例和一个或多个扩展用例,关系图示指向为扩展用例指向基本用例。include属于用例图的三种关系之一,表示的是包含关系。描述为:当可以从两个或两个以上用例中提取公共行为的时候,应该使用包含关系来表示它们。其中这个提取出来的公共用例称之为抽象用例,而把原始用例称为基本用例和扩展用例。还需结合用例图说明扩展用例、包含用例的应用。此处题干说明不全,暂未确定。

4.矩阵相乘

阅读下列说明和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*10
0*50=65000次乘法运算。
矩阵链乘问题可描述为:给定n个矩阵,对较大的n,可能的计算顺序数量非常庞大,用蛮力法确定计算顺序是不实际的。经过对问题进行分析,发现矩阵链乘问题具有最优子结构,即若A1*A2**An的一个最优计算顺序从第k个矩阵处断开,即分为A1*A2*…*Ak和Ak+1*Ak+2*...*An两个子问题,则该最优解应该包含A1*A2*…*Ak的一个最优计算顺序和Ak+1*Ak+2*...*An的一个最优计算顺序。据此构造递归式,

其中,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];
int cmm(int n,int seq[]){
int tempCost;
int tempTrace;
int i,j,k,p;
int temp;
for( i=0;i<n;i++){
cost[i][i] = 0;
}
for(p=1;p<n;p++){
for(i=0;
i<n-p;
i++){
(1);
tempCost = -1;
for(k = i;(2);k++){
temp=(3);
if(tempCost==-1 || tempCost>temp){
tempCost = temp;
tempTrace=k;
}
}
cost[i][j] = tempCost;
(4);
}
}
return cost[0][n-1];
}

【问题1】(8分)
根据以上说明和C代码,填充C代码中的空(1)~(4)。

(1) j=i+p
(2) k<j<br>

(3) cost[i][k]+cost[k+1][j]+seq[i]*seq[k+1]*seq[j+1]

(4) trace[i][j] = tempTrace
【问题2】(4分)
根据以上说明和C代码,该问题采用了(5)算法设计策略,时间复杂度为(6)(用O符号表示)。

(5)动态规划算法
(6)O(

【问题3】(3分)
考虑实例n=4,各个矩阵的维数为A1为15*5,A2为5*10,A3为10*20,A4为20*25,即维度序列为15,5,10,20和25。则根据上述C代码得到的一个最优计算顺序为(7)(用加括号方式表示计算顺序),所需要的乘法运算次数为 (8)。

(7)A1*((A2*A3)*A4)
(8)5375

5.备忘录(Java)

阅读下列说明和Java代码,将应填入(n)处的字句写在答题纸的对应栏内。
【说明】
在软件系统中,通常都会给用户提供取消、不确定或者错误操作的选择,允许将系统恢复到原先的状态。现使用备忘录(Memento)模式实现该要求,得到如图6-1所示的类图。Memento包含了要被恢复的状态。Originator创建并在Memento中存储状态。Caretaker负责从Memento中恢复状态。


【Java代码】

import java.util.*;
class Memento {
private String state;
public Memento(String state){
this.state=state;
}
public String getState(){
return state;
}
}
class Originator{
private String state;
public void setState(String state){
this.state=state;
}
public String getState(){
retum state;
}
public Memento saveStateToMemento( ){
return(1);
}
}
public void getStateFromMemento(Memento Memento){
state =(2);
}
class CareTaker{
private ListmementoList= new ArrayList();
public(3){
mementoList.add(state);
}
public(4){
return memensoList.get(index);
}
}
class MementoPaneDems{
public static void main(String[] args) {
Originator originator =new Originator();
CareTaker careTaker=new careTaker();
originator.setState("State #1");
originator.setState("State #2");
careTaker.add( (5) );
originator.setState("State #3");
careTaker.add( (6) );
originator.setState("State #4");
System.out.println("CurrentState"+originator.getState());
originator.getStateFromMemento(careTaker.get(0));
System.out.println("Frist saved State"+originator.getState());
originator.getStateFromMemento(careTaker.get(1));
System.out.println("Second saved State"+originator.getState());
}
}

(1) new Memento(state)
(2) Memento.getState()
(3) void add(Memento state)
(4) Memento get(int index)
(5) care Taker.add(originator.s)

2022年上半年软件设计师下午真题试题(案例分析)及答案相关推荐

  1. 2019上半年软件设计师 下午真题-简答题及免费答案(一)

    2019上半年软件设计师 下午真题-简答题及免费答案(一) 试题一(15分) 阅读下列说明和图,回答问题1至4,将解答填入答题纸的对应栏内. [说明] 某学校欲开发一学生跟踪系统,以便更自动化.更全面 ...

  2. 2021年上半年软件设计师下午真题试题(案例分析)及答案

    2021年上半年软件设计师上午真题及答案解析 目录 1.停车系统的数据流图 2.社区蔬菜团购网站的数据库设计 3.线上抓药APP的用例图.类图 4.凸多边形 5.层叠菜单(Java) 1.停车系统的数 ...

  3. 2019年上半年软件设计师下午真题试题(案例分析)及答案

    目录 1.学生跟踪系统的数据流图 2.创业项目信息系统的数据库设计 3.书籍销售系统的类图 4.n皇后问题 5.汽车竞速类游戏(Java) 1.学生跟踪系统的数据流图 阅读下列说明和图,回答问题1至问 ...

  4. 2020年下半年软件设计师下午真题试题(案例分析)及答案

    2020年下半年软件设计师上午真题及答案解析 目录 1.工厂智能缺陷检测系统的数据流图 2.M集团业务管理需求的数据库设计 3.房产信息管理系统的用例图 4.希尔排序算法 5.在线支付(Java) 1 ...

  5. 软件设计师下午题java_2018上半年软件设计师下午真题(三)

    ● 阅读下列说明和Java代码,将应填入(n)处的字句写在答题纸的对应栏内. [说明] 生成器( Builder)模式的意图是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. ...

  6. 2021年上半年软件设计师下午真题及答案解析(三)

    阅读下列说明和图,回答问题1至问题3,将解答填入答题纸的对应栏内. [说明] 某中医医院拟开发一套线上抓药APP,允许患者凭借该医院医生开具的处方线上抓药,并提供免费送药上门服务.该系统的主要功能描述 ...

  7. 2018上半年软件设计师下午真题及答案

    (ctrl+鼠标滚动 放大看) 文章整理自百度文库, csdn,对于正确性楼主并没有做验证,如有错误的地方可以指出互相交流.谢谢大家 试题1 ● 阅读下列说明,回答问题1至问题4,将解答填入答题纸的对 ...

  8. 2018年下半年软件设计师下午真题试题(案例分析)及答案

    目录 1.房屋中介信息系统的数据流图 2.员工管理系统的数据库设计 3.社交网络平台的类图 4.最佳配对方案 5.会员积分系统(Java) 1.房屋中介信息系统的数据流图 阅读下列说明和图,回答问题1 ...

  9. 软考软件设计师下午真题-面向对象的程序设计与实现-生成器设计模式(2018年上半年试题六))Java代码讲解

    软考软件设计师下午真题-面向对象的程序设计与实现-生成器设计模式(2018年上半年试题六))代码讲解 说明 Java代码 注释 说明 生成器(Builder)模式的意图是将一个复杂对象的构建与它的表示 ...

  10. 2022年下半年网络规划设计师下午真题及答案解析

    试题一(25分) 某高校两个校区相距30公里,通过互联网相连.两校区网络相互独立,并采用两套认证系统,管理维护较繁琐. 现需要对校园网进行升级改造,将老校区网络作为一个子网通过线路A接入到新校区,与新 ...

最新文章

  1. 1 23 456c语言,2014年计算机二级考试C语言模拟题(1)
  2. GitHub 博客-- Jekyll--代码高亮,Liquid 转义字符
  3. 【sublime text3】破解 最近破解码 /激活成功,但是过一会就提示激活码失效的 Build3143...
  4. yolov3yolov4yolov5比较
  5. 基于事件驱动架构构建微服务第16部分:Azure Active Directory B2C
  6. P3975-[TJOI2015]弦论【SAM】
  7. MybatisGenerator+lombok
  8. centos系统使用snap安装软件(还是别用吧)
  9. [re入门]IDA和OD的基本使用(持续更新)
  10. window出现msvcp100.dll缺失问题
  11. python植树问题代码_小学数学最难的13种典型题,让孩子吃透了,拿高分不难!...
  12. android平板值得买吗,最值得买大推荐 全新安卓平板你选谁?
  13. Python批量提取Excel文件中文本框组件里的文本
  14. 花书 第十九章 第二十章
  15. 汉诺塔(内部+伪图形)
  16. mysql按某个条件升序_问题描述大家都知道, MySQL 中按某字段升序排列的 SQL 为 (以 id 为例,下同):SELECT * FROM `MyTable` WHERE...
  17. 微软官方补丁6B BUG造成WIN7系统蓝屏解决方案
  18. 关于echarts导出图片不显示数据问题
  19. [华容道]Python小程序(可自定义地图&带解密算法&详细代码注释)
  20. JLINK转接板便携精简版

热门文章

  1. Linux之SAMBA服务——SMB协议
  2. 网络原理考点之滑动窗口协议
  3. Mybatis-plus 之sql注入器
  4. delphi 人脸比对_比较好的开源人脸识别软件有哪些?
  5. 【从0到1搭建LoRa物联网】12、LoRa网关与平台通讯协议
  6. LoRa网关的特点及应用
  7. js将docx转换为html,js实现word转换为html
  8. socket程序退出后端口依然被占用问题的解决
  9. YDUI Touch InfiniteScroll无限加载数据测试
  10. JVM垃圾回收机制(一)