




已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数据结构课程设计报告数据结构课程设计报告银行业务模拟与离散事件模拟一、实验目的1.通过此次课程设计中银行业务模拟的题目,掌握队列(或者链表) 等数据结构的基本操作方面的知识,并能灵活的解决一些基本的问题,加深对其性质及各项操作的理解;2.将所学数据结构方面的知识与一门具体的语言相结合(C/C+)来进行实现,感受数据结构的强大作用,加深理解。二、问题描述1.问题描述假设某银行有4个窗口对外接待客户,从早晨银行开门(开门9:00am,关门5:00pm)起不断有客户进入银行。由于每个窗口在某个时刻只能接待一个客户,因此在客户人数众多时需要在每个窗口前顺次排队,对于刚进入银行的客户(建议:客户进入时间使用随机函数产生),若某个窗口的业务员正空闲,则上前办理业务;反之,若4个窗口均有窗户所占,他便会排在人数最少的队伍后面。2.任务要求编制一个程序以模拟银行的这种业务活动并计算一天中客户在银行逗留的平均时间。建议有如下设置:(1) 客户到达时间随机产生,一天客户的人数设定为100人。(2) 银行业务员处理时间随机产生,平均处理时间10分钟。(3) 将一天的数据(包括业务员和客户)以文件方式输出。三、算法的思想与算法实现步骤1.基本思想通过队列数据类型进行基本操作,主要有三个模块:分别是主函数模块、主要操作函数及基本操作函数。其中,主函数负责其他子函数的调用实现以及基本界面的操作,主要函数包括开门函数的实现:OpenForDay,顾客到达函数:CustomerArrived,顾客离开的函数:CustomerDepartion等;而基本操作函数就是对其中牵扯到的操作进行具体的实现,如按时间先后插入队列OrderInsert、寻求最短的队列MinCuQueue、删除队列元素以及销毁等。2.实现步骤首先,分析题目要求划分实现模块、画出大致的流程图,定义基本数据类型,诸如结构体、队列等;其次,考虑基本大致的操作,比如要拟定开门的时间、顾客到来为其提供服务以及离开时的操作等;再次,针对上述的基本操作实现具体需要进行的操作,具体实现每个环节需要进行的基本操作,即具体编写每个小函数实现功能;最后,编写主函数对每个实现进行按需调用,实现操作。3.流程图排队开始客户到达窗口忙选择服务窗口服务并展开窗口闲置时间到结束队列空处理并离开队头取客户 是 否 否 图-1事件流程图开始结束Customerarrive()进入or 离开CutomDepation() ()main()队列是否为空输出结果图-2 主函数流程图四、 程序核心代码#define OK 1#define TRUE 1#define FALSE 0#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2typedef int Status;/-银行排队模拟/事件和事件表typedef struct QCuEventint OccurTime;int NType;struct QCuEvent *next;QCuEvent, *EventList;/窗口前队列元素typedef struct QCuElemint ArrivalTime;int Duration;struct QCuElem *next;QCuElem,*QEptr;/窗口指针typedef struct QEptr front;QEptr rear;QCustomerp,*QCupp;/主要操作函数Status OpenForDay(EventList &ev, QCuEvent en, QCupp &q);/开门Status CustomerArrived(EventList &ev, QCupp &q, QCuEvent en);/顾客到达Status CustomerDeparture(EventList &ev, QCupp &q, QCuEvent en);/顾客离开void CloseForDay();/基本操作函数Status OrderInser(EventList &ev, QCuEvent en);/按时间顺序插入事件到事件表int QLength(QCustomerp qn);/求窗口队列长度int MinCuQueue(QCupp q);/求队最短的窗口Status DelFirstEvent(EventList &ev);/删除事件表中的第一个事件Status InitCuQueue(QCustomerp &qn);/初始化窗口队列Status EnCuQueue(QCustomerp &qn,QEptr Q);/进入队列Status DeCuQueue(QCustomerp &qn,QCuElem &Q);/删除队列中的元素Status GetQHead(QCustomerp qn,QCuElem &Q);/获得队列中的第一个元素Status DestoryQueue(QCustomerp qn);/销毁队列void Ptint_QStatus(QCustomerp QCu);/打印队列长度void Bank_SimulationFunc();void test(char str);#include stdio.h#include stdlib.h#include time.hint i=0,e=0,counter=0;int TotalTime=0,CustomerNum=0;/累计客户逗留时间,客户数int CloseTime;/关门时间int windowsnum = 0;4/主函数void main() EventList ev; / 事件表QCuEvent en; QCupp QCu = NULL;OpenForDay(ev, en, QCu);while (ev-next)en.NType = ev-next-NType;en.OccurTime = ev-next-OccurTime;DelFirstEvent(ev);if (en.NType = 0)CustomerArrived(ev, QCu, en);elseCustomerDeparture(ev, QCu, en);Ptint_QStatus(QCu);CloseForDay();/主要功能子函数Status OpenForDay(EventList &ev, QCuEvent en, QCupp &q)int temp = 0;printf(请输入随机数种子(或输入0使用随机种子):);scanf(%d,&temp);if (temp=0) srand(unsigned)time(NULL);else srand(temp);printf(请输入营业时间(单位:分钟):);scanf(%d,&temp);CloseTime = temp;TotalTime = 0;CustomerNum = 0;en.OccurTime = 0;en.NType = 0;en.next = NULL;ev = (EventList) malloc(sizeof(QCuEvent);ev-next = NULL;OrderInser(ev, en);printf(请输入办理业务的窗口数(至少1个):);scanf(%d,&windowsnum);q = (QCustomerp *) malloc(windowsnum+1)*sizeof(QCustomerp);for (int i=1;i=windowsnum;i+)InitCuQueue(qi);return OK;Status CustomerArrived(EventList &ev, QCupp &q, QCuEvent en)test(顾客到达处理);CustomerNum +;/ 产生随机数/srand(54);int durtime = rand()%30+1;int intertime = rand()%5+1; / 插入到达事件表QCuEvent enTemp;int t = en.OccurTime + intertime;enTemp.OccurTime = t;enTemp.NType = 0;enTemp.next = NULL;if (t ArrivalTime = en.OccurTime;Q-Duration = durtime;Q-next = NULL;int i = MinCuQueue(q);EnCuQueue(qi,Q); / 插入离开事件enTemp.OccurTime = en.OccurTime + durtime;enTemp.NType = i;enTemp.next = NULL;if(QLength(qi) = 1)OrderInser(ev, enTemp);return OK;Status CustomerDeparture(EventList &ev, QCupp &q, QCuEvent en)test(顾客离开处理);int i = en.NType;printf(离开时间%dn,en.OccurTime);if(en.OccurTimeCloseTime)DestoryQueue(qi);elseQCuElem customer;DeCuQueue(qi,customer);/ 客户逗留时间TotalTime += en.OccurTime - customer.ArrivalTime;printf(总时间为%dn,TotalTime);if (qi.front-next)GetQHead(qi,customer);QCuEvent enTemp;enTemp.OccurTime = en.OccurTime + customer.Duration;enTemp.NType = i;OrderInser(ev, enTemp);return OK;void CloseForDay()printf(*n);printf(*n);printf(* 所有顾客业务办理总时间:%d分钟n, TotalTime);printf(* 业务办理顾客数:%dn, CustomerNum);printf(* 平均每人办理时间:%fn,(float)TotalTime/(float)CustomerNum);printf(*n);printf(*n);/功能实现子函数Status OrderInser(EventList &ev, QCuEvent en)EventList entemp,qtemp;entemp = (EventList) malloc(sizeof(QCuEvent);entemp-OccurTime = en.OccurTime;entemp-NType = en.NType;entemp-next = NULL;if (!ev-next)ev-next = entemp;return OK;qtemp = ev;while(qtemp-next&qtemp-next-OccurTime next;entemp-next = qtemp-next;qtemp-next = entemp;return OK;int QLength(QCustomerp qn) QEptr qtemp;int i=0;qtemp = qn.front-next;while(qtemp)qtemp = qtemp-next;i+;return i;int MinCuQueue(QCupp q)int i,min;for (i=1,min=1;i=windowsnum;i+)min = QLength(qmin)next;ev-next = p-next;free(p);return OK;Status InitCuQueue(QCustomerp &qn)qn.front = (QEptr) malloc(sizeof(QCuElem);qn.front-next = NULL;qn.rear = qn.front;return OK;Status EnCuQueue(QCustomerp &qn,QEptr Q)qn.rear-next = Q;qn.rear = Q;return OK;Status DeCuQueue(QCustomerp &qn,QCuElem &Q)QEptr qtemp;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);return OK;Status GetQHead(QCustomerp qn,QCuElem &Q)Q.ArrivalTime = qn.front-next-ArrivalTime;Q.Duration = qn.front-next-Duration;return OK;Status DestoryQueue(QCustomerp qn)QEptr p;while(qn.front-next)p = qn.front-next;qn.front-next = p-next;free(p);qn.front-next =NULL;qn.rear = qn.front;return OK;void Ptint_QStatus(QCustomerp QCu)int l;for(int i=1;i=windowsnum;i+)l = QLength(QCui);printf(队列%d:长%d:,i,l);for (int n=1;n=l;n+)printf();printf(n);void test(char str)printf(-%s
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 家乡的麦田400字(14篇)
- 糖尿病的护理措施
- 内瘘术前术后护理
- 肾破裂患者护理
- 输液安全及静脉护理
- 脑梗死病人的多护理
- 药剂学方亮课件
- 货物分批付款合同6篇
- 2025年联邦学习模型聚合(含答案与解析)
- 2025年多模态预训练数据过滤测试题(含答案与解析)
- 小学音乐新课标考试题库800题(含答案)
- 《付出总有收获》课件
- 方剂学知到智慧树章节测试课后答案2024年秋安徽中医药大学
- 《蚕丝微观结构》课件
- 《公路养护安全培训》课件
- 《Linux培训基础》课件
- 新反诈知识考试题库200题(含答案)
- 2022年福建省特种设备作业安全管理人员考试题库(含真题和典型题)
- 二次供水泵房日常巡查记录表
- 2024年可行性研究报告投资估算及财务分析全套计算表格(含附表-带只更改标红部分-操作简单)
- 小学英语名词单数变复数的语法规则及练习题含答案
评论
0/150
提交评论