综合性设计性实验报告_第1页
综合性设计性实验报告_第2页
综合性设计性实验报告_第3页
综合性设计性实验报告_第4页
综合性设计性实验报告_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

计算机与信息技术学院综合性、设计性实验报告C=J专业:计算机科学与技术 年级/班级:10级 2011-2012学年第一学期课程名称数据结构指导教师王岁花本组成员学号姓名1008114082左雪敬实验地点215机房实验时间7、8、9周5-6节项目名称银行业务模拟系统的设计与实现实验类型综合性问题简介:1:假设某银行有四个窗口对外接待客户,从早晨银行开门起不断有客户进入银行。由于每个窗口在某个时刻只能接待一个客户,因此在客户人数众多时需在每个窗口前顺次排队,对于刚进入银行的客户,如果某个窗口的业务员正空闲,则可上前办理业务,反之,若四个窗口均有客户所占,他便会排在人数最少的队伍后面。现在需要编制程序以模拟银行的这种业务活动并计算一天中客户在银行逗留的平均时间。2.一个完整的系统应具有以下功能:初始化(OpenForDay),模拟银行开门时各数据结构的状态。事件驱动(EventDrived),对客户到达和离开事件做相应处理。下班处理(CloseForDay),模拟银行关门时的动作,统计客户平均逗留时间。一、 实验目的:通过实验掌握对离散事件模拟的认识;进一步理解队列的实现与应用;对链表的操作有更深层次的理解;该实验涉及到线性表的建立、插入、删除等操作,涉及到了队列的建立、插入、删除,涉及到了离散事件的应用思想,还涉及到了排序的概念。完成这个实验对线性表、队列及C语言编程等多方面的知识将是一个很好的利用,对离散事件也将有一个初步的认识。二、 实验仪器或设备:计算机。三:实验步骤:1:整体设计。包括初始化(OpenForDay),事件驱动(EvenDrived),下班处理(CloseForDay)初始化的代码主要完成的工作是建立一个银行工作系统的框架,把实际问题数字化,利用“事件”来描述系统程序,其中包括变量客户人数、累计时间、客户到达成为事件的一个部分,当然每个窗口看做是一个队列。算法如下:voidOpenForDay()(//初始化操作inti;InitList(ev);//初始化事件链表为空en.OccurTime=0;//设定第一个客户到达事件en.NType=Qu;//到达OrderInsert(ev,en,cmp);//插入事件表for(i=0;i<Qu;++i)//置空队列InitQueue(q[i]);}接下来,客户进入,进行客户到达后的处理要做的操作有:客户人数加1一>记录到达的时刻一>加入事件列表一>查找队列最短的窗口一>客户插入一>办理业务一>i离开一>记录办理业务需要的时间。算法如下:voidCustomerArrived(){//处理客户到达事件,en.NType=QuQElemTypef;intdurtime,intertime,i;++CustomerNum;Random(durtime,intertime);//生成随机数et.OccurTime=en.OccurTime+intertime;//下一客户到达时刻ptNTvnp=0n,//队列中只有一个客户到达事件 ’if(et.OccurTime<CloseTime)//银行尚未关门,插入事件表OrderInsert(ev,et,cmp);i=Minimum(q);//求长度最短队列的序号,等长为最小的序号f.ArrivalTime=en.OccurTime;f.Duration=durtime;EnQueue(q[i],f);if(QueueLength(q[i])==1)et.OccurTime=en.OccurTime+durtime;et.NType=i;OrderInsert(ev,et,cmp);//设定第i队列的一个离开事件并插入事件表}}voidCustomerDeparture(){//处理客户离开事件,en.NTypeinti;i=en.NType;DeQueue(q[i],customer);//删除第i队列的排头客户TotalTime+=en.OccurTime-customer.ArrivalTime;//累计客户逗留时间if(!QueueEmpty(q[i])){//设定第i队列的一个离开事件并插入事件表GetHead(q[i],customer);et.OccurTime=en.OccurTime+customer.Duration;et.NType=i;OrderInsert(ev,et,cmp);}}2:详细代码,完善代码,添加相应的子函数:〃主要功能子函数intOpenForDay(EventList&ev,Eventen,QCupp&q)(intt=0;inttime;printf("请输入随机数种子:");scanf(〃%d〃,&t);srand(t);printf("请输入营业时间(单位:分钟):");scanf("%d",&time);CloseTime=time;TotalTime=0;CustomerNum=0;en.OccurTime=0;en.NType=0;en.next=NULL;ev=(EventList)malloc(sizeof(Event));ev->next=NULL;OrderInsert(ev,en);printf("请输入办理业务的窗口数(至少1个):");scanf("%d",&windows);q=(QCustomerp*)malloc((windows+1)*sizeof(QCustomerp));/多申请一个内存空间,0号窗口不用for(inti=1;i<=windows;i++)(InitCuQueue(q[i]);}returnOK;}intCustomerArrived(EventList&ev,QCupp&q,Eventen)(//printf("****顾客到达处理****");CustomerNum++;//产生随机数intdurtime=rand()%30+1; //办理业务时间不大于30分intintertime=rand()%5+1; //两个相邻客户到达银行的时间间隔不大于5分//插入到达事件表EventenNew;enNew.OccurTime=en.OccurTime+intertime;enNew.NType=0;enNew.next=NULL;if(enNew.OccurTime<CloseTime) 〃新客户在下班前才处理OrderInsert(ev,enNew);//printf("时间%d\n”,enNew.OccurTime);//printf("时间%d\n”,t);//插入最短队QEptrQ;Q=(QEptr)malloc(sizeof(QCuElem));Q->ArrivalTime=en.OccurTime;Q->Duration=durtime;Q->next=NULL;inti=MinCuQueue(q);EnCuQueue(q[i],Q);//将离开事件插入时间表enNew.OccurTime=en.OccurTime+durtime;enNew.NType=i;enNew.next=NULL;if(QLength(q[i])==1)OrderInsert(ev,enNew);returnOK;}intCustomerDeparture(EventList&ev,QCupp&q,Eventen)(//printf("****顾客离开处理****");inti=en.NType;//printf("离开时间%d\n”,en.OccurTime);if(en.OccurTime>CloseTime)(DestoryQueue(q[i]);}else(QCuElemcustomer;DeCuQueue(q[i],customer);//客户逗留时间TotalTime+=en.OccurTime-customer.ArrivalTime;//printf("总时间为%d\n”,TotalTime);if(q[i].front->next)(GetQHead(q[i],customer);EventenNew;enNew.OccurTime=en.OccurTime+customer.Duration;enNew.NType=i;OrderInsert(ev,enNew);}}returnOK;}voidCloseForDay()(printf("\n***************************************\n");printf(〃*\n〃);printf("*所有顾客业务办理总时间:%d分钟\n”,TotalTime);printf("*业务办理顾客数:%d\n”,CustomerNum);printf("* 平均每人办理时间:%f\n”,(float)TotalTime/(float)CustomerNum);printf(〃*\n〃);printf("***************************************\n");}〃功能实现子函数intOrderInsert(EventList&ev,Eventen)(EventListentemp,qtemp;entemp=(EventList)malloc(sizeof(Event));entemp->OccurTime=en.OccurTime;entemp->NType=en.NType;entemp->next=NULL;if(!ev->next)(ev->next=entemp;returnOK;}qtemp=ev;while(qtemp->next&&qtemp->next->OccurTime<en.OccurTime)(qtemp=qtemp->next;}entemp->next=qtemp->next;qtemp->next=entemp;returnOK;}intQLength(QCustomerpqn)(QEptrqtemp;inti=0;qtemp=qn.front->next;while(qtemp)(qtemp=qtemp->next;i++;}returni;}intMinCuQueue(QCuppq)(inti,min;for(i=1,min=1;i<=windows;i++)(if(QLength(q[i])<QLength(q[min]))min=i;}returnmin;}intDelFirstEvent(EventList&ev)(EventListp;p=ev->next;ev->next=p->next;free(p);returnOK;}intInitCuQueue(QCustomerp&q)(q.front二q.rear=(QEptr)malloc(sizeof(QCuElem));if(!q.front)exit(OVERFLOW);q.front->next=NULL;returnOK;}intEnCuQueue(QCustomerp&qn,QEptrQ)(qn.rear->next=Q;qn.rear=Q;returnOK;}intDeCuQueue(QCustomerp&qn,QCuElem&Q)(QEptrqtemp;qtemp=qn.front->next;Q.ArrivalTime=qtemp->ArrivalTime;Q.Duration=qtemp->Duration;qn.front->next=qtemp->next;if(qn.rear==qtemp)qn.rear=qn.front;free(qtemp);returnOK;}intGetQHead(QCustomerpqn,QCuElem&Q)(Q.ArrivalTime=qn.front->next->ArrivalTime;Q.Duration=qn.front->next->Duration;returnOK;}intDestoryQueue(QCustomerpqn)(QEptrp;while(qn.front->next)(p=qn.front->next;qn.front->next=p->next;free(p);}qn.front->next=NULL;qn.rear=qn.front;returnOK;}/*voidPrint(QCustomerpQCu[])

温馨提示

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

评论

0/150

提交评论