2022年上半年软件设计师下午真题试题(案例分析)及答案
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年上半年软件设计师下午真题试题(案例分析)及答案相关推荐
- 2019上半年软件设计师 下午真题-简答题及免费答案(一)
2019上半年软件设计师 下午真题-简答题及免费答案(一) 试题一(15分) 阅读下列说明和图,回答问题1至4,将解答填入答题纸的对应栏内. [说明] 某学校欲开发一学生跟踪系统,以便更自动化.更全面 ...
- 2021年上半年软件设计师下午真题试题(案例分析)及答案
2021年上半年软件设计师上午真题及答案解析 目录 1.停车系统的数据流图 2.社区蔬菜团购网站的数据库设计 3.线上抓药APP的用例图.类图 4.凸多边形 5.层叠菜单(Java) 1.停车系统的数 ...
- 2019年上半年软件设计师下午真题试题(案例分析)及答案
目录 1.学生跟踪系统的数据流图 2.创业项目信息系统的数据库设计 3.书籍销售系统的类图 4.n皇后问题 5.汽车竞速类游戏(Java) 1.学生跟踪系统的数据流图 阅读下列说明和图,回答问题1至问 ...
- 2020年下半年软件设计师下午真题试题(案例分析)及答案
2020年下半年软件设计师上午真题及答案解析 目录 1.工厂智能缺陷检测系统的数据流图 2.M集团业务管理需求的数据库设计 3.房产信息管理系统的用例图 4.希尔排序算法 5.在线支付(Java) 1 ...
- 软件设计师下午题java_2018上半年软件设计师下午真题(三)
● 阅读下列说明和Java代码,将应填入(n)处的字句写在答题纸的对应栏内. [说明] 生成器( Builder)模式的意图是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. ...
- 2021年上半年软件设计师下午真题及答案解析(三)
阅读下列说明和图,回答问题1至问题3,将解答填入答题纸的对应栏内. [说明] 某中医医院拟开发一套线上抓药APP,允许患者凭借该医院医生开具的处方线上抓药,并提供免费送药上门服务.该系统的主要功能描述 ...
- 2018上半年软件设计师下午真题及答案
(ctrl+鼠标滚动 放大看) 文章整理自百度文库, csdn,对于正确性楼主并没有做验证,如有错误的地方可以指出互相交流.谢谢大家 试题1 ● 阅读下列说明,回答问题1至问题4,将解答填入答题纸的对 ...
- 2018年下半年软件设计师下午真题试题(案例分析)及答案
目录 1.房屋中介信息系统的数据流图 2.员工管理系统的数据库设计 3.社交网络平台的类图 4.最佳配对方案 5.会员积分系统(Java) 1.房屋中介信息系统的数据流图 阅读下列说明和图,回答问题1 ...
- 软考软件设计师下午真题-面向对象的程序设计与实现-生成器设计模式(2018年上半年试题六))Java代码讲解
软考软件设计师下午真题-面向对象的程序设计与实现-生成器设计模式(2018年上半年试题六))代码讲解 说明 Java代码 注释 说明 生成器(Builder)模式的意图是将一个复杂对象的构建与它的表示 ...
- 2022年下半年网络规划设计师下午真题及答案解析
试题一(25分) 某高校两个校区相距30公里,通过互联网相连.两校区网络相互独立,并采用两套认证系统,管理维护较繁琐. 现需要对校园网进行升级改造,将老校区网络作为一个子网通过线路A接入到新校区,与新 ...
最新文章
- 1 23 456c语言,2014年计算机二级考试C语言模拟题(1)
- GitHub 博客-- Jekyll--代码高亮,Liquid 转义字符
- 【sublime text3】破解 最近破解码 /激活成功,但是过一会就提示激活码失效的 Build3143...
- yolov3yolov4yolov5比较
- 基于事件驱动架构构建微服务第16部分:Azure Active Directory B2C
- P3975-[TJOI2015]弦论【SAM】
- MybatisGenerator+lombok
- centos系统使用snap安装软件(还是别用吧)
- [re入门]IDA和OD的基本使用(持续更新)
- window出现msvcp100.dll缺失问题
- python植树问题代码_小学数学最难的13种典型题,让孩子吃透了,拿高分不难!...
- android平板值得买吗,最值得买大推荐 全新安卓平板你选谁?
- Python批量提取Excel文件中文本框组件里的文本
- 花书 第十九章 第二十章
- 汉诺塔(内部+伪图形)
- mysql按某个条件升序_问题描述大家都知道, MySQL 中按某字段升序排列的 SQL 为 (以 id 为例,下同):SELECT * FROM `MyTable` WHERE...
- 微软官方补丁6B BUG造成WIN7系统蓝屏解决方案
- 关于echarts导出图片不显示数据问题
- [华容道]Python小程序(可自定义地图&带解密算法&详细代码注释)
- JLINK转接板便携精简版