(c++)データ構造とアルゴリズムのチェーンテーブル線形テーブルの応用:銀行番号システム


#include 
#define D 4                 //         
#define T 2                 //      
#define ST 12               //     12 ( 7 )     ;
//  3     (n1,n2,n3),  vip(v1),    (b1);
using namespace std;
class user                                  //  :  
{
private:
    int id;                             //  ,       
    int IsWait;                         //     : (1)   (1)
    int ArriveTime,ServeTime;           //        (   ),         4s
    char type;                          //        :n;    :b;    VIP:v;
    user * next;                        //       
public:
    user()
    {
        id=IsWait=0;
        ArriveTime=-1;
        ServeTime=D;
        next=NULL;
    }
    user(char stype,int sid)          //stype    ;sid  ;
    {
        id=sid;
        type=stype;
        IsWait=0;
        ArriveTime=-1;
        ServeTime=D;
        next=NULL;
    }
    void set_arrivtime(int sArrivetime)
    {
        ArriveTime=sArrivetime;         //MMP
    }
    char get_type()
    {
        return type;
    }
    int get_id()
    {
        return id;
    }
    user * get_next()
    {
        return next;
    }
    int get_finish_time()              //         
    {
        return ArriveTime+4;
    }
    void Clear()
    {
        id=IsWait=0;
        ArriveTime=-1;
        ServeTime=-1;
        next=NULL;
    }
};
struct queue_node                           //       node
{
    user User;
    queue_node * next;
};
typedef queue_node node;
class Queue                                 //            :    (n,b,v)
{
private:
    bool empty;
    char type_queue;
    node *front;
    node *rear;
public:
    friend class user;              //                     
    Queue()
    {
        empty=true;
        type_queue='\0';
        front=rear=NULL;
    }
    bool Inqueue(user u)
    {
        node *n=new node;
        n->User=u;
        n->next=NULL;
        if(n->User.get_type()==type_queue)
        {
            cout<next=n.next;        //                     
        if(empty)
        {
            front=n;
            rear=n;
            empty=false;
        }
        else
        {
            rear->next=n;
            rear=n;
        }
        //if(front==NULL&&rear==NULL)     empty=true;
        //else    empty=false;
        return true;
    }
    user outqueue()
    {
        user out_user=front->User;

        //front=front->next;
        if(front->next==NULL)
        {
            front=rear=NULL;
        }
        else
        {
            front=front->next;
        }
//        cout<next;
//        front=p;
        if(front==NULL&&rear==NULL)     empty=true;
        else    empty=false;
        return out_user;
    }
    bool isempty()
    {
        return empty;
    }
};
class bank_window                           //  :    
{
private:
    int id;                         //    
    char type;                      //    :   :n;    :b;    VIP:v;
    user client;                    //     
    bool isbusy;                    //    
public:
    friend class user;
    bank_window()
    {
        id=-1;
        type='\0';
        client.set_arrivtime(-1);
        isbusy=false;
    }
    bool isBusy()
    {
        return isbusy;
    }
    void set_type(char c)
    {
        type=c;
    }
    char get_type()
    {
        return type;
    }
    user get_client()
    {
        return client;
    }
    void set_user(user p,int now_time)
    {
        client=p;
        client.set_arrivtime(now_time);
        isbusy=true;
    }

    void clear_client()
    {
        client.Clear();
        isbusy=false;
    }
};
typedef bank_window win;
class simulater                             //  :    ,          (n,b,v)
{
private:
    Queue normalQ;
    Queue vipQ;
    Queue businessQ;
    bank_window window[5];          //5   ,012   ,3 vip,4   
public:
    friend class user;
    friend class Queue;
    friend class bank_window;
    simulater()                                                 //            :012   ,3 vip,4   
    {
        for(int i=0;i<3;i++)
        {
            window[i].set_type('n');
        }
        window[4].set_type('b');
        window[3].set_type('v');
    }
    void enter_bank(user userq[],int times)//,int now_Time    //      times:    now_Time:    
    {
        for(int i=0;i<3;i++)                    //               
        {
            cout<