数据结构银行业务活动的模拟

上传人:痛*** 文档编号:115773762 上传时间:2022-07-04 格式:DOC 页数:42 大小:434KB
收藏 版权申诉 举报 下载
数据结构银行业务活动的模拟_第1页
第1页 / 共42页
数据结构银行业务活动的模拟_第2页
第2页 / 共42页
数据结构银行业务活动的模拟_第3页
第3页 / 共42页
资源描述:

《数据结构银行业务活动的模拟》由会员分享,可在线阅读,更多相关《数据结构银行业务活动的模拟(42页珍藏版)》请在装配图网上搜索。

1、Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-date数据结构银行业务活动的模拟数据结构银行业务活动的模拟 数据结构课程设计报告 题目:银行业务活动的模拟 一、 实验目的 银行业务活动的模拟任务:假设某银行有4个窗口对外接待客户,从早晨银行开门起不断有客户进入银行,由于每个窗口在某个时刻只能接待一个客户。因此在客户人数众多时需要在每个窗口前顺次排队,对于刚进入银行的客户。如果某个窗口的业务员正空闲,则可上前输业务。反之,

2、若个窗口均有客户所占,他便会排在为数最少的队伍后面。编制一个程序模拟银行的这种业务活动并计算一天中客户在银行的平均逗留时间。功能要求:1).实现数据的输入;2).各个窗口数据的访问和输出;3)当前窗口的人员分布情况动态显示。界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。存储结构:学生自己根据系统功能要求自己设计。请在最后的上交资料中指明你用到的存储结构;测试数据:要求使用1、全部合法数据;2、整体非法数据;3、局部非法数据。进行程序测试,以保证程序的稳定。测试数据及测试结果请在上交的资料中写明;二、 总体设计 1.设计原理: 为了计算平均时间,就要掌握每个客户

3、到达银行和离开银行这两个时刻,后者减去前者即为每个客户在银行逗留的时间。所有客户逗留时间的总和被一天内进入银行的客户数除便是所求的平均时间。 事件的主要信息是事件类型和事件发生的时刻,算法中要处理的事件有两类:一类是客户到达的时间,另一类是客户离开的时间。前一类事件发生的时刻随客户到来自然形成,后一类事件发生时刻则由客户事务所需时间 和等待所耗时间而定。由于驱动程序是按时间发生时刻的先后顺序进行,则事件表应该是有序表,其主要操作是插入和删除事件。2.设计方案及流程 由于在实际的银行中,客户到达的时刻及其办理事务所需时间都是随机的,在模拟程序中可用随机数代替,不失一般性。假设第一个客户进门的时刻

4、为0,即是模拟程序处理的第一个事件,之后每个客户到达的时刻在前一个客户到达时设定。因此在客户到达事件发生时需先产生两个随机数:其一为此时刻到达的客户办理事务所需时间durtime;其二为下一个客户将到达的时间间隔intertime,假设当前事件发生的时刻为occurtime,则下一个客户到达事件发生的时刻为occurtime+intertime。由此应产生一个新的客户到达时间插入表;刚到达的客户则应插入到当前所含元素最少的队列中;若该队列在插入前为空,则还应产生一个客户离开事件插入事件表。 客户离开时间的处理比较简单。首先计算该客户在银行逗留的时间,然后从队列中删除该客户后查看队列是否为空,若

5、不空则设定一个新的队头客户离开事件。三、 实验步骤 第1次:完成程序的主框架设计,进行调试,验证其正确性;第2次:详细设计,进行调试,验证其正确性;第3次:进行整体调试,运行程序,对运行结果进行分析,完成实验报告。程序代码如下:#include#include / malloc()等#include #include#include #define TRUE 1#define FALSE 0#define OK 1#define ERROR 0typedef int Status; / Status是函数的类型,其值是函数结果状态代码,如OK等#define Qu 4 / 客户队列数typed

6、ef struct int OccurTime; / 事件发生时刻 int NType; Event,ElemType;typedef struct LNode ElemType data; LNode *next; *Link,*Position;struct LinkList / 链表类型 Link head,tail; int len; ;typedef struct int ArrivalTime; / 到达时刻 int Duration; / 办理事务所需时间QElemType; / 定义QElemType(队列的数据元素类型)为结构体类型;typedef struct QNode

7、QElemType data; QNode *next;*QueuePtr;struct LinkQueue QueuePtr front,rear; / 队头、队尾指针;typedef LinkList EventList; / 事件链表类型,定义为有序链表EventList ev; / 事件表Event en; / 事件Event et; / 临时变量LinkQueue qQu; / Qu个客户队列QElemType customer; / 客户记录int TotalTime=0,CustomerNum=0; / 累计客户逗留时间,客户数(初值为0)int CloseTime; / 银行营

