1、中级软件设计师下午试题-110 及答案解析(总分:34.00,做题时间:90 分钟)一、试题一(总题数:1,分数:15.00)阅读以下说明和数据流图,根据要求回答下列问题。说明现准备为某银行开发一个信用卡管理系统 CCMS,该系统的基本功能如下。1信用卡申请。非信用卡客户填写信用卡申请表,说明所要申请的信用卡类型及申请者的基本信息,提交 CCMS。如果信用卡申请被银行接受,CCMS 将记录该客户的基本信息,并发送确认函给该客户,告知客户信用卡的有效期及信贷限额;否则该客户将会收到一封拒绝函。非信用卡客户收到确认函后成为信用卡客户。2信用卡激活。信用卡客户向 CCMS 提交激活请求,用信用卡号和
2、密码激活该信用卡。激活操作结束后,CCMS 将激活通知发送给客户,告知客户其信用卡是否被成功激活。3信用卡客户信息管理。信用卡客户的个人信息可以在 CCMS 中进行在线管理。每位信用卡客户可以在线查询和修改个人信息。4交易信息查询。信用卡客户使用信用卡进行的每一笔交易都会记录在 CCMS 中。信用卡客户可以通过CCMS 查询并核实其交易信息(包括信用卡交易记录及交易额)。图 1 和图 2 分别给出了该系统的顶层数据流图和 0 层数据流图的初稿。图 1图 2(分数:15.00)(1).问题 1根据说明,将图 1 中的 E1E3 填充完整。(分数:3.75)_(2).问题 2图 1 中缺少 3 条
3、数据流,根据说明,分别指出这 3 条数据流的起点和终点。(注:数据流的起点和终点均采用图中的符号和描述。)(分数:3.75)_(3).问题 3图 2 中有两条数据流是错误的,请指出这两条数据流的名称,并改正。(注:数据流的起点和终点均采用图中的符号和描述。)(分数:3.75)_(4).问题 4根据说明,将图 2 中 P1P4 的处理名称填充完整。(分数:3.75)_二、试题二(总题数:1,分数:5.00)1.【说明】学校中有若干系,每个系有若干班级和教研室,每个教研室有若干教员,其中有的教授和副教授各带有若干研究生;每个班有若干学生,每个学生选修若干课程,每门课可由若干学生选修。【问题 1】用
4、 E-R 图画出此学校的概念模型,用文字写出各实体和联系的属性。【问题 2】将 E-R 图转换成关系模型。【问题 3】指出各关系模型的候选键。(分数:5.00)_三、试题三(总题数:1,分数:-1.00)2.【程序说明】定义一个多边形结构:struct polygon 实现以下内容:(1)建立该结构的链表:create 函数是创建链表,每输入一个结点的数据,就把该结点加入到链表当中,它返回创建的链表的头指针。(2)显示链表的各个结点数据:结点数据包括:多边形顶点数、各顶点的纵横坐标、当多边形顶点数为 0 时,链表创建结束。(3)编写一个函数 disp,删除链表中的所有结点。需要注意的是:要先释
5、放结点数据内存,再删除结点,如果在释放结点数据内存单元之前删除结点,则无法找到结点数据内存单元的地址,也就无法释放数据的内存单元。【程序】#include “iomanip.h“struct polygonint n;int* x;int *y;polygon * next;void Push(polygon * & head,int n)polygon * newNOde=newpolygon;newNOde=newpo,Ygon;newNOde-next= (1) ;newNOde-x=new int n;newNOde-y=new intn;newNOde-n= (2) ;for(int
6、 i=0;i= (3) ;i+)cout“请输入多边形各顶点 x、y 坐标,坐标值之间用空格分隔:”;cinnewNOde-xinewNOde-yi;(4) head; /在 head 前不需要额外的。headnewNOde;polygon * create()polygon * head=NULL;polygon * tail;int n;cout“请输入多边形顶点的个数(顶点个数为 0 时结束):”;cinn;if(n=0)return (5) ;Push(head, (6) ;tail=head;cout“请输入多边形顶点的个数(顶点个数为 0 时结束):”;cinn;while(n!=
7、0)Push(tail-next, (7) ; /在 tail-next 增加结点tail tail-next; /advance tail to point to last nodecout“请输入多边形顶点的个数(顶点个数为 0 时结束):”;cinn;return head;void disp(polygon * head)int i,No=1;coutsetw(10)“x“ setw(6)“y“end1;while(head!=NULL)cout“第” No“结点:” end1;for(i=0;i=head-n-1;i+)coutsetw(10)head- xisetw(6)head-
8、 yiendl;(8) ;head= (9) ;/Match while statementvoid del(polygon * head)polygon * p;while(head!=NULL)p= (10) ;head=head-next;delete p-x;delete P-y;deletep;/Match while statementvoid main()polygon * head;head=create();disp(head);del(head);(分数:-1.00)_四、试题四(总题数:1,分数:15.00)3.阅读下列说明和 C+代码,回答下列问题。说明某咖啡店卖咖啡时
9、,可以根据顾客的要求在其中加入各种配料,咖啡店会根据所加入的配料来计算费用。咖啡店所供应的咖啡及配料的种类和价格如表所示。咖啡及配料的种类和价格咖啡 价格/杯(¥) 配料 价格/份(¥)蒸馏咖啡(Espresso) 25 摩卡(Mocha) 10深度烘焙咖啡(DarkRoast) 20 奶泡(Whip) 8(分数:15.00)_中级软件设计师下午试题-110 答案解析(总分:34.00,做题时间:90 分钟)一、试题一(总题数:1,分数:15.00)阅读以下说明和数据流图,根据要求回答下列问题。说明现准备为某银行开发一个信用卡管理系统 CCMS,该系统的基本功能如下。1信用卡申请。非信用卡客户
10、填写信用卡申请表,说明所要申请的信用卡类型及申请者的基本信息,提交 CCMS。如果信用卡申请被银行接受,CCMS 将记录该客户的基本信息,并发送确认函给该客户,告知客户信用卡的有效期及信贷限额;否则该客户将会收到一封拒绝函。非信用卡客户收到确认函后成为信用卡客户。2信用卡激活。信用卡客户向 CCMS 提交激活请求,用信用卡号和密码激活该信用卡。激活操作结束后,CCMS 将激活通知发送给客户,告知客户其信用卡是否被成功激活。3信用卡客户信息管理。信用卡客户的个人信息可以在 CCMS 中进行在线管理。每位信用卡客户可以在线查询和修改个人信息。4交易信息查询。信用卡客户使用信用卡进行的每一笔交易都会
11、记录在 CCMS 中。信用卡客户可以通过CCMS 查询并核实其交易信息(包括信用卡交易记录及交易额)。图 1 和图 2 分别给出了该系统的顶层数据流图和 0 层数据流图的初稿。图 1图 2(分数:15.00)(1).问题 1根据说明,将图 1 中的 E1E3 填充完整。(分数:3.75)_正确答案:(E1:非信用卡客户 E2:信用卡客户E3:银行)解析:由题干关键信息“1信用卡申请。非信用卡客户填写信用卡申请表CCMS 将记录该客户的基本信息,并发送确认函给该客户否则该客户将会收到一封拒绝函”,以及图 1 中数据流“确认函”、“拒绝函”等信息可知,外部实体 E1 的名称是“非信用卡客户”。由题
12、干关键信息“2信用卡客户向 CCMS 提交激活请求CCMS 将激活通知发送给客户”和图 1 中数据流“激活通知”,题干信息“3每位信用卡客户可以在线查询和修改个人信息”和图 1 中数据流“查询/修改个人信息”、“个人信息”,题干信息“4信用卡客户可以通过 CCMS 查询并核实其交易信息”和图 8-15 中数据流“交易记录查询请求”可知,外部实体 E2 的名称是“信用卡客户”。由题干说明中“1信用卡申请。如果信用卡申请被银行接受”、图 1 中数据流“信用卡申请信息”、“信用卡申请验证结果”和常识等关键信息可知,外部实体 E3 的名称是“银行”。(2).问题 2图 1 中缺少 3 条数据流,根据说
13、明,分别指出这 3 条数据流的起点和终点。(注:数据流的起点和终点均采用图中的符号和描述。)(分数:3.75)_正确答案:(起点 终点 名称E1 P0 信用卡申请表E2 P0 激活请求P0 或信用卡管理系统 CCMS E2 信用卡交易信息)解析:将问题 1的分析结果填写到图 1 中,由题干关键信息“1非信用卡客户填写信用卡申请表提交 CCMS”,图 1 中数据流“确认函”、“拒绝函”及其流向等综合信息可知,外部实体 E1“非信用卡客户”有一条输出数据流“信用卡申请表”,流向加工 P0“信用卡管理系统 CCMS”。换而言之,图 1 中缺少了 1 条名称为“信用卡申请表”的数据流,其起点是 E1,
14、终点为 P0。同理,由题干关键信息“2信用卡激活。信用卡客户向 CCMS 提交激活请求”和图 1 中数据流“激活通知”及其流向等综合信息可知,外部实体 E2“信用卡客户”有一条输出数据流“激活请求”,流向加工 P0“信用卡管理系统 CCMS”。换而言之,图 1 中缺少了一条名称为“激活请求”的数据流,其起点是E2,终点为 P0。由题干关键信息“4交易信息查询信用卡客户可以通过 CCMS 查询并核实其交易信息”、图 1 中数据流“交易记录查询请求”及其流向和生活常识等综合信息可知,加工 P0“信用卡管理系统 CCMS”有一条输出数据流“信用卡交易信息”,流向外部实体 E2“信用卡客户”。换而言之
15、,图 1 中缺少了一条名称为“信用卡交易信息”的数据流,其起点是 P0,终点为 E2。(3).问题 3图 2 中有两条数据流是错误的,请指出这两条数据流的名称,并改正。(注:数据流的起点和终点均采用图中的符号和描述。)(分数:3.75)_正确答案:(错误的数据流名称:激活请求和信用卡申请表改正后的数据流:数据流名称 改正后数据流起点 改正后数据流终点激活请求 E2 P3信用卡申请表 E1 P4)解析:将问题 1和问题 2的分析结果填写到图 1 中。题干说明中“信用卡申请”、“信用卡激活”、“信用卡客户信息管理”和“交易信息查询”是典型的加工名称。根据数据流图父图与子图数据平衡原则,对照图 2
16、和信息填充后的图 1 可以直观地发现,图 2 中存在的一条错误数据流是“信用卡申请表”。数据流“信用卡申请表”在图 1 中是从外部实体 E1 流向 CCMS 系统,而在图 8-16 中是从加工 P4 流向外部实体E1,应以予更正。根据题干说明中“1信用卡申请”描述信息,结合图 2 中与加工 P4 相关的“信用卡申请表”、“信用卡申请信息”、“信用卡申请验证结果”等关键数据流信息可得,加工 P4 的名称是“信用卡申请”。图 2中数据流“信用卡申请表”的起点应改正为 E1,终点应修改为 P4。同理,在图 1 中数据流“激活请求”从外部实体 E2 流向 CCMS 系统,而在图 2 中是从加工 P4
17、流向加工P3,应以予更正。根据题干说明中“2信用卡激活”描述信息,结合图 2 中加工 P3 的输出数据流“激活通知”等信息可得,加工 P3 的名称是“信用卡激活”。图 2 中数据流“激活请求”的起点应改正为 E2,终点应修改为 P3。(4).问题 4根据说明,将图 2 中 P1P4 的处理名称填充完整。(分数:3.75)_正确答案:(P1:交易信息查询 P2:(信用卡)客户信息管理P3:信用卡激活 P4:信用卡申请)解析:根据题干说明中“3信用卡客户信息管理”描述信息,结合图 2 中与加工 P2 相关的“查询/修改个人信息”、“个人信息”等关键数据流信息可得,加工 P2 的名称是“信用卡客户信
18、息管理”。根据题干说明中“4交易信息查询”描述信息,结合图 2 中与加工 P1 相关的“交易记录查询请求”、“交易信息”等关键数据流信息可得,加工 P1 的名称是“交易信息查询”。根据问题 3的分析结果可知,加工 P3 的名称是“信用卡激活”,加工 P4 的名称是“信用卡申请”。二、试题二(总题数:1,分数:5.00)1.【说明】学校中有若干系,每个系有若干班级和教研室,每个教研室有若干教员,其中有的教授和副教授各带有若干研究生;每个班有若干学生,每个学生选修若干课程,每门课可由若干学生选修。【问题 1】用 E-R 图画出此学校的概念模型,用文字写出各实体和联系的属性。【问题 2】将 E-R
19、图转换成关系模型。【问题 3】指出各关系模型的候选键。(分数:5.00)_正确答案:(【问题 1】用 E-R 图表示的概念模型如下所示。)解析:解析 在画 E-R 图时,可以按照对问题的描述一步一步画出每一句话中涉及的实体,再根据给出的实际语义,画出实体之间的联系。例如,每个教研室有若干教员,每个班有若干学生,可以画出教研室和教员、班级和学生之间一对多的联系。再比如,有的教授和副教授每人各带若干研究生,而一个研究生一般指定一个导师,这是通常的规则,所以可以画出教员和学生之间一对多的关系。按照上述的分析方法,从题的说明中,可以得到如下实体和联系。实体:学校、系、教研室、班级、教员、学生、课程。联
20、系:校系、系室、系班、室教、班生、指导、选修。具体说明:实体“学校”和实体“系”是“一对多”的“校系”联系。实体“系”和实体“班级”是“一对多”的“系班”联系。实体“系”和实体“教研室”是“一对多”的“系室”联系。实体“班级”和实体“学生”是“一对多”的“班生”联系。实体“教研室”和实体“教员”是“一对多”的“室教”联系。实体“学生”和实体“课程”是“多对多”的“选修”联系。实体“教员”和实体“学生”是“一对多”的“指导”联系。三、试题三(总题数:1,分数:-1.00)2.【程序说明】定义一个多边形结构:struct polygon 实现以下内容:(1)建立该结构的链表:create 函数是创
21、建链表,每输入一个结点的数据,就把该结点加入到链表当中,它返回创建的链表的头指针。(2)显示链表的各个结点数据:结点数据包括:多边形顶点数、各顶点的纵横坐标、当多边形顶点数为 0 时,链表创建结束。(3)编写一个函数 disp,删除链表中的所有结点。需要注意的是:要先释放结点数据内存,再删除结点,如果在释放结点数据内存单元之前删除结点,则无法找到结点数据内存单元的地址,也就无法释放数据的内存单元。【程序】#include “iomanip.h“struct polygonint n;int* x;int *y;polygon * next;void Push(polygon * & head,
22、int n)polygon * newNOde=newpolygon;newNOde=newpo,Ygon;newNOde-next= (1) ;newNOde-x=new int n;newNOde-y=new intn;newNOde-n= (2) ;for(int i=0;i= (3) ;i+)cout“请输入多边形各顶点 x、y 坐标,坐标值之间用空格分隔:”;cinnewNOde-xinewNOde-yi;(4) head; /在 head 前不需要额外的。headnewNOde;polygon * create()polygon * head=NULL;polygon * tail
23、;int n;cout“请输入多边形顶点的个数(顶点个数为 0 时结束):”;cinn;if(n=0)return (5) ;Push(head, (6) ;tail=head;cout“请输入多边形顶点的个数(顶点个数为 0 时结束):”;cinn;while(n!=0)Push(tail-next, (7) ; /在 tail-next 增加结点tail tail-next; /advance tail to point to last nodecout“请输入多边形顶点的个数(顶点个数为 0 时结束):”;cinn;return head;void disp(polygon * head
24、)int i,No=1;coutsetw(10)“x“ setw(6)“y“end1;while(head!=NULL)cout“第” No“结点:” end1;for(i=0;i=head-n-1;i+)coutsetw(10)head- xisetw(6)head- yiendl;(8) ;head= (9) ;/Match while statementvoid del(polygon * head)polygon * p;while(head!=NULL)p= (10) ;head=head-next;delete p-x;delete P-y;deletep;/Match while
25、 statementvoid main()polygon * head;head=create();disp(head);del(head);(分数:-1.00)_正确答案:(NULL (2)n (3)n-1 (4)newNode-next(5)head (6)n (7)n (8)No+ (9)head-next(10)head)解析:解析 如果掌握了链表的创建、遍历和删除的方法,解决本题应该并不困难。要显示链表各结点的数据,就是要把各结点找到,然后把该结点的每一个 x、y 坐标打印出来。不过,与普通的链表也有不同的地方:就是该链表的结点数据是指针。要在链表结点中存入数据,必须先动态分配存储数
26、据的内存单元;要删除链表中的各个结点,必须先释放结点数据的内存单元,否则会造成内存泄露。四、试题四(总题数:1,分数:15.00)3.阅读下列说明和 C+代码,回答下列问题。说明某咖啡店卖咖啡时,可以根据顾客的要求在其中加入各种配料,咖啡店会根据所加入的配料来计算费用。咖啡店所供应的咖啡及配料的种类和价格如表所示。咖啡及配料的种类和价格咖啡价格/杯(¥)配料价格/份(¥)蒸馏咖啡(Espresso)25摩卡(Mocha)10深度烘焙咖啡(Da20奶泡(Whip)8rkRoast)(分数:15.00)_正确答案:(protectedvirtual string getDescriptionvirtual int cost()=0Beverage* beveragebeveragebeverage)解析: