【模考】2022年5月-软件设计师下午_第1页
【模考】2022年5月-软件设计师下午_第2页
【模考】2022年5月-软件设计师下午_第3页
【模考】2022年5月-软件设计师下午_第4页
【模考】2022年5月-软件设计师下午_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

精品文档-下载后可编辑【模考】2022年5月--软件设计师下午【模考】2022年5月--软件设计师下午

1.【[材料型]问答题】5分|【问题1】

数据流图1-2中有两条数据流是错误的,请指出这两条数据流的起点和终点。

2.【[材料型]问答题】5分|【问题2】

数据流图1-3中缺少三条数据流,请指出这三条数据流的起点和终点。

3.【[材料型]问答题】4分|【问题3】

根据系统功能和数据流图填充下列数据字典条目中的(1)和(2)∶

查询请求信息=【查询读者请求信息|查询图书请求信息】

读者情况=读者号+姓名+所在单位+{借书情况}

管理工作请求单=(1)

入库单=(2)

4.【[材料型]问答题】2分|【问题1】

根据问题描述,填写图3-21中(1)-(4)处联系的类型。联系类型分为一对一、一对多和多对多3种,分别使用1:1、1:n或1:*、m:n或*:*表示。

5.【[材料型]问答题】3分|【问题2】

补充图3-21所示的联系并指明其联系类型。联系名可为联系1,联系2,……。

6.【[材料型]问答题】2分|【问题3】

根据图3-21和说明,将逻辑结构设计阶段生成的关系模式中的空(5)-(8)补充完整。

7.【[材料型]问答题】3分|【问题4】

根据问题描述,写出客户、委托书和派工单这3个关系的主键。

8.【[材料型]问答题】5分|【问题一】根据题意,给出类“传阅记录”的主要属性。(5分)

9.【[材料型]问答题】5分|【问题二】根据题意,将图2中的(1)~(5)处补充完整。(5分)

10.【[材料型]问答题】6分|【问题三】同一种期刊分不同的期,所以有多本同一种期刊。“传阅名单”只需每一种期刊一份,还是应该每本期刊一份,为什么?(6分)

11.【问答题】15分|试题四(15分)

阅读下列函数说明和C代码,将应填入_(n)处的字句写在答题纸的对应栏内。

【说明】

函数intToplogical(LinkedWDigraphG)的功能是对图G中的顶点进行拓扑排序,并返回关键路径的长度。其中图G表示一个具有n个顶点的AOE-网,图中顶点从1~n依次编号,图G的存储结构采用邻接表表示,其数据类型定义如下∶

typedefstructGnode{/*邻接表的表结点类型*/

intadjvex;/*邻接顶点编号*/

intweight;/*弧上的权值*/

structGnode*nextarC;n/*指示下一个弧的结点*/

}Gnode;

typedefstructAdjlist{/*邻接表的头结点类型*/

charvdata;/*顶点的数据信息*/

structGnode*Firstadj;/*指向邻接表的第一个表结点*/

}Adjlist;

typedefstructLinkedWDigraph{/*图的类型*/

intn,e;/*图中顶点个数和边数*/

structAdjlist*head;/*指向图中第一个顶点的邻接表的头结点*/

}LinkedwDigraph;

例如,某AOE-网如图4-1所示,其邻接表存储结构如图4-2所示。

【函数】

intToplogical(LinkedWDigraphG)

{Gnode*p;

intj,w,top=0;

int*Stack,*ve,*indegree;

ve=(int*)malloc((G.n+1)*sizeof(int));

indegree=(int*)malloc((G.n+1)*sizeof(int));/*存储网中各顶点的入度*/

Stack=(int*)malloc((G.n+1)*sizeof(int)));/*存储入度为0的顶点的编号*/

if(!ve||!indegree||!Stack)exit(0);

for(j=1;j=G.n;j++){

ve[j]=0;indegree[j]=0;

}/*for*/

for(j=1;j=G.n;j++){/*求网中各顶点的入度*/

p=G.head[j].Firstadj;

while(p){

(1);p=p-nextarc;

}/*while*/

}/*for*/

