问答题 (一共6题,共6分)

1.

阅读下列说明,回答问题1至问题3,将解答填入答题纸的对应栏内。【说明】 某快递公司为了方便管理公司物品运送的各项业务活动,需要构建一个物品运送信息管理系统。

【需求分析结果】

(1)快递公司有多个分公司,分公司信息包括分公司编号、名称、经理、办公电话和地址。每个分公司可以有多名员工处理分公司的日常业务,每位员工只能在一个分公司工作。每个分公司由一名经理负责管理分公司的业务和员工,系统需要记录每个经理的任职时间。

(2)员工信息包括员工号、姓名、岗位、薪资、手机号和家庭地址。其中,员工号唯一标识员工信息的每一个元组。岗位包括经理、调度员、业务员等。业务员根据客户提交的快件申请单进行快件受理事宜,一个业务员可以受理多个客户的快件申请,一个快件申请只能由一个业务员受理。调度员根据已受理的申请单安排快件的承运事宜,例如:执行承运的业务员、运达时间等。一个业务员可以执行调度员安排的多个快件的承运业务。 (3)客户信息包括客户号、单位名称、通信地址、所属省份、联系人、联系电话、银行账号。其中,客户号唯一标识客户信息的每一个元组。当客户要寄快件时,先要提交快件申请单,申请号由系统自动生成。快件申请信息包括申请号、客户号、发件人、发件人电话、快件名称、运费、发出地、收件人、收件人电话、收件地址。其中,一个申请号对应唯一的一个快件申请,一个客户可以提交多个快件申请,但一个快件申请由唯一的一个客户提交。 【概念模型设计】 【关系模型设计】根据需求阶段收集的信息,设计的实体联系图(图2-1)和关系模型(不完整)如下:

中级软件设计师,押题密卷,2021年《软件设计师》下午押题密卷2

分公司(分公司编号,名称,经理,办公电话,地址)

员工(员工号,姓名, (a) ,岗位,薪资,手机号,家庭地址) 客户(客户号,单位名称,通信地址,所属省份,联系人,联系电话,银行账号) 申请单( (b) ,发件人,发件人电话,发件人地址,快件名称,运费,收件人,收件人电话,收件地址,受理标志,业务员) 安排承运( (c) ,实际完成时间,调度员)【问题1】 根据问题描述,补充五个联系,完善图2-1的实体联系图。联系名可用联系1、联系2、联系3、联系4和联系5代替,联系的类型分为1:1、1:n和m:n(或1:1、1:*和*:*)。【问题2】 (1)根据实体联系图,将关系模式中的空(a)~(c)补充完整; (2)给出员工、申请单和安排承运关系模式的主键和外键。【问题3】 (1)客户关系的通信地址可以进一步分为邮编、省、市、街道,那么该属性是否属于简单属性,为什么?请用100字以内的文字说明。 (2)假设分公司需要增设一位经理的职位,那么分公司与经理之间的联系类型应修改为(d),分公司的主键应修改为(e)。

2.

阅读下列说明和C代码,回答问题1至问题3

【说明】

??? 某应用中需要对100000个整数元素进行排序,每个元素的取值在0~5之间。排序算法的基本思想是:对每一个元素x,确定小于等于x的元素个数(记为m),将x放在输出元素序列的第m个位置。对于元素值重复的情况,依次放入第m-l、m-2、…个位置。例如,如果元素值小于等于4的元素个数有10个,其中元素值等于4的元素个数有3个,则4应该在输出元素序列的第10个位置、第9个位置和第8个位置上。算法具体的步骤为:

步骤1:统计每个元素值的个数。

步骤2:统计小于等于每个元素值的个数。

步骤3:将输入元素序列中的每个元素放入有序的输出元素序列。

【C代码】

下面是该排序算法的C语言实现。

(1)常量和变量说明

R: 常量,定义元素取值范围中的取值个数,如上述应用中R值应取6

i:循环变量

n:待排序元素个数

a:输入数组,长度为n

b:输出数组,长度为n

c:辅助数组,长度为R,其中每个元素表示小于等于下标所对应的元素值的个数。

(2)函数sort

1??? void sort(int n,int a[],int b[]){

2??? ???int c[R],i;

3?? for (i=0;i< ???(1)? :i++){

4?? ??c[i]=0;

5??? ???}

6??? ???for(i=0;i<n;i++){

7??? ?c[a[i]] = ??(2)? ;

8??? ???}

9 ??for(i=1;i<R;i++){

10??? c[i]= ?(3)

11??? ??}

12 ?for(i=0;i<n;i++){

13??? b[c[a[i]]-1]=? (4)?? ;

14??? c[a[i]]=c[a[i]]-1;

15??? ??}

16??? }

【问题1】

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

【问题2】

根据C代码,函数的时间复杂度和空间复杂度分别为 (5) 和 (6) (用O符号表示)。

【问题3】?

? 根据以上C代码,分析该排序算法是否稳定。若稳定,请简要说明(不超过100字);若不稳定,请修改其中代码使其稳定(给出要修改的行号和修改后的代码)。

3.

阅读以下说明和流程图,填补流程图中的空缺,将解答填入答题纸的对应栏内。

【说明】

设有整数数组A[1:N](N>1),其元素有正有负。下面的流程图在该数组中寻找连续排列的若干个元素,使其和达到最大值,并输出其起始下标K、元素个数L以及最大的和值M。

