首页

软考 - 中级_软件设计师

类型:
选择方向:
选择考试:
题型:
为你找到 179 个题目。

阅读下列说明和图,回答问题1至问题4,将解答填入答题纸的对应栏内。 
【说明】
  某汽车停车场欲建立一个信息系统,已经调查到的需求如下: 
  1. 在停车场的入口和出口分别安装一个自动栏杆、一台停车卡打印机、一台读卡器和一个车辆通过传感器,示意图如下: 

 
  2. 当汽车到达入口时,驾驶员按下停车卡打印机的按钮获取停车卡。当驾驶员拿走停车卡后,系统命令栏杆自动抬起;汽车通过入口后,入口处的传感器通知系统发出命令,栏杆自动放下。 
  3. 在停车场内分布着若干个付款机器。驾驶员将在入口处获取的停车卡插入付款机器,并缴纳停车费。付清停车费之后,将获得一张出场卡,用于离开停车场。 
  4. 当汽车到达出口时,驾驶员将出场卡插入出口处的读卡器。如果这张卡是有效的,系统命令栏杆自动抬起;汽车通过出口后,出口传感器通知系统发出命令,栏杆自动放下。若这张卡是无效的,系统不发出栏杆抬起命令而发出告警信号。 
  5. 系统自动记录停车场内空闲的停车位的数量。若停车场当前没有车位,系统将在入口处显示“车位已满”信息。这时,停车卡打印机将不再出卡,只允许场内汽车出场。
  根据上述描述,采用面向对象方法对其进行分析与设计,得到了表 3-1 所示的类/用例/状态列表、图 3-1 所示的用例图、图 3-2 所示的初始类图以及图 3-3 所示的描述入口自动栏杆行为的UML状态图。

【问题1】(3 分)

  根据说明中的描述,使用表3-1给出的用例名称,给出图3-1中U1、U2和U3所对应的用例。 
【问题2】(5 分)   
  根据说明中的描述,使用表3-1给出的类的名称,给出图3-2中的A~D 所对应的类。  
【问题3】(4 分)
  根据说明中的描述,使用表3-1给出的状态名称,给出图3-3中S1~S4所对应的状态。 
【问题4】(3 分)  
  简要解释图3-1中用例U1和U3之间的extend关系的内涵。 

阅读下列说明,回答问题1至问题3,将解答填入答题纸的对应栏内。 
【说明】 
  某地区举行篮球比赛,需要开发一个比赛信息管理系统来记录比赛的相关信息。 
【需求分析结果】 
  1. 登记参赛球队的信息。记录球队的名称、代表地区、成立时间等信息。系统记录球队每个队员的姓名、年龄、身高、体重等信息。每个球队有一个教练负责管理球队,一个教练仅负责一个球队。系统记录教练的姓名、年龄等信息。 
  2. 安排球队的训练信息。比赛组织者为球队提供了若干个场地,供球队进行适应性训练。系统记录现有的场地信息,包括:场地名称、场地规模、位置等信息。系统可为每个球队安排不同的训练场地,如表2-1所示。系统记录训练场地安排的信息。 
 

 


  3. 安排比赛。该赛事聘请专职裁判,每场比赛只安排一个裁判。系统记录裁判的姓名、年龄、级别等信息。系统按照一定的规则,首先分组,然后根据球队、场地和裁判情况,安排比赛(每场比赛的对阵双方分别称为甲队和乙队)。记录参赛球队名称、比赛时间、比分、比赛场地等信息,如表2-2所示。 
  4. 所有球员、教练和裁判可能出现重名情况。 
 

 

 


【概念模型设计】 
  根据需求阶段收集的信息,设计的实体联系图和关系模式(不完整)如下: 
  1.实体联系图   

 

 


  2.关系模式  
  教练(教练编号,姓名,年龄) 
  队员(队员编号,姓名,年龄,身高,体重,   (a)) 
  球队(球队名称,代表地区,成立时间,   (b)) 
  场地(场地名称,场地规模,位置) 
  训练记录(   (c)) 
  裁判(裁判编号,姓名,年龄,级别) 
  比赛记录(   (d)) 

【问题1】(4 分) 

  根据问题描述,补充联系及其类型,完善实体联系图2-1。(联系及其类型的书写格式参照教练与球队之间的联系描述,联系名称也可使用联系1、联系2、…) 