for(j=l;j=G.n;j++)/*求网中入度为0的顶点并保存其编号*/

if(!indegree[j])Stack[++top]=j;

while(top0){

w=(2);

printf("%c",G.head[w].vdata);

p=G.head[w].Firstadj;

while(p){

(3);

if(!indegree[p→adjvex])

Stack[++top]=p-adjvex;

if((4))

ve[p→adjvex]=ve[w]+p→weight;

p=p→nextarC;

}/*while*/

}/*while*/

return(5);

}/*Toplogical*/

12.【问答题】10分|试题五(15分)

阅读以下说明和C++代码,将应填入_(n)_处的字句写在答题纸的对应栏内。

【说明】

传输门是传输系统中的重要装置。传输门具有Open(打开)、Closed(关闭)、Opening(正在打开)、StayOpen(保持打开)和Closing(正在关闭)五种状态。触发传输门状态转换的事件有click、complete和timeout三种。事件与其相应的状态转换如下图所示。

下面的C++代码1与C++代码2分别用两种不同的设计思路对传输门进行状态模拟,,请填补代码中的空缺。

【C++代码1】

constintCLOSED=l;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(1)setState(OPENING);

elseif(2)setState(CLOSING);

elseif(3)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();

aDplete();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(){_(4)_;}

voidDoor::timeout(){_(5)_;}

voidDoor::complete(){_(6)_;}

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(){(7);}

//其他状态类的定义与实现代码省略

intmain(){

DooraDoor;

aDoor.getState();aDoor.click();aDoor.getState();aDplete();

aDoor.getState();aDoor.timeout();aDoor.getState();return0;

}

13.【问答题】10分|试题六(15分)

阅读以下说明和java代码,将应填入_(n)_处的字句写在答题纸的对应栏内。

【说明】

传输门是传输系统中的重要装置。传输门具有Open(打开)、Closed(关闭)、Opening(正在打开)、StayOpen(保持打开)和Closing(正在关闭)五种状态。触发传输门状态转换的事件有click、complete和timeout三种。事件与其相应的状态转换如下图所示。

下面的java代码1与java代码2分别用两种不同的设计思路对传输门进行状态模拟,,请填补代码中的空缺。

【java代码1】

publicclassDoor{

publicstaticfinalintCLOSED=1;publicstaticfinalintOPENING=2;

publicstaticfinalintOPEN=3;publicstaticfinalintCLOSING=4;

publicstaticfinalintSTAYOPEN=5;privateintstate=CLOSED;

//定义状态变量,用不同的整数表示不同状态

privatevoidsetState(intstate){this.state=state;}

//设置传输门当前状态

publicvoidgetState(){

//此处代码省略,本方法输出状态字符串,

//例如,当前状态为CLOSED时,输出字符串为"CLOSED"

}

publicvoidclick(){//发生click事件时进行状态转换

if(1)setState(OPENING);

elseif(2)setState(CLOSING);)

elseif(3)setState(STAYOPEN);

}

//发生timeout事件时进行状态转换

publicvoidtimeout(){if(state==OPEN)setState(CLOSING);}

publicvoidcomplete(){//发生complete事件时进行状态转换

if(state==OPENING)setState(OPEN);

elseif(state==CLOSING)setState(CLOSED);

}

publicstaticvoidmain(String[]args){

DooraDoor=newDoor();

aDoor,getState();aDoor.click();aDoor.getState();aDplete();

aDoor.getState();aDoor.click();aDoor.getState();aDoor.click();

aDoor.getState();return;;

}

}

【Java代码2】

publicclassDoor{

publicfinalDoorStateCLOSED=newDoorClosed(this);

publicfinalDoorStateOPENING=newDoorOpening(this);

publicfinalDoorStateOPEN=newDoorOpen(this);

publicfinalDoorStateCLOSING=newDoorClosing(this);

publicfinalDoorStateSTAYOPEN=newDoorStayOpen(this);

privateDoorStatestate=CLOSED;

//设置传输门当前状态

publicvoidsetState(DoorStatestate){this.state=state;)

publicvoidgetState(){//根据当前状态输出对应的状态字符串

System.out.println(state.getClass().

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论