2022年银行业务模拟与离散事件模拟 .pdf
《2022年银行业务模拟与离散事件模拟 .pdf》由会员分享,可在线阅读,更多相关《2022年银行业务模拟与离散事件模拟 .pdf(8页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1需求分析(问题描述)假设某银行有2 个窗口对外接待客户,从早晨银行开门起不断有客户进入银行,由于每个窗口在某个时刻只能接待一个客户。因此在客户人数众多时需要在每个窗口前顺次排队,对于刚进和银行的客户。如果某个窗口的业务员正空闲,则可上前输业务。反之,若个窗口均有客户所占, 他便会排在为数最少的队伍后面。编制一个程序模拟银行的这种业务活动并计算一天中客户在银行的平均逗留时间。2概要设计说明本程序中用到的所有抽象数据类型的定义、主程序的流程以及各程序模块之间的层次( 调用 ) 关系。1.数据结构使用到带头结点链表EvevtList, 结点是 LNode, , 提供的操作有: InitList,
2、DelFirst,GetCurElem,GetHead,OrderInsert,此链表用于存放客户的进入或者离开的事件,存放数据包括进入的时间,处理的时间,离开的时间使用一个队列Queue ,节点是QNode ,队列的数据元素类型为QElemType ,提供的主要操作有: InitQueue ,QueueEmpty ,QueueLength, GetHead,EnQueue ,DeQueue ,此队列用于模拟进入银行后等待办理业务的客户排队情况。其存储的数据有时间到达的时间和处理事物所需的时间。2.层次调用关系包括三个文件:Main.cpp,Queue.h和 LinkList.h,后两个用于数
3、据结构的定义,主要的程序在Main.cpp 中,从 main() 进入调用 Bank_Simulation(),Bank_Simulation()调用到 OpenForDay (), CustomerArrived ()和 CustomerDeparture (),CustomerArrived()调用Random ()和 Minimum();3详细设计实现该程序的主要算法是:1. 事件链表的设计typedef struct int OccurTime; int NType; Event,ElemType; typedef struct LNode / 结点类型 ElemType data;
4、LNode *next; *Link,*Position; struct LinkList / 链表类型 Link head,tail; / 分别指向线性链表中的头结点和最后一个结点 int len; / 指示线性链表中数据元素的个数 ; typedef LinkList EventList; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 8 页 - - - - - - - - - 北京信息科技大学计算机学院0615233 刘大伟2. 队列的设计typedef stru
5、ct int ArrivalTime; / 到达时刻 int Duration; / 办理事务所需时间 QElemType; / 定义队列的数据元素类型QElemType为结构体类型 typedef struct QNode QElemType data; QNode *next; *QueuePtr; struct LinkQueue QueuePtr front,rear; / 队头、队尾指针 ; 3. 主要过程void Bank_Simulation() / 银行业务模拟函数开门营业; while(有客户进入或者等待办理) / 事件表 ev 不空 判断应该进行何种操作若是客户到达 Cus
6、tomerArrived(); / 处理客户到达事件若是客户处理结束离开银行 CustomerDeparture(); / 处理客户离开事件 计算平均使用时间输出相关数据 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 8 页 - - - - - - - - - 北京信息科技大学计算机学院0615233 刘大伟4. 主程序的流程图:4. 程序清单LinkList.h #define Qu 2/队列数目#define jiange 5/相邻两个客户间隔时间不超过5 分钟#d
7、efine chuli 30/每个客户的处理时间不超过30 分钟#include #include / malloc()等#include / atoi() #include / floor(),ceil(),abs() #include / exit() #include / cout,cin #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 typedef int Status; / Status 是函数的类型 ,其值是函数结果状态代码,如OK 等typedef int Boolean; / Boolean 是布尔类型
8、,其值是TRUE 或 FALSE typedef struct int OccurTime; int NType; Event,ElemType; typedef struct LNode / 结点类型 ElemType data; LNode *next; *Link,*Position; struct LinkList / 链表类型 Link head,tail; / 分别指向线性链表中的头结点和最后一个结点int len; / 指示线性链表中数据元素的个数名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - -
9、 - - - - - 第 3 页,共 8 页 - - - - - - - - - 北京信息科技大学计算机学院0615233 刘大伟; typedef LinkList EventList; EventList ev; / 事件表头指针Event en,et; / 事件,临时变量void InitList(LinkList &L) / 构造一个空的线性链表L Link p; p=(Link)malloc(sizeof(LNode); / 生成头结点if(p) p-next=NULL; L.head=L.tail=p; L.len=0; else exit(ERROR); Status DelFi
10、rst(LinkList &L,Link h,Link &q) / 形参增加 L,因为需修改 L / h 指向 L 的一个结点,把 h 当做头结点,删除链表中的第一个结点并以q 返回。/ 若链表为空 (h 指向尾结点 ), q=NULL , 返回 FALSE q=h-next; if(q) / 链表非空 h-next=q-next; if(!h-next) / 删除尾结点L.tail=h; / 修改尾指针L.len-; return OK; else return FALSE; / 链表空 ElemType GetCurElem(Link p) / 已知 p 指向线性链表中的一个结点,返回p
11、所指结点中数据元素的值return p-data; Status ListEmpty(LinkList L) / 若线性链表L 为空表,则返回TRUE,否则返回FALSE if(L.len) return FALSE; else return TRUE; Position GetHead(LinkList L) / 返回线性链表 L中头结点的位置return L.head; void OrderInsert(LinkList &L,ElemType e,int (*comp)(ElemType,ElemType) / 已知 L 为有序线性链表,将元素e 按非降序插入在L 中。Link o,p,
12、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; / 修改尾结点 Queue.h typedef struct int ArrivalTime; / 到达时刻int Duration; / 办理事务所需时间QElemType; / 定 义 队 列 的 数 据 元 素 类 型QElemType为结构体类型typ
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年银行业务模拟与离散事件模拟 2022 银行业务 模拟 离散 事件
限制150内