问答题【说明】
以下程序实现数据的排序,将n个整数分别按照升序和降序进行排序,类SortInt_1实现升序排序,类SortInt_2实现降序排序。
【Java代码】
class SortInt_1{
int i,i,k,temp;
void SortInt(int a1,int a2[]){//升序排序
for(i=0;i<a1-1;i++){
k=i;
for(j=i+1;j<a1;j++){
if({{U}} (1) {{/U}}) k=j;
if(k !=i){
temp=a2[i];a2[i]=a2[k];a2[k]=temp;
}
}
}
}
}
class SortInt_2{{U}} (2) {{/U}}{
int i,j,k,temp;
void SortInt(int a1, int a2[]){//降序排序
for(i=0; i<a1-1;i++){
k=i;
for(j=i+1;j<a1;j++){
if({{U}} (3) {{/U}})k=j;
}
if(k !=i){
temp=a2[i];a2[i]=a2[k];a2[k]=temp;
}
}
}
}
public class test{
public static void main(String args[]){
int a[]={10,55,100,35,87,90,100,16};
SortInt_1 NewInt={{U}} (4) {{/U}};
NewInt.SortInt(a.lenvh,a);//调用SortInt_1类的方法
System.out.println("升序排列的数据: ");
for(int i=0;i<a.length;i++){
System.out.print(a[i]+" ");
}
System.out.println();
NewInt=new SortInt_2();//创建类SortInt_2的对象
{{U}} (5) {{/U}};//调用相应方法进行降序排序
System.out.println("降序排列的数据: ");
for(int i=0;i<a.length;i++){
System.out.print(a[i]+" ");
}
}
}
问答题试题六(共15分)阅读下列说明和Java代码,将应填入____(n)____处的字句写在答题纸的对应栏内。[说明]某实验室欲建立一个实验室环境监测系统,能够显示实验室的温度、湿度以及洁净度等环境数据。当获取到最新的环境测量数据时,显示的环境数据能够更新。现在采用观察者(Observer)模式来开发该系统。观察者模式的类图如图6-1所示。[java代码]
问答题[问题3](4分)
如果系统还需要记录医生给病人的用药情况,即记录医生给病人所开处方中药品的名称、用量、价格、药品的生产厂家等信息。请根据该要求,对图2-1进行修改,画出补充后的实体、实体间联系和联系的类型。
问答题[说明]某学校的教学系统描述如下:学生信息包括:学号(Sno)、姓名(Sname)、性别(Ssex)、年龄(Sage)、入学年份(Syear)、主修专业(Smajor),其中学号是入学时唯一编定的。教师信息包括:教工号(Tno)、姓名(Tname)、性别(Tsex)、年龄(Tage)、职称(Title),其中教工号是唯一编定的。课程信息包括:课程号(Cno)、课程名称(Cname)、学时(Cpeiiod)、学分(Ccredit),其中课程号是唯一编定的。每个专业每个年级只有一个班级,这样班级就可用入学年份标识。每位教师只教授特定的一门的课程,每门课程可以有多个教师教授,各位老师的上课地点及上课时间有所不同。注意:一门课程至少有一位教师教授,否则这门课程就视为不存在。每位学生可以同时选修多门不同的课程,一门课程至少要有10位学生选修,否则就取消这门课程的开设。注意:选修课程时要指定任课教师,不能重复选修同一门课程。课程结束后,任课教师给选修该课程的学生一个成绩(Grade)。注意:教师不能给没有选修他所教授课程的学生成绩,即使选修了其他教师教授的同一门课也不行。图2-1是经分析得到的E-R图。[图2-1]1.根据题意,给出联系的属性。实体间的联系有“一对一”、“一对多”和“多对多”,指出各联系分别属于哪一种。
问答题【说明】 下面的程序先构造Point类,再顺序构造Ball类。由于在类Ball中不能直接存取类Point中的xCoordinate及yCoordinate属性值,Ball中的toString方法调用Point类中的toStrinS方法输出中心点的值。在MovingBsll类的toString方法中,super.toString调用父类Ball的toString方法输出类Ball中声明的属性值。 【Java代码】 //Point.java文件 public class Point private double xCoordinate; private double yCoordinate; public Point() public Point(double x,double y) xCoordinate=x; yCoordinate=y; public String toStrthg() return"("+Double.toString(xCoordinate)+"," +Double.toString(yCoordinate)+")"; //other methods //Ball.java文件 public class Ball private (1) ;//中心点 private double radius;//半径 private String color;//颜色 public Ball() public Ball(double xValue, double yValue, double r) //具有中心点及其半径的构造方法 center= (2) ;//调用类Point中的构造方法 radius=r; public Ball(double xValue, double yValue, double r, String c) //具有中心点、半径和颜色的构造方法 (3) ;//调用3个参数的构造方法 color=c; public String toString() return "A ball with center"+center.toString() +",radius "+Double.toString(radius)+",color"+color; //other methods class MovingBall (4) private double speed; public MovingBall() public MoyingBall(double xValue, double yValue, double r, String c, double s) (5) ;//调用父类Ball中具有4个参数的构造方法 speed=s; public String toString() return super.toString()+",speed"+Double.toString(speed); //other methods public class test public static void main(String args[]) MovingBall mb=new MovingBall(10,20,40,"green",25); System.out.println(mb);
问答题【说明】本程序ExceptionTester实现功能:读入两个整数,第1个数除以第2个数,之后输出。若第2个数为0,则自动进行异常处理。
程序如下:
{{U}} (1) {{/U}};
public class ExceptionTester{
public static void main(String args[]){
int result;
int number[]=new int[2];
boolean valid;
for(int i=0;i<2;i++){
valid={{U}} (2) {{/U}};
while(!valid){
try{
System.out.println("Enter number"+(i+1));
number[i]=Integer.valueOf(Keyboard.getString()).intValue();
valid=true;
}catch(NumberFormatExceptione){
System.out.println("Invalid integer entered.Please try again.");
}
}
}
by{
result=number[0]/number[1];
System.out.print(number[0]+"/"+number[1]+"="+result);
}catch({{U}} (3) {{/U}}){
System.out.println("Second number is 0,cannot do division!");
}
}
}
其中,Keyboard类的声明为:
impon java.io.*;
public class Keyboard{
static BufferedReader inputStream=new {{U}}(4) {{/U}}
(new InputStreamReader(System.in));
public static int getInteger(){
try{
return(Integer,valueOf(inputStream.readLlne().trim()).intValue());
}catch(Exceptione){
e.printStackTrace();
return 0;
}
}
public {{U}}(5) {{/U}}{
by{
return(inputStream.readLine());
} catch(IOExceptione)
{return "0";}
}
}
问答题[问题4](3分)
根据说明和图中术语,采用补充数据流的方式,改正图1-2中的问题。要求给出所补充数据流的名称、起点和终点。
问答题阅读以下说明和图,回答问题1至问题3,将解答写在对应栏内。【说明】某教学管理系统的用户是教学管理人员、教师和学生。系统主要提供学生选课管理和学生成绩管理两方面的功能。(1)学生选修课管理主要功能是管理新学期开始时,学生对选修的课程进行选课注册工作。新学期开始后的前两周为学生试听、选课注册时间;允许校内各院系学生跨专业跨年级选修课程;学生可以在校园网的任何一个终端进行选课。①新学期选修课程表生成:各学院教学管理人员在新学期开始前,将准备开设的选修课程名称、课程代码、总课时、上课时间、学分、任课教师和上课教室录入系统,供学生选课使用。新学期开学两周后,系统自动将实际选课学生少于10人的课程停开,并删除该课程;教学管理人员打印学生选课注册名单和开课通知书,送交有关部门和任课教师。②学生选课注册:新学期开学前两周为学生试听、选课注册时间,并允许改变或取消注册申请。学生调用待选课程表,系统显示课程名、课程代码、任课教师、上课时间、总课时、上课教室、学分和本课程已选修人数。学生所选几门课程在上课时间上不能冲突;若一门课程实际选课学生已达到40人时,停止选课。当学生退出系统时,系统提示该学生所选的几门课程、任课教师、上课时间、教室、学分和学分总计。③选修课程查询:选修课程表信息查询,用户是教师、学生和教学管理人员。系统显示课程名、课程代码、任课教师、上课时间、总课时、上课教室、学分和本课程已选修人数。查询关键词可为学院名称、专业、授课教师等。学生选课情况查询:教师和教学管理人员可以查看学生的选课情况。查询关键词可以为学生姓名(学号)、课程名称(课程代码)、授课教师等。学生只能查自己所选课程内容,不允许查其他同学选课情况。教师简历查询:用户是学生、教师和教学管理人员。查询关键词可为教师姓名、性别、职称、年龄等单关键词或组合关键词。④信息统计与报表生成:各学院教学管理人员对学生选课注册信息进行统计(按课程、专业等),打印汇总报表。⑤把学生选课注册信息传送到财务管理系统,计算学生应交纳的费用。(2)学生成绩管理①学生考试成绩录入:各学院教学管理人员将学生考试成绩录入系统。录入学生成绩时,系统自动检查财务系统传来的选课交费信息,核对该学生是否已经交纳本门课程的费用,没有交纳费用者,不给成绩。②成绩查询:教师和教学管理人员可查询学生各门课程的成绩。查询关键词可为学生姓名(学号),课程名(课程代码)等。学生只能查自己各门课程的成绩,不允许查其他同学成绩。③成绩汇总与报表生成:教学管理人员对学生考试成绩信息进行统计(按学生、课程、专业等),打印汇总报表。向学校教务管理系统发送汇总信息表格等,不反馈信息。现在已建立教学管理最高层用例图,如下:
问答题[预备知识]①对给定的字符集合及相应的权值,采用哈夫曼算法构造最优二叉树,并用结构数组存储最优二叉树。例如,给定字符集合{a,b,c,d}及其权值2、7、4、5,可构造如图3所示的最优二叉树和相应的结构数组Ht(数组元素Ht[0]不用)(见表5)。结构数组HT的类型定义如下:#defineMAXLEAFNUM20structnode{charch;/*当前结点表示的字符,对于非叶子结点,此域不用*/intweight;/*当前结点的权值*/intparent;/*当前结点的父结点的下标,为0时表示无父结点*/intIchild,rchild/*当前结点的左、右孩子结点的下标,为0时表示无对应的孩子结点*/}Ht[2*MAXLEAFNUM];②用'0'或'1'标识最优二叉树中分支的规则是:从一个结点进入其左(右)孩子结点,就用'0'('1')标识该分支(示例如图3所示)。③若用上述规则标识最优二叉树的每条分支后,从根结点开始到叶子结点为止,按经过分支的次序,将相应标识依次排列,可得到由'0'、'1'组成的一个序列,称此序列为该叶子结点的前缀编码。如图3所示的叶子结点a、b、c、d的前缀编码分别是110、0、111、10。【函数5.1说明】函数voidLeafCode(introot,intn)的功能是:采用非递归方法,遍历最优二叉树的全部叶子结点,为所有的叶子结点构造前缀编码。其中形参root为最优二叉树的根结点下标;形参n为叶子结点个数。在构造过程中,将Ht[p].weight域用作被遍历结点的遍历状态标志。【函数5.1】char**Hc;voidLeafCode(introot,intn){/*为最优二叉树中的n个叶子结点构造前缀编码,root是树的根结点下标*/inti,p=root,cdlen=0;charcode[20];Hc=(char**)malloc(.(n+])*sizeof(char*));/*申请字符指针数组*/for(i=1;i<=p;++i)Ht[i].weight=0;/*遍历最优二叉树时用作被遍历结点的状态标志*/while(p){/*以非递归方法遍历最优二叉树,求树中每个叶子结点的编码*/if(Ht[p],weight==0){/*向左*/Ht[p].weight=1if(Ht[p],lchild!=0){p=Ht[P].lchild;code[cdlen++]='0';]elseif(Ht[p].rchild==0){/*若是叶子结点,则保存其前缀编码*/Hc[p]=(char*)malloc((cdlen+1)*sizeof(char));{{U}}(1){{/U}};strcpy(He[p],code);}}elseif(Ht[pi,weight==1){/*向右*/Ht[p].weight=2;if(Ht[p].rchild!=0){p=Ht[p].rchild;code[cdlen++]='1';}}else{/*Ht[p].weight==2,回退*/Ht[p].weight=0;p={{U}}(2){{/U}};{{U}}(3){{/U}};/*退回父结点*/}}/*while结束*/}【函数5.2说明】函数voidDecode(char*buff,introot)的功能是:将前缀编码序列翻译成叶子结点的字符序列并输出。其中形参root为最优二叉树的根结点下标;形参buff指向前缀编码序列。【函数5.2】voidDecode(char*buff,introot)Iintpre=root,p;while(*buff!='/0'){p=root;while(p!=0){/*存在下标为p的结点*/pre=p;if({{U}}(4){{/U}})p=Ht[p].lchild;/*进入左子树*/elsep=Ht[p].rchild;/*进入右子树*./buff++;/*指向前缀编码序列的下一个字符*/}{{U}}(5){{/U}};printf("%c",Ht[pre].ch);}}
问答题[说明]C市刚开通了地铁线,为方便乘客,计划开发自动售票系统。该公司在每一个地铁站放置了多台自动售票机,每一台售票机有一唯一编号,售票记录统一汇总主机。自动售票机只发售从该站起始的各种地铁票,因此乘客只需输入目的站,起始站默认为该站,售票机给出从该站到达目的站的单程票。打印地铁票时为其编一个唯一的流水号,并同时打印自动售票机的编号及票价。售票机的状态变化如下:“空闲”时,显示地铁线路图,等待乘客输入目的站;当乘客输入目的站后,转入“目的站确认/票数输入”状态,同时给出票价,此时若目的站有误,可返回到空闲状态重新输入,否则,输入票数;乘客输入票数后,转入“票数确认/付款”状态,同样此时若票数有误,可返回到上一状态重新输入,否则,投入钱币付款;当付款金额足够时,“出票/找零”(有必要时进行找零);然后转入“空闲”等待输入目的站状态。该系统采用面向对象方法开发,系统中的类以及类之间的关系用UML类图表示,图1-1是该系统类图的一部分,图1-2描述了自动售票机的状态转换图。
问答题【说明】 本流程图实现从成绩文件生成学生成绩一览表。 某中学某年级的学生成绩数据(分数)登录在成绩文件10中,其记录格式见表1: 表1 学号 姓名 课程1成绩 课程2成绩 …… 课程6成绩 由该成绩文件生成见表2的学生成绩一览表。生成的学生成绩一览表按学号升序排列。表中的名次是指该生相应课程在年级中的名次。 表2 学号 姓名 课程1 课程2 …… 课程6 成绩 名次 成绩 名次 …… …… 成绩 名次 流程图中的顺序文件F0是学生成绩文件,F0文件经处理1处理后产生顺序文件F,然后经过处理2至处理4对文件F进行处理和更新。在处理5中,仅对文件F的纪录进行学生成绩一览表的编排输出,不进行排序和增加名次等处理。
问答题【说明】当一元多项式aixi中有许多系数为零时,可用一个单链表来存储,每个节点存储一个非零项的指数和对应系数。为了便于进行运算,用带头节点的单链表存储,头节点中存储多项式中的非零项数,且各节点按指数递减顺序存储。例如:多项式8x5-2x2+7的存储结构为:函数中使用的预定义符号如下:#defineEPSIle-6structNode(/*多项式中的一项*/doublec;/*系数*/inte;/*指数*/structNode*next;};typedefstruct{/*多项式头节点*/intn;/*多项式不为零的项数*/structNode*head;}POLY;【函数】voidDel(POLY*C,structNode*p)/*若p是空指针则删除头节点,否则删除p节点的后继*/{structNode*t;/*C是空指针或C没有节点*/if(C==NULL||C->head==NULL)return;if({{U}}(1){{/U}}){/*删除头节点*/t=C->head;C->head=t->next;return;}/*if*/t=p->next;p->next=t->next;};/*Del*/voidInsert(POLY*C,structNode*pC)/*将pC节点按指数降序插入到多项式C中*//*若C中存在pC对应的指数项,则将系数相加;若其结果为零,则删除该节点*/{structNode*t,*tp;/*pC为空指针或其系数近似为零*/if(pC==NULL||fabs(pC->c)<EPSI)return;if(C->head==NULL){/*若C为空,作为头节点插入*/C->head=pC;pC->next=NULL;C->n++;return;}/*if*//*若pC的指数比头节点的还大,插入到头节点之前*/if(pC->e>C->head->e){{{U}}(2){{/U}};C->head=pC;C->n++;return;}/*if*/{{U}}(3){{/U}};t=C->head;while(t!=NULL){if(t->e>pC->e){tp=t;t=t->next;}elseif(t->e==pC->e){/*C中已经存在该幂次项*/t->c+=pC->c;/*系数相加*/if(fabs(t->c)<EPSI){/*系数之和为零*/{{U}}(4){{/U}};/*删除对应节点*/C->n--;}{{U}}(5){{/U}};}elset=NULL;/*C中已经不存在该幂次项*/}/*while*/if(t==NULL){/*适当位置插入*/pC->next=tp->next;tp->next=pC;C->n++;}/*if*/};/*Insert*/
问答题[说明]在线会议审分稿系统(OnlineReviewingSystem,ORs)主要处理会议前期的投稿和审稿事务,其功能描述如下。(1)用户在初始使用系统时,必须在系统中注册(Register)成为作者或审稿人。(2)作者登录(Login)后提交稿件和浏览稿件审阅结果。提交稿件必须在规定提交时间范围内,其过程为先输入标题和摘要、选择稿件所属主题类型、选择稿件所在位置(存储位置)。上述几步若未完成,则重复;若完成,则上传稿件至数据库中,系统发送通知。(3)审稿人登录后可设置兴趣领域、审阅稿件给出意见以及罗列录用和(或)拒绝的稿件。(4)会议委员会主席是一个特殊审稿人,可以浏览提交的稿件、给审稿人分配稿件、罗列录用和(或)拒绝的稿件及关闭审稿过程。其中关闭审稿过程需包括罗列录用和(或)拒绝的稿件。系统采用面向对象方法开发,使用UML进行建模。在建模用例图时,常用的方式是先识别参与者,然后确定参与者如何使用系统来确定用例,每个用例可以构造一个活动图。参与者名称、用例名称和活动名称分别参见表1~表3。系统的部分用例图和提交稿件过程的活动图分别如图1和图2所示。
问答题某高校欲开发一个成绩管理系统。记录并管理所有选修课程的学生的平时成绩和考试成绩,其主要功能描述如下。(1)每门课程都由3~6个单元构成,每个单元结束后会进行一次测试,其成绩作为这门课程的平时成绩。课程结束后进行期末考试,其成绩作为这门课程的考试成绩。(2)学生的平时成绩和考试成绩均由每门课程的主讲教师上传给成绩管理系统。(3)在记录学生成绩之前,系统需要验证这些成绩是否有效。首先,根据学生信息文件来确认该学生是否选修这门课程,若没有,那么这些成绩是无效的;如果他的确选修了这门课程,再根据课程信息文件和课程单元信息文件来验证平时成绩是否与这门课程所包含的单元相对应,如果是,那么这些成绩是有效的,否则无效。(4)对于有效成绩,系统将其保存在课程成绩文件中。对于无效成绩,系统会单独将其保存在无效成绩文件中,并将详细情况提交给教务处。在教务处没有给出具体处理意见之前,系统不会处理这些成绩。(5)若一门课程的所有有效的平时成绩和考试成绩都已经被系统记录,系统会发送课程完成通知给教务处,告知该门课程的成绩已经齐全。教务处根据需要,请求系统生成相应的成绩列表,用来提交考试委员会审查。(6)在生成成绩列表之前,系统会生成一份成绩报告给主讲教师,以便核对是否存在错误。主讲教师须将核对之后的成绩报告退还系统。(7)根据主讲教师核对后的成绩报告,系统生成相应的成绩列表,递交考试委员会进行审查。考试委员会在审查之后,上交一份成绩审查结果给系统。对于所有通过审查的成绩,系统将会生成最终的成绩单,并通知每个选课学生。现采用结构化方法对这个系统进行分析与设计,得到如图1所示的项层数据流图和图2所示的0层数据流图。图1顶层数据流图图20层数据流图
问答题【问题2】
如果等级为r的房间每人每天的住宿费为RATE(r),RATE为数组。为使该算法在输出每个候选的房间号RM(J)后,再输出这批散客每天所需的总住宿费DAYRENT(J),流程图1的p所指框中的最后处应增加什么处理?
问答题问题:4.3 (5分)
根据C代码,字符串“BBABBCAC”的next数组元素值为(6)(直接写素值,之间用逗号隔开)。若主串为“AABBCBBABBCACCD”,子串为“BBABBCAC”,则函数Kmp的返回值是(7)。
问答题阅读以下标准书号校验码的技术说明和程序流程图,根据要求回答问题1至问题3。[说明]为实现图书的国际统一编码,便于实现计算机化的图书管理,每本正式出版的图书都印有国际标准书号。标准书号由“ISBN”、10个数字(0~9)组成,其格式如下。ISBN组号-出版者号-书名号-校验码其中,校验码是根据前面9个数字计算得到的,用于计算机自动校验。假设标准书号的10个数字依次是a(1),a(2),…,a(10),则校验码a(10)的设置应使S=10*a(1)+9*a(2)+8*a(3)+…+1*a(10)能被11整除。如果校验码a(10)应设置成10,则规定以“X”表示之。例如,《软件设计师考试考前冲刺预测卷及考点解析》的标准书号为:ISBN7-121-05027-5。第1段上的数字“7”是国际ISBN中心分配给中国ISBN中心管理的组号;第2段上的“121”表示电子工业出版社。标准书号的校验过程如图5-13所示,计算校验码的过程如图5-14所示。其中,Mod(S,11)表示S除以11得到的余数。
问答题[说明]
某营销企业拟开发一个销售管理系统,其主要功能描述如下。
(1)接受客户订单,检查库存货物是否满足订单要求。如果满足,进行供货处理,即修改库存记录文件,给库房开具备货单并且保留客户订单至订单记录文件;否则进行缺货处理,即将缺货记录单存入缺货记录文件。
(2)根据缺货记录文件进行缺货统计,将缺货通知单发给采购部门。
(3)根据采购部门提供的进货通知单进行进货处理,即修改库存记录文件,并从缺货记录文件中取出缺货订单进行供货处理。
(4)根据保留的客户订单进行销售统计,打印统计报表给经理。
现采用结构化方法对销售管理系统进行分析与设计,获得如图所示的顶层数据流图和如图2所示的0层数据流图。
问答题根据题意回答以下问题:
设某商业集团数据库中有3个实体集:一是“商店”实体集,属性有商店编号,商店名,地址等;二是“商品”实体集,属性有商品号,商品名,规格,单价等;三是“职工”实体集,属性有职工编号,姓名,性别,业绩等。商店与商品间存在“销售”联系,每个商店可以销售多种商品,每种商品也可以在多个商店和职工间存在“聘用”联系,每个商店有许多职工,每个职工只能在一个商店工作,商店聘用职工有聘期和月薪。
问题:
1.请根据题意完善下面ER图。
2.将ER图转换成关系模型,并注明主键和外键。
3.请写出要查出员工“小李”在三月份的销售业绩的关系代数式。
问答题阅读以下某前台销售子系统的技术说明和UML图,根据要求回答问题1~问题4。
[说明]
某超市管理系统的前台销售子系统以最基本的方式处理销售业务。系统的功能需求如下:
①记录每种商品的编号、单价和现有数量; ②为顾客选购的商品计价、收费,并打印清单;
③帮助商家找出哪种商品将脱销,从而及时补充货源;
④随时按上级系统的要求报告当前的款货数量、增减商品的种类或修改商品定价;
⑤交接班时结算货款数目和商品数目。
每台收款机可以处理任何数目的销售事件,但一个销售事件只能由一台收款机处理。每个销售事件从收款机响应收款人员的指令开始,先向商品发送检索请求消息来查找将被出售的商品。如果该商品的数量少于下限,则向供货员发送缺货登记消息。每名供货员可以提供一种或多种商品,同一品牌的商品只能由一位供货员来提供。接着收款机发送计价和入账消息请求售出操作,再由销售事件发送记账消息给相应的账册,并控制流程返回收款机等待下一次销售操作。每本销售账册可以记录任何数目的销售事件,但一个销售事件只能由一本销售账册记录。
该销售子系统采用面向对象方法开发,系统中的类及类之间的关系用UML类图表示,图1-11是该系统类图中的一部分;系统的动态行为采用UML序列图表示,图1-12是销售事件部分的序列图。