阅读下列说明,回答问题1至问题3。
【说明】
请设计一个图书馆数据库,此数据库中对每个借阅者保存的读者记录包括:读者号、姓名、地址、性别、年龄、单位。对每本书存有:书号、书名、作者、出版社。对每本书被借出的书存有读者号、借出日期和应还日期。
【问题1】
给出E-R图
【问题2】
转换成关系模型
【问题3】
给其中任何一个表用SQL语句建表。
第1题
阅读以下说明和C++码,填入(n)处。
[说明]
下面代码实现类A、B、C、D的继承定义和应用。仔细阅读[代码5-1],在(n)处写出正确的运行结果。
[代码5-1]
include<iostream.h>
class A {
public:
int a;
A (int v1): a(v1) {} //构造函数
void disp ( )
{
cout<<"a in class A="<<a<<endl;
}
};
class B: virtual public A {
public:
int b;
B (int v1,int v2): A(v1),b v2) {} //构造函数
void disp ( )
{
cout<<"a in class B="<<a<<endl
cout<<"b in class B="<<b<<endl;
}
};
class C: virtual public A {
public:
int c;
C (int v1,int v2): A(v1) ,c(v2) {} //构造函数
void disp ( )
{
cout<<"a in class C="<<a<<endl;
cout<<"c in class C="<<c<<endl;
}
};
class D: public B, public C {
public:
int d;
D (int v1,int v2,int v3,int v4 ): A(v1) ,B(v1,v2) ,C(v1,v3),d(v4) {} //构造函数
void disp ( )
{
cout<<"a="<<a<<endl;
cout<<"b="<< b<<endl;
cout<<"c="<<c<<endl;
cout<<"d="<<d<<endl;
}
};
void main( )
{
D demo (10,20,30,40);
demo.disp ( );
}
[运行结果]
a=(1)
b=(2)
c=(3)
d=(4)
第2题
程情况。教务处想要“查询2006年入学的计算机专业(CS)的学生中平均成绩在85分以上的学生信息”。请将以下SQL语句补充完整。注:用对应英文表示。
SELECT *FROM Student WHERE Smajor="CS" AND Syear="2006"
AND(1))
(SELECT Sno FROM Study GROUP BY Sno
HAVING(2))
第3题
阅读以下说明和图,回答问题,将答案写在对应栏内。
【说明】
银行客户需要从ATM取100元,他向ATM的读卡机插卡,读卡机读取他的卡号,然后ATM屏幕初始化,ATM提示输入密码,客户输入密码(123456),ATM打开他的账户,密码有效,因此ATM提示选择事务,客户选择取钱,ATM提示输入金额,客户输入100元,ATM验证账户上有足够的钱,就从账上减去100元,ATM吐出100元,并退出的卡。
【问题】
根据上面的描述,在下面填写,完成未完成的协作图。
1.插卡(客户一读卡机)
2._(____→____)
3._(____→____)
4.提示输入PIN (123456) (ATM 显示屏→客户)
5._(____→____)
6._(____→____)
7.验证PIN(__→__)
8.提示选择事务(__→__)
9._(客户→ATM屏幕)
10.提示金额(ATM屏幕→客户)
11.输入金额(客户→ATM屏幕)
12.取钱(ATM屏幕→的账户)
13._(____→____)
14._(____→____)
15._(____→____)
16.提供收据(客户的账户→取钱机)
17._(____→____)
第4题
阅读以下说明,回答问题1至问题3,将答案写在对应栏内。
【说明】
在一个航空公司的航班管理系统中,有以下一些事实。
(1)一个航班可能是一个或多个乘客的运输工具,每个乘客可能是一个或多个航班的旅客。
(2)一个且仅一个飞行员必须对每个航班负责,每个飞行员可能负责一个或多个航班。
(3)一个或多个飞行员必须对每个乘客负责,每个飞行员必须对一个或多个乘客负责。
现有飞行员的实体如下:
飞行员(飞行员编号,航班编号,姓名,工资,起飞地,到达地,飞行信用时间)
说明:飞行信用时间是一个特定的航班分配给一名飞行员,授权他可以驾驶管理这个航班。
【问题1】
实体“飞行员”是否符合1NF,如果不符合,如何将它规范化。
【问题2】
由问题1得到的实体“飞行员”是否符合2NF,如果不符合,如何将它规范化。
【问题3】
指出最后得到关系模式的候选码。
第5题
阅读以下说明和JAVA 2代码,填入(n)处。
[说明]
以下程序实现了利用鼠标任意移动圆形的位置,仔细阅读代码和相关注释,将程序补充完整。
[代码6-1]
import java.awt.*;
import java.awt.event.*;
public class CIUSAMPLE extends Frame. implements MouseMotionListener, MouseListener
{
static CIUSAMPLE frm=new CIUSAMPLE ( );
int x=70,y=60,posX=70,posY=60,dx,dy;
public static void main (String args[])
{
frm.setTitle ("Dragging a circle");
frm.setSize (200,150);
(1)
ffm.addMouseMotionListener (frm);
frm.setVisible (true);
}
public void mousePressed (MouseEvent e)
{
(2)
dy=e.getY ( ) -posY;
}
public void mouseDragged (MouseEvent e)
{
(3)
y=e.getY ( ) -dy;
if(dx>0&&dx<50&&dy>0&&dy<50) //如果指针落在正方形区域内
{
Graphicsg=getGraphics ( );
(4)
}
}
public void paint (Graphics g)
{
g.setColor (Color.pink); //设置绘图颜色为粉红
g.fillOval(x,y,50,50); //以基准点为图形在左上角绘出圆形
(5)
posY=y;
}
public void mouseMoved (MouseEvent e) {}
public void mouseReleased (MouseEvent e) {}
public void mouseEntered (MouseEvent e) {}
public void mouseExited (MouseEvent e) {}
public void mouseClicked (MouseEvent e) {}
}
第6题
阅读以下说明和C++码,填入(n)处。
[说明]
建立一个分数类,使之具有下述功能:建立构造函数,它能防止分母为0,当分数不是最简形式时进行约分以及避免分母为负数。
[C++代码]
include<iostream.h>
include<math.h>
class Num
{
public:
Num (int a,int b);
private:
int num1;
int num2;
}:
Num:: Num (int a,int b)
{
if( (1) )
{
cout<<"ERROR"<<endl;
return;
}
int min=fabs(a)<fabs (b)?fabs (a): fabs (b);
int x=1;
for (int i=1;i<=min;i++)
if( (2) )
x=i;
a/=X;
b/=x;
if( (3) )
{
a=-a;
b=-b;
}
(4)
(5)
}
第7题
阅读以下预备知识、函数说明和C代码,将应填入(n)处的字句写在对应栏内。
[预备知识]
①对给定的字符集合及相应的权值,采用哈夫曼算法构造最优二叉树,并用结构数组存储最优二叉树。例如,给定字符集合{a,b,c,d}及其权值2、7、4、5,可构造如图3所示的最优二叉树和相应的结构数组Ht(数组元素Ht[0]不用)(见表5)。
结构数组HT的类型定义如下:
define MAXLEAFNUM 20
struct node {
char ch; / * 当前结点表示的字符,对于非叶子结点,此域不用*/
int weight; / * 当前结点的权值*/
int parent; / * 当前结点的父结点的下标,为0时表示无父结点*/
int Ichild, rchild
/ *当前结点的左、右孩子结点的下标,为0时表示无对应的孩子结点* /
} Ht[2 * MAXLEAFNUM];
②用'0'或'1'标识最优二叉树中分支的规则是:从一个结点进入其左(右)孩子结点,就用'0'('1')标识该分支(示例如图3所示)。
③若用上述规则标识最优二叉树的每条分支后,从根结点开始到叶子结点为止,按经过分支的次序,将相应标识依次排列,可得到由'0'、'1'组成的一个序列,称此序列为该叶子结点的前缀编码。如图3所示的叶子结点a、b、c、d的前缀编码分别是110、0、111、10。
【函数5.1说明】
函数void LeafCode (int root, int n)的功能是:采用非递归方法,遍历最优二叉树的全部叶子结点,为所有的叶子结点构造前缀编码。其中形参root为最优二叉树的根结点下标;形参 n为叶子结点个数。
在构造过程中,将Ht[p]. weight域用作被遍历结点的遍历状态标志。
【函数5.1】
char * * Hc;
void LeafCode (int root, int n)
{/*为最优二叉树中的n个叶子结点构造前缀编码,root是树的根结点下标* /
int i,p = root,cdlen =0;char code[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 =1
if (Ht[p],lchild !=0) { p=Ht[P].lchild; code[cdlen++] ='0';]
else if (Ht[p]. rchild ==0) {/* 若是叶子结点,则保存其前缀编码*/
Hc[p] = ( char * ) malloc( (cdlen + 1 ) * sizeof (char) );
(1); strcpy(He[ p] ,code);
}
}
else if (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=(2);(3); /*退回父结点*/
}
}/* while结束* /
}
【函数5.2说明】
函数void Decode(char*buff, int root)的功能是:将前缀编码序列翻译成叶子结点的字符序列并输出。其中形参root为最优二叉树的根结点下标;形参buff指向前缀编码序列。
【函数5.2】
void Decode( char * buff, int root)
Iint pre =root,p;
while ( * buff! = '\0') {
p = root;
while (p!=0){/*存在下标为p的结点*/
pre=p;
if((4))p=Ht[p].lchild; /*进入左子树*/
else p = Ht[p]. rchild; / *进入右子树*./
buff ++; / * 指向前缀编码序列的下一个字符* /
}
(5);
printf("%c", Ht [ pre]. ch);
}
}
第8题
阅读以下函数说明和Java代码,将应填入(n)处的字句写在对应栏内。
[说明]
很多时候,希望某些类只有一个或有限的几个实例,典型解决方案是所谓单身(Singleton)模式。但在多线程情况下,Singleton模式有可能出现问题,需要进行同步检查。如果对“检查singleton对象是否已经创建”进行同步,则存在严重的瓶颈,所有的线程都必须等待检查对象是否存在。解决方式是一种称为Double-Checked-Locking模式,其意图是将非必须的锁定优化掉,同步检查最多只发生一次,因此不会成为瓶颈。以下是Java语言实现,能够正确编译通过。
[Java代码]
public class USTax {
private static USTax instance=null;
(1) USTax(){}
private (2) static void doSync(){
if(instance==null){
System.out.println("实例不存在,创建实例..");
instance=(3);
System.out.println("实例创建成功");
}else{
System.out.println("实例已被创建了");
}
}
public static USTax getInstance(){
if(instance==null){
System.out.println("实例暂时不存在");
(4);//同步控制
}else{
System.out.println("实例已经存在");
}
return (5);
}
}
(1)
为了保护您的账号安全,请在“上学吧”公众号进行验证,点击“官网服务”-“账号验证”后输入验证码“”完成验证,验证成功后方可继续查看答案!