题目:
    “假如一个售票厅有两个窗口售票,每个窗口在任一时刻只能为一位顾客提供售票服务。所有顾客排成一队等候售票,假如票的数量无限制,售票活动直到顾客队列为空为止。请用面向对象和消息响应的方法设计上述过程,用伪码或描述语言说明即可,不用写代码。”     我的思路是:既然是队列,就是“先进先出”的那种。分别从队列的两端进行遍历整个队列(就是将排成一队的顾客的两头对应于两个窗口进行售票),然后两端轮流依次取出队列中的元素——当从一端取数据时,应减去另一端已经取出的元素。直到队列为空为止。但这压根就没有牵涉到面向对象和消息响应这方面的知识。我知道自己水平有限,没有能力解答出来,想请大家帮帮忙,谢谢了先!
另外,我上面的分析对吗?敬请指点!

解决方案 »

  1.   

    牵涉两个对象: 票, 窗口票 = class
      总数: integer;
      剩余票数: integer;
      是否锁定: boolean;
      procedure 锁定;
      procedure 售票;
    end;窗口 = class
      窗口号: integer;
      顾客总数: integer;
      当前顾客数: integer;
    end;...
      

  2.   

    简单的想法:3个类:
    客人、队列、购票口、消息管理器MsgBox: 消息管理器;procedure 购票口.On_有空();
    begin
      MsgBox.SendMessage(队列,self,下一位购票消息);  // 由MsgBox把消息发给“队列”
    end;procedure 队列.购票(窗口:购票口);
    var
      man: 客户;
    begin
      man := 下一位等待的客户();
      窗口.购票(man);
    end;
      

  3.   

    3个类
     售票窗口, (人)队列, 消息管理器 ,此外还要定义一个集合定义一些消息类型
     TSale = class
     private
       FIsBusy: Boolean;
     public
       procedure SendMessage;
       procedure Sale;
     end;
     
     
     TQueue = class
     private
       FCount: Integer; //人数
     public
      procedure OutQueue;
     end;
      
     TMessageManager = class
       procedure ProcessMessage // 收到TSale发出的消息后 通知TSale和TQueue分别做出相应动作
     end;
     
      

  4.   

    T售票窗口 = Class
      方法:工作,售票,等待,叫“下一个”T顾客队列 = Class
      方法:听到"下一个",叫“去买票”T顾客 = Class
      方法:买票,等待,排队,听到“去买票”T售票窗口.工作
      叫下一个
      Repeat
        等待
        售票
        叫下一个
      Until 下班。T顾客队列.听到"下一个",
      叫第一个顾客到指定的窗口“去买票”T顾客.买票
      排队
      等待T顾客.听到“去买票”
      到指定窗口,去买票