问答题【问题3】(2分)
业主关系属于第几范式?请说明存在的问题。
问答题阅读以下说明和图,回答问题1至问题3。[说明]图书馆藏书管理系统,完成用户信息管理,借阅归还信息管理,馆藏书目的信息管理,违规处罚管理和各种查询等功能。系统的用户可分为超级用户和普通用户两类,超级用户负责系统维护,包括对藏书信息,用户信息,借阅和归还信息,违规处罚信息的录入,修改,查询,删除等。普通用户即借阅者则只是具有查询书目信息,查询本人的借阅情况,违规处罚信息和预定书目的权限。用户通过身份验证后进入主界面。主界面为超级用户提供6项选择:图书信息管理,用户信息管理,图书的借阅和归还信息管理,违规处罚信息管理,口令修改。普通用户有4项功能选择:书目查询,借阅归还信息,违规处罚信息,口令修改。图书信息管理:超级用户可以增加,修改,删除图书信息,也可以查看书目信息。用户信息管理:超级用户可以增加,修改,删除用户信息,也可以查找用户信息。借阅归还信息:超级用户可以加入,修改,删除借阅纪录,查看某本书的借阅情况,查询指定的书目借阅和归还信息。违规处罚管理:超级用户可以给普通用户增加,修改,删除违规处罚信息,普通用户如果逾期不还图书,系统将暂时终止普通用户的借阅权利,直到用户接受违规处罚后,方可以恢复正常的借阅权利。口令修改:用户需要输入原口令,并且两次输入新口令一致后,系统即用新口令代替旧口令。图书馆藏书借阅系统信息流如图10-5所示,图书馆藏书管理系统的E-R模型图如图10-6所示。
问答题【问题3】(6 分)
(1)请指出【问题2】中给出的地址簿、邮件和附件关系模式的主键,如果关系模式存在外键请指出。
(2)附件属于弱实体吗?请用50 字以内的文字说明原因。
问答题[说明]某宾馆需要建立一个住房管理系统,部分需求分析结果如下。(1)一个房间有多个床位,同一房间内的床位具有相同的收费标准。不同房间的床位收费标准可能不同。(2)每个房间有房间号(如201、202等)、收费标准、床位数目等信息。(3)每位客人有身份证号码、姓名、性别、出生日期和地址等信息。(4)对每位客人的每次住宿,应该记录其入住日期、退房日期和预付款额等信息。(5)管理系统可查询出客人所住房间号。根据以上的需求分析结果,设计一种关系模型实体联系图如下图所示。
问答题【说明】 以下程序实现数据的排序,将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( (1) ) k=j; if(k !=i) temp=a2[i];a2[i]=a2[k];a2[k]=temp; class SortInt_2 (2) 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( (3) )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= (4) ; 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的对象 (5) ;//调用相应方法进行降序排序 System.out.println("降序排列的数据: "); for(int i=0;i<a.length;i++) System.out.print(a[i]+" ");
问答题试题六(共15分)阅读下列说明和Java代码,将应填入____(n)_____处的字句写在答题纸的对应栏内。[说明]某咖啡店售卖咖啡时,可以根据顾客的要求在其中加入各种配料,咖啡店会根据所加入的配料来计算费用。咖啡店所供应的咖啡及配料的种类和价格如下表所示。
问答题[说明]在一公文处理系统中,开发者定义了一个公文类OfficeDoc,其中定义了公文具有的属性和处理公文的相应方法。当公文件中内容或状态发生变化时,关注此OfficeDoc类对象的相应的DocExplorer对象都要更新其自身的状态。一个OfficeDoc对象能够关联一组DocExplorer对象。当OfficeDoc对象的内容或状态发生变化时,所有与之相关联的DocExplorer对象都将得到通知,这种应用被称为Observer(观察者)模式。以下代码采用C++语言实现,能够正确编译通过。[C++代码]
问答题[C代码]
#include <stdio.h>
#define OBS_MAXNUM 20 /*一个OfficeDoc变量最多能够关联的*/
/*DoeExplorer变量的个数*/
typedef void({{U}} (1) {{/U}})(struct OfficeDoc*,street DocExplorer*);
struct DocExplorer{
func update;/* DocExplorer结构采用的更新函数*/
/*其他的结构字段省略*/
};
struct OfficeDoc{
{{U}}(2) {{/U}}myObs[OBS_MAXNUM];
/*存储所有与OfficeDoc相关联的DoeExplorer结构指针*/
int index;/*与OfficeDoc结构变量相关联的DocExplorer结构变量的个数*/
};
void attach(struet OfficeDoc *doc, struet DocExplorer *ob){
/*关联Obersver结构ob与OfficeDoe结构doc*/
int loop=0;
if(doc->index >=OBS_MAXNUM || ob==NULL) return;
for(loop=0; loop <doc->index; loop++)
if(doc->myObs[loop]==ob)return;
doc->myObs[doe->index]=ob;
doc->index++;
)
void detach(struct OfficeDoc *doc, struct DocExplorer *ob){
/*解除doc结构与ob结构间的关系*/
int loop;
if(ob==NULL)return;
for(loop=0; loop <doc->index; loop6++){
if(doc->myObs[loop]==ob){
if(loop<=doc->index-2)
doe->myObs[loop]=doc->myObs[{{U}} (3) {{/U}}];
doc->myObs[doe->indox-1]=NULL;
doe->index--;
break;
}
}
}
void updatel(struct OfficeDoc *doc,struct DocExplorer *ob){
/*更新ob结构的值,更新代码省略*/
}
void update2(stmct OfficeDoc *doc, struct DocExplorer *ob){
/*更新ob结构的值,更新代码省略*/
}
void notifyObs(struet OfficeDoc *doc){
/*当doc结构的值发生变化时,通知与之关联的所有DocExplorer结构变量*/
int loop;
for(loop=0; loop <doc->index; loop++){
(doc->myObs[loop])->update({{U}} (4) {{/U}});
}
}
void main(){
stmct OfficeDoc doc;/*定义一OfficeDoc变量*/
struct DocExplorer explorer1, explorer2;/*定义两个DocExplorer变量*/
/*初始化与OfficeDoc变量相关的DocExplorer变量个数为0*/
doc.index=0;
explorer1.update=update1;/*设置explorer1变量的更新函数*/
explorer2.update=update2;/*设置explorer2变量的更新函数*/
attaeh(/*关联explorer1与doc对象*/
attach(/*关联explorer2与doc对象*/
/*其他代码省略*/
{{U}}(5) {{/U}};/*通知与OfficeDoc相关的所有DocExplorer变量*/
return;
}
问答题[说明]函数intToplogical(LinkedWDigraphG)的功能是对图G中的顶点进行拓扑排序,并返回关键路径的长度。其中,图G表示一个具有n个顶点的AOE-网,图中顶点从1~n依次编号,图G的存储结构采用邻接表表示,其数据类型定义如下。例如,某AOE-网如图6-22所示,其邻接表存储结构如图6-23所示。[函数]
问答题
【流程图】
问答题【说明】
学校中有若干系,每个系有若干班级和教研室,每个教研室有若干教员,其中有的教授和副教授各带有若干研究生;每个班有若干学生,每个学生选修若干课程,每门课可由若干学生选修。 【问题1】
用E-R图画出此学校的概念模型,用文字写出各实体和联系的属性。
【问题2】
将E-R图转换成关系模型。
【问题3】
指出各关系模型的候选键。
问答题【说明】某直达列车车票预售系统接受顾客的订票、取票和售票处工作人员的查询业务。1.顾客为了提前订票,可向系统提供个人信息及其预订购的车次及日期,系统根据个人信息是否齐全以及车次是否正确来判断订票单是否合格。对于合格的订票单系统,如果相应的车次有剩余票,则记录顾客个人信息以及订票信息,并向顾客提供取票单。2.到了可以取票的时间,顾客向系统提供取票单,在检查单据合格的情况下,系统向顾客提供火车票。3.售票处的工作人员可以利用系统查询各车次车票的售票情况。该直达列车车票预售系统的分层数据流图中部分数据流和文件的组成如下:文件:火车时刻表=车次+开车时间+到站时间+起始站+终点站+上铺票价+下铺票价订票信息表=车次+车票日期+旅客身份证号+座位号+是否领票旅客信息表=旅客身份证号+姓名+性别+联系电话座位表=车次+座位号数据流:订票单=旅客姓名+性别+身份证号+联系电话+车次十车票日期车票=车次+起始站生终点站+开车日期+开车时间+座位号+票价假定顶层图是正确的,“火车时刻表”和“座位表”文件已由其他系统生成。【数据流图】1.【问题1】指出哪张图的哪个文件可以不必画出。
问答题试题三(15分)阅读以下说明和流程图,从供选择的答案中选出应填入流程图(n)处的字句写在答题纸的对应栏内。[说明]一个印刷电路板的布线区域可分成n×m个方格,如图3-1(a)所示,现在需要确定电路板中给定的两个方格的中心点之间的最短布线方案。电路只能沿水平或垂直方向布线,如图3-1(b)中虚线所示。为了避免线路相交,应将已布过线的方格作封锁标记,其他线路不允许穿过被封锁的方格。[图3-1]设给定印刷电路板的起始方格x与目的方格y尚未布线,求这两个方格间最短布线方案的基本思路是:从起始方格x开始,先考查距离起始方格距离为1的可达方格并用一个路径长度值标记,然后依次考查距离为2、3、...的可达方格,直到距离为k的某一个可达方格就是目标方格y时为止,或者由于不存在从x到y的布线方案而终止。布线区域中的每一个方格与其相邻的上、下、左、右四个方格之间的距离为1,依次沿下、右、上、左这四个方向考查,并用一个队列记录可达方格的位置。表3-1给出了沿这四个方向前进1步时相对于当前方格的相对偏移量。[表3-1]例如,设印刷电路板的布线区域可划分为一个6×8的方格阵列,如图3-2(a)所示,其中阴影表示已封锁方格。从起始方格x(位置[3,2],标记为0)出发,按照下、右、上、左的方向依次考查,所标记的可达方格如图3-2(a)所示,目标方格为y(位置[4,7],标记为10),相应的最短布线路径如图3-2(b)虚线所示。[图3-2]图3-3和图3-4所示的流程图即利用上述思路,在电路板方格阵列中进行标记,图中使用的主要符号如表3-2所示。在图3-4中,设置电路板初始格局即将可布线方格置为数值-1、已布线方格(即封锁方格)置为-9。设置方格阵列“围墙”的目的是省略方格位置的边界条件判定,方法是在四周附加方格,并将其标记为-9(与封锁标记相同)。[表3-2][图3-3][图3-4]●供选择的答案
问答题[说明]在一公文处理系统中,开发者定义了一个公文类OfficeDoc,其中定义了公文具有的属性和处理公文的相应方法。当公文件的内容或状态发生变化时,关注此OfficeDoc类对象的相应的DocExplorer对象都要更新其自身的状态。一个OfficeDoc对象能够关联一组DocExplorer对象。当OfficeDoc对象的内容或状态发生变化时,所有与之相关联的DocExplorer对象都将得到通知,这种应用被称为Observer(观察者)模式。以下代码采用Java语言实现,能够正确编译通过。[Java代码]
问答题[说明]S公司开办了在线电子商务网站,主要为各注册的商家提供在线商品销售功能。为更好地吸引用户,S公司计划为注册的商家提供商品(Commodity)促销(Promotion)功能。商品的分类(Category)不同,促销的方式和内容也会有所不同。注册商家可发布促销信息。商家首先要在自己所销售的商品的分类中,选择促销涉及的某一具体分类,然后选出该分类的一个或多个商品(一种商品仅属于一种分类),接着制定出一个比较优惠的折扣政策和促销活动的优惠时间,最后由系统生成促销信息,并将该促销信息公布在网站上。商家发布促销信息后,网站的注册用户便可通过网站购买促销商品。用户可选择参与某一个促销活动,并选择具体的促销商品,输入购买数量等购买信息。系统生成相应的一份促销订单(POrder)。只要用户在优惠活动的时间范围内,通过网站提供的在线支付系统,确认在线支付该促销订单(即完成支付),就可以优惠的价格完成商品的购买活动,否则该促销订单失效。系统采用面向对象方法开发,系统中的类及类之间的关系用UML类图表示,图1是该系统类图中的一部分;系统的动态行为采用UML序列图表示,图2是发布促销的序列图。
问答题[说明]
①定义私有数据成员code、english分别用于表示考生的编号、英语成绩,它们都是int型的数据。
②完成成员函数void Student::inputinformation()的定义,该函数用于用户输入一个考生对象的信息,输入格式如下:
输入编号:
英语成绩:
计算机成绩:
③利用已实现的类Student的成员函数,完成函数void firstname(Student *A[],int uum)的定义,该函数根据考生信息A[],输出num个考生中总分最高者的编号及其相应的总分,在此不考虑总分相同的情况。
源程序文件test1.cpp清单如下:
#include < iostream. h >
class Student
{{U}}(1) {{/U}}
int computer;
int total;
public
void getinformation( );
void computesum( );
int getcode( );
int gettotalscore( );
~Student( );
};
void Student: :getinformation( )
{
{{U}} (2) {{/U}}
cout <<"英语成绩:";
cin> >english;
cout <<"计算机成绩:";
cin > > computer;
void Student:: computesum ( )
total = english + computer;
cout <<"编号" << code <<"总分:" <<total << endl;
int Student::getcode( )
return code;
}
int Student:: gettotalscore ( )
{
return total;
}
void firstname(Student * A[] ,int num)
{
{{U}} (3) {{/U}}
tempsum = ( * A[0] ). gettotalscore( );
for( int i=1; i <num; i++)
{
if ( ( ( * A[i] ). gettotalscore( ) ) > tempsum)
{
tempcode = ( * A[i] ). getcode( );
tempsum = ( * A[i] ). gettotalscore( );
}
}
cout <<"总分最高者--" << tempcode <<":" << tempsum <<endl;
}
void main( )
{
Student * A[3];
int i,n =3
for(i=0;i<n;i ++)
A[i] = new Student;
A[i] -> getinformation( )
for(i=0;i<n;i ++)
{
A[i] -> computesum( )
firstname ( A,3 );
}
问答题[说明]下列最短路径算法的具体流程如下:首先构造一个只含n个顶点的森林,然后依权值从小到大从连通网中选择不使森林中产生回路的边加入到森林中去,直至该森林变成一棵树为止,这棵树便是连通网的最小生成树。该算法的基本思想是:为使生成树上总的权值之和达到最小,则应使每一条边上的权值尽可能地小,自然应从权值最小的边选起,直至选出n-1条互不构成回路的权值最小边为止。[算法]/*对图定义一种新的表示方法,以一维数组存放图中所有边,并在构建图的存储结构时将它构造为一个“有序表”。以顺序表MSTree返回生成树上各条边。*/typedefstruct{VertexTypevex1;VertexTypevex2;VRTypeweight;}EdgeType;typedefElemTypeEdgeType;typedefstruct{//有向网的定义VertexTypevexs[MAX_VERTEX_NUM];//顶点信息EdgeTypeedge[MAX_EDGE_NUM];//边的信息intvexnum,arcnum;//图中顶点的数目和边的数目IELGraph;voidMiniSpanTree_Kruskal(ELGraphG,SqListInitSet(F,G.vexnum);//将森林F初始化为N棵树的集合InitList(MSTree,G.vexnum);//初始化生成树为空树i=0;k=1;while(k<{{U}}(1){{/U}}){e=G.edge[i];//取第i条权值最小的边/*函数fix_mfset返回边的顶点所在树的树的根代号,如果边的两个顶点所在树的树根相同,则说明它们已落在同一棵树上。*/ri=fix_mfset(F,LocateVex(e.vex1));r2={{U}}(2){{/U}};//返回两个顶点所在树的树根if(r1{{U}}(3){{/U}}r2){//选定生成树上第k条边if(Listlnsert(MSTree,k,e){{{U}}(4){{/U}};//插入生成树mix_mfset(E,r1,r2);//将两棵树归并为一棵树}{{U}}(5){{/U}};//继续考察下一条权值最小边}DestroySet(F);}}
问答题[说明]面是一个Applet程序,其功能是有2个按钮,分别为First和Second,以及一个Label控件。要求点击First时则能在Label中显示出Command:First,而点击Second时则能显示出Command:Second,要求只能使用重载一次actionPerfonned()方法。程序运行结果如图6所示。importjava.awt.*;importjava.awt.event.*;importjava.applet.*;/*<appletcede=exl_7,classwidth=800height=400></applet>*/publicclassex]_?extendsAppletimplementsActionListenerprivateStringstr="ok";privateLabel|;privateButtonbtn;publicvoidinit()(1)I=newLabel(str);I.reshape(10,10,150,30);add(I);(2)btn.reshape(10,50,60,20);(3)add(btn);btn=newButton("Second");btn.reshape(10,100,60,20);(4)btn,addActionListener(this);add(btn);publicvoidactionPerformed(ActionEventae)str="Command:"+ae.getActionCommand()(5)ex1_7,html<HTML><HEAD><TITLE>ext_7</TITLE></HEAD><BODY><appletcode="ext?.class"width=800height=400></applet></BODY></HTML>
问答题[问题1]
数据流图4-1(住宅安全系统顶层图)中的A和B分别是什么?
[数据流图4-2]
问答题阅读以下说明和表,回答问题1~3问题。
[说明] 在学校中,存在以下关系:
(a)一个系有若干学生,但一个学生只能在一个系;
(b)一个学生可以选修多门课程,每门课程有若干学生选修;
(c)每个学生所学的每门课程都有一个成绩。
该校在学生信息管理数据库设计了三个基本表,分别为表一、表二、表三。
(a)表一:学生信息表STUDENT(STID,NAME,AGE,DEPTNO),其中,STID表示学号,NAME表示学生姓名,AGE表示年龄,DEPTNO表示系号。
(b)表二:课程表COURSE(COID,NAME),其中,COID表示课程号,NAME表示课程名。
(c)表三:成绩表SCORE(SCID,COID,GRADE),其中,SCID表示学号,COID表示课程号,
GRADE表示成绩,成绩为空时表示这学期正在上的课程。