【问题2】(8 分) 
  根据实体联系图2-1,填充关系模式中的(a)、(b)、(c)和(d),并给出训练记录和比赛记录关系模式的主键和外键。 
【问题3】(3 分) 
  如果考虑记录一些特别资深的热心球迷的情况,每个热心球迷可能支持多个球队。热心球迷包括:姓名、住址和喜欢的俱乐部等基本信息。根据这一要求修改图 2-1 的实体联系图,给出修改后的关系模式。(仅给出增加的关系模式描述) 

 

阅读以下说明和图,回答问题1至问题4,将解答填入答题纸的对应栏内。 
【说明】
  某音像制品出租商店欲开发一个音像管理信息系统,管理音像制品的租借业务。需求如下: 
  1. 系统中的客户信息文件保存了该商店的所有客户的用户名、密码等信息。对于首次来租借的客户,系统会为其生成用户名和初始密码。 
  2. 系统中音像制品信息文件记录了商店中所有音像制品的详细信息及其库存数量。 
  3. 根据客户所租借的音像制品的品种,会按天收取相应的费用。音像制品的最长租借周期为一周,每位客户每次最多只能租借6件音像制品。 
  4. 客户租借某种音像制品的具体流程为: 
  (1)根据客户提供的用户名和密码,验证客户身份。 
  (2)若该客户是合法客户,查询音像制品信息文件,查看商店中是否还有这种音像制品。 
  (3)若还有该音像制品,且客户所要租借的音像制品数小于等于 6 个,就可以将该音像制品租借给客户。这时,系统给出相应的租借确认信息,生成一条新的租借记录并将其保存在租借记录文件中。 
  (4)系统计算租借费用,将费用信息保存在租借记录文件中并告知客户。 
  (5)客户付清租借费用之后,系统接收客户付款信息,将音像制品租借给该客户。 
  5. 当库存中某音像制品数量不能满足客户的租借请求数量时,系统可以接受客户网上预约租借某种音像制品。系统接收到预约请求后,检查库存信息,验证用户身份,创建相应的预约记录,生成预约流水号给该客户,并将信息保存在预约记录文件中。 
  6. 客户归还到期的音像制品,系统修改租借记录文件,并查询预约记录文件和客户信息文件,判定是否有客户预约了这些音像制品。若有,则生成预约提示信息,通知系统履行预约服务,系统查询客户信息文件和预约记录文件,通知相关客户前来租借音像制品。 
 

 

【问题1】(1 分)   

  图(a)中只有一个外部实体E1。使用【说明】中的词语,给出E1的名称。 
【问题2】(6 分)   
  使用【说明】中的词语,给出图(b)中的数据存储D1~D4的名称。 
【问题3】(6 分)   
  数据流图 (b) 缺少了三条数据流,根据说明及数据流图(a)提供的信息,分别指出这三条数据流的起点和终点。
 


【问题 4】(2 分) 
  在进行系统分析与设计时,面向数据结构的设计方法(如 Jackson 方法)也被广泛应用。简要说明面向数据结构设计方法的基本思想及其适用场合。 

阅读下列说明和Java代码,将应填入 (n) 处的字句写在答题纸的对应栏内。
【说明】
  某软件公司现欲开发一款飞机飞行模拟系统,该系统主要模拟不同种类飞机的飞行特征与起飞特征。需要模拟的飞机种类及其特征如表6-1所示。

表6-1


为支持将来模拟更多种类的飞机,采用策略设计模式(Strategy)设计的类图如图6-1所示。

图6-1中,AirCraft为抽象类,描述了抽象的飞机,而类Helicopter、AirPlane、Fighter和Harrier分别描述具体的飞机种类,方法fly()和takeOff()分别表示不同飞机都具有飞行特征和起飞特征类FlyBehavior与TakeOffBehavior为抽象类,分别用于表示抽象的飞行为与起飞行为;类SubSonicFly与SuperSonicFly分别描述亚音速飞行和超音速飞行的行为;类VerticalTakeOff与LongDistanceTakeOff分别描述垂直起飞与长距离起飞的行为。

