一起答
主观

阅读下列说明和图,回答问题1至问题3。

【说明】

 某学校的教学系统描述如下。

 学生信息包括:学号(Sno)、姓名(Sname)、性别(Ssex)、年龄(Sage)、入学年份(Syear)、主修专业(Smajor),其中学号是入学时唯一编定的。

 教师信息包括:教工号(Tno)、姓名(Tname)、性别(Tsex)、年龄(Tage)、职称(Ttitle),其中教工号是唯一编定的。

 课程信息包括:课程号(Cno)、课程名称(Cname)、学时(Cperiod)、学分(Ccredit),其中课程号是唯一编定的。

 每个专业每个年级只有一个班级,这样班级就可用入学年份标识。

 每位教师只教授特定的一门的课程,每门课程可以有多个教师教授,各位老师的上课地点及上课时间有所不同。注意:一门课程至少有一位教师教授,否则这门课程就视为不存在。

 每位学生可以同时选修多门不同的课程,一门课程至少要有10位学生选修,否则就取消这门课程的开设。注意:选修课程时要指定任课教师,不能重复选修同一门课程。课程结束后,任课教师给选修该课程的学生一个成绩(Grade)。注意:教师不能给没有选修他所教授课程的学生成绩,即使选修了其他教师教授的同一门课也不行。

 如图9-11所示是经分析得到的E-R图。

根据题意,给出联系的属性。实体间的联系有“一对一”、“一对多”和“多对多”,指出各联系分别属于哪一种。

参考答案
查看试卷详情
相关试题
  1. 阅读以下说明和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()

     {

     //省略具体实现

     }

  2. 阅读下列函数说明、图和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);

  3. 根据题意,请指出图9-13中状态A、B分别是什么状态,事件C、D分别是什么事件。

  4. 阅读以下函数说明和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(){

        //省略具体实现

        }

     }

  5. 阅读下列说明和图,回答问题1至问题3。

     【说明】

     某大型旅店为了便于管理,欲开发一个客房管理系统。希望实现客房预订、入住登记、账务结算、退房,以及将服务项目记入客人账单。

     旅客包括散客和团体,散客预订或入住时需要提供姓名、性别、身份证和联系电话,团体则提供团体名称、负责人的姓名、性别、身份证和联系电话,以及团体人数。对于散客,还要提供换房。

     旅店还提供了很多服务项目,比如早餐。对每一个入住客人,服务列表记录了住宿期间的各项服务,包括服务类型、日期、数量等。当然,客人也可以不要任何服务。

     旅店的客房有一个唯一的房间号,分为不同的类别,不同的房间床位数和价格不同。

     为了有效的管理,需要记录每天的客房状态。客房的状态有:空闲、占用、已预订和维修。

     . 客人入住后,客房处于占用状态。

     . 客人退房后,客房处于空闲状态。

     . 客人预订后,客房处于已预订状态。

     . 预订客人入住后,客房处于占用状态。

     . 预订客人取消预订后客房处于空闲状态。

     . 需要维修时客房处于维修状态。

     . 维修完成后客房处于空闲状态。

     该系统采用面向对象方法开发,系统中的类及类之间的关系用UML类图表示,如图9-12所示是该系统的类图的一部分,图9-13描述了客房状态的转变情况。

    请用如图9-12所示的属性和方法的名称给出客人类的属性和方法(注意;团体类中的负责人姓名等与散客的对应属性含义相同,不必区分)。

  6. 在UML中,重复度(Multiplicity)定义了某个类的一个实例可以与另一个类的多少个实例相关联。通常把它写成一个表示取值范围的表达式或者一个具体的值。例如图9-12中的类客人和住宿,客人端的“1”表示:一个住宿类的实例只能与一个客人类的实例相关联;住宿类端的“0..*”表示:一个住宿类的实例可以与0个或多个客人类的实例相关。请指出图9-12中(1)到(4)处的重复度分别为多少?

  7. 按照“有关模式名(属性,属性,...)”的格式,将此E-R图转换为5个关系模式,指出每个关系模式中的主键和外键,其中模式名根据需要取实体名或联系名。

  8. 若用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))

  9. 阅读下列说明和图,回答问题1至问题3。

    【说明】

     某学校的教学系统描述如下。

     学生信息包括:学号(Sno)、姓名(Sname)、性别(Ssex)、年龄(Sage)、入学年份(Syear)、主修专业(Smajor),其中学号是入学时唯一编定的。

     教师信息包括:教工号(Tno)、姓名(Tname)、性别(Tsex)、年龄(Tage)、职称(Ttitle),其中教工号是唯一编定的。

     课程信息包括:课程号(Cno)、课程名称(Cname)、学时(Cperiod)、学分(Ccredit),其中课程号是唯一编定的。

     每个专业每个年级只有一个班级,这样班级就可用入学年份标识。

     每位教师只教授特定的一门的课程,每门课程可以有多个教师教授,各位老师的上课地点及上课时间有所不同。注意:一门课程至少有一位教师教授,否则这门课程就视为不存在。

     每位学生可以同时选修多门不同的课程,一门课程至少要有10位学生选修,否则就取消这门课程的开设。注意:选修课程时要指定任课教师,不能重复选修同一门课程。课程结束后,任课教师给选修该课程的学生一个成绩(Grade)。注意:教师不能给没有选修他所教授课程的学生成绩,即使选修了其他教师教授的同一门课也不行。

     如图9-11所示是经分析得到的E-R图。

    根据题意,给出联系的属性。实体间的联系有“一对一”、“一对多”和“多对多”,指出各联系分别属于哪一种。

  10. 根据题意,指出图9-10(A)中缺失的数据流的名称,并指出该数据流的起点和终点。