(c++)データ構造とアルゴリズムのチェーンテーブル線形テーブルの応用:銀行番号システム
4954 ワード
#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<