【Java 代码】

 interface FlyBehavior {
  public void fly();
 };
 class SubSonicFly implements FlyBehavior{
  public void fly(){ System.out.println("亚音速飞行!"); }
 };
 class SuperSonicFly implements FlyBehavior{
  public void fly(){ System.out.println("超音速飞行!" ); }
 };
 interface TakeOffBehavior {
  public void takeOff();
 };
 class VerticalTakeOff implements TakeOffBehavior {
  public void takeOff (){ System.out.println("垂直起飞!" ); }
 };
 class LongDistanceTakeOff implements TakeOffBehavior {
  public void takeOff(){ System.out.println("长距离起飞!"); }
 };
  abstract class AirCraft {
      protected  (1)  ;
      protected  (2)  ;
  public void fly(){  (3)  ; }
  public void takeOff() {   (4)   ; };
 };
 class Helicopter(5)AirCraft{
      public Helicopter (){
      flyBehavior = new  (6)  ;
      takeOffBehavior = new  (7)  ;
   }
  };
 //其它代码省略

阅读下列说明和C++代码,将应填入 (n) 处的字句写在答题纸的对应栏内。
【说明】
  某软件公司现欲开发一款飞机飞行模拟系统,该系统主要模拟不同种类飞机的飞行特征与起飞特征。需要模拟的飞机种类及其特征如表5-1所示。

表5-1


为支持将来模拟更多种类的飞机,采用策略设计模式(Strategy)设计的类图如图5-1所示。


  图5-1中,AirCraft为抽象类,描述了抽象的飞机,而类Helicopter、AirPlane、Fighter和Harrier分别描述具体的飞机种类,方法fly()和takeOff()分别表示不同飞机都具有飞行特征和起飞特征;类FlyBehavior与TakeOffBehavior为抽象类,分别用于表示抽象的飞行为与起飞行为;类SubSonicFly与SuperSonicFly分别描述亚音速飞行和超音速飞行的行为;类VerticalTakeOff与LongDistanceTakeOff分别描述垂直起飞与长距离起飞的行为。

 

【C++ 代码】

 #include
  using namespace std;
  class FlyBehavior {
  public : virtual void fly() = 0;
 };
  class SubSonicFly:public FlyBehavior{
  public: void fly(){ cout << "亚音速飞行!" << endl; }
 };
  class SuperSonicFly:public FlyBehavior{
  public: void fly(){ cout << "超音速飞行!" << endl; }
 };
  class TakeOffBehavior {
  public: virtual void takeOff() = 0;
 };
  class VerticalTakeOff:public TakeOffBehavior{
  public: void takeOff(){ cout << "垂直起飞!" << endl; }
 };
  class LongDistanceTakeOff:public TakeOffBehavior {
  public: void takeOff (){ cout << "长距离起飞!" << endl; }
 };
  class AirCraft{
  protected:
  (1)   ;
  (2)   ;
  public:
  void fly(){(3); }
  void takeOff() {(4); };
 };
  class Helicopter: public AirCraft {
  public:
  Helicopter (){
  flyBehavior = new(5);
  takeOffBehavior = new(6);
 }
   (7){
  if(!flyBehavior) delete flyBehavior;
  if(!takeOffBehavior) delete takeOffBehavior;
  }
 };
 //
  其它代码省略

 

阅读下列说明和C代码,回答问题1至问题3,将解答写在答题纸的对应栏内。
【说明】
对有向图进行拓扑排序的方法是:
(1)初始时拓扑序列为空;
(2)任意选择一个入度为0的顶点,将其放入拓扑序列中,同时从图中删除该顶点以及从该顶点出发的弧;
(3)重复(2),直到不存在入度为0的顶点为止(若所有顶点都进入拓扑序列则完成拓扑排序,否则由于有向图中存在回路无法完成拓扑排序)。
函数int* TopSort(LinkedDigraph G)的功能是对有向图G中的顶点进行拓扑排序,返回拓扑序列中的顶点编号序列,若不能完成拓扑排序,则返回空指针。其中,图G中的顶点从1开始依次编号,顶点序列为v1,v2,…,vn,图G采用邻接表表示,其数据类型定义如下:
#define MAXVNUM 50  /*最大顶点数*/
typedef struct ArcNode{ /*表结点类型*/
int adjvex;    /*邻接顶点编号*/
struct ArcNode *nextarc;   /*指示下一个邻接顶点*/
}ArcNode;
typedef struct AdjList{ /*头结点类型*/
char vdata;   /*顶点的数据信息*/
ArcNode *firstarc;   /*指向邻接表的第一个表结点*/
}AdjList;
typedef struct LinkedDigraph{     /*图的类型*/
int n;    /*图中顶点个数*/
AdjList Vhead[MAXVNUM];   /*所有顶点的头结点数组*/
}LinkedDigraph;
例如,某有向图G如图4-1所示,其邻接表如图4-2所示。


