1、2015 年下半年软件设计师真题和答案一、上午二、下午(部分):第四题答案1xi-1=yj-1max=cijcij=0i=maxi-max2动态规划O(m*n)3AB2015 年下半年软件设计师考试下午真题试题一(共 15 分)阅读下列说明和图,回答问题 l 至问题 4 ,将解答填入答题纸的对应栏内。【说明】某 慕 课 教 育 平 台 欲 添 加 在 线 作 业 批 改 系 统 , 以 实 现 高 效 的 作 业 提 交 与 批 改 , 并 进 行 统 计 。学 生 和 讲 师 的 基 本 信 息 已 经 初 始 化 为 数 据 库 中 的 学 生 表 和 讲 师 表 。 系 统 的 主 要
2、功 能 如 下 :(1)提交作业。验证学生标识后,学生将电子作业通过在线的方式提交,并进行存储。系统给学生发送通知表明提交成功,通知中包含唯一编号;并通知讲师有作业提交。(2)下载未批改作业。验证讲师标识后,讲师从系统中下载学生提交的作业。下载的作业将显示在屏幕上。(3)批改作业。讲师按格式为每个题目进行批改打分,并进行整体评价。(4)上传批改后的作业。将批改后的作业(包括分数和评价)返回给系统,进行存储。(5)记录分数和评价。将批改后的作业的分数和评价记录在学生信息中,并通知学生作业已批改口(6)获取已批改作业。根据学生标识,给学生查看批改后的作业,包括提交的作业、分数和评价。(7)作业抽检
3、。根据教务人员标识抽取批改后的作业样本,给出抽检意见,然后形成抽检报告给讲师。现采用结构化方法对在线作业批改系统进行分析与设计,获得如图 1-1 所示的上下文数据流图和囹 1-2 所示的 0 层数据流图。【 问 题 1】 (3 分)使用说明中的词语,给出图 1-1 中的实体 E1E3 的名称。【 问 题 2】 (4 分)使用说明中的词语,给出图 1-2 中的数据存储 D1D4 的名称。【 问 题 3】 (6 分)根据说明和图中术语,补充图 1-2 中缺失的数据流及其起点和终点。【 问 题 4】 (2 分)若发送给学生和讲师的通知是通过第三方 Email 系统进行的,则需要对图 1-1 和图 1
4、-2进行哪些修改?用 100 字以内文字加以说明。试题二(共 15 分)阅读下列说明,回答问题 1 至问题 3 ,将解答填入答题纸的对应栏内。【说明】某企业拟构建一个高效、低成本、符合企业实际发展需要的办公自动化系统。工程师小李主要承担该系统的公告管理和消息管理模块的研发工作。公告管理模块的主要功能包括添加、修改、删除和查看公告。消息管理模块的主要功能是消息群发。小李根据前期调研和需求分析进行了概念模型设计,具体情况分述如下:【需求分析结果】(1 )该企业设有研发部、财务部、销售部等多个部门,每个部门只有一名部门经理, 有多名员工,每名员工只属于一个部门,部门信息包括:部门号、名称、部门经理和
5、电话, 其中部门号唯一确定部门关系的每一个元组。(2)员工信息包括:员工号、姓名、岗位、电话和密码。员工号唯一确定员工关系的每一个元组;岗位主要有经理、部门经理、管理员等,不同岗位具有不同的权限。一名员工只对应一个岗位,但一个岗位可对应多名员工。(3)消息信息包括:编号、内容、消息类型、接收人、接收时间、发送时间和发送人。其中(编号,接收入)唯一标识消息关系中的每一个元组。一条消息可以发送给多个接收人,一个接收人可以接收多条消息。(4)公告信息包括:编号、标题、名称、内容、发布部门、发布时间。其中编号唯一确定公告关系的每二个元组。一份公告对应一个发布部门,但一个部门可以发布多份公告; 一份公告
6、可以被多名员工阅读,一名员工可以阅读多份公告。【概念模型设计】根据需求分析阶段收集的信息,设计的实体联系图(不完整)如图 2-1 所示:【逻辑结构设计】根据概念模型设计阶段完成的实体联系图,得出如下关系模式(不完整:部门 ( (a) ,部门经理,电话)员工(员工号,姓名, 岗位号,部门号,电话,密码) 岗位(岗位号,名称,权限)消息 ( (b) , 消息类型,接收时间,发送时间,发送人) 公告( (c) ,名称,内容,发布部门,发布时间)阅读公告( (d) , 阅读时间 )【 问 题 1】 (5 分)根 据 问 题 描 述 , 补 充 四 个 联 系 , 完 善 图 2-1 所 示 的 实 体
7、 联 系 图 。 联 系 名 可 用 联 系 1、联系 2、 联 系 3 和 联 系 4 代 替 , 联 系 的 类 型 分 为 1:1、1: n 和 m:n(或 1:1、1:* 和* :*【 词 题 2】 (8 分)(1)根据实体联系图,将关系模式中的空(a)(d)补充完整。(2)给出“消息 ”和“阅读公告”关系模式的主键与外键。【问题3】 (2 分) 、消息和公告关系中都有“编号”属性,请问它是属于命名冲突吗?用 1 00 字以内文字说明原因。试题三(共 15 分)阅读下列说明和图,回答问题 1 至问题 3 ,将解答填入答题纸的对应栏内。【说明】一某出版社拟开发一个在线销售各种学术出版物的
8、网上商店(ACShop),其主要的功能需求描述如下:(1) ACShop 在线销售的学术出版物包括论文、学术报告或讲座资料等。(2) ACShop 的客户分为两种:未注册客户和注册客户。(3)未注册客户可以浏览或检索出版物,将出版物添加到购物车中。未注册客户进行注册操作之后,成为 ACShop 注册客户。(4)注册客户登录之后,可将待购买的出版物添加到购物车中,并进行结账操作。结账操作的具体流程描述如下:从预先填写的地址列表中选择一个作为本次交易的收货地址。如果没有地址信息,则可以添加新地址。选择付款方式。ACShop 支持信用卡付款和银行转账两种方式。注册客户可以从预先填写的信用卡或银行账号
9、中选择一个付款。若没有付款方式信息,则可以添加新付款方式。确认提交购物车中待购买的出版物后,ACShop 会自动生成与之相对应的订单。(5)管理员负责维护在线销售的出版物目录,包括添加新出版物或者更新在售出版物信息等操作。现 采 用 面 向 对 象 方 法 分 析 并 设 计 该 网 上 商 店 ACShop, 得 到 如 图 3-1 所示的用例图和图 3-2 所示的类图。【 问 题 1】 (4 分)据说明中描述,给出图3-1 中 (1)(4)所对应的用例名。【 问 题 2】 (4 分)根据说明中的描述,分别说明用例“添加新地址”和“添加新付款方式”会在何种情况下由图 3-1 中的用例(3)
10、和(4) 扩展而来?【 问 题 3】 (7 分)根据说明中的描述,给出图 3-2 中(1)(7)所对应的类名。试题四(共 15 分)阅读下列说明和 C 代码,回答问题 1 至问题 3 ,将解答写在答题纸的对应栏内。【说明】计 算 两 个 字 符 串 x 和 y 的最长公共子串(Lo ngest Common Substring假设字符串 x 和字符串 y 的长度分别为 m 和 n,用数组 c 的元素 cij记录 x 中前 i个字符和 y 中前 j 个字符的最长公共子串的长度。cij满足最优子结构,其递归定义为:计 算 所 有 cij(0 i m, 0 j n)的 值 , 值 最 大 的 cij
11、即 为 字 符 串 x 和 y 的最长公共 子 串 的 长 度 。 根 据 该 长 度 即 i 和 j,+确定一个最长公共子串。【C 代码】(1)常量和变量说明x,y:长度分别为 m 和 n 的字符串cij:记录 x 中前 i 个字符和 y 中前 j 个字符的最长公共子串的长度max:x 和 y 的最长公共子串的长度maxi, maXj:分别表示 x 和 y 的某个最长公共子串的最后一个字符在 x 和 y 中的位置(序号)(2)C程序#include #include int c5 05 0 ; int maxi;int maxj;int lcs(char *x, int m, char *y
12、, int n) int i, j;int max= 0;maxi= 0;maxj = 0;for ( i=0; i Using namespace std;enum TYPENORMAL, CASH_DISCOUNT, CASH_RETURN;class CashSup er public:(1 );class CashNormal : public CashSuper 正常收费子类public:double acceptCash(double money) retum money; ;class CashDiscount : public CashSuper private:double
13、moneyDiscount; / 折扣率public:CashDiscount(double discount) moneyDiscount= discount; double acceptCash(double money) retum money * moneyDiscount; ;class CashRetum : public CashSuper / 满额返利private:double moneyCondition; / 满额数额double moneyReturn; / 返利数额public:CashRetnm(double;m otieyCondition, double mon
14、eyReturn) this=moneyCondition - moneyCondition;this=m oneyRetumF ;moneyRetum;double acceptCash(double money) double result = money; if(money=moneyCondition)result = money - (int)(mon ey l mon eyCondition ) * moneyRetum; Return result ;class CashContext private:CashSuper *cs; public:CashContext(intty
15、pe) switch(type) case NORMAL: 正常收费(2)case CASH;:RETURN 满 30 返 100(3)Break;case CASH DISCOUNT: 打八折(4)break;double GetResult(double money) (5);此处略去 main()函数试题六(共 15 分)阅读下列说明和Java 代码,将应填入 (n) 处的字句写在答题纸的对应栏内。【说明】某大型购物中心欲开发一套收银软件,要求其能够支持购物中心在不同时期推出的各种促销活动,如打折、返利(例如,满 300 返 1 00)等等。现采用策略( Strategy)模式实现该要求
16、,得到如图 6-1 所示的类图。【Java 代码】import java util*;enum TYPE NORMAL, CASH_DISCOUNT, CASH_RETURN;interface CashSuper Public (1) ;Class CashNormal implements CashSuper 正常收费子类Public double accptCash(double money) return money;class CashDiscount implements CashSuper private double moneyDiscoMt; /折扣率public CashD
17、iscount(double moneyDiscount) This.moneyDiscount = moneyDiscount;public double acceptCash(double money) Return money* moneyDiscount;class CashReturn implements CashSuper /满额返利private double moneyCondition;private double moneyRetum;public CashReturn(double moneyCondition, double moneyRetum) this.moneyCondition =moneyCondition; / 满额数额this.moneyReturn =moneyReturn; /返利数额public double acceptCash(double money) double result = money; if(money = moneyCondition )result =money -Math.floor(nioney/moneyCondition ) * moneyReturn; return result;classCashContext_pr