image

编辑人: 桃花下浅酌

calendar2025-06-06

message9

visits917

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

一、问答题

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

[说明]

学校欲开发一学生跟踪系统, 以更自动化、更全面地对学生在校情况(到课情况和健康状态等相关信息)进行管理和追踪,使家长能及时了解子女的到课情况和健康状态,并在有健康问题时及时与医护机构对接。该系统的主要功能是:

(1)采集学生状态。通过学生卡传感器,采集学生心率、体温(摄氏度)等健康指标及其所在位置等信息并记录。每张学生卡有唯一的标识 (ID) 与一个学生对应。

(2)健康状态告警。在学生健康状态出现问题时,系统向班主任、家长和医护机构健康服务系统发出健康状态警告,由医护机构健康服务系统通知相关医生进行处理。

(3) 到课检查。综合比对学生状态、课表以及所处校园场所之间的信息对学生到课情况进行判定。对旷课学生,向其家长和班主任发送旷课警告。

(4)在校情况汇总。定期汇总在校情况,并将报告发送给家长和班主任。

(5)家长注册。家长注册使用该系统,指定自己子女,经学校管理人员审核后,向家长发送注册结果。

(6)基础信息管理。学校管理人员对学生及其所用学生卡和班主任、课表(班级、上课时间及场所等)、校园场所(名称和所在位置区域)等基础信息进行管理,对家长注册申请进行审核,将家长ID加入学生信息记录中使家长与其子女进行关联,一个学生至少有一个家长,可以有多个家长。课表信息包括班级、班主任、时间和位置等。

现采用结构化方法对学生跟踪系统进行分析与设计,获得如图1-1所示的上下文数据流图和图1-2所示的0层数据流图。


[问题1] (5分)

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

[问题2] (4分)

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

[问题3] (3分)

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

[问题4] (3分)

根据说明中术语,说明图1-1 中数据流“学生状态”和“学生信息”的组成。

参考答案:

1、E1:学生,E2:学校管理人员,E3:班主任,E4:家长,E5:医护机构。

2、D1:学生状态信息,D2:学生信息,D3:校园场所信息,D4:课表。

3、D4→P3 课表;D3→P3 校园场所;P6→D2 注册信息。

4、要满足上述系统需求,并有有效管理查询数据。

(1)学生状态的组成为:学生编号、学生卡号、各种健康状态信息、医护机构编号

(2)学生信息的组成为:学生基本信息、学生卡号、班主任编号、家长编号(一名主要联系人)。

解析:

问题1:根据说明中的描述和图1-1上下文数据流图,可以确定实体E1~E5的名称。E1是学生,E2是学校管理人员,E3是班主任,E4是家长,E5是医护机构。这些实体都是数据流图中的关键组成部分,与系统的各项功能密切相关。

问题2:根据说明中的词语和图1-2的0层数据流图,可以确定数据存储D1~D4的名称。D1是学生状态信息,D2是学生信息记录,D3是校园场所信息,D4是课表信息。这些数据存储都是系统需要保存的重要数据。

问题3:根据说明和图中术语,可以补充图1-2中缺失的数据流及其起点和终点。数据流包括课表信息、校园场所信息和注册信息。课表信息从教学管理流向学生跟踪系统主程序;校园场所信息从校园管理流向学生跟踪系统主程序;注册信息从家长注册模块流向学生信息记录。

问题4:根据说明中术语和图1-1的数据流,可以描述"学生状态"和"学生信息"的组成。"学生状态"包括学生编号、学生卡号、健康指标(如心率、体温等)以及所在的医护机构编号。"学生信息"则包括学生的基本信息、学生卡号、班主任编号以及主要联系人的家长编号。这些信息是系统实现各项功能所必需的。

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

[说明]

禁创业孵化基地管理若干孵化公司和创业公司,为规范管理创业项目投资业务,需要开发一个信息系统。请根据下述需求描述完成该系统的数据库设计。

[需求描述]

(1)记录孵化公司和创业公司的信息。孵化公司信息包括公司代码、公司名称、法人代表名称、注册地址和一个电话:创业公司信息包括公司代码、公司名称和一个电话。

孵化公司和创业公司的公司代码编码不同。

(2)统一管理孵化公司和创业公司的员工。员工信息包括工号、身份证号、姓名、

性别、所属公司代码和一个手机号,工号唯一标识每位员工。

(3)记录投资方信息,投资方信息包括投资方编号、投资方名称和-个电话。

(4)投资方和创业公司之间依靠孵化公司牵线建立创业项目合作关系,具体实施由孵化公司的一位员工负责协调投资方和创业公司的一个创业项目。一个创业项目只属于个创业公司,但可以接受若干投资方的投资。创业项目信息包括项目编号、创业公司代码、

