问答题阅读下列说明和图,回答问题。[说明]某会议策划公司为了方便客户,便于开展和管理各项业务活动,需要构建一个基于网络的会议预定系统。[需求分析](1)会议策划公司设有受理部、策划部和其他部门。部门信息包括部门号、部门名称、部门主管、电话和邮箱号。每个部门有多名员工处理部门的日常事务,每名员工只能在一个部门工作。每个部门有一名主管负责管理本部门的事务和人员。(2)员工信息包括员工号、姓名、部门号、职位、联系方式和工资。其中,职位包括主管、业务员、策划员等。业务员负责受理会议申请。若申请符合公司规定,则置受理标志并填写业务员的员工号。策划部主管为已受理的会议申请制定策划任务,包括策划内容、参与人数、要求完成时间等。一个已受理的会议申请对应一个策划任务,一个策划任务只对应一个已受理的会议申请,但一个策划任务可由多名策划员参与执行,且一名策划员可以参与多项策划任务。(3)客户信息包括客户号、单位名称、通信地址、所属省份、联系人、联系电话、银行账号。其中,一个客户号唯一标识一个客户。一个客户可以提交多个会议申请,但一个会议申请对应唯一的一个客户号。(4)会议申请信息包括申请号、开会日期、会议地点、持续天数、会议人数、预算费用、会议类型、酒店要求、会议室要求、客房类型、客房数、联系人、联系方式、受理标志和业务员的员工号等。客房类型有豪华套房、普通套房、标准间、三人间等,且申请号和客房类型决定客房数。[概念模型设计]根据需求阶段收集的信息,设计的实体联系图和关系模式(不完整)如图所示。[关系模式设计]部门(部门号,部门名称,主管,电话,邮箱号)员工(员工号,姓名,{{U}}(a){{/U}},联系方式,工资)客户(客户号,单位名称,通信地址,所属省份,联系人,联系电话,银行账号)会议申请({{U}}(b){{/U}},开会日期,会议地点,持续天数,会议人数,预算费用,会议类型,酒店要求,会议室要求,客房数,联系人,联系方式,受理标志,员工号)策划任务({{U}}(c){{/U}},策划内容,参与人数,要求完成时间)执行策划({{U}}(d){{/U}},实际完成时间)
问答题[说明] 冒泡排序算法的基本思想是:对于无序序列(假设扫描方向为从前向后,进行升序排列),两两比较相邻数据,若反序则交换,直到没有反序为止。一般情况下,整个冒泡排序需要进行众(1≤k≤n)趟冒泡操作,冒泡排序的结束条件是在某一趟排序过程中没有进行数据交换。若数据初态为正序时,只需1趟扫描,而数据初态为反序时,需进行n-1趟扫描。在冒泡排序中,一趟扫描有可能无数据交换,也有可能有一次或多次数据交换,在传统的冒泡排序算法及近年的一些改进的算法中[2,3],只记录一趟扫描有无数据交换的信息,对数据交换发生的位置信息则不予处理。为了充分利用这一信息,可以在一趟全局扫描中,对每一反序数据对进行局部冒泡排序处理,称之为局部冒泡排序。 局部冒泡排序的基本思想是:对于N个待排序数据组成的序列,在一趟从前向后扫描待排数据序列时,两两比较相邻数据,若反序则对后一个数据作一趟前向的局部冒泡排序,即用冒泡的排序方法把反序对的后一个数据向前排到适合的位置。扫描第—对数据对,若反序,对第2个数据向前冒泡,使前两个数据成为,有序序列;扫描第二对数据对,若反序,对第3个数据向前冒泡,使得前3个数据变成有序序列;……;扫描第i对数据对时,其前i个数据已成有序序列,若第i对数据对反序,则对第i+1个数据向前冒泡,使前i+1个数据成有序序列;……;依次类推,直至处理完第n-1对数据对。当扫描完第n-1对数据对后,N个待排序数据已成了有序序列,此时排序算法结束。该算法只对待排序列作局部的冒泡处理,局部冒泡算法的 名称由此得来。 以下为C语言设计的实现局部冒泡排序策略的算法,根据说明及算法代码回答问题1和问题2。 [变量说明] #define N=100 //排序的数据量 typedef struct //排序结点 int key; info datatype; ...... node; node SortData[N]; //待排序的数据组 node类型为待排序的记录(或称结点)。数组SortData[]为待排序记录的全体称为一个文件。key是作为排序依据的字段,称为排序码。datatype是与具体问题有关的数据类型。下面是用C语言实现的排序函数,参数R[]为待排序数组,n是待排序数组的维数,Finish为完成标志。 [算法代码] void Part-BubbleSort (node R[], int n) int=0 ; //定义向前局部冒泡排序的循环变量 //暂时结点,存放交换数据 node tempnode; for (int i=0;i<n-1;i++) ; if (R[i].key>R[i+1].key) (1) while ( (2) ) tempnode=R[j] ; (3) R[j-1]=tempnode ; Finish=false ; (4) // end while // end if // end for // end function
问答题[Java代码]
//Subject.java 文件
public interface Subject {
public void attach(Observer DocExplorer);
public void detach(Observer DocExplorer);
void notifyObservers();
}
//Observer.java 文件
public interface Observer{
void update({{U}} (1) {{/U}});
}
//OfficeDoc.java 文件
import java.util.*;
public class OfficeDoc implements Subject(//OfficeDoc 类实现 Subject 接口
private Vector ObserverVeetor=new java.util.Vector();
//存储与OfficeDoc相关联的DocExplorer 对象
public void attach(Observer observer){
//将某 DocExplorer 对象与OfficeDoc 相关联
ObserverVector.addElement(observer);
}
public void detach(Observer observer){
//解除某DocExplorer 对象与OfficeDoc的关联关系
ObserverVector.removeElement(observer);
}
public void notifyObservers(){
//当OfficeDoc对象状态已发生变化时,通知所有的DocExplorer对象
Enumeration enumeration={{U}} (2) {{/U}};
while (enumeration.hasMoreElements()){
((Observer)enumeration.nextElement()).{{U}} (3) {{/U}};
}
}
public Enumeration Observers(){
return ObserverVector.elements();
}
//其他公文类的属性和方法省略
}
//DoeExplorer.java 文件
public class DocExplorer implements {{U}}(4) {{/U}}{
public void update({{U}} (5) {{/U}}){
//更新DocExplorer自身的状态,代码省略
}
}
问答题【程序说明】 定义一个多边形结构:struct polygon实现以下内容:(1)建立该结构的链表:create函数是创建链表,每输入一个结点的数据,就把该结点加入到链表当中,它返回创建的链表的头指针。(2)显示链表的各个结点数据:结点数据包括:多边形顶点数、各顶点的纵横坐标、当多边形顶点数为0时,链表创建结束。(3)编写一个函数disp,删除链表中的所有结点。需要注意的是:要先释放结点数据内存,再删除结点,如果在释放结点数据内存单元之前删除结点,则无法找到结点数据内存单元的地址,也就无法释放数据的内存单元。 【程序】 #include "iostxeam. h" #include "iomanip. h" stmct polygon int n; int *x; int *y; polygon *next; ; void Push(polygon* newNode = new polygon; newNode->next= (1) ; newNode->x = new int[n]; newNode->y = new int[n]; newNode->n= (2) ; for(int i=0; i<= (3) ; i++) cout<<"请输入多边形各顶点x、y坐标, 坐标值之间用空格分隔: "; cin>>newNode->x[i]>>newNode->y[i]; (4) = head; //在head前不需要额外的* head = newNode; polygon *create() polygon* head = NULL; polygon* tail; int n; cout<<"请输入多边形顶点的个数(顶点个数为0时结束): "; cin>>n; if(n==O) return (5) ; Push(head, (6) ); tail = head; cout<<"请输入多边形顶点的个数(顶点个数为0时结束): "; cin>>n; while(n!=0) Push(tail->next, (7) ); // 在tail->next增加结点 tail = tail->next; //advance tail to point to last node cout<<"请输入多边形顶点的个数(顶点个数为0时结束): "; cin>>n; remm head; void disp(polygon *head) inti, No=l; eout<<setw( 10)<<"x"<<setw(6)<<"y"<<endl; while(head !=NULL) cout<<"第"<<No<<"结点: "<<endl; for(i=0;i<=head->n-1;i++) cout<<setw(10)<<head->x [i] <<setw(6)<<head->y[i]<<endl; (8) ; he ad= (9) ; //Match while statement void del(polygon *head) polygon *p; while(head!=NIILL p= (10) ; head=head->next; delete p->x; delete p->y; delete p; //Match while statement void main() polygon *head; head=create(); disp(head); del(head);
问答题对于教学数据库的三个基本表S(S#,SNAME,AGE,SEX),SLLS#,C#,GRADE),C(C#, CNAME,TEACHER)。现根据查询条件填充下面SQL语句空白的部分。 1.检索LIU老师所授课程的课程号和课程名。 2.检索至少选修LIU老师所授课程中一门课程的女学生姓名。 3.检索WANG同学不学的课程的课程名。 4.检索全部学生都选修的课程的课程号与课程名。 5.检索选修课程包含LIU老师所授课程的学生学号。 [说明] 1.SELECT (1) FROM C WHERE TEACHER='LIU' 2. SELECT S. SNAME FROM S,SC WHERE S.S#=SC.S#AND S. SEX='F'AND SC.C#= (2) (SELECTC# FROM C WHERE TEACHER = 'LIU') 3. SELECT CNAME FROM C wHEREc#< > (3) (SELECTSC. C# FROM S,SCWHERE S.S#=SC.S#AND S. SNAME=' WANG') 4. 由题知,该问题是在表C中找课程号和课程名,要求这门课被全部学生所选。 SELECT C#,CNAME FROM C WHERE NOT EXISTS (SELECT * FRoM S WHERE NOT EXISTS (SELECT * FROM S WHERE NOT EXISTS (SELECT * FROM SC WHERE (4) 5. SELECT DISTINCT S# FROM SC WHERE (5) (SELECT C# FROM C WHERE TEACHER = 'LIU'
问答题阅读下列说明和图,回答问题1至问题4,将解答填入对应栏内。【说明】某宾馆拟开发一个宾馆客房预订子系统,主要是针对客房的预订和入住等情况进行管理。【需求分析结果】1.员工信息主要包括:员工号、姓名、出生年月、性别、部门、岗位、住址、联系电话和密码等信息。岗位有管理和服务两种。岗位为“管理”的员工可以更改(添加、删除和修改)员工表中本部门员工的岗位和密码,要求将每一次更改前的信息保留;岗位为“服务”的员工只能修改员工表中本人的密码,且负责多个客房的清理等工作。2.部门信息主要包括:部门号、部门名称、部门负责人、电话等信息。一个员工只能属于一个部门,一个部门只有一位负责人。3.客房信息包括:客房号、类型、价格、状态等信息。其中类型是指单人间、三人间、普通标准间、豪华标准间等;状态是指空闲、入住和维修。4.客户信息包括:身份证号、姓名、性别、单位和联系电话。5.客房预定情况包括:客房号、预定日期、预定入住日期、预定入住天数、身份证号等信息。一条预定信息必须且仅对应一位客户,但一位客户可以有多条预定信息。【概念模型设计】根据需求阶段收集的信息,设计的实体联系图(不完整)如下图所示。【逻辑结构设计】逻辑结构设计阶段设计的部分关系模式(不完整)如下:员工({{U}}(4){{/U}},姓名,出生年月,性别,岗位,住址,联系电话,密码)权限(岗位,操作权限)部门(部门号,部门名称,部门负责人,电话)客房({{U}}(5){{/U}},类型,价格,状态,入住日期,入住时间,员工号)客户({{U}}(6){{/U}},姓名,性别,单位,联系电话)更改权限(员工号,{{U}}(7){{/U}},密码,更改日期,更改时间,管理员号)预定情况({{U}}(8){{/U}},预定日期,预定入住日期,预定入住天数)
问答题[说明]对多个元素的聚合进行遍历访问时,需要依次推移元素,例如对数组通过递增下标的方式,数组下标功能抽象化、一般化的结果就称为迭代器(Iterator)。模式以下程序模拟将书籍(Book)放到书架(BookShelf)上并依次输出书名。这样就要涉及到遍历整个书架的过程。使用迭代器Iterator实现。图7-1显示了各个类间的关系。以下是JAVA语言实现,能够正确编译通过。[图7-1][C代码]typedefbool(*fun1)();typedef(1)(*fun2)();constintBOOK_MAX=10;//最大书本数structBookcharname30;;structBookShelf//书架structBookbooks[BOOKMAX];intindex;//书架上最后一本书的下标加1,即下一本书的下标,如0表示有0本书;StructBook*getBookAt(structBookShelf*BS,intindex)//从书架BS上取得下标为index的书//只有当下标大于等于0且不大于当前书架上的最后一本书对应的下标,才取书成功://否则失败,返回NULLif(index>=0returnNULL;boolappendBook(structBookShelf*BS,structBookbook)if(BS->indexBS->books[BS->index++]=book;returntrue;returnfalse;intgetLength(structBookShelf*bookShelf)returnbookShelf->index;structIterator//迭代器fun1hasNext;//判断是否还有下一个元素fun2next;//取得下一个元素;structBookshelfIteratorf//书架迭代器intindex;struetBookShelf*bookShelf;bookShelfIterator=0,NULL;boolBShasNext()//判断是否还有下一本书if(bookShelfIterator.indexreturntrue;elsereturnfalse;structBook*BSnext()//取得下一本书,并将index加1,以便下一次正确访问returngetBookAt(bookShelfIterator.bookShelf,(3));voidmain()structBookShelfbookShelf;bookShelf.index=0;//将书籍上架,省略代码//将bookShelf与bookShelfIterator相关联bookShelfIterator.bookShelf=(4);structIteratoriterator;iterator.hasNext=BShasNext;iterator.next=BSnext;structBook*b;while((5))//遍历书架,输出书名b=iterator.next();printf("%s/n",b->name);
问答题阅读下列说明和图,回答问题1至问题3。【说明】图书管理系统详细记录图书库存情况、读者信息及读者借阅记录(包括借书日期和还书日期)。新书入库时要为该书编制图书卡片,包括分类目录号、图书流水号(要保证每本书都有唯一的流水号,即使同类图书也是如此)、书名、作者、内容摘要、价格和购书日期。同一个书名由于版次、作者等不同有可能存在多“种”图书,其间用“分类目录号”区分。系统为每一位合法读者编制一个唯一的借书证号,读者需要提供姓名、单位。一个读者最多可以同时借阅5本图书。借阅图书时,新添借阅记录,并将对应的“归还标记”字段置为“false”,表示“尚未归还”;归还图书时,将相应的“归还标记”字段置为“true”,表示“已经归还”。一本书可能供多位读者借阅,同一本书读者可以重复借阅。如图9-17所示为该系统的E-R图。
问答题【问题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】指出哪张图的哪个文件可以不必画出。
