银行模拟系统实验报告

上传人:m**** 文档编号:487924612 上传时间:2022-08-07 格式:DOCX 页数:8 大小:89.07KB
返回 下载 相关 举报
银行模拟系统实验报告_第1页
第1页 / 共8页
银行模拟系统实验报告_第2页
第2页 / 共8页
银行模拟系统实验报告_第3页
第3页 / 共8页
银行模拟系统实验报告_第4页
第4页 / 共8页
银行模拟系统实验报告_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《银行模拟系统实验报告》由会员分享,可在线阅读,更多相关《银行模拟系统实验报告(8页珍藏版)》请在金锄头文库上搜索。

1、银行模拟系统的设计与实现姓名:学号:班级:计科二班计算机与信息技术学院综合性、设计性实验 报告专业:计算机科学与技术年级/班级:计科二班20112012学年第一学期课程名称数据结构指导教师王岁花本组成员学号姓名成员姓名:彭涛学号:1008114150实验地点215机房实验时间7,8,9 周 下午5-6节项目名称银行模拟系统的设计与实现实验类型综合性/设计性一、实验目的1)通过实验掌握对离散事件模拟的认识;2)进一步理解队列的实现与应用;3)对链表的操作有更深层次的理解;该实验涉及到线性表的建立、插入、删除等操作,涉及到了队列的建立、插 入、删除,涉及到了离散事件的应用思想,还涉及到了排序的概念

2、。完成这 个实验对线性表、队列及C语言编程等多方面的知识将是一个很好的利用, 对离散事件也将有一个初步的认识。二、实验仪器或设备装有Visual C+ 6.0的计算机一台三、总体设计(设计原理、设计方案及流程等)实验问题描述:假设某银行有四个窗口对外接待客户,从早晨银行开门起不断有客户进入银 行。由于每个窗口在某个时刻只能接待一个客户,因此在客户人数众多时需 在每个窗口前顺次排队,对于刚进入银行的客户,如果某个窗口的业务员正 空闲,则可上前办理业务,反之,若四个窗口均有客户所占,他便会排在人 数最少的队伍后面。现在需要编制程序以模拟银行的这种业务活动并计算一 天中客户在银行逗留的平均时间。设计

3、原理:根据前几章所学习的与链表、队列等相关的知识,了解到链表与队列的特点, 联系实际,对题目思考可知: 动态链表可以进行动态分配与存储,还可以在链表中适合的位置进行删除 和插入操作; 多个相同类型的数据类型可将其放在一个数组中; 结构体类型的数据可以有多个域,存放不同的数据信息; 队列是一种先进后出的线性表,只允许在表的一端进行插入而在另一端进 行删除,和日常生活中的排队是一样的; 在一天的营业过程中,银行的工作流程,包含开门事件、客户到达对客户 业务进行办理、关门时间到的时候关门事件;而对顾客来说,办理业务需要 排队等候(如果银行里办理业务的人比较多的话)、办理业务、办理完之后 离开; 时间

4、是贯穿所有动作发生的线索,动作只有两种:到达和离开;由此想到 可以建立一个以时间先后顺序来连接动作的事件链表,将各个事件发生的时 间及类型(到达或离开)作为链表结点中的数据内容。设计方案: 对银行的业务办理流程进行深入了解,思考程序的基本框架; 根据生活实际,先将主函数编写出来,主函数中应包含银行开门事件, 顾客到达事件和离开事件; 编写出各个事件的算法; 用初始化的事件链表将各个事件联系起来; 对编号的算法进行程序化; 然后上机对程序进行编译、调试,直到程序可以正确运行。设计流程仔细分析课题,得出解决该课题的基本思路:1:链表是解决该事件的关键,从对链表的建立到链表中元素的删除并 分析,就完

5、成了问题的解决。银行开门后,对各项数据进行初始化,向 链表中插入第一个数据元素,接着进行对客户到达事件和离开事件的处 理(客户到达时,客户计数器增加,窗口队列插入,相应数据插入事件 链表;客户离开时,计时计数器增加,窗口队列的删除,相应的数据插 入事件链表)。其中,客户的离开与到达的处理先后顺序是有链表中的 元素决定,即先删除链表的第一个元素,然后分析属于到达事件则执行 到达事件相应操作,若为离开事件则执行离开事件相应操作2:对编写该程序所需的队列数组和事件链表(链表中的元素应以时间 的先后顺序链接)的基本结构进行定义,设计出基本的程序框架,使程 序在自己的脑子中有一个清晰的轮廓3:编写出主函

6、数,是银行的各种操作(开门事件、办理业务事件)及 客户的各种操作(到达事件和离开事件)都能在主函数中得以体现;需 要注意的是主函数中还应包含程序中所需的相关数据的输入操作4:将主函数中的各个子函数的算法进行程序化,然后再对函数进行细 节方面的处理(程序的声明等)。对完成的程序进行调试,若出现错误则 进行修改,若无错则输入多组数据进行执行,验证程序的完整性与健壮四、实验步骤(包括主要步骤、代码分析等)主要步骤:(1)打开Visual C+ 6.0新建一个C+ Source File,文件名为“银行 模拟系统”,保存在G:数据结构数据结构实验文件夹中。(2)输入该程序所需的代码。(3)编译、链接,