投资方编号和孵化公司员工工号。

]概念模型设计]

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

[逻辑结构设计]

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

孵化公司(公司代码,公司名称, 法人代表名称,注册地址,电话)

创业公司(公司代码,公司名称,电话)

员工(工号,身份证号,姓名,性别,(a) ,手机号)

投资方(投资方编号、投资方名称,电话)

项目(项目编号,创业公司代码(b),孵化公司员工工号)

[问题1](5分)

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

[问题2] (4分)

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

[问题3](6分)

若创业项目的信息还需要包括投资额和投资时间,那么:

(1)是否需要增加新的实体来存储投资额和投资时间?

(2)如果增加新的实体,请给出新实体的关系模式,并对图2-1进行补充,如果不需要增加新的实体,请将“投资额”和“投资时间"两个属性补充井连线到图2-1合适的对象上,并对变化的关系模式进行修改。

参考答案:

1、补充完整的ER图为

2、a:孵化公司代码,创业公司代码,     b:投资方编号

3、不需要创建新实体,修改项目关系模式为:

项目(项目编号,创业公司代码,投资方编号,孵化公司员工工号,投资额,投资时间)


解析:

问题1要求补充图2-1的实体联系图。根据需求描述,我们知道缺少的是项目实体以及它与其他实体的关系。因此,我们需要在图中增加项目实体,并明确它与孵化公司、创业公司、员工和投资方的关系。

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

【说明】 

某图书公司欲开发一个基于 Web 的书籍销售系统,为顾客(Customer)提供在线购买书籍 (Books)的功能,同时对公司书籍的库存及销售情况进行管理。系统的主要功能描述如下: 

(1)首次使用系统时,顾客需要在系统中注册(Register detail)。顾客填写注册信息表要求 的信息,包括姓名(name)、收货地址(address)、电子邮箱(email)等,系统将为其生成一个注

册码。 

(2)注册成功的顾客可以登录系统在线购买书籍(Buy books)。购买时可以浏览书籍 信息, 包括书名(title)、作者(author)、内容简介(introduction)等。如果某种书籍的库存量为 0,那 么顾客无法查询到该书籍的信息。顾客选择所需购买的书籍及购买数量 (quantities),若购买 数量超过库存量,提示库存不足;若购买数量小于库存量,系统将显示验证界面,要求顾 客输入注册码。注册码验证正确后,自动生成订单(Order),否则, 提示验证错误。如果顾客 需要,可以选择打印订单(Printorder)。 

(3)派送人员(Dispatcher)每天早晨从系统中获取当日的派送列表信息(Produce picklist),按 照收货地址派送顾客订购的书籍。 

(4)用于销售的书籍由公司的采购人员(Buyer)进行采购(Reorderbooks)。采购人员每天从 系统中获取库存量低于再次订购量的书籍信息,对这些书籍进行再次购买,以保证充足的 库存量。新书籍到货时,采购人员向在线销售目录(Catalog)中添加新的书籍信息(Addbooks)。 

(5)采购人员裉据书籍的销售情况,对销量较低的书籍设置折扣或促销活动(Promote books)。 

(6)当新书籍到货时,仓库管理员(Warehouseman)接收书籍,更新库存(Update stock)。 

现采用面向对象方法开发书籍销售系统,得到如图 3-1 所示的用例图和图 3-2 所示的初始 类图(部分)。

【问题 1】(6 分) 根据说明中的描述,给出图 3-1 中 A1?A3 所对应的参与者名称和 U1?U3 处所对应 的用 例名称。 

【问题 2】(6 分) 根据说明中的描述,给出图 3-1 中用例 U3 的用例描述。(用例描述中必须包括基本事 件 流和所有的备选事件流)。

【问题 3】(3 分) 根据说明中的描述,给出图 3-2 中 C1?C3 所对应的类名。

参考答案:

问题1.

A1.采购人员 或者Buyer

A2.仓库管理员 或者 Warehouseman

A3.派送人员 或者 Dispatcher

U1:注册 或者 Register detail

U2:打印订单 或者 Printorder

U3:购买书籍 或者 Buy books

问题2.

参考者:顾客(Customer)

基本事件流:

1.顾客登录系统

2.顾客浏览书籍信息

3.系统检测书籍的库存量

4.顾客选择购买的书籍及购买数量 

5.系统检测购买数量

6.系统显示验证界面

7.顾客输入注册码

8.系统生成订单


备选事件流:

3a.如果书籍库存量为0,顾客无法查询到该书籍的信息

5a.若购买数量超过库存量,提示库存量不足

7a.如果注册码验证错误,提示验证错误

8a.如果顾客需要,可以选择打印订单


问题3.

C1:顾客 或者 Customer   C2:订单 或者 Order     