图4-1  有向图G

函数TopSort中用到了队列结构(Queue的定义省略),实现队列基本操作的函数原型如下表所示:


【C代码】
int *TopSort(LinkedDigraph G) {
ArcNode *p;  /*临时指针,指示表结点*/
Queue Q; /*临时队列,保存入度为0的顶点编号*/
int k = 0;    /*临时变量,用作数组元素的下标*/
int j = 0, w = 0;    /*临时变量,用作顶点编号*/
int *topOrder, *inDegree;
topOrder = (int *)malloc((G.n+1) * sizeof(int));   /*存储拓扑序列中的顶点编号*/
inDegree = (int *)malloc((G.n+1) * sizeof(int));   /*存储图G中各顶点的入度*/
if (!inDegree || !topOrder) return NULL;
(1)  ;   /*构造一个空队列*/
for ( j = 1; j <= G.n; j++ ) {     /*初始化*/
topOrder[j] = 0;  inDegree[j] = 0;
}
for (j = 1; j <= G.n; j++)    /*求图G中各顶点的入度*/
for( p = G.Vhead[j].firstarc; p; p = p->nextarc )
inDegree[p-> adjvex] += 1;
for (j = 1; j <= G.n; j++)   /*将图G中入度为0的顶点保存在队列中*/
if ( 0 == inDegree[j] ) EnQueue(&Q,j);
while (!IsEmpty(Q)) {
(2) ; /*队头顶点出队列并用w保存该顶点的编号*/
topOrder[k++] = w; 
/*将顶点w的所有邻接顶点的入度减1(模拟删除顶点w及从该顶点出发的弧的操作)*/
for(p = G.Vhead[w].firstarc; p; p = p->nextarc) {
(3)-= 1;
if (0 ==(4)) EnQueue(&Q, p->adjvex);
}/* for */
free(inDegree);
if (  (5)  )
return NULL;
return topOrder;
} /*TopSort*/ 

【问题1】(9分)
根据以上说明和C代码,填充C代码中的空(1)~(5)。

【问题2】(2分)
对于图4-1所示的有向图G,写出函数TopSort执行后得到的拓扑序列。若将函数TopSort中的队列改为栈,写出函数TopSort执行后得到的拓扑序列。
【问题3】(4分)
设某有向无环图的顶点个数为n、弧数为e,那么用邻接表存储该图时,实现上述拓扑排序算法的函数TopSort的时间复杂度是(6)。
若有向图采用邻接矩阵表示(例如,图4-1所示有向图的邻接矩阵如图4-3所示),且将函数TopSort中有关邻接表的操作修改为针对邻接矩阵的操作,那么对于有n个顶点、e条弧的有向无环图,实现上述拓扑排序算法的时间复杂度是(7)。

 

阅读下列说明和图,回答问题1至问题3,将解答填入答题纸的对应栏内。
【说明】
  某运输公司决定为新的售票机开发车票销售的控制软件。图3-1给出了售票机的面板示意图以及相关的控制部件。

  售票机相关部件的作用如下所述:
  (1)目的地键盘用来输入行程目的地的代码(例如,200表示总站)。
  (2)乘客可以通过车票键盘选择车票种类(单程票、多次往返票和座席种类)。
  (3)继续/取消键盘上的取消按钮用于取消购票过程,继续按钮允许乘客连续购买多张票。
  (4)显示屏显示所有的系统输出和用户提示信息。
  (5)插卡口接受MCard(现金卡),硬币口和纸币槽接受现金。
  (6)打印机用于输出车票。
  假设乘客总是支付恰好需要的金额而无需找零,售票机的维护工作(取回现金、放入空白车票等)由服务技术人员完成。
  系统采用面向对象方法开发,使用UML进行建模。系统的顶层用例图和类图分别如图3-2和图3-3所示。

 


图3-3  类图

【问题1】(5分)
根据说明中的描述,给出图3-2中A1和A2所对应的参与者,U1所对应的用例,以及(1)、(2)处所对应的关系。

【问题2】(7分)
根据说明中的描述,给出图3-3中缺少的C1~C4所对应的类名以及(3)~(6)处所对应的多重度。

【问题3】(3分)
图3-3中的类图设计采用了中介者(Mediator)设计模式,请说明该模式的内涵。

阅读下列说明和图,回答问题1至问题3,将解答填入答题纸的对应栏内。

【说明】
某学校拟开发一套实验管理系统,对各课程的实验安排情况进行管理。
【需求分析】
一个实验室可进行多种类型不同的实验。由于实验室和实验员资源有限,需根据学生人数分批次安排实验室和实验员。一门课程可以为多个班级开设,每个班级每学期可以开设多门课程。一门课程的一种实验可以根据人数、实验室的可容纳人数和实验类型,分批次开设在多个实验室的不同时间段。一个实验室的一次实验可以分配多个实验员负责辅导实验,实验员给出学生的每次实验成绩。
(1)课程信息包括:课程编号、课程名称、实验学时、授课学期和开课的班级等信息;实验信息记录该课程的实验进度信息,包括:实验名、实验类型、学时、安排周次等信息,如表2-1所示。

 

(2)以课程为单位制定实验安排计划信息,包括:实验地点,实验时间、实验员等信息,实验计划如表2-2所示。 
 
(3)由实验员给出每个学生每次实验的成绩,包括:实验名、学号、姓名、班级、实验成绩等信息,实验成绩如表2-3所示。
表2-3  实验成绩
(4)学生的实验课程总成绩根据每次实验的成绩以及每次实验的难度来计算。

【概念模型设计】
根据需求阶段收集的信息,设计的实体联系图(不完整)如图2-1所示。

                                                                            图2-1  实体联系图

【逻辑结构设计】

根据概念模型设计阶段完成的实体联系图,得出如下关系模式(不完整):

课程(课程编号,课程名称,授课院系,实验学时)
班级(班级号,专业,所属系)
开课情况( (1)  ,授课学期)
实验(   (2)    ,实验类型,难度,学时,安排周次)
实验计划( (3) ,实验时间,人数)
实验员(  (4)  ,级别)
实验室(实验室编号,地点,开放时间,可容纳人数,实验类型)
学生(   (5)  ,姓名,年龄,性别)
实验成绩(   (6)    ,实验成绩,评分实验员)

【问题1】(6分)
补充图2-1中的联系和联系的类型。

【问题2】(6分)
根据图2-1,将逻辑结构设计阶段生成的关系模式中的空(1)~(6)补充完整并用下划线指出这六个关系模式的主键。

【问题3】(3分)
如果需要记录课程的授课教师,新增加“授课教师”实体。请对图2-1进行修改,画出修改后的实体间联系和联系的类型。

阅读下列说明和图,回答问题1至问题4,将解答填入答题纸的对应栏内。
【说明】
某大型企业的数据中心为了集中管理、控制用户对数据的访问并支持大量的连接需求,欲构建数据管理中间件,其主要功能如下:
(1)数据管理员可通过中间件进行用户管理、操作管理和权限管理。用户管理维护用户信息,用户信息(用户名、密码)存储在用户表中;操作管理维护数据实体的标准操作及其所属的后端数据库信息,标准操作和后端数据库信息存放在操作表中;权限管理维护权限表,该表存储用户可执行的操作信息。
(2)中间件验证前端应用提供的用户信息。若验证不通过,返回非法用户信息;若验证通过,中间件将等待前端应用提交操作请求。
(3)前端应用提交操作请求后,中间件先对请求进行格式检查。如果格式不正确,返回格式错误信息;如果格式正确,则进行权限验证(验证用户是否有权执行请求的操作), 若用户无权执行该操作,则返回权限不足信息,否则进行连接管理。
(4)连接管理连接相应的后台数据库并提交操作。连接管理先检查是否存在空闲的数据库连接,如果不存在,新建连接;如果存在,则重用连接。
(5)后端数据库执行操作并将结果传给中间件,中间件对收到的操作结果进行处理后,将其返回给前端应用。
现采用结构化方法对系统进行分析与设计,获得如图1-1所示的顶层数据流图和图1-2所示的0层数据流图。

【问题 1】(3分)
使用说明中的词语,给出图1-1中的实体E1~E3的名称。
【问题 2】(3分)
使用说明中的词语,给出图1-2中的数据存储D1~D3的名称。
【问题3】(6分)
给出图1-2中加工P的名称及其输入、输出流。



图1-1  顶层数据流图

图1-2  0层数据流图

除加工P的输入与输出流外,图1-2还缺失了两条数据流,请给出这两条数据流的起点和终点。


注:名称使用说明中的词汇,起点和终点均使用图1-2中的符号或词汇。
【问题4】(3分)
在绘制数据流图时,需要注意加工的绘制。请给出三种在绘制加工的输入、输出时可能出现的错误。

阅读下列说明和Java代码,将应填入 (n) 处的字句写在答题纸的对应栏内。
【说明】
  现欲构造一文件/目录树,采用组合(Composite)设计模式来设计,得到的类图如6-1所示:

 

                                         图6-1类图
【Java代码】
import java.util.ArrayList;
import.java.util.List;        
(1)  class AbstractFile{
 protected String name;
 public void printName(){System.out.println(name);}
 public abstract boolean addChild(AbstractFile file);
 public abstract boolean removeChild(AbstracFile file);
 public abstract List< AbstractFile >getChildren();
}
class File extends AbstractFile{
 public File(String name){this.name=name;}
 public  boolean addChild(AbstractFile file){return false;}
 public  boolean  removeChild(AbstracFile file) {return false;}
 public  List< AbstractFile >getChildren() {return   (2)  ;}
}
class Folder extends AbstractFile{
 private List childList;
 public Folder(String name){
   this.name=name;
   this.childList=new ArrayList< AbstractFile >();
}
public boolean addChild(AbstractFile file) {return childList.add(file);}
public boolean removeChild(AbstractFile file)  {return childList.remove(file);}
public    (3)  < AbstractFile >getChildren() {return   (4)  ;}
 }

public class Client{
  public static void main(String[] args){
    //创造一个树形的文件/目录结构
     AbstractFile  rootFolder=new Folder(“c:\\”);
     AbstractFile   compositeFolder=new Folder(“composite”);
     AbstractFile    windowsFolder=new Folder(“windows”);
     AbstractFile   file= new File(“TestComposite.java”);
          rootFolder.addChild(compositeFolder);
          rootFolder.addChild(windowsFolder);
          compositeFolder.addChild(file);
         //打印目录文件数
        printTree(rootFolder);
    }
private static void printTree(AbstractFile ifile){
  ifile.printName();
  List< AbstractFile >children= ifile.getChildren():
   if(Children==null)   return;
   for(AbstractFile file: Children){
   (5)  ;
    }
   }
  }
  该程序运行后输出结果为:
  c:\
  composite
  TestComposite.java
  Windows

【Java代码】
import java.util.ArrayList;
import.java.util.List;        
(1)  class AbstractFile{
 protected String name;
 public void printName(){System.out.println(name);}
 public abstract boolean addChild(AbstractFile file);
 public abstract boolean removeChild(AbstracFile file);
 public abstract List< AbstractFile >getChildren();
}
class File extends AbstractFile{
 public File(String name){this.name=name;}
 public  boolean addChild(AbstractFile file){return false;}
 public  boolean  removeChild(AbstracFile file) {return false;}
 public  List< AbstractFile >getChildren() {return   (2)  ;}
}
class Folder extends AbstractFile{
 private List childList;
 public Folder(String name){
   this.name=name;
   this.childList=new ArrayList< AbstractFile >();
}
public boolean addChild(AbstractFile file) {return childList.add(file);}
public boolean removeChild(AbstractFile file)  {return childList.remove(file);}
public    (3)  < AbstractFile >getChildren() {return   (4)  ;}
 }

public class Client{
  public static void main(String[] args){
    //创造一个树形的文件/目录结构
     AbstractFile  rootFolder=new Folder(“c:\\”);
     AbstractFile   compositeFolder=new Folder(“composite”);
     AbstractFile    windowsFolder=new Folder(“windows”);
     AbstractFile   file= new File(“TestComposite.java”);
          rootFolder.addChild(compositeFolder);
          rootFolder.addChild(windowsFolder);
          compositeFolder.addChild(file);
         //打印目录文件数
        printTree(rootFolder);
    }
private static void printTree(AbstractFile ifile){
  ifile.printName();
  List< AbstractFile >children= ifile.getChildren():
   if(Children==null)   return;
   for(AbstractFile file: Children){
   (5)  ;
    }
   }
  }
  该程序运行后输出结果为:

  c:\
  composite
  TestComposite.java
  Windows

上一页

第 2 页