银行业务活动的模拟_第1页
银行业务活动的模拟_第2页
银行业务活动的模拟_第3页
银行业务活动的模拟_第4页
银行业务活动的模拟_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 数据结构课程设计报告 题目:银行业务的活动模拟 学生姓名: 学 号: 班 级: 指导教师: 2013年 1 月 10 日数据结构课程设计任务书一、需求分析说明 银行业务活动的模拟 假设某银行有4个窗口对外接待客户,从早晨银行开门不断有客户进入银行,由于每个窗口在某个时刻只能接待一个客户。因此在客户人数众多时需要在每个窗口前顺次排队,对于刚进入银行的客户。如果某个窗口的业务员正空闲,则可上前办理业务。反之,若窗口均有客户所占,他便会排在为数最少的队伍后面。编制一个程序模拟银行的这种业务活动并计算一天中客户在银行的平均逗留时间。 本课程设计的目的就是要达到理论与实际应用相结合,使我们能够根据数据

2、对象的特性,学会数据组织的方法,能把现实世界中的实际问题在计算机内部表示出来,并培养基本的、良好的程序设计技能。二、总体设计 首先把银行一天的营业时间定为480。要计算一天中客户在银行的平均逗留时间则需要计算每个客户在银行的逗留时间,而客户在银行的逗留时间有他到达银行的时刻和离开银行的时刻决定。每个客户在银行逗留的时段与客户到达银行的时刻、在银行排队等候时间和顾客在窗口办理业务的时间,三部分组成。对于这三个时刻或时间段,客户在银行排队等候的时间由队列长短自然决定,也与其他客户的多少和办理业务的时间长短有关;而到达银行的时刻和客户在窗口办理业务的时间是独立随机的,只与客户本人有关,因此这两个事件

3、的时刻和时间用随机数进行模拟。 三、详细设计 1、设计四个类 分别是QueueNode、QueueHeader、EventNode、EventList。 他们的组成形式为: (1) class QueueNode public: int arrivetime; int duration; QueueNode *next; ; 该类中arrivetime指的是客户到达时间,duration指的是客 户的服务时间,next 指针指向下一个节点。 (2) class QueueHeader public: QueueNode *front,*rear; int length; ; 该类中定义了两个Q

4、ueueNode类的指针对象,分别指向队列的 头指针和尾指针;Length指的是当前队列的长度,即客户的数目。 (3) class EventNode public: Int occurTime,eventType; EventNode *next; ; 该类中的occurTime指的是一个事件占用的时间,eventType指的是事件类型。定义了一个next指针指向下一个事件点。 (4) class EventList public: EventNode *front,*rear; int eventNum; ;该类中定义了两个EventNode类指针front和rear,分别指向队 头和队尾

5、,eventNum指的是事件的总数目。 类图: 2、 (1).函数int generate(EventNode *p)用来分配事件点。(2).函数void InsertEvent(EventList *eventlst,int occurTime,intetype)用来将客户插入到队列中 (3) .函数voidDeleteEvent(EventList*eventlst, EventNode*event)作用是删除事件点。(4) .函数void random(int *durtime,int *intevatime) 是一个随机函用来随机的产生客户到达银行的时间。四、实现部分 #include

6、<iostream.h> #include<stdio.h> #include<stdlib.h>#include<windows.h> /时间函数头文件声明 #define CLOSETIME 480 /定义营业时间 #define M 4 /定义服务窗口数量 class QueueNode /类的定义 public: int arrivetime; int duration; QueueNode *next;class QueueHeader public: QueueNode *front,*rear; int length; ;class

