问答题【问题4】 以下SQL语句用于查询没有订购产品代码为“1K10”的产品的所有客户名。请填补其中的空缺。 SELECT CustomerName FROM Customer (1) WHERE (2) (SELECT*FROM OrderDetail B, Order C WHERE B. ProductNo=C.ProductNo AND B. ProductNo='1K10' AND C. CustomerNo=A. CustomerNo)
问答题[说明]图12-5中显示一张交通违章处罚通知书。每一个交通违章通知书有一个惟一的编号。交通违章通知书包含了收到处罚的违章者记录、涉及违章的机动车记录、违章记录、处罚记录以及经办警察记录等信息。所根据这张通知书所提供的信息回答下面问题。
问答题[说明] 门禁系统是楼宇安防系统的重要组成部分,也是大厦智能化管理的体现。其工作过程是,如果在入口处的读卡器上刷卡,锁控器(LockController)接收读卡器(FingerReader)的读卡信息并进一步识别,如果为有效卡,则触发控制电控锁(Lock)的继电器,让持卡人通过。锁控器还会将这些读卡及进出事件存储起来,并将相关事件记录传送给上位机。每个锁控器管理1~4个门,每5~8个锁控器接入1条RS-485总线,并转换成RS-232方式与管理主机的串行口。对锁控器进行相关设置后,允许它脱机独立对门禁点进行控制,管理主机或通信线路故障都不会影响它的正常运行。在普通场合通常会设置1个出门按钮,允许已进入的人员按动此按钮以打开电控锁;而对于一些重要场合通常会在门的内外安装两个读卡器,进出门时都需按预设方式进行刷卡。 门禁系统中的每个电控锁都有一个唯一的编号。锁的状态有两种:“已锁住”和“未锁住”。在管理主机上可以设置每把锁的安全级别及用户的开锁权限。只有当用户的开锁权限大于或等于锁的安全级别并且锁处于“已锁住”状态时,才能将锁打开。用户的感应卡信息、开锁权限及锁的安全级别都保存在管理主机的数据库中。表2-19给出了门禁系统主要组成部件的作用。 表2-19 感应门禁系统主要组成部件及其作用表 部件名称 主要作用(功能) 读卡感应器(FingerReader) 通过射频感应原理,识别感应卡内置加密卡号 锁控器(LockController) 存储感应卡权限和刷卡记录,向管理软件上传读卡器送来的信号,并负责和上位机通讯和其他数据存储器协调 电控锁(Lock) 电动执行机构 主机管理软件(Win-Pak Software) 通过计算机对所有单元进行中央管理和监控,进行相应的时钟、授权、统计管理工作 RS-485/232信号转换器 对所有数据存储器进行联网和远距离通信 门禁电源 提供系统工作时所需的电源能量 感应卡 存储用户的不可复制和解密的ID号 开门按钮 出门时可以设置为按此按钮出门(可选部件) 软件开发公司A承担了该门禁控制系统的开发任务,其开发小组采用根据问题领域的模型建立系统结构的面向对象方法完成该系统的设计,系统中的类及类之间的关系用UML类图表示。
问答题【说明】 “背包问题”的基本描述是:有一个背包,能盛放的物品总重量为S,设有N件物品,其重量分别为w1;w2,……,wn,希望从N件物品中选择若干件物品,所选物品的重量之和恰能放入该背包,即所选物品的重量之和等于S。 如下程序均能求得“背包问题”的一组解,其中程序4.1是“背包问题”的递归解法,而程序4.2是“背包问题”的非递归解法。 【程序4.1】 #include<stdio.h> #define N 7 #define S 15 int w[N+1]={0,1,4,3,4,5,2,7}; int knap(int s,int n) { if(s==0)return 1; if(s<0||(s>0& &n<1))return 0; if({{U}} (1) {{/U}}))| printf("%4d",w[n]);return 1; } return{{U}} (2) {{/U}}; } main(){ if(knap(S,N))printf("OK!/n"); else printf("NO!/n"); } 【程序4.2】 #include<stdio.h> #define N 7 #define S 15 typedef struct{ int s; int n: int job; } KNAPTP; int w[N+1]={0,1,4,3,4,5,2,7}; int knap(int s,int n); main(){ if(knap(S,N))printf("OK!/n"); else printf("NO!/n");} int knap(int s,int n) { KNAPTP stack[100],x; int top,k,rep; x.s=s;x.n=n; x.job=0; top=|;Stack[top]=x; k=0; while({{U}} (3) {{/U}}){ x=Stack[top]; rep=1; while(!k && rep){ if(x.s==0)k=1;/*已求得一组解*/ else if(x.s<0||x.n <=0)rep=0; else{x.s={{U}} (4) {{/U}};x.job=1; {{U}} (5) {{/U}}=x; } } if(!k){ rep=1; while(top>=1&&rep){ x=stack[top--]; if(x.job==1){ x.s+=W[x.n+1]; x.job=2; Stack[++top]=x; {{U}} (6) {{/U}}; } } } } if(k){/*输出一组解*/ while(top>=1){ x=staCk[top--]; if(x.job==1) printf("%d/t",w[x.n+1]); } } return k; }
问答题阅读下列说明和图,回答问题1至问题2,将解答填入对应栏内。 [说明] 银行的自动柜员机(ATM)的功能描述如下: (1)金融卡与信用卡识别:包含伪卡识别以及密码验证; (2)主菜单项:这是一台ATM最主要的人机界面,提供各项功能给客户,具体有:提款、转帐、更改密码以及存款; (3)结束操作:客户执行完“菜单项”的功能后,可以选择“打印单据”或“不打印单据”,选好后就结束此次交易。 注意,ATM除了能处理本行的银行卡外,其他银行的银行卡也应该能处理,通过“金融中心”与其他银行主机进行数据交换。另外,为了方便,ATM还提供快捷提款,并提供代交费功能(代交费是以转帐的方式处理的)。 该系统采用面向对象方法开发,系统中的类以及类之间的关系用UML类图表示。
问答题 阅读以下说明和图,回答问题1和问题2,将答案写在对应栏内。
【说明】
某教学管理系统的用户是教学管理人员、教师和学生。系统主要提供学生选课管理和学生成绩管理两方面的功能。
(1)学生选修课管理
主要功能是管理新学期开始时,学生对选修的课程进行选课注册工作。新学期开始后的前两周为学生试听、选课注册时间;允许校内各院系学生跨专业跨年级选修课程;学生可以在校园网的任何一个终端进行选课。
①新学期选修课程表生成:各学院教学管理人员在新学期开始前,将准备开设的选修课程名称、课程代码、总课时、上课时间、学分、任课教师和上课教室录入系统,供学生选课使用。新学期开学两周后,系统自动将实际选课学生少于10人的课程停开,并删除该课程;教学管理人员打印学生选课注册名单和开课通知书,送交有关部门和任课教师。
②学生选课注册:新学期开学前两周为学生试听、选课注册时间,并允许改变或取消注册申请。学生调用待选课程表,系统显示课程名、课程代码、任课教师、上课时间、总课时、上课教室、学分和本课程己选修人数。学生所选几门课程在上课时间上不能冲突:若一门课程实际选课学生已达到40人时,停止选课。当学生退出系统时,系统提示该学生所选的几门课程、任课教师、上课时间、教室、学分和学分总计。
③选修课程查询:选修课程表信息查询,用户是教师、学生和教学管理人员。系统显示课程名、课程代码、任课教师、上课时间、总课时、上课教室、学分和本课程已选修人数。查询关键词可为学院名称、专业、授课教师等。
学生选课情况查询:教师和教学管理人员可以查看学生的选课情况。查询关键词可以为学生姓名(学号)、课程名称(课程代码)、授课教师等。学生只能查自己所选课程内容,不允许查其他同学选课情况。
教师简历查询:用户是学生、教师和教学管理人员。查询关键词可为教师姓名、性别、职称、年龄等单关键词或组合关键词。
④信息统计与报表生成:各学院教学管理人员对学生选课注册信息进行统计(按课程、专业等),打印汇总报表。
⑤把学生选课注册信息传送到财务管理系统,计算学生应交纳的费用。 (2)学生成绩管理
①学生考试成绩录入:各学院教学管理人员将学生考试成绩录入系统。录入学生成绩时,系统自动检查财务系统传来的选课交费信息,核对该学生是否已经交纳本门课程的费用,没有交纳费用者,不给成绩。
②成绩查询;教师和教学管理人员可查询学生各门课程的成绩。查询关键词可为学生姓名(学号),课程名(课程代码)等。学生只能查自己各门课程的成绩,不允许查其他同学成绩。
③成绩汇总与报表生成:教学管理人员对学生考试成绩信息进行统计(按学生、课程、专业等),打印汇总报表。向学校教务管理系统发送汇总信息表格等,不反馈信息。
问答题【说明】当一元多项式aixi中有许多系数为零时,可用一个单链表来存储,每个节点存储一个非零项的指数和对应系数。为了便于进行运算,用带头节点的单链表存储,头节点中存储多项式中的非零项数,且各节点按指数递减顺序存储。例如:多项式8x5-2x2+7的存储结构为:函数中使用的预定义符号如下:#defineEPSIle-6structNode(/*多项式中的一项*/doublec;/*系数*/inte;/*指数*/structNode*next;;typedefstruct/*多项式头节点*/intn;/*多项式不为零的项数*/structNode*head;POLY;【函数】voidDel(POLY*C,structNode*p)/*若p是空指针则删除头节点,否则删除p节点的后继*/structNode*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*/voidInsert(POLY*C,structNode*pC)/*将pC节点按指数降序插入到多项式C中*//*若C中存在pC对应的指数项,则将系数相加;若其结果为零,则删除该节点*/structNode*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;elseif(t->e==pC->e)/*C中已经存在该幂次项*/t->c+=pC->c;/*系数相加*/if(fabs(t->c)<EPSI)/*系数之和为零*/(4);/*删除对应节点*/C->n--;(5);elset=NULL;/*C中已经不存在该幂次项*//*while*/if(t==NULL)/*适当位置插入*/pC->next=tp->next;tp->next=pC;C->n++;/*if*/;/*Insert*/
问答题【说明】某超市的销售业务由一个销售业务管理系统进行管理,该系统每完成一次交易都需要提供顾客发票,其格式见表6所示。对于这样一个销售业务管理系统,分别给出了以下两种关系数据库的设计(下划线表示主关键字)设计一:顾客Customer(顾客代码Cno,姓名name,住址address,联系电话phone)收银员Salesman(收银员代码Sno,身份证号idno,姓名name,住址address,联系电话phone)商品Merchandise(商品代码Mno,商品名称Mname,价格price)发票Invoice(发票号码Ino,交易日期Idate,顾客代码Cno,收银员代码Sno,商品代码Mno,单价unitpfice,数量amount)设计二:顾客Customer(顾客代码Cno,姓名name,住址address,联系电话phone)收银员Salesman(收银员代码Sno,身份证号idno,姓名name,住址address,联系电话phone)商品Memhandise(商品代码Mno,商品名称Mname,价格price)发票Ivoice(发票号码Ino,交易日期Idate,顾客代码Cno,收银员代码Sno)发票明细Invoicedetail(发票号码Ino,商品代码Mno,单价unitprice,数量amount)
问答题【说明】某考务处理系统具有以下功能:(1)输入报名单;(2)自动编制准考证号;(3)输出准考证;(4)输入成绩清单;(5)输出成绩通知单;(6)输出成绩分布表;(7)输入合格标准、输出录取通知单;(8)试题难度分析,并输出试题难度分析表。这里给出了实现上述要求的部分不完整的数据流图,其中部分数据流的组成如下所示。报名单=报名号+姓名+通信地址考生名册=报名号+准考证号+姓名+通信地址成绩册=准考证号+(课程号+成绩)(其中{W}表示W重复多次)准考证=报名号+姓名+准考证号【问题1】指出0层图中可以删去的部分。【问题2】在加工1子图中将遗漏的数据流添加在答题纸上。【问题3】加工2子图分解成如图所示的4个子加工及相关的文件(即数据存储)。试在此基础上将相关的DFD成份添加在答题纸上,以完成该加工子图。
问答题【说明】 中国教育科研网受理了许多用户(高校和研究机构)中请在指定IP上开设网络访问业务。网络访问包括国内流量和国际流量。教育科研网管理中心保存了网络访问用户档案和网络访问业务档案。 网络访问用户档案的记录格式为: 用户编码 用户名 用户地址 网络访问业务档案的记录格式为: IP地址 用户编码 国内流量许可标志 国际流量许可标志 用户每次上网流量的计费数据都自动地记录在管理中心的服务器上。计费数据的记录格式为: 日期 IP地址 受访问的IP地址 访问开始时间 持续时间 管理中心为了用计算机自动处理流量收费以提高工作效率,开发计费管理系统。该系统每月能为每个用户打印出网络流量缴费通知单。缴费通知单的记录格式为: IP地址 用户编码 国内流量费用 国际流量费用 总额 【流程图】 下面的流程图描述了该系统的数据处理过程。该系统每天对原始的计费数据进行分类排序,并确定每个网络访问记录的访问类型(本地/国内/国际),冉根据流量费用单价文件,算出每个记录应收取的费用。因此,形成的日计费文件中增加了两个数据项:访问类型和话费。该系统每日对日计费文件进行累计(按IP地址和访问类型,对该类型的费用进行累计,得到该p地址该访问类型的当月费用总计),形成月计费文件。月计费文件经过出账处理形成流量费用账单文件。流量费用账单文件的记录格式为: 月份 用户编码 IP地址 国内费用 国际费用 1. 【问题1】 (1)请说明流程图中的文件F0、F1分别是哪个文件。 (2)处理1和处理5分别按照哪些数据项进行分类?
问答题阅读以下关于工作流系统模型建立和性能分析的叙述,根据要求回答问题1~问题4。[说明]某软件开发公司向客户交付系统产品后,由技术支持部门负责向客户提供技术服务。该技术支持部门的业务流程如下:①当该技术支持部门接到一个客户问询电话时,由客户服务代表(CSR)接听该电话。客户服务代表根据客户问询内容产生一份服务请求文件,并开始解决客户提出的问题;②若客户服务代表解决了客户提出的问题,这份服务请求文件被标记为“已解决”;③如果客户服务代表在2个小时内未能解决这个问题,客户服务代表将服务请求文件转交给技术支持代表(TSR)处理;④如果技术支持代表也无法解决这个问题,他/她将邀请助理工程师(ENGR)来一起处理这个问题;⑤若助理工程师解决了这个问题,该服务请求文件被标记为“已解决”;⑥若技术支持代表和助理工程师认为,是由于系统的错误引起的问题,则告知客户该问题目前无法解决;并把服务请求文件转交给本公司的工程部门处理;⑦对已经解决的服务请求,每个月底进行一次归档(放入归档数据库)。该软件公司正在创建一个相应的工作流管理系统,目前正处于过程定义阶段,即创建工作流模型阶段。对于这些工作流模型,除了要考虑工作流的正确性外,工作流的性能也是十分重要的。工作流性能主要反映工作流定量方面的特性,例如,任务的完成时间、单位时间内处理的任务数量、资源的利用率及在预定时间标准内完成任务的百分比等。图7-14所示的是一个简单的工作流模型(其中单位时间为1小时),它表示这样一个执行过程:每小时将会有20个任务到达c1,这20个任务首先经过处理task1,再经过处理task2,最终将结果传递到c3。处理task1和处理task2相互独立。假设性能评价模型符合M/M/1排队模型,在计算性能指标的过程中可以使用下列公式进行计算:其中,ρ表示资源利用率,λ表示单位时间内到达的任务数,μ表示该资源单位时间内能够完成的任务数。
问答题[问题1] 请用DFD 图描绘该功能的需求。
问答题【问题1】
请按[说明]中的要求画出修改后的数据模型。
问答题 阅读以下说明,回答问题1至问题3,将答案写在对应栏内。
【说明】 关于一位花商有以下一些事实。
(1)销售在不同地区生长的花,这些地区一年的量低温度在一定范围内变化。
(2)想用编号来表示发货类型。 (3)要出售某些类型的花。
假定已经通过SQL语句建立了基本表: CREATE TABLE Zone
( ID Char(2) PRIMARY KEY, LowerTemp Number
(3), UpperTemp Number (3) );
CREATE TABLE Delivery ( ID char(2)PRIMARY
KEY, Category VarChar (5), DelSize Number
(5,3) ): CREATE TABLE FlowerInfo
( ID Char(3) CONSTRAINT
Flowerinfo_ id _ pk PRIMARY KEY, ComName VarChar
(25), LatName VarChar (30), Czone Number
(3), Hzone Number (3), Delivered Number
(3), SunNeed Char (3), PRIMARY KEY
(ID) ): 地区(ID,最高温度,最低温度)
发货(ID,发货类型,发货规格)
花的信息(ID,普通名,拉丁名,花能够生长的最冷地区,花能够生长的最热地区,发货类型,日光需求)
问答题【说明】传输门是传输系统中的重要装置。传输门具有Open(打开)、Closed(关闭)、Opening(正在打开)、StayOpen(保持打开)和Closing(正在关闭)五种状态。触发传输门状态转换的事件有click、complete和timeout三种。事件与其相应的状态转换如下图所示。下面的C++代码1与C++代码2分别用两种不同的设计思路对传输门进行状态模拟,请填补代码中的空缺。【C++代码1】constintCLOSED=1;constintOPENING=2;constintOPEN=3;constintCLOSING=4;constintSTAYOPEN=5;//定义状态变量,用不同整数表示不同状态classDoor{Private:intstate;//传输门当前状态voidsetState(intstate){this->state=state;}//设置当前状态public:Door():state(CLOSED){};voidgetState(){//根据当前状态输出相应的字符串switch(state){caseOPENING:cout<<"OPENING"<<endl;break;caseCLOSED:cout<<"CLOSED"<<endl;break;caseOPEN:cout<<"OPEN"<<endl;break;caseCLOSING:cout<<"CLOSING"<<endl;break;caseSTAYOPEN:cout<<"STAYOPEN"<<endl;break;}};voidclick(){//发生click事件时进行状态转换if({{U}}(1){{/U}})setState(OPENING);elseif({{U}}(2){{/U}})setState(CLOSING);elseif({{U}}(3){{/U}})setState(STAYOPEN);}voidtimeout(){//发生timeout事件时进行状态转换if(state==OPEN)setState(CLOSING);}voidcomplete(){//发生complete事件时进行状态转换if(state==OPENING)setState(OPEN);elseif(state==CLOSING)setState(CLOSED);}};intmain(){DooraDoor;aDoor.getState();aDoor.click();aDoor.getState();aDoor.complete();aDoor.getState();aDoor.click();aDoor.getState();aDoor.click();aDoor.getState();return0;}【C++代码2】classDoor{public:DoorState*CLOSED,*OPENING,*OPEN,*CLOSING,*STAYOPEN,*state;Door();virtual~Door(){……//释放申请的内存,此处代码省略);voidsetState(DoorState*state){this->state=state;}voidgetState(){//此处代码省略,本方法输出状态字符串,//例如,当前状态为CLOSED时,输出字符串为“CLOSED”};voidclick();voidtimeout();voidcomplete();};Door::Door(){CLOSED=newDoorClosed(this);OPENING=newDoorOpening(this);OPEN=newDoorOpen(this);CLOSING=newDoorClosing(this);STAYOPEN=newDoorStayOpen(this);state=CLOSED;}voidDoor::click(){{{U}}(4){{/U}};)voidDoor::timeout(){{{U}}(5){{/U}};)voidDoor::complete(){{{U}}(6){{/U}};}classDoorState//定义一个抽象的状态,它是所有状态类的基类{protected:Door*door;public:DoorState(Door*door){this->door=door;}virtual~DoorState(void);virtualvoidclick(){}virtualvoidcomplete(){}virtualvoidtimeout(){}};classDoorClosed:publicDoorState{//定义一个基本的Closed状态public:DoorClosed(Door*door):DoorState(door){}virtual~DoorClosed(){}voidclick();};voidDoorClosed::click(){{{U}}(7){{/U}};}//其他状态类的定义与实现代码省略intmain(){DooraDoor;aDoor.getState();aDoor.click();aDoor.getState();aDoor.complete();aDoor.getState();aDoor.timeout();aDoor.getState();return0;}
问答题【程序】下面是一段求最大值的程序,其中datalist是数据表,n是datalist的长度。intGetMax(intn,intdatalist[])intk=0;for(intj=1;j<n;j++)if(datalist[j]>datalist[k])k=j;returnk;【控制流图】1.【问题1】该程序的控制流图中A~E分别是什么?
问答题【说明】一棵非空二叉树中“最左下”结点定义为:若树根的左子树为空,则树根为“最左下”结点;否则,从树根的左子树根出发,沿结点的左孩子分支向下查找,直到某个结点不存在左孩子时为止,该结点即为此二叉树的“最左下”结点。例如:图13-26所示的以A为根的二叉树的“最左下”结点为D,以C为根的子二叉树中的“最左下”结点为C。二叉树的结点类型定义如下:typedefstructBSTNode{intdata;structBSTNode*lch,*rch;//结点的左、右孩子指针}*BSTree;代码13-7中,函数BSTreeFind_Del(BSTreeroot)的功能是:若root指向一棵二茶树的根结点,则找出该结点的右子树上的“最左下”结点*p,并从树中删除以*p为根的子树,函数返回被删除子树的根结点指针;若该树根的右子树上不存在“最左下”结点,则返回空指针。【代码13-7】BSTreeFind_Del(BSTreeroot){BSTreep,pre;If(!root)/*root指向的二叉树为空树*/returnNULL;{{U}}(1){{/U}};/*令p指向根结点的右子树*/if(!p)returnNULL;{{U}}(2){{/U}};/*设置pre的初值*/while(p->lch){/*查找“最左下”结点*/pre=p;p={{U}}(3){{/U}};}if({{U}}(4){{/U}}==root)/*root的右子树根为“最左下”结点*/pre->rch=NULL;else{{U}}(5){{/U}}=NULL;/*删除以“最左下”结点为根的子树*/returnp;}
问答题【说明】在一公文处理系统中,开发者定义了一个公文结构OfficeDoc,其中定义了公文应该具有的属性。当公文的内容或状态发生变化时,与之相关联的DocExplorer结构的值都需要发生改变。一个OfficeDoc结构能够关联一组DocExplorer结构。当OfficeDoc结构的内容或状态发生变化时,所有与之相关联的DocExplorer结构都将被更新,这种应用被称为观察者模式。以下代码采用C语言实现,能够正确编译通过。【代码13-4】#include<stdio.h>#defineOBS_MAXNUM20/*一个OfficeDoc变量最多能够关联的DocExplorer变量的个数*/typedefvoid({{U}}(1){{/U}})(strucOffieeDoc*,structDoeExplorer*)I;structDocExplorer{funcupdate;/*DocExplorer结构采用的更新函数*//*其它的结构字段省略*/};struetOffieeDoc{{{U}}(2){{/U}}myObs[OBS_MAXNUM;/*存储所有与OfficeDoc相关联的DocExplorer结构指针*/intindex;/*与OffieeDoc结构变量相关联的DoeExplorer结构变量的个数*/};voidattaeh(structOfficeDoc*doc,structDocExplorer*ob){/*关联Observer结构ob与OffieeDoe结构doe*/intloop=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++;}voiddetaeh(structOfficeDoc*doc,structDocExplorer*ob){/*解除doc结构与ob结构间的关联*/intloop;if(ob==NULL)return;for(loop=0;loop<doc->index;loop++){if(doe->myObs[loop]==ob){if(loop<=doc->index-2)doc->myObs[loop]=doc->myObs[{{U}}(3){{/U}}];doc->myObs[doc->index-1]=NULL;doc->index——;breack;}}}voidupdatel(structOfficeDoe*doe,structDoeExplorer*ob){/*更新ob结构的值,更新代码省略*/}voidupdate2(structOffieeDoc*doc,struetDocExplorer*ob){/*更新ob结构的值,更新代码省略*/}voidnotifyObs(structOfficeDoc*doc){/*当doc结构的值发生变化时,通知与之关联的所有DocExplorer结构变量*/intloop;for(loop=0;loop<doc->index;loop++){(doc->myObs[loop)->update({{U}}(4){{/U}});}}voidmain(){structOfficeDocdoc;/*定义一了OfficeDoe变量*/structDocExplorerexplorer1,explorer2;/*定义两个DocExplorer变量*//*初始化与OfficeDoc变量相关的DocExplorer变量个数为0*/doc.index=0;explorer1.update=update1;/*设置explorer1变量的更新函数*/explorer2.update=update2;/*设置explorer2变量的更新函数*/attach(/*关联explorer1与doc对象*/attach(/*关联explorer2与doc对象*//*其它代码省略*/{{U}}(5){{/U}};/*通知与OfficeDoe相关的所有DoeExploer变量*/return;}
问答题[问题2]
数据流图8-5中缺少了与“年度汇总”加工相关的数据流,请指出此数据流的起点和终点。
数据流图8-5中缺少了与“查询”加工相关的数据流,请指出此数据流的起点和终点。
问答题[说明] 在学校中,存在以下关系:(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表示成绩,成绩为空时表示这学期正在上的课程。1. [问题1] 根据要求将SQL语句补充完整。 (1)查询各系的学生数 SELECT (1) ,COUNT(*) (2) GROUP BY DEPTNO; (2)更改课程号为C601的课程名为“大学物理” UPDATE (3) SET (4) (3)基于学生信息表,建立一个计算机系(系编号为D01)的学生视图。写出命令。 CREATE OR REPLACE VIEW V_STUDENT AS (5)