按照“有关模式名(属性,属性,...)”的格式,将此E-R图转换为5个关系模式,指出每个关系模式中的主键和外键,其中模式名根据需要取实体名或联系名。
阅读以下说明和c++代码,将应填入(n)处的字句写在对应栏内。
【说明】
现要编写一个画矩形的程序,目前有两个画图程序:DP1和DP2,DP1用函数draw_a_line(x1, y1,x2,y2)画一条直线,DF2则用drawline(x1,x2,y1,y2)画一条直线。当实例画矩形时,确定使用DP1还是DP2。为了适应变化,包括“不同类型的形状”和“不同类型的画图程序”,将抽象部分与实现部分分离,使它们可以独立地变化。这里,“抽象部分”对应“形状”,“实现 部分”对应“画图”,与一般的接口(抽象方法)与具体实现不同。这种应用称为Bridge(桥接)模式。图9-7显示了各个类间的关系。
这样,系统始终只处理3个对象:Shape对象、Drawing对象、DP1或DP2对象。以下是 C++语言实现,能够正确编译通过。
【C++代码】
class DP1{
public:
static void draw_a_line(double x1, double y1,double x2, double y2){
//省略具体实现
}
);
class DP2{
public:
static void drawline(double x1, double x2,double y1, double y2){
//省略具体实现
}
};
class Drawing{
public:
(1) void drawLine(double x1,double y1,double x2,double y2)=0;
};
class V1Drawing:public Drawing{
public:
void drawLine(double x1, double y1,double x2, double y2){
DP1::draw_a_line(x1,y1,x2,y2);
}
};
class V2Drawing:public Drawing{
public:
void drawLine(double x1, double y1, double x2, double y2){
(2);
}
};
class Shape{
private:
(3) _dp;
public:
Shape(Drawing *dp);
virtual void draw()=0;
void drawLine(double x1, double y1, double x2, double y2);
};
Shape::Shape(Drawing *dp)
{
_dp = dp;
}
void Shape::drawLine(double x1, double y1, double x2, double y2)
{ //画一条直线
(4);
}
class Rectangle: public Shape{
private:
double _x1,_y1,_x2,_y2;
public:
Rectangle(Drawing *dp, double x1, double y1,
double x2, double y2);
void draw();
};
Rectangle::Rectangle(Drawing *dp, double x1, double y1, double x2, double y2)
:(5)
{
_x1=x1;_y1=y1;_x2=x2;_y2=y2;
}
void Rectangle::draw()
{
//省略具体实现
}
阅读下列函数说明、图和C代码,将应填入(n)处的字句写在对应栏内。
【说明】
当一元多项式aixi中有许多系数为零时,可用一个单链表来存储,每个节点存储一个非零项的指数和对应系数。
为了便于进行运算,用带头节点的单链表存储,头节点中存储多项式中的非零项数,且各节点按指数递减顺序存储。例如:多项式8x5-2x2+7的存储结构为:
函数中使用的预定义符号如下:
#define EPSI le-6
struct Node( /*多项式中的一项*/
double c; /*系数*/
int e; /*指数*/
struct Node *next;
};
typedef struct{ /*多项式头节点*/
int n; /*多项式不为零的项数*/
struct Node *head;
}POLY;
【函数】
void Del(POLY *C, struct Node *p)
/*若p是空指针则删除头节点,否则删除p节点的后继*/
{
struct Node *t;
/*C是空指针或C没有节点*/
if(C==NULL||C->head==NULL)return;
if((1)){/*删除头节点*/
t=C->head;
C->head=t->next;
return;
}/*if*/
t=p->next;
p->next=t->next;
};/*Del*/
void Insert(POLY *C, struct Node *pC)
/*将pC节点按指数降序插入到多项式C中*/
/*若C中存在pC对应的指数项,则将系数相加;若其结果为零,则删除该节点*/
{
struct Node *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){
(2);
C->head=pC;
C->n++;
return;
}/*if*/
(3);
t=C->head;
while(t!=NULL){
if(t->e>pC->e){
tp=t;
t=t->next;
}
else if(t->e==pC->e){/*C中已经存在该幂次项*/
t->c+=pC->c;/*系数相加*/
if(fabs(t->c)<EPSI){/*系数之和为零*/
(4);/*删除对应节点*/
C->n--;
}
(5);
根据题意,请指出图9-13中状态A、B分别是什么状态,事件C、D分别是什么事件。
阅读以下函数说明和Java代码,将应填入(n)处的字句写在对应栏内。
【说明】
现要编写一个画矩形的程序,目前有两个画图程序:DP1和DP2,DP1用函数draw_a_line(x1,y1,x2,y2)画一条直线,DP2则用drawline(x1,x2,y1,y2)画一条直线。当实例画矩形时,确定使用DP1还是DP2。
为了适应变化,包括“不同类型的形状”和“不同类型的画图程序”,将抽象部分与实现部分分离,使它们可以独立地变化。这里,“抽象部分”对应“形状”,“实现部分”对应“画图”,与一般的接口(抽象方法)与具体实现不同。这种应用称为Bridge(桥接)模式。图9-6显示了各个类间的关系。
这样,系统始终只处理3个对象:Shape对象、Drawing对象、DP1或DP2对象。以下是 Java语言实现,能够正确编译通过。
【Java代码】
//DP1.java文件
public class DP1{
static public void draw_a line(double x1,double y1,
double x2,double y2){
//省略具体实现
}
}
//DP2.java文件
public class DP2{
static public void drawline(double x1,double y1,
double x2,double y2){
//省略具体实现
}
}
//Drawing.java文件
(1) public class Drawing{
abstract public void drawLine(double x1, double y1, double x2, double y2);
}
//V1Drawing.java文件
public class V1Drawing extends Drawing{
public void drawLine(double x1, double y1, double x2, double y2){
DP1.draw_a_line(x1,y1,x2,y2);
}
}
//V2Drawing.java文件
public class V2Drawing extends Drawing{
public void drawLine(double x1,double y1,
double x2, double y2)(//画一条直线
(2);
}
}
//Shape.java文件
abstract public class Shape{
abstract public void draw();
private (3) _dp;
Shape(Drawing dp){
_dp=dp;
}
protected void drawLine(double x1,double y1,
double x2, double y2){
(4);
}
}
//Rectangle.java文件
public class Rectangle extends Shape{
private double_x1,_x2,_y1,_y2;
public Rectangle(Drawing dp,
double x1,double y1,
double x2,double y2){
(5);
_x1=x1;_x2=x2;
_y1=y1;_y2=y2;
}
public void draw(){
//省略具体实现
}
}
阅读下列说明和图,回答问题1至问题3。
【说明】
某大型旅店为了便于管理,欲开发一个客房管理系统。希望实现客房预订、入住登记、账务结算、退房,以及将服务项目记入客人账单。
旅客包括散客和团体,散客预订或入住时需要提供姓名、性别、身份证和联系电话,团体则提供团体名称、负责人的姓名、性别、身份证和联系电话,以及团体人数。对于散客,还要提供换房。
旅店还提供了很多服务项目,比如早餐。对每一个入住客人,服务列表记录了住宿期间的各项服务,包括服务类型、日期、数量等。当然,客人也可以不要任何服务。
旅店的客房有一个唯一的房间号,分为不同的类别,不同的房间床位数和价格不同。
为了有效的管理,需要记录每天的客房状态。客房的状态有:空闲、占用、已预订和维修。
. 客人入住后,客房处于占用状态。
. 客人退房后,客房处于空闲状态。
. 客人预订后,客房处于已预订状态。
. 预订客人入住后,客房处于占用状态。
. 预订客人取消预订后客房处于空闲状态。
. 需要维修时客房处于维修状态。
. 维修完成后客房处于空闲状态。
该系统采用面向对象方法开发,系统中的类及类之间的关系用UML类图表示,如图9-12所示是该系统的类图的一部分,图9-13描述了客房状态的转变情况。
请用如图9-12所示的属性和方法的名称给出客人类的属性和方法(注意;团体类中的负责人姓名等与散客的对应属性含义相同,不必区分)。
在UML中,重复度(Multiplicity)定义了某个类的一个实例可以与另一个类的多少个实例相关联。通常把它写成一个表示取值范围的表达式或者一个具体的值。例如图9-12中的类客人和住宿,客人端的“1”表示:一个住宿类的实例只能与一个客人类的实例相关联;住宿类端的“0..*”表示:一个住宿类的实例可以与0个或多个客人类的实例相关。请指出图9-12中(1)到(4)处的重复度分别为多少?
按照“有关模式名(属性,属性,...)”的格式,将此E-R图转换为5个关系模式,指出每个关系模式中的主键和外键,其中模式名根据需要取实体名或联系名。
若用Student表存储学生信息,Teacher表存储教师信息,Course表存储课程信息,Study表存储学生选修课程情况。教务处想要“查询2006年入学的计算机专业(CS)的学生中平均成绩在85分以上的学生信息”。请将以下SQL语句补充完整。注:用对应英文表示。
SELECT *FROM Student WHERE Smajor="CS" AND Syear="2006"
AND(1))
(SELECT Sno FROM Study GROUP BY Sno
HAVING(2))
阅读下列说明和图,回答问题1至问题3。
【说明】
某学校的教学系统描述如下。
学生信息包括:学号(Sno)、姓名(Sname)、性别(Ssex)、年龄(Sage)、入学年份(Syear)、主修专业(Smajor),其中学号是入学时唯一编定的。
教师信息包括:教工号(Tno)、姓名(Tname)、性别(Tsex)、年龄(Tage)、职称(Ttitle),其中教工号是唯一编定的。
课程信息包括:课程号(Cno)、课程名称(Cname)、学时(Cperiod)、学分(Ccredit),其中课程号是唯一编定的。
每个专业每个年级只有一个班级,这样班级就可用入学年份标识。
每位教师只教授特定的一门的课程,每门课程可以有多个教师教授,各位老师的上课地点及上课时间有所不同。注意:一门课程至少有一位教师教授,否则这门课程就视为不存在。
每位学生可以同时选修多门不同的课程,一门课程至少要有10位学生选修,否则就取消这门课程的开设。注意:选修课程时要指定任课教师,不能重复选修同一门课程。课程结束后,任课教师给选修该课程的学生一个成绩(Grade)。注意:教师不能给没有选修他所教授课程的学生成绩,即使选修了其他教师教授的同一门课也不行。
如图9-11所示是经分析得到的E-R图。
根据题意,给出联系的属性。实体间的联系有“一对一”、“一对多”和“多对多”,指出各联系分别属于哪一种。
根据题意,指出图9-10(A)中缺失的数据流的名称,并指出该数据流的起点和终点。
高级经济师考试试题精选练习(1)
高级经济师考试模拟练习题之单选题(1
高级经济师考试试题精选练习(2)
高级经济师考试试题精选练习(3)
高级经济师考试试题:经济法案例试题精
高级经济师考试模拟试题及答案
高级经济师考试试题及答案:单选练习题
高级经济师考试试题:经济法案例试题精
高级经济师考试模拟题及答案练习(1)
高级经济师考试模拟题及答案练习(2)