您的当前位置:首页正文

中级软件设计师下午试题-90

来源:个人技术集锦
中级软件设计师下午试题-90

(总分:90.00,做题时间:90分钟)

一、试题一(总题数:1,分数:15.00)

【说明】

(1)流程图描述某大型商店商品销售的数据处理流程。

(2)商店设有若干柜台,同一种商品可能在几个柜台上销售,各柜台每天提供一组日销售数据,其格式如下: 日期、柜台号、商品代码、销售数量、商品代码、销售数量……

(3)数据处理系统每日产生一份反映各柜台当日销售金额和商店日销售金额的“日销售金额报告”,必要时还产生一份“商品请购报告”,给出那些低于最低库存量的商品代码、商品名称、最低库存量和实际库存量。处理过程中产生存档的“日销售文件”和临时工作文件“日销售量文件”和“旧销售金额文件”。 (4)系统中所用到的数据均来自数据文件。

(5)流程图中的商品库存文件的记录已按关键字“商品代码”排序。

1.【问题1】

①指出商品库存文件的记录中必须包括哪些数据项?

②分别指出在日销售文件,日销售量文件和日销售金额文件的记录中至少应包括哪些数据项,同时不产生数据冗余?

③错误清单可能指出哪些错误?(分数:15.00)

__________________________________________________________________________________________ 正确答案:(①商品代码、商品名称、单价、最低库存数量、实际库存数量。 ②日销售文件:柜台号、商品代码、销售数量。 日销售量文件:商品代码、销售数量。 日销售金额文件:柜台号、销售金额。

③非法日期、非法商品代码、销售量为负数、销售量大于实际库存量;) 解析:

__________________________________________________________________________________________ 正确答案:(①更新商品库存文件中的实际库存量。 ②当实际库存量小于最低库存量时产生商品请购清单。) 解析:

__________________________________________________________________________________________ 正确答案:(在日销售文件中增加“单价”或“金额”。)

解析:[解析]本题描述的是商品销售的数据处理流程。首先要对说明和流程图进行快速扫读,然后结合问题,在说明和图中找到有关的范围,进行分析。

问题1中的第一个小问题是指出商品库存文件的记录中必须包括哪些数据项,首先,应该马上注意到说明中的第5项,应该包括“商品代码”。同时,注意第4项,所用到的数据均来自数据文件,这个条件将会直接影响后面的分析。

图中显示,商品库存文件在处理1、处理3、处理6使用到。流程图中很明显地显示出在处理1产生日销售文件后分为两个分支,即左边的分支处理日销售量和商品请购事务和右边的分支处理销售金额事务。 处理6生成商品请购清单,说明3中提到商品请购清单给出低于库存量的商品代码、商品名称、最低库存量和实际库存量。其所在分支只在处理1中使用到除库存文件之外的日销售数据,日销售数据和商品库存文件经过处理1生成日销售文件,所以,商品库存文件必须还包括;商品名称、最低库存量、实际库存量。 处理1生成的日销售文件还被右边分支使用,它和商品库存文件又被处理3使用生成日销售金额文件,销售金额:单价x销售量,销售数量由日销售数据提供,所以,商品单价应该由商品库存清单提供。 由此,得出商品库存清单必须包括的数据项。

问题1中的问题②在分析①时已经得到了一些线索,在进一步分析中得出,在同时要保证不能有数据项冗余的情况下,可以得出日销售金额必须包括柜台号、商品代码、销售数量;日销售量文件必须包括商品代码、销售数量;日销售金额必须包括柜台号、销售金额。

问题1的③,错误清单产生于处理1,这时还没有用到商品库存文件中的商品单价,所以不可能有关于金额的错误。可能有的错误是非法的商品代码、非法日期、销售数量为负、销售数量大于库存数量。 处理6根据日销售量文件和商品库存文件来更新商品库存文件,并在实际库存量小于最低库存量时产生商品请购清单。

删除虚框部分,就是在处理3处不使用商品库存文件,那么商品库存文件提供的数据项就要在日销售文件中提供,所以日销售文件中要提供“单价”,也可以提供“金额”,这样就免去计算处理。

二、试题二(总题数:1,分数:15.00)

【说明】

有如下关系数据库: S(SNO,SN,STATUS,CITY) P(PNO,PN,COLORS,WEIGHT) J(JNO,JN,CITY) SPJ(SNO,PNO,JNO,QTY)

其中,S为供应单位,P为零件,J为工程项目,SPJ为工程订购零件的订单,其语义为:某供应单位供应某种零件给某个工程,请用SQL完成下列操作。