C3:书籍 或者 Books

解析:小编正在快马加鞭赶来的路上哦

4、阅读下列说明和 C 代码,回答问题 1 至 3,将解答写在答题纸的对应栏内 

【说明】 

n 皇后问题描述为:在一个 nXn 的棋盘上摆放 n 个皇后,要求任意两个皇后不能冲突, 即 任意两个皇后不在同一行、同一列或者同一斜线上。

算法的基本思想如下: 

将第 i 个皇后摆放在第 i 行,i 从 1 开始,每个皇后都从第 1 列开始尝试。尝试时判断 在 该列摆放皇后是否与前面的皇后有冲突,如果没有冲突,则在该列摆放皇后,并考虑摆 放 下一个皇后;如果有冲突,则考虑下一列。如果该行没有合适的位置,回溯到上一个皇后 考虑在原来位置的下一个位置上继续尝试摆放皇后,……,直到找到所有合理摆放方案。 

【C 代码】 下面是算法的 C 语言实现。 

(1)常量和变量说明


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

【问题 2】(3 分) 根据题干说明和 C 代码,算法采用的设计策略为  

【问题 3】(4 分) 当 n=4 时,有 (6) 种摆放方式,分别为 (7) 。

有2种摆法

参考答案:

【问题 1】 

(1)queen[i]==queen[j]

(2)1 

(3)Place(j)&&j<=n

(4)Nqueen(j+1)

【问题 2】

(5)回溯法

【问题 3】

有2种摆法

分别为2413,3142

解析:

根据题目描述和算法思想,空(1)处应判断当前列是否有冲突,即检查当前列上的皇后是否与之前的皇后在同一行或同一斜线上,因此应为queens[col][i]==queens[col][j](或queens[j][col]==queens[i][col])。空(2)处应表示当前位置上的皇后,即queens[col][row](或queens[row][col])。空(3)处应判断当前列是否可以放置皇后,并且需要保证列索引不越界,所以应为(Place(col)&&col<n) 或 (Place(col)&&col<=n)。空(4)处表示开始放置下一个皇后的位置,即调用函数Nqueens(row)(或Nqueens(n),表示从第row行开始放置皇后)。

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

【说明】 

某软件公司欲开发一款汽车竞速类游戏,需要模拟长轮胎和短轮胎急刹车时在路面上 留 下的不同痕迹,并考虑后续能模拟更多种轮胎急刹车时的痕迹。现采用策略(Strategy) 设 计模式来实现该需求,所设计的类图如图 5-1 所示。




参考答案:

1.void stop()

2.BrakeBehavior

3.wheel.stop()

4.wheel=behavior

5.brake()

解析:


从题目描述来看,需要模拟不同轮胎急刹车时的痕迹,并考虑使用策略(Strategy)设计模式来实现。策略模式是一种允许你在运行时改变对象行为的方式。根据提供的类图,BrakeBehavior是一个抽象策略类,包含了急刹车行为的抽象描述。而BrakeStrategy是具体策略类,实现了BrakeBehavior接口,定义了具体的急刹车行为。因此,在模拟急刹车行为时,需要创建一个BrakeStrategy对象,并将其赋值给BrakeBehavior类型的变量。所以应填入n处的字句为:“BrakeBehavior brakeBehavior = new BrakeStrategy();”。

6、


参考答案:

(1) Virtual void stop( )=0

(2) BrakeBehavior*

(3) Wheel->stop( )

(4)wheel=behavior

(5) brake( )


解析:

(1) 纯虚函数是一种在基类中声明的特殊类型的虚函数,它没有具体的实现,需要在派生类中被实现。这里使用virtual关键字声明stop为纯虚函数,意味着任何包含该函数的类都必须提供具体的实现。因此,“Virtual void stop()=0”意味着这是一个需要在派生类中实现的虚函数。

(2) “BrakeBehavior*”表示定义了一个指向BrakeBehavior类的指针。指针是C++中用于存储对象地址的变量,通过这个地址可以访问到具体的对象。因此,“BrakeBehavior*”定义了一个指向BrakeBehavior对象的指针变量。

(3) “Wheel->stop()”是通过指针调用Wheel类的stop函数。在C++中,可以使用指向对象的指针来调用该对象的成员函数。这里通过Wheel类的指针调用了stop函数。

(4) “wheel=behavior”是将一个名为behavior的指针赋值给名为wheel的变量。这里假设wheel是一个已经定义好的变量,而behavior是一个指向BrakeBehavior对象的指针。通过赋值操作,将behavior指针的值赋给wheel变量,使得wheel指向同一个对象。

(5) “brake()”函数可能是用于执行刹车行为的函数。具体的功能和实现细节需要查看函数的定义和上下文代码来确定。

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

创作类型:
原创

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

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