银行业务模拟与离散事件模拟课程设计
工学系课程设计报告 设 计 题 目:银行业务模拟
与离散事件模拟 系 别:工学系
专 业 (方 向): 年 级、 班:
学 生 姓 名: 学 生 学 号: 指 导 教 师: 年 月 日 目录 一、系统开发的背景。
1 (一) 系统功能要求 1 (二) 系统模块结构设计 1 三、系统的设计与实现 2 (一) 开门函数: 3 (二) 顾客到达函数: 5 (三) 顾客离开函数: 6 四、系统测试 7 五、总结 8 六、附件(代码、部分图表) 8 银行业务模拟与离散事件模拟 一、系统开发的背景。
为了在现实生活中,方便银行业务员更好的操作和管理银行出现的各种事件,以及方便算出各种时间,我们设计了银行业务模拟与离散事件模拟系统。
通过此次课程设计中银行业务模拟的题目,掌握队列,或链表等数据结构的基本操作方面的知识并能灵活的解决一些基本的问题,加深对其性质及操作的理解。
此资料由网络收集而来,如有侵权请告知上传者立即删除。资料共分享,我们负责传递知识。
将所学数据结构方面的知识与一门具体的语言相结合来进行实现,感受数据结构的强大作用,加深理解。
(一) 系统功能要求 编制一个程序,可以以模拟银行的这种业务活动并计算一天中客户在银行逗留的平均时间 1、 客户到达时间随机产生,一天客户的人数设定为100人; 2、 银行业务员处理时间随机产生,平均处理时间为10分钟; 3、 将一天的数据结构(包括业务员和客户)以文件方式输出。
. (二) 系统模块结构设计 通过对系统功能的分析,银行业务模拟与离散事件模拟系统功能如下图所示。
银行业务模拟与离散事件模拟 开门函数 (OpenForday()) 顾客到达函数 (CustomerArrived()) 顾客离开函数 (CustomerDeparture()) 银行业务模拟与离散事件模拟系统 通过上图的功能分析,把整个系统划分为3个模块: 1、 开门函数,该模块主要实现:银行开始正常营业时间,借助函数OpenForDay()来实现; 2、 顾客到达函数,该模块主要实现:客户在银行里 从排队到办理完银行业务的功能,借助函数CustomerArrive()来实现; 3、 顾客离开函数,该模块主要实现:银行下班时间及顾客全部离开的功能,借助函数CustomerDepart()来实现。 三、系统的设计与实现 【流程图】 客户到达 开始 选择服务窗口 窗口忙 服务并展开 链表空 窗口闲置 结束 排队 对头取客户 处理并离开 否 时间到 (一) 开门函数:OpenForDay() 分析:首先输入随机数
此资料由网络收集而来,如有侵权请告知上传者立即删除。资料共分享,我们负责传递知识。
种子,然后输入银行办理时的基本信息。如下图所示。
void OpenForDay() { /*初始化事件链
表*/ int i; InitList(ev); en.OccurTime=0; en.NType=Qu; /*到达*/ OrderInsert(ev,en,cmp); for(i=0;i
(二) 顾客到达函数CustomerArrived() 客户到达处理 产生随机数 插入到达事件表 插入最短队 插入离事件 该模块的具体代码如下所示: void CustomerArrived() { /*处理客户到达事件*/ QElemType f; int durtime,intertime,i; ++CustomerNum; /*客户数增加Random(durtime,intertime);
et.OccurTime=en.OccurTime+intertime;/*下一客户到达时刻=当前客
1*/
户的到达时间+时间间隔*/ et.NType=Qu; /*下一客户到达事件*/ i=Minnimum(q); if(et.OccurTimevoid CustomerDeparture() { /*处理客户离开事件*/ int i; i=en.NType; DeQueue(q[i],customer); /*删除队列排头客户*/ TotalTime+=en.OccurTime-customer.ArrivalTime; if(!QueueEmpty(q[i]))
{
GetHead(q[i],customer);
et.OccurTime=en.OccurTime+customer.Duration; et.NType=i; OrderInsert(ev,et,cmp); } } 四、系统测试 (一) 测试函数 测试该函数使用的测试方法,测试的具体步骤,测试用例的选取,测试的结
此资料由网络收集而来,如有侵权请告知上传者立即删除。资料共分享,我们负责传递知识。
果。
(二) (三) (四) 五、总结 通过此次实验,熟悉了链表在实际应用中的简单操作,通过实际数产生函数,完成了一系列银行活动的模拟,可以给银行业务的办理提供更大的便利。 实验中,存在问题,在进行了一系列的修改和请教下,解决了问题。 利用随机产生种子进行事件的模拟,即到达和办理业务的时间都是随机产生。如果事件尚未到达下班时间,则将插入到空列队或者是人数(元素)最少的列队,通过检验,算出在不同服务窗口数下的等待时间以及服务时间,基本实现了银行业务的模拟。
六、附件(代码、部分图表) LinkList.h #define Qu 2 #define jiange 5 #define chuli 10 #include #include #include #include #include #include #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 typedef int Status; typedef int Boolean; typedef struct { int OccurTime; int NType; }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 &L) { /*构造一个空的线性表*/ Link p; p=(Link)malloc(sizeof(LNode)); if(p) { p->next=NULL;
此资料由网络收集而来,如有侵权请告知上传者立即删除。资料共分享,我们负责传递知识。
Lhead=Ltail=p; Llen=0; } else exit(ERROR); } Status
DelFirst(LinkList &L,Link h,Link &q) { q=h->next; if(q) /*链表非空*/ { h->next=q->next; if(!h->next) /*删除尾结点*/ Ltail=h; /* 修改尾指针*/ Llen--; 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;
}
Position
GetHead(LinkList
L)
{ /*返回线性链表L中头结点的位置*/ return L.head; } void OrderInsert(LinkList &L,ElemType e,int(*comp)(ElemType,ElemType)) { Link o,p,q; q=Lhead; 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++; /*表长加一*/ if(!p) /*插在表尾*/ L.tail=o; /*修改尾结点*/ }
Queue.h typedef struct { int ArrivalTime; int Duration; /*办理事务所需时间*/ }QElemType; /*定义队列的数据元素类型为结构体类型*/ typedef struct QNode
此资料由网络收集而来,如有侵权请告知上传者立即删除。资料共分享,我们负责传递知识。
化学试题-银行业务模拟与离散事件模拟课程设计
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)