السلام عليكم لوسمحتوا أحتاج أحول هذا الكود من سي بلس بلس الى جافا
تكفون لا تردوني ضروووووووووووووووووووووووري
الكود:
#ifndef QUEUE_H
#include "Queue.h"
#endif
#include <stdlib.h>
#include <iostream.h>
#include <stddef.h>
#define MAX_FLOOR_PASS_COUNT 5
enum dir_Type {up,down};
enum status_Type {stopped,MoveUp,MoveDown};
struct DataType
{
bool callup,calldown,deliver;
int fno;
};
struct Node
{
DataType data;
Node *prev;
Node *Next;
};
struct elevator
{
int fcount,pcount,capacity;
Node *head;
status_Type status;
};
struct requests
{
int srcFloor,destFloor,passcount;
dir_Type dir;
};
void set_status(elevator &list,status_Type st);
void insert (elevator &list,Queue<requests>& queue,requests req);
void create (elevator &list);
void remove (elevator &list,Queue<requests>& queue,int& passengercount,int floorno);
void printsrcreq(requests req);
void printdestreq(requests req);
int insert_dest (elevator &list,Queue<requests>& queue,int floorno);
void insert_src (elevator &list,Queue<requests>& queue);
void create (elevator &list)
{
Node *temp;
list.fcount=5;
list.pcount=0;
list.capacity=10;
list.head=new Node;
list.head->data.callup=false;
list.head->data.calldown=false;
list.head->data.deliver=false;
list.head->data.fno=0;
list.head->prev=NULL;
list.head->Next=NULL;
temp = list.head;
for (int i=0;i<(list.fcount-1);i++)
{
temp->Next=new Node;
temp->Next->data.callup=false;
temp->Next->data.calldown=false;
temp->Next->data.deliver=false;
temp->Next->data.fno=i+1;
temp->Next->prev=temp;
temp->Next->Next=NULL;
temp=temp->Next;
}
list.status = stopped;
return;
}
void printsrcreq(requests req)
{
cout<<"Someone called the elevator in floor "<<req.srcFloor<<" to go ";
if (req.dir==up)
cout<<"UP.\n";
else
cout<<"DOWN.\n";
}
void insert_src (elevator &list,Queue<requests>& queue)
{
requests req;
int i,d,r;
r=rand()%3;
for (i=0;i<r;i++)
{
req.destFloor=-1;
req.passcount=-1;
req.srcFloor=rand()%list.fcount;
if (req.srcFloor==0)
req.dir=up;
else if (req.srcFloor==(list.fcount-1))
req.dir=down;
else
{
d=rand()%2;
if (d==0)
req.dir=down;
else
req.dir=up;
}
printsrcreq(req);
insert(list,queue,req);
}
return;
}
void set_status(elevator &list,status_Type st, bool move)
{
switch (st)
{
case MoveUp:
if (move)
{
list.head=list.head->Next;
cout<<"Moving up to floor "<<list.head->data.fno<<"\n";
}
else
cout<<"Changing direction to move up.\n";
break;
case MoveDown:
if (move)
{
list.head=list.head->prev;
cout<<"Moving down to floor "<<list.head->data.fno<<"\n";
}
else
cout<<"Changing direction to move down.\n";
break;
case stopped:
cout<<"Stopping at floor "<<list.head->data.fno<<"\n";
break;
}
list.status=st;
}
void insert (elevator &list,Queue<requests>& queue,requests req)
{
Node *temp;
temp =list.head;
queue.enqueue(req);
while (temp->data.fno< req.srcFloor)
temp=temp->Next;
while (temp->data.fno> req.srcFloor)
temp=temp->prev;
if (req.dir==up)
temp->data.callup=true;
else
temp->data.calldown=true;
return;
}
void remove (elevator &list,Queue<requests>& queue,int& passengercount,int floorno)
{
int sum=0;
requests req;
Node *temp;
temp=list.head;
Queue<requests> *tempr;
tempr=new Queue<requests>;
while (!queue.emptyQueue())
{
queue.dequeue(req);
if (req.destFloor==floorno)
sum=sum+req.passcount;
else
tempr->enqueue(req);
}
passengercount=sum;
while (!tempr->emptyQueue())
{
tempr->dequeue(req);
queue.enqueue(req);
}
while (temp->data.fno<floorno)
temp=temp->Next;
while (temp->data.fno>floorno)
temp=temp->prev;
temp->data.deliver = false;
return;
}
void printdestreq(requests req)
{
cout<<req.passcount<<" passenger(s) entered the elevator want to go to floor "<<req.destFloor<<".\n";
}
int insert_dest(elevator &list,Queue<requests>& queue,int floorno)
{
requests req;
int f,passum=0;
Node *tlist;
Queue<requests> *temp;
temp = new Queue<requests>;
while (!queue.emptyQueue())
{
queue.dequeue(req);
if ((req.srcFloor==floorno)&&(req.destFloor==-1))
{
if (req.dir==up)
{
do {
f=rand() %(list.fcount-req.srcFloor)+(req.srcFloor);
req.destFloor=f;
} while (req.srcFloor==req.destFloor);
}
else
{
do {
f=rand()%req.srcFloor;
req.destFloor=f;
} while (req.srcFloor==req.destFloor);
}
req.passcount=(rand()%MAX_FLOOR_PASS_COUNT)+1;
if ((req.passcount+passum+list.pcount)>list.capacity)
req.passcount = list.capacity - (list.pcount+passum);
tlist=list.head;
if (tlist->data.fno<req.destFloor)
{
while (tlist->data.fno<req.destFloor)
tlist=tlist->Next;
}
else if (tlist->data.fno>req.destFloor)
{
while (tlist->data.fno>req.destFloor)
tlist=tlist->prev;
}
tlist->data.deliver=true;
printdestreq(req);
passum=passum+req.passcount;
}
temp->enqueue(req);
}
list.pcount=list.pcount+passum;
while (!temp->emptyQueue())
{
temp->dequeue(req);
insert(list,queue,req);
}
return passum;
}
int main()
{
int t=0,tinc=5,removedpass=0, passcount;
elevator ele;
bool goingup=true;
Queue<requests> *r;
r=new Queue<requests>;
rand();
create (ele);
set_status(ele,stopped,false);
insert_src(ele,*r);
while (t != 100)
{
cout<<"\n-------------------------------------------------\n";
cout<<"Time: "<<t<<" ::: ";
cout<<"Floor no. "<<ele.head->data.fno<<" ::: ";
cout<<"Passenger count = "<< ele.pcount<<"\n";
cout<<"-------------------------------------------------\n\n";
if (ele.head->data.deliver == true)
{
if (ele.status!=stopped)
set_status(ele,stopped,false);
remove (ele,*r,removedpass,ele.head->data.fno);
ele.pcount=ele.pcount-removedpass;
cout<<removedpass<<" passenger(s) has left the elevator.\n";
}
if ((ele.head->data.callup == true) && (goingup) && (ele.pcount<ele.capacity))
{
if (ele.status!=stopped)
set_status(ele,stopped,false);
passcount=insert_dest(ele,*r,ele.head->data.fno);
ele.head->data.callup == false;
}
else
{
if ((ele.head->data.calldown == true) && (!goingup) && (ele.pcount<ele.capacity))
{
if (ele.status!=stopped)
set_status(ele,stopped,false);
passcount=insert_dest(ele,*r,ele.head->data.fno);
ele.head->data.calldown == false;
}
}
if (goingup)
{
if (ele.head->Next!=NULL)
set_status(ele,MoveUp,true);
else
{
goingup=false;
set_status(ele,MoveDown,false);
}
}
else
{
if (ele.head->prev!=NULL)
set_status(ele,MoveDown,true);
else
{
goingup=true;
set_status(ele,MoveUp,false);
}
}
insert_src(ele,*r);
t=t+tinc;
}
system("pause");
return 0;
}
[/code ]