例如,若数组元素依次为3,-6,2,4,-2,3,-1,则输出K=3,L=4,M=7。该流程图中考察了A[1:N]中所有从下标i到下标j(j≥i)的各元素之和S,并动态地记录其最大值M。

【流程图】

中级软件设计师,押题密卷,2021年《软件设计师》下午押题密卷2

注:循环开始框内应给出循环控制变量的初值和终值,默认递增值为1,格式为:循环控制变量=初值,终值

4.

现准备为某银行开发一个信用卡系统CCMS,该系统的基本功能如下

(1)信用卡申请。非信用卡客户填写信用卡申请表,说明所要申请的信用卡类型及申请者的基本信息,提交CCMS。如果信用卡申请被银行接受,CCMS将记录该客户的基本信息,并发送确认函给该客户,告知客户信用卡的有效期及信贷限额;否则该客户将会收到一封拒绝函。非信用卡客户收到确认函后成为信用卡客户。

(2)信用卡激活。信用卡客户向CCMS提交激活请求,用信用卡号和密码激活该信用卡。激活操作结束后,CCMS将激活通知发送给客户,告知客户其信用卡是否被成功激活。

(3)信用卡客户信息管理。信用卡客户的个人信息可以在CCMS中进行在线管理。每位信用卡客户可以在线查询和修改个人信息。

(4)交易信息查询。信用卡客户使用信用卡进行的每一笔交易都会记录在CCMS中。信用卡客户可以通过CCMS查询并核实其交易信息(包括信用卡交易记录及交易额)。

图1-4和图1-5分别给出了该系统的顶层数据流图和0层数据流图的初稿。

中级软件设计师,押题密卷,2021年《软件设计师》下午押题密卷2

中级软件设计师,押题密卷,2021年《软件设计师》下午押题密卷2

【问题1】

根据说明,将图1-4中的E1-E3填充完整。

【问题2】

图1-4中缺少3条数据流,根据说明分别指出这3条数据流的起点和终点。(注:数据流的起点和终点均采用图中的符号和描述)

【问题3】

图1-5中有两条数据流是错误的,请指出这两条数据流的名称并改正。(注:数据流的 ?起点和终点均采用图中的符号和描述)

【问题4】

根据说明,将图1-5中P1-P4的处理名称填充完整。

5.

阅读以下说明和Java代码,填补代码中的空缺,将解答填入答题纸的对应栏内。

【说明】

以下Java代码实现一个超市简单销售系统中的部分功能,顾客选择图书等物件 (Item)加入购物车(ShoppingCart),到收银台(Cashier)对每个购物车中的物品统计其价格进行结账。设计如图5-1所示类图。

中级软件设计师,押题密卷,2021年《软件设计师》下午押题密卷2

【Java代码】

interface Item{ public void accept(Visitor visitor); public double getPrice();}class Book (1){ private double price; public Book(double price){(2);} public void accept(Visitor visitor){ //访问本元素 (3); } public double getPrice() { return price; }}//其它物品类略 interface Visitor { public void visit(Book book); //其它物品的visit方法 } class Cashier(4){ private double totalForCart; //访问Book类型对象的价格并累加 (5){ //假设Book类型的物品价格超过10元打8折 if(book.getPrice()<10.0){ totalForCart+=book.getPrice(); } else totalForCart+=book.getPrice()*0.8; } //其它visit方法和折扣策略类似,此处略 public double getTotal() { return totalForCart; }} class ShoppingCart { //normal shopping cart stuff private java.util.ArrayListitems=newjava.util.ArrayList<>(); public double calculatePrice() { Cashier visitor=newCashier(); for(Item item:items) { (6); } doubletotal=visitor.getTotal(); return total; } public void add(Item e) { this.items.add(e); }}

6.

阅读下列说明和图,回答问题1至问题4

【说明】

某大型企业的数据中心为了集中管理、控制用户对数据的访问并支持大量的连接需求,欲构建数据管理中间件,其主要功能如下:

(1)数据管理员可通过中间件进行用户管理、操作管理和权限管理。用户管理维护用户信息,用户信息(用户名、密码)存储在用户表中;操作管理维护数据实体的标准操作及其所属的后端数据库信息,标准操作和后端数据库信息存放在操作表中;权限管理维护权限表,该表存储用户可执行的操作信息。

 (2)中间件验证前端应用提供的用户信息。若验证不通过,返回非法用户信息;若验证通过,中间件将等待前端应用提交操作请求。

 (3)前端应用提交操作请求后,中间件先对请求进行格式检查。如果格式不正确,返回格式错误信息;如果格式正确,则进行权限验证(验证用户是否有权执行请求的操作),

若用户无权执行该操作,则返回权限不足信息,否则进行连接管理。

 (4)连接管理连接相应的后台数据库并提交操作。连接管理先检查是否存在空闲的数据库连接,如果不存在,新建连接;如果存在,则重用连接。

 (5)后端数据库执行操作并将结果传给中间件,中间件对收到的操作结果进行处理后,将其返回给前端应用。

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

【问题 1】

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

【问题 2】

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

【问题3】

给出图1-2中加工P的名称及其输入、输出流。

中级软件设计师,押题密卷,2021年《软件设计师》下午押题密卷2

中级软件设计师,押题密卷,2021年《软件设计师》下午押题密卷2

中级软件设计师,押题密卷,2021年《软件设计师》下午押题密卷2

中级软件设计师,押题密卷,2021年《软件设计师》下午押题密卷2

中级软件设计师,押题密卷,2021年《软件设计师》下午押题密卷2