软题库 学习课程
当前位置:信管网 >> 在线考试中心 >> 信息系统项目管理师题库 >> 试题查看
试卷年份2006年下半年
试题题型【分析简答题】
试题内容

试题七
阅读以下说明以及Java程序。
【说明】
传输门是传输系统中的重要装置。传输门具有Open(打开)、Closed(关闭)、Opening (正在打开)、StayOpen(保持打开)和Closing(正在关闭)五种状态。触发状态的转换事件有click、complete和timeout三种。事件与其相应的状态转换如下图所示。

下面的Java代码1与Java代码2分别用两种不同的设计思路对传输门进行状态模拟,请填补代码中的空缺。
【Java代码1】
public class Door {
public static final int CLOSED = 1;    public static final int OPENING = 2;
public static final int OPEN = 3;  public static final int CLOSING = 4;
public static final int STAYOPEN = 5;  private int state = CLOSED;
//定义状态变量,用不同的整数表示不同状态
private void setState(int state){ this.state = state;}
//设置传输门当前状态
public void getState() {
//此处代码省略,本方法输出状态字符串,
//例如,当前状态为CLOSED时,输出字符串为"CLOSED"
}
public void click()  {  //发生click事件时进行状态转换
if (  (1)  ;)    setState(OPENING.;
else if (  (2)  ;)  setState{CLOSING.;
else if (  (3)  ;)    setState(STAYOPEN);
}
//发生timeout事件时进行状态转换
public void timeout() { if (state == OPEN)    setState(CLOSING.;}
public void complete() {//发生complete事件时进行状态转换
if (state == OPENING.    setState(OPEN);
else if  (state == CLOSING.  setState(CLOSED.;
}
public static void main(String [] args){
Door aDoor = new Door();
aDoor.getState();aDoor.click();aDoor.getState();aDoor.complete();
aDoor.getState();aDoor.click();aDoor.getState();aDoor.click();
aDoor.getState();return;
}
}
【Java代码2】
public class Door {
public final DoorState CLOSED = new DoorClosed(this);
public final DoorState OPENING = new DoorOpening(this);
public final DoorState OPEN = new DoorOpen(this);
public final DoorState CLOSING = new DoorClosing(this);
public final DoorState STAYOPEN = new DoorStayOpen(this);
private DoorState state = CLOSED;
//设置传输门当前状态
public void setState(DoorState state) { this.state=state;}
public void getState(){ //根据当前状态输出对应的状态字符串
System.out.println(state.getClass().getName());
}
public void click(){  (4)  ;}//发生click事件时进行状态转换
public void timeout(){  (5)  ;}//发生timeout事件时进行状态转换
public void complete(){  (6)  ;)//发生complete事件时进行状态转换
public static void main(String[]args){
Door aDoor = new Door();
aDoor.getState();aDoor.click();aDoor.getState();aDoor.complete();
aDoor.getState();aDoor.timeout();aDoor.getState();return;
}
}
public abstract class DoorState { //定义所有状态类的基类
protected Door door ;
public DoorState(Door doer)  { this.door = door;}
public void click() {}
public void complete() {}
public void timeout() {}
}
class DoorClosed extends DoorState { //定义一个基本的Closed状态
public DoorClosed(Door door) { super(door);}
public void click() {  (7)  ;)
//该类定义的其余代码省略
}
//其余代码省略

查看答案

相关试题

4题:

试题四
阅读以下说明和图,填补流程图中的空缺。
【说明】
某汽车制造工厂有两条装配线。汽车装配过程如图10-6所示,即汽车底盘进入装配线,零件在多个工位装配,结束时汽车自动完成下线工作。

(1)e0和e1表示底盘分别进入装配线0和装配线1所需要的时间。
(2)每条装配线有n个工位,第一条装配线的工位为S0,0,S0,1,…,S0,n-0,第二条装配线的工位为S1,0,S1,1,…,S1,n-1。其中S0,k和S1,k(0≤k≤n-1)完成相同的任务,但所需时间可能不同。
(3)aij表示在工位Sij处的装配时间,其中i表示装配线(i=0或i=1),j表示工位号(0≤j≤n-1)。
(4)tij表示从Sij处装配完成后转移到另一条装配线下一个工位的时间。
(5)X0和X1表示装配结束后,汽车分别从装配线0和装配线1下线所需要的时间。
(6)在同一条装配线上,底盘从一个工位转移到其下一个工位的时间可以忽略不计。
图10-7所示的流程图描述了求最短装配时间的算法,该算法的输入为;
n:        表示装配线上的工位数;
e[i]:     表示e1和e2,i取值为0或1:
a[i][j]:  表示ai,j,i的取值为0或1,j的取值范围为0~n-1;
t[i][j]:  表示ti,j,i的取值为0或1,j的取值范围为0~n-1;
x[i]:     表示X0和X1,i取值为0或1。
算法的输出为:
fi:最短的装配时间;
li:获得最短装配时间的下线装配线号(0或者1)。
算法中使用的f[i][j]表示从开始点到Si,j处的最短装配时间。

答案解析与讨论:www.cnitpm.com/st/2454622267.html

5题:

试题五
阅读以下说明、图和C代码。
【说明】
一般的树结构常采用孩子-兄弟表示法表示,即用二叉链表作树的存储结构,链表中结点的两个链域分别指向该结点的第一个孩子结点和下一个兄弟结点。例如,图10-8(a)所示的树的孩子-兄弟表示如图10-8(b)所示。

函数LevelTraverse()的功能是对给定树进行层序遍历。例如,对图10-1所示的树进行层序遍历时,结点的访问次序为D B A E F P C。
对树进行层序遍历时使用了队列结构,实现队列基本操作的函数原型如下表所示:



Bool、Status类型定义如下:
typedef enum { FALSE=0,TRUE=1 } Bool;
typedef enum { OVERFLOW=-2,UNDERFLOW=-1,ERROR=0,OK=1}Status;
树的二叉链表结点定义如下:
typedef struct Node {
char data;
struct Node *firstchild,*nextbrother;
} Node,*TreeNode;
【函数】
Status LevelTraverse ( TreeNode root )
{ /*层序遍历树,树采用孩子-兄弟表示法,root是树根结点的指针*/
Queue tempQ;
TreeNode ptr,brotherptr;
if (! root)
return ERROR;
InitQueue(&tempQ);
(1)  ;
brotherptr = root -> nextbrother;
while (brotherptr) {
EnQueue(&tempQ,brotherptr);
(2)  ;
}/*end-while*/
while(  (3)  ){
(4)  ;
printf("%c\t",ptr->data);
if(  (5)  )continue;
(6)  ;
brotherptr = ptr->firstchild->nextbrother;
while (brotherptr) {
EnQueue(&tempQ,brotherptr);
(7)  ;
}/*end-while*/
}/*end-while*/
return OK;
}/*LevelTraverse*/



答案解析与讨论:www.cnitpm.com/st/2454727644.html

6题:

试题六
阅读以下说明和C++代码。
【说明】
传输门是传输系统中的重要装置。传输门具有Open(打开)、Closed(关闭)、Opening (正在打开)、StayOpen(保持打开)和Closing(正在关闭)五种状态。触发传输门状态转换的事件有click、complete和timeout三种。事件与其相应的状态转换如下图所示。

下面的C++代码1与C++代码2分别用两种不同的设计思路对传输门进行状态模拟,请填补代码中的空缺。
【C++代码1】
const int CLOSED=1;   const int OPENING=2;
const int OPEN=3;     const int CLOSING=4;
const int STAYOPEN=5;  //定义状态变量,用不同整数表示不同状态
class Door {
Private:
int state;  //传输门当前状态
void setState(int state){ this->state=state;}  //设置当前状态
public:
Door():state(CLOSED.{};
void getState(){    //根据当前状态输出相应的字符串
switch(state){
case OPENING: cout<<"OPENING"<<endl;    break;
case CLOSED:  cout<<"CLOSED"<<endl;     break;
case OPEN:    cout<<"OPEN"<<endl;       break;
case CLOSING: cout<<"CLOSING"<<endl;    break;
case STAYOPEN:cout<<"STAYOPEN"<<endl;   break;
}
};
void click()  {    //发生click事件时进行状态转换
if (  (1)  )    setState(OPENING.;
else if (  (2)  )    setState(CLOSING.;
else if (  (3)  )    setState(STAYOPEN);
}
void timeout(){    //发生timeout事件时进行状态转换
if (state == OPEN)  setState(CLOSING.;
}
void complete(){    //发生complete事件时进行状态转换
if (state == OPENING.    setState(OPEN);
else if (state == CLOSING.  setState(CLOSED.;
}
};
int main(){
Door aDoor;
aDoor.getState();aDoor.click();    aDoor.getState();
aDoor.complete();aDoor.getState(); aDoor.click();
aDoor.getState();aDoor.click();    aDoor.getState();    return 0;
}
【C++代码2】
class Door {
public:
DoorState *CLOSED,*OPENING,*OPEN,*CLOSING,*STAYOPEN,*state;
Door();
virtual~Door(){……//释放申请的内存,此处代码省略);
void setState(DoorState *state)  { this->state = state;}
void getState(){
//此处代码省略,本方法输出状态字符串,
//例如,当前状态为CLOSED时,输出字符串为“CLOSED”
};
void click();
void timeout();
void complete();
};
Door::Door(){
CLOSED = new DoorClosed(this);    OPENING = new DoorOpening(this);
OPEN = new DoorOpen(this);        CLOSING = new DoorClosing(this);
STAYOPEN = new DoorStayOpen(this);state = CLOSED;
}
void Door :: click() {  (4)  ;)
void Door :: timeout() {  (5)  ;)
void Door :: complete() {  (6)  ;}
class DoorState//定义一个抽象的状态,它是所有状态类的基类
{
protected:Door *door;
public:
DoorState(Door *door) {this->door = door;}
virtual~DoorState(void);
virtual void click()  {}
virtual void complete()  {}
virtual void timeout()  {}
};
class DoorClosed :public DoorState{//定义一个基本的Closed状态
public:
DoorClosed(Door *door) :DoorState(door)  {}
virtual ~ DoorClosed(){}
void click();
};
void DoorClosed :: click() {  (7)  ;}
//其他状态类的定义与实现代码省略
int main() {
Door aDoor;
aDoor.getState();aDoor.click();aDoor.getState();aDoor.complete();
aDoor.getState();aDoor.timeout();aDoor.getState();return 0;
}



答案解析与讨论:www.cnitpm.com/st/245488533.html