1. 【问题1】

求为工程J1提供红色零件的供应商代号。(分数:15.00)

__________________________________________________________________________________________ 正确答案:(SELECT DISTICT SPJ.SNO FROM SPJ,P

WHERE P.PNO=SPJ.PNO AND SPJ.JNO='J1'AND P.COLOR='红') 解析:

__________________________________________________________________________________________ 正确答案:(SELECT DISTINCT SPJ.PNO FROM S,J,SPJ

WHERE S.SNO=SPJ.SNO AND J.JNO=SPJ.JNO AND S.CITY=J.CITY;) 解析:

__________________________________________________________________________________________ 正确答案:(SELECT DISTINCT SPJ.JNO

FROM ANDJ.JNO=SPJ.JNO AND S,CITY<>J.CITY)

解析:[解析]这道题比较简单直接,只是考查考生的基本SQL语句的掌握和使用。

三、试题三(总题数:1,分数:15.00)

【说明】

某教学管理系统的用户是教学管理人员、教师和学生。系统主要提供学生选课管理和学生成绩管理两方面的功能。

(1)学生选修课管理

主要功能是管理新学期开始时,学生对选修的课程进行选课注册工作。新学期开始后的前两周为学生试听、选课注册时间;允许校内各院系学生跨专业跨年级选修课程;学生可以在校园网的任何一个终端进行选课。 ①新学期选修课程表生成:各学院教学管理人员在新学期开始前,将准备开设的选修课程名称、课程代码、总课时、上课时间、学分、任课教师和上课教室录入系统,供学生选课使用。新学期开学两周后,系统自动将实际选课学生少于10人的课程停开,并删除该课程;教学管理人员打印学生选课注册名单和开课通知书,送交有关部门和任课教师。

②学生选课注册:新学期开学前两周为学生试听、选课注册时间,并允许改变或取消注册申请。学生调用待选课程表,系统显示课程名、课程代码、任课教师、上课时间、总课时、上课教室、学分和本课程已选修人数。学生所选几门课程在上课时间上不能冲突;若一门课程实际选课学生已达到40人时,停止选课。当学生退出系统时,系统提示该学生所选的几门课程、任课教师、上课时间、教室、学分和学分总计。 ③选修课程查询:选修课程表信息查询,用户是教师、学生和教学管理人员。系统显示课程名、课程代码、任课教师、上课时间、总课时、上课教室、学分和本课程已选修人数。查询关键词可为学院名称、专业、

授课教师等。

学生选课情况查询:教师和教学管理人员可以查看学生的选课情况。查询关键词可以为学生姓名(学号)、课程名称(课程代码)、授课教师等。学生只能查自己所选课程内容,不允许查其他同学选课情况。 教师简历查询:用户是学生、教师和教学管理人员。查询关键词可为教师姓名、性别、职称、年龄等单关键词或组合关键词。

④信息统计与报表生成:各学院教学管理人员对学生选课注册信息进行统计(按课程、专业等),打印汇总报表。

⑤把学生选课注册信息传送到财务管理系统,计算学生应交纳的费用。 (2)学生成绩管理

①学生考试成绩录入:各学院教学管理人员将学生考试成绩录入系统。录入学生成绩时,系统自动检查财务系统传来的选课交费信息,核对该学生是否已经交纳本门课程的费用,没有交纳费用者,不给成绩。 ②成绩查询:教师和教学管理人员可查询学生各门课程的成绩。查询关键词可为学生姓名(学号),课程名(课程代码)等。学生只能查自己各门课程的成绩,不允许查其他同学成绩。

③成绩汇总与报表生成:教学管理人员对学生考试成绩信息进行统计(按学生、课程、专业等),打印汇总报表。向学校教务管理系统发送汇总信息表格等,不反馈信息。 现在已建立教学管理最高层用例图,如下:

1.【问题1】

完成学生成绩管理子系统用例图。

(分数:15.00) (1).(分数:5.00)

__________________________________________________________________________________________ 正确答案:(1——教学管理员 2——教学管理系统 3——选修课管理 4——选修课查询 5——选修课注册 6——教师 7——学生) 解析:

__________________________________________________________________________________________ 正确答案:(在用例模型中,用例间的关系主要有4种,继承关联、扩展关联、包含关联和使用关联。下面分别说明。

· 继承关联。用例是一种类,类之间的继承和被继承关系在用例之间也存在。继承关联表示两个用例之间有继承关系。例如财务管理系统中的用例“超越权限”和“资金支出”就是继承关联,“资金支出”是父用例,“超越权限”是子用例,“超越权限”用例继承了“资金支出”用例的功能。

· 扩展关联。扩展关联与继承关联类似,通过向基本用例添加动作来扩展该用例。例如,教学管理系统中原先有一个用例“排课表”,现在增加一个“排新课表”,来扩展“排课表”的功能。

· 包含关联。它是一种依赖关系,一个基本用例的功能包含另一个用例的功能。例如,几个用例都有共同的功能,那么就可以把这个公共功能提出来,放到一个基本用例中,这样可以避免进行重复描述。 · 使用关联。也是一种继承关系,一个用例使用另一个用例的功能和行为。) 解析:

__________________________________________________________________________________________ 正确答案:(用例之间使用何种关联,可以如下考虑:

(1)一个用例偶尔使用另一个用例的功能描述时,采用继承关联。

(2)两个以上用例重复处理同样的功能,可以采用使用关联或包含关联。 用例要采用多种控制方式对异常或任选动作进行处理时,采用扩展关联。)

解析:[解析]首先,确定角色。主要角色是学生,其他的还有教师、教学管理员,由于选修课的情况要被各学院作为教学汇总信息上交学校教学管理系统,所以教学管理系统也是这个用例图中的一个角色,直接可以确认角色2是教学管理系统。角色7执行了教师建立查询,所以角色7是学生。学生角色还有两个用例,分别是选修课注册和选修课查询,所以用例5是选修课注册,用例4是选修课查询,进而角色6是教师,角色1是教学管理员, 用例3是选修课管理。

四、试题四(总题数:1,分数:15.00)

1.【说明】下面是一个用C编写的快速排序算法。为了避免最坏情况,取基准记录pivot时,采用从left、right和mid=[(left+right)/2]中取中间值,并交换到right位置的办法。数组a存放待排序的一组记录,数据类型为T,left和right是待排序子区间的最左端点和最右端点。 void quicksort (int a[], int left, int right) int temp; if (left<right)

hat pivot = median3 (a, left, right); //三者取中子程序 int i = left, j = right-1; for(;;)

while (i <j && a[i] < pivot) i++; while (i <j && pivot < a[j]) j--; if(i<j)

temp = a[i]; a[j] = a[i]; a[i] = temp; i++; j--;

else break;

if (a[i] > pivot)

temp = a[i]; a[i] = a[right]; a[right] = temp; quicksort( (1) ); //递归排序左子区间 quieksort(a,i+1 ,right); //递归排序右子区间

void median3 (int a[], int left, int right) int mid= (2) ; int k = left;

if(a[mid] < a[k])k = mid;

if(a[high] < a[k]) k = high; //选最小记录

int temp = a[k]; a[k] = a[left]; a[left] = temp; //最小者交换到 left if(a[mid] < a[right])

temp=a[mid]; a[mid]=a[right]; a[right]=temp;

消去第二个递归调用 quicksort (a,i+1,right)。 采用循环的办法: void quicksort (int a[], int left, int right) int temp; int i,j; (3)

int pivot = median3(a, left, right); //三者取中子程序 i = left; j = righi-1; for (;; )

while (i<j && a[i] < pivot)i++; while (i<j && pivot <a[j]) j--;

if(i <j)

temp = a[i]; a[j]; = a[i]; a[i]=temp; i++; j--;

else break;

if(a[i]>pivot) (4) ;a[i]=pivot; quicksoft ( (5) ); //递归排序左子区间 left = i+1;

(分数:15.00)

__________________________________________________________________________________________ 正确答案:([解析] (1)a,left,i-1

递归排序左子区间,从left到i-1元素,不包括i元素。 (2)(left+right+1)/2

三者取中子程序median3(a,left,right),取基准记录pivot时,采用从left、right和 mid=[(left+right)/2]中取中间值,并交换到right位置的办法。 (3)while(left<right) 循环直到left和right相遇。 (4)a[right)=a[i]

若a[i]>pivot则让a[right]=a[i]而让a[i]=pivot;。 (5)a,left, i-1

递归排序左子区间,从left到i-1元素,不包括i元素。) 解析:

五、试题五(总题数:1,分数:15.00)

2.【说明】本程序将两个从小到大的有序链表合成一个新的从小到大的有序链表。链表的每一项由类Node描述,而链表由类List描述。类List的成员函数有以下几个。 ①createList():创建从小到大的有序链表。