7、出现错误。(4)对错误进行修改,再次编译、链接,无错误后,执行,得出,如下图所示的执行结果:代码分析:1:首先分析主函数前面的程序,头文件的声明,各种变量的定义;#includestdio.h#include malloc.h#includemath.h#includestdlib.hint Cks=4; /银行办理业务的窗口数,默认值为:4;最大值不超过20;int Qu ; /客户队列数Qu=Cksint Khjg=5; /两相邻到达客户的时间间隔最大值,默认值为:5int Blsj=30; /每个客户办理业务的时间最大值,默认值为:30typedef struct /定义事件的元素类型E

8、lemType为结构体类型(int OccurTime; /事件发生时刻int NType; /事件类型,Qu表示到达事件,0至Qu-1表示Qu个窗口的 离开事件Event,ElemType; /事件类型,有序链表LinkList的数据元素类型typedef struct LNode 定义事件表的结点类型(ElemType data ;struct LNode *next; LNode, *LinkList;typedef LinkList EventList; /事件链表类型,定义为有序链表typedef struct 定义客户队列的元素类型(int ArrivalTime; / 到达时刻i

9、nt Duration; /办理事务所需时间QElemType; /定义QElemType(队列的数据元素类型)为结构体类型;typedef struct QNode 定义客户队列的结点类型(QElemType data ;struct QNode *next; QNode, *Queue;typedef struct ( Queue head; Queue tail; LinkQueue;LinkQueue *q; / Qu 个客户队列EventList ev; / 事件表Event en; / 事件Event et; /临时变量QElemType customer; / 客户记录int T

10、otalTime=0,CustomerNum=0; /累计客户逗留时间,客户数(初值为 0)int CloseTime; /银行营业时间(单位是分)2:再分析主函数,主函数中包含了程序所需的数据的输入,接着是随机种 子的接受(为了后面的程序中随机数的产生),紧接着是开门事件函数,然 后是对事件链表中的元素进行删除,然后对所删除结点中的数据进行分析, 若该结点的信息属于客户到达事件则处理到达事件,反之则处理离开事件; 最后是函数结果的输出;void main()(printf(请输入银行营业时间长度(单位:分)CloseTime=);scanf(d,&CloseTime);printf(请输入银

11、行办理业务所开窗口数Cks=);scanf(%d,&Cks);printf(请输入客户办理业务的最长时间Blsj=);scanf(%d,&Blsj);printf(请输入两个相邻客户到达银行的时间间隔的最大值Khjg=);scanf(%d,&Khjg);Qu=Cks; /给Qu赋值为窗口数CksBank_Simulation(); /模拟银行业务3:接下来,是程序中的子函数:cmp比较函数,将事件(到达或离开)的发生时间进行比较,不同结果返回 不同的返回值,用于对链表中事件的插入;int cmp(Event a, Event b)(/依事件a的发生时刻、二或事件b的发生时刻分别返回-1、0或1

12、 if(a.OccurTime=b.OccurTime)return 0;elsereturn(a.OccurTime-b.OccurTime)/abs(a.OccurTime-b.OccurTime);4: OpenForDay银行开门事件的函数,设置计数器与计时器,初始化时间表 与队列数组,将第一个客户的相关信息结点插入链表中;void OpenForDay() /模拟银行开门的动作,即初始化操作(int i;InitList(ev); /初始化事件链表为空en.OccurTime=0; /设定第一个客户到达事件en.NType=0; / 客户到达事件Insert_EventList(ev

13、, en);/插入事件q=(LinkQueue*)malloc(Qu+1)*sizeof(LinkQueue);/ 为队列 申 请 Qu+1个队头指针,第0个不用for(i=1;iQu+1;+i) / 置空队列InitQueue(qi);5: CustomerArrived客户到达事件函数,客户数加一,产生随机数(办理 业务时间,下一个客户到达时间),由随机数可得到下一个客户的到达事件, 插入时间表(到达时间小于关门时间),并将该结点插入最小队列中,若该 队列中只有一个客户(即办理业务不需要等候),将该客户的离开事件也插 入链表中;void CustomerArrived()( /处理客户到达

14、事件QElemType f;int durtime,intertime,i;+CustomerNum;Random(durtime,intertime); / 生成随机数/printf(%d %dn”,durtime,intertime);et.OccurTime二en.OccurTime+intertime; / 下一客户到达时刻。et.NType=0; /队列中只有一个客户到达事件/printf(%d %dn”,et.NType,et.OccurTime);if(et.OccurTimeCloseTime) /银行尚未关门,插入事件表 Insert_EventList(ev,et);i=Minimum(q); /求长度最短队列的序号,等长为最小的序号 f.ArrivalTime二en.OccurTime;f.Duration=durtime;EnQueue(qi,f);if(QueueLength(qi)=1)(et.OccurTime二en.OccurTime+durtime;et.NType二i;Insert_EventList(ev,et); /设定第i队列的一个离开事件并插入 事件表6: CustomerDeparture客户离开事件函数,将该客户所在队列的第一个

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

最新文档


当前位置:首页 > 学术论文 > 其它学术论文

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