欢迎来到天天文库
浏览记录
ID:42690708
大小:46.00 KB
页数:6页
时间:2019-09-20
《银行业务模拟C++》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、#include#include#includeusingnamespacestd;inttotal;//初始时银行现存资金总额intcloseTime;//营业结束时间intarriveTime;//两个到达事件之间的间隔时间intdealTime;//客户之间交易的时间上限intdealMoney=5000;//交易额上限intcurrentTime=0;//当前时间inttotalTime=0;//客户逗留时间intcounter=0;//客户总
2、数intnumber=1;//初始客户序列号structservice{intnum;//客户号stringtype;//到达或离开intbeginTime;intendTime;intmoney;//正数为存款,负数为取款service*next;};structqueue{//队列service*head;service*rear;};voidpush(queue&q,intd){//插入元素d为Q的新的队尾元素service*temp=newservice;temp->money=d;temp->
3、next=NULL;if(NULL==q.head){//队列为空,初始化q.head=temp;q.rear=temp;}else{//队列不为空,插入元素dq.rear->next=temp;q.rear=q.rear->next;}}voidpop(queue&q){//若队列不为空,出队列函数service*temp;temp=q.head;if(NULL==q.head->next)q.head=q.rear=NULL;elseq.head=q.head->next;deletetemp;}s
4、ervice*front(queue&q){//返回队首元素returnq.head;}service*back(queue&q){//返回队尾元素returnq.rear;}service*searchAndDel(queue&q,intm){//在队列中寻找可处理元素service*sign=q.head;//标记头结点service*temp;while(NULL!=q.head){if((-(q.head->money))5、=q.head;q.head=q.rear=NULL;returntemp;}else{//队首元素出列temp=q.head;q.head=q.head->next;//首节点后移一位,返回原首节点returntemp;}}else{//队首元素不能被处理if(q.head==q.rear){}else{//首节点移到队列尾部q.rear->next=q.head;q.rear=q.rear->next;q.head=q.head->next;q.rear->next=NULL;}}if(q.head6、==sign)//队列循环一周时停止returnNULL;}returnNULL;}boolstate=1;//用于判断是否有窗口在处理intcurrentTimeOfDeal=0;inttheArriveTime=0;queueeq;//事件队列queuefq;//事件一queuesq;//事件二//初始化三个队列voidarrive(){/*“到达”函数随机产生顾客,进入队列一,产生到达事件,进入事件处理*/push(fq,(rand()%(2*dealMoney)-dealMoney));//随机7、产生顾客进入第一队列back(fq)->beginTime=currentTime;back(fq)->num=number;push(eq,(back(fq)->money));//将产生事件加入事件队列back(eq)->beginTime=currentTime;back(eq)->type="到达";//到达back(eq)->num=number;++number;}voidputMoney(){//存款函数total+=front(fq)->money;//更新资金总额push(eq,fro8、nt(fq)->money);//加入事件队列离开back(eq)->type="离开";//离开back(eq)->num=front(fq)->num;back(eq)->endTime=(front(fq)->beginTime+rand()%dealTime+1);++counter;//更新客户总数totalTime+=(back(eq)->endTime-front(fq)->beginTime);//更新逗留时间pop(fq)
5、=q.head;q.head=q.rear=NULL;returntemp;}else{//队首元素出列temp=q.head;q.head=q.head->next;//首节点后移一位,返回原首节点returntemp;}}else{//队首元素不能被处理if(q.head==q.rear){}else{//首节点移到队列尾部q.rear->next=q.head;q.rear=q.rear->next;q.head=q.head->next;q.rear->next=NULL;}}if(q.head
6、==sign)//队列循环一周时停止returnNULL;}returnNULL;}boolstate=1;//用于判断是否有窗口在处理intcurrentTimeOfDeal=0;inttheArriveTime=0;queueeq;//事件队列queuefq;//事件一queuesq;//事件二//初始化三个队列voidarrive(){/*“到达”函数随机产生顾客,进入队列一,产生到达事件,进入事件处理*/push(fq,(rand()%(2*dealMoney)-dealMoney));//随机
7、产生顾客进入第一队列back(fq)->beginTime=currentTime;back(fq)->num=number;push(eq,(back(fq)->money));//将产生事件加入事件队列back(eq)->beginTime=currentTime;back(eq)->type="到达";//到达back(eq)->num=number;++number;}voidputMoney(){//存款函数total+=front(fq)->money;//更新资金总额push(eq,fro
8、nt(fq)->money);//加入事件队列离开back(eq)->type="离开";//离开back(eq)->num=front(fq)->num;back(eq)->endTime=(front(fq)->beginTime+rand()%dealTime+1);++counter;//更新客户总数totalTime+=(back(eq)->endTime-front(fq)->beginTime);//更新逗留时间pop(fq)
此文档下载收益归作者所有