②multiplyList(List L1,List L2):将链表L1和链表L2合并。 ③print();打印链表。 # include <iostream.h> class List; class Node friend class List; public: Node(int data) (1) ; private: int data; Node *next; ;

class List public:

List( ) list = NULL;

void multiplyList(List L1, List L2);

void createList( ); void print( ); private: Node *list; ;

void List::createList( ) Node *p, *u, *pm; int data; list = NULL; while (1)

cout<<\"输入链表的一项: (小于零,结束链表)\"<<end1; cin >> data;

if(data<0)break; //小于零,结束输入 p = list;

while (p != NULL && data > p->data) //查找插入点 pre = p; p = p->next; u= (2) : if(p==list) list = u; else

pre->next = u; (3) :

void List::multiplyList (List L1, List L2) Node *pL1, *pL2, *pL, *u; list = NULL; pL1 = L1.list; pL2 = L2.1ist;

while (pL1 != NULL && pL2!= NULL)

if (pL1->data < pL2->data) u = new Node (pL1->data); pL1 = pL1 ->next; else

u = new Node (pL2->data)); pL2 = pL2->next;

if (list==NULL) list= (4) ; else

pL->next = u; pL =u;

pL1 = (pL1 != NULL) ? pL1:pL2; while (pL1 != NULL)

u = (5) ; pL1 = pL1->next; if (list==NULL) list=pL=u; else

pL->next = u; pL = u;

void List::print( ) Node *p; p = list; while (p != NULL)

cout << p->data << \"/t\"; p = p->next;

cout << end1;

void main ( ) List L1, L2, L;

cout << \"创建第一个链表/n\"; L1.createList ( ); cout << \"创建第二个链表/n\"; L2.createList ( ); L1.print ( ); L2.print ( ); L.multiplyList (L1, L2); L.print ( );

(分数:15.00)

__________________________________________________________________________________________ 正确答案:([解析]

(1)this->data=data,next=NULL

Node构造函数给成员data和next赋初值。 (2)new Node(data)

动态构造一个Node对象,赋初值为data。 (3)u->next=p

将p结点作为u的下一个结点,连在链表中。 (4)pL=u

若list为空,也就是新表为空,则让新表头指针pL指向u。 (5)new Node(pL1->data)

若pL1 !=NULL,则用表中结点的值pL1->data作为初值生成一个新的Node对象。) 解析:

六、试题六(总题数:1,分数:15.00)

3.【说明】本程序实现功能:读入两个整数,第1个数除以第2个数,声明当除数为零时抛出异常类DivideByZeroException。

public class DivideByZeroException (1) public DivideByZeroException ( ) super(\"Attcmpted to divide by zero\");

import java.io. *; public class Example

private static int quotient(int numerator, in)/”t denominator) throws DivideByZeroException if (denominator==0) throw (2) ;

return(numerator / denominator);

public static void main(String args[]) int number1=0, number2=0, result0; try

System.out.print1n(\"Enter the first number:\");

number1 = Integer. valueOf(Keyboard.getString()).intValue(); System.out.print1n(\"Enter the second number:\");

number2 = Integer. Va1ueOf(Keyboard.getString()).intValue(); result = quotient(number1,number2);

catch (NumberFormatException e)

System.out.print1n(\"Invalid integer entered!\"); System. exit(-1);

catch ( (3) )

System.out.print1n(e.to String()); System.exit(-1);

Systcm.out.pfint1n(number1 + \"/\" + number2 + \"=\" + result);

其中, Keyboard类的声明为: import java.io.*; public class Keyboard

static BufferedReader inputStream = (4) (new InputStreamReader(System.in)); public static int getInteger() try(

return (Intoger.valueOf(inputStream.readLine().trim()).intValue()); catch (Exception e) e.printStackTrace(); return 0;

public static String getString() try

return (inputStream.readLine()); catch ( (5) ) return \"0\";

(分数:15.00)

__________________________________________________________________________________________ 正确答案:([解析]

(1)extends ArithmeticException

DivideByZeroException类从ArithmeticException类扩展而来。 (2)new DivideByZeroExeeption()

throw一个DivideByZeroException异常函数,打印错误信息。 (3)DivideByZeroException e

捕捉DivideByZeroExeeption异常信息。 (4)new BufferedReader

动态生成一个BufferedReader对象用于输入。 (5)IOException e

字符串成员函数getString中捕捉输入输出异常信息。) 解析:

因篇幅问题不能全部显示,请点此查看更多更全内容