1、中级软件设计师下午试题-47 及答案解析(总分:84.00,做题时间:90 分钟)一、试题一(总题数:1,分数:9.00)【说明】下面给出的是某高级公寓管理系统的一套分层数据流图。其功能描述如下所述。(1)系统随时根据住户送来的入住单更新住户基本信息文件。(2)每月初系统根据物业管理委员会提供的月附加费(清洁费、保安费等)表和房租调整表,计算每家住户的月租费(包括月附加费),向住户发出交费通知单。住户交费时,系统输入交费凭证,核对后输出数据给住户。(3)系统定期向物业管理委员会提供住房分配表和交费情况表。(4)住户因分户或换房,在更新账户基本信息文件的同时,系统应立即对这些住户做月租费计算,以
2、了结分尸或换房前的房租。假定题中提供的顶层图是正确的,请回答下列问题。(分数:9.00)(1).【问题 1】指出哪张图中的哪些文件可不必画出。(分数:3.00)_(2).【问题 2】指出在哪些图中遗漏了哪些数据流,回答时请用如下形式之一:XX 图中遗漏了 XX 加工(或文件)流向 XX 加工(或文件)的 XX 数据流。XX 加工 XX 遗漏了输入(或输出)数据流 XX。(分数:3.00)_(3).【问题 3】指出加工图 2 子图中加工 2.3 能检查出哪些不合格交费凭证。(分数:3.00)_二、试题二(总题数:1,分数:15.00)【说明】关于一位花商有以下一些事实。(1)销售在不同地区生长的
3、花,这些地区一年的量低温度在一定范围内变化。(2)想用编号来表示发货类型。(3)要出售某些类型的花。假定已经通过 SQL 语句建立了基本表:CREATE TABLE Zone(ID Char(2) PRIMARY KEY,LowerTemp Number (3),UpperTemp Number (3);CREATE TABLE Delivery(ID char(2)PRIMARY KEY,Category VarChar (5),DelSize Number (5,3):CREATE TABLE FlowerInfo(ID Char(3) CONSTRAINTFlowerinfo_ id _
4、 pk PRIMARY KEY,ComName VarChar (25),LatName VarChar (30),Czone Number (3),Hzone Number (3),Delivered Number (3),SunNeed Char (3),PRIMARY KEY (ID):地区(ID,最高温度,最低温度)发货(ID,发货类型,发货规格)花的信息(ID,普通名,拉丁名,花能够生长的最冷地区,花能够生长的最热地区,发货类型,日光需求)(分数:15.00)(1).【问题 1】写出语句,将(ID=1,Category=pot,DelSize=1.5)的数据插入 DELIVERY 表
5、中。(分数:5.00)_(2).【问题 2】写出实现语句:查询以花瓶(pot)形式发货的所有鲜花的 ID,普通名以及花瓶的规格。得到结果表按普通名的字母逆序打印。(分数:5.00)_(3).【问题 3】(1)把对表 ZONE 的 INSERT 权限授予用户 Smith,并允许他再将此权限授予其他人。(2)收回已经授予 Tom 的对 FlowerInfo 中属性 ComName 的修改权限。(3)建立视图 viewpot,表现问题 2 的功能。(分数:5.00)_三、试题三(总题数:1,分数:15.00)【说明】某教学管理系统的用户是教学管理人员、教师和学生。系统主要提供学生选课管理和学生成绩管
6、理两方面的功能。(1)学生选修课管理主要功能是管理新学期开始时,学生对选修的课程进行选课注册工作。新学期开始后的前两周为学生试听、选课注册时间;允许校内各院系学生跨专业跨年级选修课程;学生可以在校园网的任何一个终端进行选课。新学期选修课程表生成:各学院教学管理人员在新学期开始前,将准备开设的选修课程名称、课程代码、总课时、上课时间、学分、任课教师和上课教室录入系统,供学生选课使用。新学期开学两周后,系统自动将实际选课学生少于 10 人的课程停开,并删除该课程;教学管理人员打印学生选课注册名单和开课通知书,送交有关部门和任课教师。学生选课注册:新学期开学前两周为学生试听、选课注册时间,并允许改变
7、或取消注册申请。学生调用待选课程表,系统显示课程名、课程代码、任课教师、上课时间、总课时、上课教室、学分和本课程己选修人数。学生所选几门课程在上课时间上不能冲突:若一门课程实际选课学生已达到 40 人时,停止选课。当学生退出系统时,系统提示该学生所选的几门课程、任课教师、上课时间、教室、学分和学分总计。选修课程查询:选修课程表信息查询,用户是教师、学生和教学管理人员。系统显示课程名、课程代码、任课教师、上课时间、总课时、上课教室、学分和本课程已选修人数。查询关键词可为学院名称、专业、授课教师等。学生选课情况查询:教师和教学管理人员可以查看学生的选课情况。查询关键词可以为学生姓名(学号)、课程名
8、称(课程代码)、授课教师等。学生只能查自己所选课程内容,不允许查其他同学选课情况。教师简历查询:用户是学生、教师和教学管理人员。查询关键词可为教师姓名、性别、职称、年龄等单关键词或组合关键词。信息统计与报表生成:各学院教学管理人员对学生选课注册信息进行统计(按课程、专业等),打印汇总报表。把学生选课注册信息传送到财务管理系统,计算学生应交纳的费用。(2)学生成绩管理学生考试成绩录入:各学院教学管理人员将学生考试成绩录入系统。录入学生成绩时,系统自动检查财务系统传来的选课交费信息,核对该学生是否已经交纳本门课程的费用,没有交纳费用者,不给成绩。成绩查询;教师和教学管理人员可查询学生各门课程的成绩
9、。查询关键词可为学生姓名(学号),课程名(课程代码)等。学生只能查自己各门课程的成绩,不允许查其他同学成绩。成绩汇总与报表生成:教学管理人员对学生考试成绩信息进行统计(按学生、课程、专业等),打印汇总报表。向学校教务管理系统发送汇总信息表格等,不反馈信息。(分数:15.00)(1).【问题 1】完成下面的教学管理系统最高层用例图。(分数:7.50)_(2).【问题 2】说明用例模型的功能,用例图的主要组成部分,用例建模的步骤。(分数:7.50)_四、试题四(总题数:1,分数:15.00)1.【说明】设某城市有 n 个车站,并有 m 条公交线路连接这些车站,设这些公交车都是单向的,这 n 个车站
10、被顺序编号为 0 至 n-1。本程序,输入该城市的公交线路数、车站个数,以及各公交线路上的各站编号,求得从站 0 出发乘公交车至站 n-1 的最少换车次数。程序利用输入信息构建一张有向图 G(用邻接矩阵 g 表示),有向图的顶点是车站,若有某条公交线路经 i站到达 j 站,就在顶点 i 到顶点 j 之间设置一条权为 1 的有向边i,j。如果这样,从站点 x 至站点 y的最少上车次数便对应图 G 中从点 x 到点 y 的最短路径长度。而程序要求的换车次数就是上车次数减 1。#include stdio.h#define M 20#define N 50int aN+1; /*用于存放一条线路上的
11、各站编号*/int gNN; /*严存储对应的邻接矩阵*/int distN; /*严存储站 0 到各站的最短路径*/int m, n;void buildG()int i, j, k, sc, ddprintf(“输入公交线路数,公交站数/n”);scanf(“%d%d“,/记录源点序号,序号数组 p 及 distance 下标相一致。源点为初始扩展顶点EdgeType length;/记录源点到本顶点的当前最短路径的长度,源点到自身的长度为 0templateclass VertexType,classEdgeTypevoid GraphVertexType,EdgeType: short
12、estpath(VertexType start) int j,k,source;/source 记录源点的序号。EdgeType*distance= (2) ;int*p=new intMaxNumVertex;vectorMinNodeVertexType,EdgeType H;for(source=0;sourceMaxNumVertex;source+)if(NodeListsource=start)break;if (source=MaxNumVertex)cout”This is error!”end1;return;MinNodeVertexType,Edge Type (3)
13、;for(k=0;kMaxNumVertex;k+)distancek:MAXXUM; /记录源点到本顶点 k 的最终的最短路径的长度pk=source; /记录最短路径上的本顶点的直接前驱顶点的序号distancesource=0;psource=-1;/m 是源点,前一顶点不存在vectorMinNodeVertexType, EdgeType:iterator q;while(1)for(j=0;jMaxNumVertex;j+)if(AdjMatrixE.VexNum* MaxNumVertex+jMAXNUM)/记录源点序号,序号数组 p 及 distance 下标相一致。源点为初始
14、扩展顶点EdgeType length;/记录源点到本顶点的当前最短路径的长度,源点到自身的长度为 0templateclass VertexType,classEdgeTypevoid GraphVertexType,EdgeType: shortestpath(VertexType start) int j,k,source;/source 记录源点的序号。EdgeType*distance= (2) ;int*p=new intMaxNumVertex;vectorMinNodeVertexType,EdgeType H;for(source=0;sourceMaxNumVertex;s
15、ource+)if(NodeListsource=start)break;if (source=MaxNumVertex)cout”This is error!”end1;return;MinNodeVertexType,Edge Type (3) ;for(k=0;kMaxNumVertex;k+)distancek:MAXXUM; /记录源点到本顶点 k 的最终的最短路径的长度pk=source; /记录最短路径上的本顶点的直接前驱顶点的序号distancesource=0;psource=-1;/m 是源点,前一顶点不存在vectorMinNodeVertexType, EdgeType
16、:iterator q;while(1)for(j=0;jMaxNumVertex;j+)if(AdjMatrixE.VexNum* MaxNumVertex+jMAXNUM)&( (4) distancej)distancej=E.length+AdjMatrixE.VexNum* MaxNumVertex+j;pj=E. VexNum; /记录顶点 j 的前一顶点MinNodeVertexType, EdgeType (5) ;Hpush_ back(N);push_heap(H. begin(),H.end(),greaterMinNodeVertexType,EdgeType();if
17、(H.empty()true)break; /若优先队列为空,那么算法结束elsepop_ heap(H.begin(),H. end(),greaterMinNodeVertexType,EdgeType();q=H.end()-1; /从最小化堆中取路径最短的顶点E=*q;H.pop_ back(); /删除从最小化堆中“挤”出的顶点/end whilefor(k=0;kMaxNumVertex;k+)cout“Shorstest path from vertex“k“is“distancekend1;j=k;cout“All vertices are:“;while(j!=source)
18、coutj“-“;j=pj;coutsource”.”end1;/打印顶点的最短路径长度和至源点的最短路径上经过的顶点序列return;(分数:15.00)_正确答案:(解析(1)this-length 或(*this).length操作符,的成员函数,比较两个对象的最短路径的长度 length,大于则返回真(1)。(2)new EdgeTypeMaxNumVertex动态申请 EdgeType 类的对象数组 distance,长度为 MaxNumVertex,存放最短路径的长度。(3)E(source,0)定义最小化堆模板类 MinNodeVertexType, EdgeType的对象 E(
19、source,0)。(4)E.length+ AdjMatrix E. VcxNum* MaxNumVertex+j若 E.length+ AdjMatrix E.VexNum*MaxNumVertex+j小于 distancej,则 distancej取这个更小值。(5)N(j,distancej)定义最小化堆模板类 MinNodeVertexType,EdgeType的对象 N(j,distancej)。)解析:六、试题六(总题数:1,分数:15.00)3.【说明】清点盒子。本程序当用户输入一个整数值时,一切正常;当输入其他数值时,程序就出错。现在已做了改进,请填空。import java
20、. text. NumberFormat;Public class InventoryLooppublic static void main(String args)String numBoxesIn;Int numBoxes;Double boxPrice=3.25;Boolean gotGoodInput=false;NumberFormat currency=NumberFormat. (1) ;doSystem.out. print(“How many boxes do we have?”);numBoxesIn=DummiesIO. (2) ;trynumBoxes=Integer.
21、parseInt( (3) );system. out. print(“The value is“);system.out. println(currency, format (numBoxes*boxPrice);gotGoodInput=true;catch( (4) )System.out.println();System.out. println(Thats not a number.“);while( (5) );/输入不正确时System. out.println(“Thats that.“);(分数:15.00)_正确答案:(解析(1)getCurrencyInstance()或 getCurrencyInstance(currentLocale)货币 currency 对象指向格式化数据 NumberFormat 类的货币数字格式 getCurrencyInstance()。(2)getString()读入货币数字的字符串到 NumBoxesIn 中。(3)numBoxesIn分析字符串 NumBoxesIn 的合法性,并转换成整数。(4)NegativeNumberException e捕捉数据格式错误的信息 NegativeNumberException e。(5)!gotGoodInput输入不正确时,继续循环输入。)解析: