2023年银行业务模拟与离散事件模拟课程设计.docx

上传人:hs****ma 文档编号:550936732 上传时间:2024-02-09 格式:DOCX 页数:10 大小:17.87KB
返回 下载 相关 举报
2023年银行业务模拟与离散事件模拟课程设计.docx_第1页
第1页 / 共10页
2023年银行业务模拟与离散事件模拟课程设计.docx_第2页
第2页 / 共10页
2023年银行业务模拟与离散事件模拟课程设计.docx_第3页
第3页 / 共10页
2023年银行业务模拟与离散事件模拟课程设计.docx_第4页
第4页 / 共10页
2023年银行业务模拟与离散事件模拟课程设计.docx_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《2023年银行业务模拟与离散事件模拟课程设计.docx》由会员分享,可在线阅读,更多相关《2023年银行业务模拟与离散事件模拟课程设计.docx(10页珍藏版)》请在金锄头文库上搜索。

1、银行业务模拟与离散事件模拟课程设计 工学系课程设计报告 设 计 题 目:银行业务模拟与离散事件模拟 系 别:工学系 专 业 (方 向): 年 级、 班:学 生 姓 名: 学 生 学 号: 指 导 教 师: 年 月 日 目录 一、系统开发的背景。 1 (一) 系统功能要求 1 (二) 系统模块结构设计 1 三、系统的设计与实现 2 (一) 开门函数: 3 (二) 顾客到达函数: 5 (三) 顾客离开函数: 6 四、系统测试 7 五、总结 8 六、附件(代码、部分图表) 8 银行业务模拟与离散事件模拟 一、系统开发的背景。 为了在现实生活中,方便银行业务员更好的操作和管理银行出现的各种事件,以及方

2、便算出各种时间,我们设计了银行业务模拟与离散事件模拟系统。 通过此次课程设计中银行业务模拟的题目,掌握队列,或链表等数据结构的基本操作方面的知识并能灵活的解决一些基本的问题,加深对其性质及操作的理解。 将所学数据结构方面的知识与一门具体的语言相结合来进行实现,感受数据结构的强大作用,加深理解。 (一) 系统功能要求 编制一个程序,可以以模拟银行的这种业务活动并计算一天中客户在银行逗留的平均时间 1、 客户到达时间随机产生,一天客户的人数设定为100人; 2、 银行业务员处理时间随机产生,平均处理时间为10分钟; 3、 将一天的数据结构(包括业务员和客户)以文件方式输出。 . (二) 系统模块结

3、构设计 通过对系统功能的分析,银行业务模拟与离散事件模拟系统功能如下图所示。 银行业务模拟与离散事件模拟 开门函数 (OpenForday() 顾客到达函数 (CustomerArrived()) 顾客离开函数 (CustomerDeparture() 银行业务模拟与离散事件模拟系统 通过上图的功能分析,把整个系统划分为3个模块: 1、 开门函数,该模块主要实现:银行开始正常营业时间,借助函数OpenForDay()来实现; 2、 顾客到达函数,该模块主要实现:客户在银行里 从排队到办理完银行业务的功能,借助函数CustomerArrive()来实现; 3、 顾客离开函数,该模块主要实现:银行

4、下班时间及顾客全部离开的功能,借助函数CustomerDepart()来实现。 三、系统的设计与实现 【流程图】 客户到达 开始 选择服务窗口 窗口忙 服务并展开 链表空 窗口闲置 结束 排队 对头取客户 处理并离开 否 时间到 (一) 开门函数:OpenForDay() 分析:首先输入随机数种子,然后输入银行办理时的基本信息。如下图所示。 void OpenForDay() /*初始化事件链表*/ int i; InitList(ev); en.OccurTime=0; en.NType=Qu; /*到达*/ OrderInsert(ev,en,cmp); for(i=0;iQu;+i) I

5、nitQueue(qi); void Random(int amp;d,int amp;i) /* 生成两个随机数*/ d=rand()%chuli+1; /*到处理的随机数*/ i=rand()%(jiange+1); /*到间隔之间的随机数*/ int Minimum(LinkQueue Q) /*返回最短序列的序号*/ int lQu; int i,k=0; for(i=0;iQu;i+) li=QueueLength(Qi); for(i=1;iQu;i+) if(lil0) l0=li; k=i; return k; 主要功能子函数 输入随机数种子 输入营业时间 输入办理业务的窗口数

6、 该模块的具体代码如下所示。 (二) 顾客到达函数CustomerArrived() 客户到达处理 产生随机数 插入到达事件表 插入最短队 插入离事件 该模块的具体代码如下所示: void CustomerArrived() /*处理客户到达事件*/ QElemType f; int durtime,intertime,i; +CustomerNum; /*客户数增加1*/ Random(durtime,intertime); et.OccurTime=en.OccurTime+intertime;/*下一客户到达时刻=当前客户的到达时间+时间间隔*/ et.NType=Qu; /*下一客户到

7、达事件*/ i=Minnimum(q); if(et.OccurTimeCloseTime) /*下一客户到达银行还未关门*/ OrderInsert(ev,et,cmp); 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); (三) 顾客离开函数CustomerDeparture() 顾客离开处理 离开时间 客户

8、逗留时间 总时间 该模块的具体代码如下所示: void CustomerDeparture() /*处理客户离开事件*/ int i; i=en.NType; DeQueue(qi,customer); /*删除队列排头客户*/ TotalTime+=en.OccurTime-customer.ArrivalTime; if(!QueueEmpty(qi) GetHead(qi,customer); et.OccurTime=en.OccurTime+customer.Duration; et.NType=i; OrderInsert(ev,et,cmp); 四、系统测试 (一) 测试函数 测

9、试该函数使用的测试方法,测试的具体步骤,测试用例的选取,测试的结果。 (二) (三) (四) 五、总结 通过此次实验,熟悉了链表在实际应用中的简单操作,通过实际数产生函数,完成了一系列银行活动的模拟,可以给银行业务的办理提供更大的便利。 实验中,存在问题,在进行了一系列的修改和请教下,解决了问题。 利用随机产生种子进行事件的模拟,即到达和办理业务的时间都是随机产生。如果事件尚未到达下班时间,则将插入到空列队或者是人数(元素)最少的列队,通过检验,算出在不同服务窗口数下的等待时间以及服务时间,基本实现了银行业务的模拟。 六、附件(代码、部分图表) LinkList.h #define Qu 2

10、#define jiange 5 #define chuli 10 #include string.hgt; #include malloc.hgt; #include stdlib.hgt; #include math.hgt; #include process.hgt; #include iostreamgt; #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 typedef int Status; typedef int Boolean; typedef struct int OccurTime; int NType;

11、 Event,ElemType; typedef struct LNode /*结点类型*/ ElemType data; LNode *next; *Link,*Position; struct LinkList /*链表类型*/ Link head,tail; int len; ; typedef LinkList EventList; EventList ev; Event en,et; void InitList(LinkList amp;L) /*构造一个空的线性表*/ Link p; p=(Link)malloc(sizeof(LNode); if(p) p-gt;next=NUL

12、L; Lhead=Ltail=p; Llen=0; else exit(ERROR); Status DelFirst(LinkList amp;L,Link h,Link amp;q) q=h-gt;next; if(q) /*链表非空*/ h-gt;next=q-gt;next; if(!h-gt;next) /*删除尾结点*/ Ltail=h; /* 修改尾指针*/ Llen-; return OK; else return FALSE; ElemType GetCurElem(Link p) /*已知P指向线性链表中的一个结点,返回P所指结点中数据元素的值*/ return p-gt;

13、data; Status ListEmpty(LinkList L) if(L.len) return FALSE; else return TRUE; Position GetHead(LinkList L) /*返回线性链表L中头结点的位置*/ return L.head; void OrderInsert(LinkList amp;L,ElemType e,int(*comp)(ElemType,ElemType) Link o,p,q; q=Lhead; p=q-gt;next; while(p!=NULLamp;amp;comp(p-gt;data,e)0) /*P不是表尾且元素值小

14、于E*/ q=p; p=p-gt;next; o=(Link)malloc(sizeof(LNode); o-gt;data=e; /*赋值*/ q-gt;next=o; /*插入*/ o-gt;next=p; L.len+; /*表长加一*/ if(!p) /*插在表尾*/ L.tail=o;/*修改尾结点*/ Queue.h typedef struct int ArrivalTime; int Duration;/*办理事务所需时间*/ QElemType; /*定义队列的数据元素类型为结构体类型*/ typedef struct QNode QElemType data; QNode *next; *QueuePtr; struct LinkQueue QueuePtr front,rear; /*队头队尾指针*/ ; void InitQueue(L

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业/管理/HR > 人事档案/员工关系

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号