8、业时间(单位是分)/对链表的操作:Status InitList(LinkList &L) / 构造一个空的线性链表 Link p; p=(Link)malloc(sizeof(LNode); / 生成头结点 if(p) p-next=NULL; L.head=L.tail=p; L.len=0; return OK; else return ERROR;Status DelFirst(LinkList &L,Link h,Link &q) q=h-next; if(q) / 链表非空 h-next=q-next; if(!h-next) / 删除尾结点 L.tail=h; / 修改尾指针 L

9、.len-; return OK; else return FALSE; / 链表空ElemType GetCurElem(Link p) / 已知p指向线性链表中的一个结点,返回p所指结点中数据元素的值 return p-data;Status ListEmpty(LinkList L) if(L.len) return FALSE; else return TRUE;int ListLength(LinkList L) return L.len;Position GetHead(LinkList L) / 返回线性链表L中头结点的位置 return L.head;Status OrderI

10、nsert(LinkList &L,ElemType e,int (*comp)(ElemType,ElemType) / 已知L为有序线性链表,将元素e按非降序插入在L中。 Link o,p,q; q=L.head; p=q-next; while(p!=NULL&comp(p-data,e)next; o=(Link)malloc(sizeof(LNode); / 生成结点 o-data=e; / 赋值 q-next=o; / 插入 o-next=p; L.len+; / 表长加1 if(!p) / 插在表尾 L.tail=o; / 修改尾结点 return OK;/对队列的操作:Stat

11、us InitQueue(LinkQueue &Q) / 构造一个空队列Q if(!(Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode) exit(OVERFLOW); Q.front-next=NULL; return OK;Status QueueEmpty(LinkQueue Q) / 若Q为空队列,则返回TRUE,否则返回FALSE if(Q.front=Q.rear) return TRUE; else return FALSE;int QueueLength(LinkQueue Q) / 求队列的长度 int i=0; QueuePtr p;

12、 p=Q.front; while(Q.rear!=p) i+; p=p-next; return i;Status GetHead(LinkQueue Q,QElemType &e) / 若队列不空,则用e返回Q的队头元素,并返回OK,否则返回ERROR QueuePtr p; if(Q.front=Q.rear) return ERROR; p=Q.front-next; e=p-data; return OK; Status EnQueue(LinkQueue &Q,QElemType e) / 插入元素e为Q的新的队尾元素 QueuePtr p; if(!(p=(QueuePtr)ma

13、lloc(sizeof(QNode) / 存储分配失败 exit(OVERFLOW); p-data=e; p-next=NULL; Q.rear-next=p; Q.rear=p; return OK;Status DeQueue(LinkQueue &Q,QElemType &e) / 若队列不空,删除Q的队头元素,用e返回其值,并返回OK,否则返回ERROR QueuePtr p; if(Q.front=Q.rear) return ERROR; p=Q.front-next; e=p-data; Q.front-next=p-next; if(Q.rear=p) Q.rear=Q.fr

14、ont; free(p); return OK;int cmp(Event a,Event b) / 依事件a的发生时刻事件b的发生时刻分别返回-1、0或1 if(a.OccurTime=b.OccurTime) return 0; else return (a.OccurTime-b.OccurTime)/abs(a.OccurTime-b.OccurTime);void OpenForDay() / 初始化操作 int i; InitList(ev); / 初始化事件链表为空 en.OccurTime=0; / 设定第一个客户到达事件 en.NType=Qu; / 到达 OrderInse

15、rt(ev,en,cmp); / 插入事件表 for(i=0;iQu;+i) / 置空队列 InitQueue(qi);void Random(int &d,int &i) d=rand()%30+1; / 1到30之间的随机数 每个客户办理业务的时间最大值30 i=rand()%5+1; / 1到5之间的随机数 两相邻到达的客户的时间间隔最大值5int Minimum(LinkQueue Q) / 返回最短队列的序号 int tQu; int i,k; for(i=0;iQu;i+) ti=QueueLength(Qi); k=0; for(i=1;iQu;i+) if(tit0) t0=t

16、i; k=i; return k;void CustomerArrived() / 处理客户到达事件,en.NType=Qu QElemType f; int durtime,intertime,i; +CustomerNum; Random(durtime,intertime); / 生成随机数 et.OccurTime=en.OccurTime+intertime; / 下一客户到达时刻 et.NType=Qu; / 队列中只有一个客户到达事件 if(et.OccurTimeCloseTime) / 银行尚未关门,插入事件表 OrderInsert(ev,et,cmp); i=Minimu

17、m(q); / 求长度最短队列 f.ArrivalTime=en.OccurTime; f.Duration=durtime; EnQueue(qi,f); if(QueueLength(qi)=1) et.OccurTime=en.OccurTime+durtime; et.NType=i; OrderInsert(ev,et,cmp); / 设定第i队列的一个离开事件并插入事件表 void CustomerDeparture() int i; i=en.NType; DeQueue(qi,customer); / 删除第i队列的排头客户 TotalTime+=en.OccurTime-cu

18、stomer.ArrivalTime; / 累计客户逗留时间 if(!QueueEmpty(qi) / 设定第i队列的一个离开事件并插入事件表 GetHead(qi,customer); et.OccurTime=en.OccurTime+customer.Duration; et.NType=i; OrderInsert(ev,et,cmp); void Bank_Simulation() Link p; OpenForDay(); / 初始化 while(!ListEmpty(ev) DelFirst(ev,GetHead(ev),p); en.OccurTime=GetCurElem(p

19、).OccurTime; en.NType=GetCurElem(p).NType; if(en.NType=Qu) CustomerArrived(); / 处理客户到达事件 else CustomerDeparture(); / 处理客户离开事件 / 计算并输出平均逗留时间 printf(顾客总数:%d, 所有顾客共耗时:%d分钟, 平均每人耗时: %d分钟n,CustomerNum,TotalTime,TotalTime/CustomerNum);void main() printf(请输入银行营业时间长度(单位:分)n); scanf(%d,&CloseTime); Bank_Simulation();四、 实验结果 -

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!