7、 EventNode public: int occurTime,eventType; EventNode *next; ;class EventList public: EventNode *front,*rear; int eventNum;QueueHeader qM+1; EventList *eventlst; int seed =300; int generate(EventNode *p) *p=new EventNode; if(!(*p) cout<<"allocation error!" return -1; return 0;void In

8、sertEvent(EventList *eventlst,int occurTime,int etype)/插入事件点 EventNode *p,*q,*qre; p=new EventNode; p->occurTime=occurTime; p->eventType=etype; eventlst->eventNum+; q=eventlst->front; qre=NULL; while(q&&occurTime>q->occurTime) qre=q; q=q->next; if(!qre) p->next=eventl

9、st->front; eventlst->front=p; else p->next=q; qre->next=p; if(eventlst->eventNum=1) eventlst->rear=p;void DeleteEvent(EventList *eventlst,EventNode *event)/删除事件点 EventNode *p; p=eventlst->front; eventlst->front=p->next; if(-eventlst->eventNum<1) eventlst->rear=eve

10、ntlst->front; *event=p;void EnQueue(QueueHeader *swindow,int t1,int t2)/定义窗口的客户队列 QueueNode *p; p=new QueueNode; p->arrivetime=t1; p->duration=t2; swindow->length+; if(swindow->length=1) p->next=NULL; swindow->front=p; swindow->rear=p; else swindow->rear->next=p; swindo

11、w->rear=p; void DeQueue(QueueHeader *swindow,QueueNode *f)/删除窗口的客户队列 QueueNode *p; if(swindow->length>0) f->arrivetime=swindow->front->arrivetime; f->duration=swindow->front->duration; p=swindow->front; swindow->front=swindow->front->next; swindow->length-;

12、if(swindow->length=0) swindow->rear=NULL; delete(p); void random(int *durtime,int *intevatime)/随机函数的定义 *durtime=rand()+1; *intevatime=rand()+1;int rand() int k=(int)(double)seed/32767)*10000)%29; seed=(13107*seed+6553)%32767; return k;int Minlength()/查找最短队列的编号 int minx,k,i; minx=q1.length; k=1

13、; for(i=2;i<M+1;+i) if(qi.length<minx) minx=qi.length; k=i; return k;int Minlength1()/查找最短队列的长度 int minx,k,i; minx=q1.length; k=1; for(i=2;i<M+1;+i) if(qi.length<minx) minx=qi.length; k=i; Return minx;void main()/主函数调用 int durtime,inteval,totaltime=0; int i,c,k,count=0; int r; r=int(rand

14、()%(5-1)+1); char x; QueueNode f; EventNode *pe,*event; eventlst=new EventList; if(eventlst=NULL) return; if(generate(&pe)=-1) return; pe->occurTime=0; pe->eventType=0; pe->next=NULL; eventlst->front=pe; eventlst->rear=pe; eventlst->eventNum=1;cout<<"-欢迎进入银行活动模拟系统-&q

15、uot;<<endl; cout<<endl<<"是否进行活动模拟?"<<endl<<"(Y OR N)"<<endl; cin>>x; if(x='y') for(i=1;i<M+1;i+) qi.front=qi.rear=NULL; qi.length=0; while(eventlst->eventNum>0) cout<<"-银行业务活动模拟-"<<endl; DeleteEvent(

16、eventlst,&event); if(event->eventType=0) cout<<endl<<"一个用户进入!"<<endl;count+; random(&durtime,&inteval); if(event->occurTime+inteval)<CLOSETIME) InsertEvent(eventlst,event->occurTime+inteval,0); c=Minlength(); k=Minlength1(); EnQueue(&qc,event-&

17、gt;occurTime,durtime); switch (c)case 1:k+;cout<<"客户插入到窗口1,"<<"所办理业务代号为:"<<r<<"该窗口的排队人数为:"<<k<<endl; cout<<"到达时间:"<<event->occurTime<<" "间:"<<durtime<<endl; break;case 2:k+;cou

18、t<<"客户插入到窗口2,"<<"所办理业务代号为:"<<r<<"该窗口的排队人数为:"<<k<<endl; cout<<"到达时间:"<<event->occurTime<<" "<<"所需时间:"<<durtime<<endl; break;case 3:k+;cout<<"客户插入到窗口3,"

19、;<<"所办理业务代号为:"<<r<<"该窗口的排队人数为:"<<k<<endl; cout<<"到达时间:"<<event->occurTime<<" "<<"所需时间:"<<durtime<<endl; break; case 4:k+;cout<<"客户插入到窗口4,"<<"所办理业务代号为:&quo

20、t;<<r<<"该窗口的排队人数为:"<<k<<endl;cout<<"到达时间:"<<event->occurTime<<" "<<"所需时间:"<<durtime<<endl; break; if(qc.length=1) InsertEvent(eventlst,event->occurTime+durtime,c);else i=event->eventType; DeQ

21、ueue(&qi,&f); switch(i)case 1:cout<<endl<<"服务窗口1一个用户离开了"<<endl;k-;cout<<"窗口1的当前排队人数为:"<<k<<endl;break;case 2:cout<<endl<<"服务窗口2一个用户离开了"<<endl;k-;cout<<"窗口2的当前排队人数为:"<<k<<endl;break;case 3:cout<<endl<<"服务窗口3一个用户离开了"<<endl;k-;cout<<"窗口3的当前排队人数为:"<<k<<endl;break;case 4:cout<<endl<<"服务窗口4一个用户离开了&q

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论