2019年上半年软件设计师上午下午试题及答案 下载本文

完整性约束关系

员工-外键:所属公司代码

项目-主键:(项目编号、投资方编号)组合主键 项目-外键:投资方编号 (1)不需要增加实体;

(2)关系模式修改:项目增加属性-投资额、投资时间

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

某图书公司欲开发一个基于Web的书籍销售系统,为顾客(Customer)提供在线购买书籍(Books)的功能,同时对公司书籍的库存及销售情况进行管理。系统的主要功能描述如下: (1)首次使用系统时,顾客需要在系统中注册(Register detail)。顾客填写注册信息表要求的信息,包括姓名(name)、收货地址(address)、电子邮箱(email)等,系统将为其生成一个注册码。 (2)注册成功的顾客可以登录系统在线购买书籍(Buy books)。购买时可以浏览书籍信息,包括书名(title)、作者(author)、内容简介(introduction)等。如果某种书籍的库存量为0,那么顾客无法查询到该书籍的信息。顾客选择所需购买的书籍及购买数量 (quantities),若购买数量超过库存量,提示库存不足;若购买数量小于库存量,系统将显示验证界面,要求顾客输入注册码。注册码验证正确后,自动生成订单(Order),否则, 提示验证错误。如果顾客需要,可以选择打印订单(Print order)。

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

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

(5)采购人员根据书籍的销售情况,对销量较低的书籍设置折扣或促销活动(Promote books)。 (6)当新书籍到货时,仓库管理员(Warehouseman)接收书籍,更新库存(Update stock)。

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

图(部分)。

问题:3.1 【问题1】(6分)

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

问题:3.2 【问题2】(6分)

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

问题:3.3 【问题3】(3分)

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

解析:

A1:采购人员或Buyer

A2:仓库管理员Warehouseman A3:派送人员或Dispatcher U1:注册或Register detail U2:打印订单

U3:购买书籍或Buy books U3用例描述 参与者顾客。 主要事件流:

1、顾客登录系统; 2、顾客浏览书籍信息;

3、系统检查某种书籍的库存量是否为0; 4、顾客选择所需购买的书籍及购买数量; 5、系统检查库存量是否足够; 6、系统显示验证验证界面; 7、顾客验证;

8、系统自动生成订单; 备选事件流:

3a. 若库存量为0则无法查询到该书籍信息,退回到2; 5a. 若购买数量超过库存量,则提示库存不足,并退回到4; 7a. 若验证错误,则提示验证错误,并退回到6; 8a. 若顾客需要可以选择打印订单。 C1:顾客或Customer C2:订单或Order C3:书籍或Books

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

n皇后问题描述为:在一个n×n的棋盘上摆放n个皇后,要求任意两个皇后不能冲突,即任意两个皇后不在同一行、同一列或者同一斜线上。 算法的基本思想如下:

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

下面是算法的C语言实现。 (1)常量和变量说明

n: 皇后数,棋盘规模为n×n

queen[]: 皇后的摆放位置数组, queen[i]表示第i个皇后的位置, 1≤queen[i]≤n (2)C程序 #include

#define n 4 int queen[n+1];

void Show(){ /* 输出所有皇后摆放方案 */ int i;

printf(\

for(i=1;i<=n;i++){

printf(\}

printf(\}

int Place(int j){ /* 检查当前列能否放置皇后,不能放返回0,能放返回1 */ int i;

for(i=1;i if( (1) ) ‖ abs(queen[i]-queen[j]) == (j-i)) { return 0; } }

return (2) ; }

void Nqueen(int j){ int i;

for(i=1;i<=n;i++){ queen[j] = i; if( (3) ){

if(j == n) { /* 如果所有皇后都摆放好,则输出当前摆放方案 */ Show();

} else { /* 否则继续摆放下一个皇后 */ (4) ; } } } }

int main(){ Nqueen (1); return 0; }

问题:4.1 【问题1】(8分)

根据题干说明,填充C代码中的空(1)?(4)。

请输入答案

问题:4.2 【问题2】(3分)

根据题干说明和C代码,算法采用的设计策略为 (5)。