信息工程系课程设计报告-银行业务模拟与离散事件模拟.doc_第1页
信息工程系课程设计报告-银行业务模拟与离散事件模拟.doc_第2页
信息工程系课程设计报告-银行业务模拟与离散事件模拟.doc_第3页
信息工程系课程设计报告-银行业务模拟与离散事件模拟.doc_第4页
信息工程系课程设计报告-银行业务模拟与离散事件模拟.doc_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

兰州商学院陇桥学院信息工程系课程设计报告设 计 题 目:银行业务模拟与离散事件模拟系 别:信息工程系 专 业 (方 向):网络工程年级、班:13级网络工程学生姓名:学生学号:20130672122指导教师:2014年12月30日目录一、系统开发的背景3二、系统分析与设计3(一)系统功能要求3(二)系统模块结构设计4三、系统的设计与实现5(一)测试CloseForDay()函数5(二)测试CustomerArrived()函数5四、系统测试7五、总结9六、附件(代码、部分图表)10银行业务模拟与离散事件模拟一、系统开发的背景1.通过此次课程设计中银行业务模拟的题目,掌握队列(或者链表) 等数据结构的基本操作方面的知识,并能灵活的解决一些基本的问题,加深对其性质及各项操作的理解;2.将所学数据结构方面的知识与一门具体的语言相结合(语言)来进行实现,感受数据结构的强大作用,加深理解。二、系统分析与设计(一)系统功能要求程序中用到的所有抽象数据类型的定义、主程序的流程以及各程序模块之间的层次(调用)关系。使用到带头结点链表和结点,此链表用于存放客户的进入或者离开的事件,存放数据包括进入的时间,处理的时间,离开的时间。使用一个队列和节点,此队列用于模拟进入银行后等待办理业务的客户排队情况。其存储的数据有时间到达的时间和处理事物所需的时间。包括函数调用,主要的程序在Main.cpp中,从main()进入调用。首先,分析题目要求划分实现模块、画出大致的流程图,定义基本数据类型,诸如结构体、队列等;其次,考虑基本大致的操作,比如要拟定开门的时间、顾客到来为其提供服务以及离开时的操作等;再次,针对上述的基本操作实现具体需要进行的操作,具体实现每个环节需要进行的基本操作,即具体编写每个小函数实现功能;最后,编写主函数对每个实现进行按需调用,实现操作。(二)系统模块结构设计通过对系统功能的分析,银行业务模拟和离散事件模拟功能如图所示。图1 程序流程图三、系统的设计与实现(一)测试CloseForDay()函数voidCloseForDay()printf(*n);printf(*n);printf(* 所有顾客业务办理总时间:%d分钟n, TotalTime);printf(* 业务办理顾客数:%dn, CustomerNum);printf(* 平均每人办理时间:%fn,(float)TotalTime/(float)CustomerNum);printf(*n);printf(*n);图2 测试CloseForDay()函数(二)测试CustomerArrived()函数Status CustomerArrived(EventList&ev, QCupp&q, QCuEvent en)test(顾客到达处理);CustomerNum +;/ 产生随机数/srand(54);intdurtime = rand()%30+1;intintertime = rand()%5+1; / 插入到达事件表QCuEventenTemp;int t = en.OccurTime + intertime;enTemp.OccurTime = t;enTemp.NType = 0;enTemp.next = NULL;if (t ArrivalTime = en.OccurTime;Q-Duration = durtime;Q-next = NULL;int i = MinCuQueue(q);EnCuQueue(qi,Q); / 插入离开事件enTemp.OccurTime = en.OccurTime + durtime;enTemp.NType = i;enTemp.next = NULL;if(QLength(qi) = 1)OrderInser(ev, enTemp);return OK;图3 测试CustomerArrived函数四、系统测试图4控制函数图5 测试函数图6 测试函数图7 测试函数图8 测试结果五、总结实验结果分析利用随机产生的种子进行事件的模拟,即到达时间和办理业务的时间都是随机产生。如果事件尚未到达下班时间,则将其插入到空队列或者是人数(元素)最少的队列,通过检验,算出在不同的服务窗口数下的等待时间以及服务时间,基本上实现了银行事件的模拟。实验心得体会数据结构是一门理论性较强且抽象的课程,经过一周的数据结构课程设计,至今我仍感受颇深,从选题到定稿,从理论到实践,在短短的一周时间里,虽然时间比较紧,但我学到了很多以前不知道的东西,同时不仅复习和巩固了以前所学过的知识,而且看到了和学到了很多在书本上所没有学到过的知识,使我懂得了理论必须和实践永远的结合起来,才能有质的飞跃,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到过很多问题,但我一直坚持着,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,现在觉得一定要把以前所学过的知识重新温故。虽然我的算法不够完好,还有许多问题,但我一定会调试成功的。六、附件(代码、部分图表)/* Experiment of DataStructure file* Copyright (c) 2014-2015, htucairangdunzhu. All rights reserved.*Purpose:* 实现了模拟银行的程序设计,并且包含每一个客户离开时间及统计,以及* 窗口排队的可视化模拟.运行测试通过.* Public*2014.12才让顿珠于陇桥三号楼215宿舍*/#define OK 1#define TRUE 1#define FALSE 0#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2typedefint Status;/-银行排队模拟/事件和事件表typedefstructQCuEventintOccurTime;intNType;structQCuEvent *next;QCuEvent, *EventList;/窗口前队列元素typedefstructQCuElemintArrivalTime;int Duration;structQCuElem *next;QCuElem,*QEptr;/窗口指针typedefstruct QEptr front;QEptr rear;QCustomerp,*QCupp;/主要操作函数Status OpenForDay(EventList&ev, QCuEvent en, QCupp&q);/开门Status CustomerArrived(EventList&ev, QCupp&q, QCuEventen);/顾客到达Status CustomerDeparture(EventList&ev, QCupp&q, QCuEvent en);/顾客离开voidCloseForDay();/基本操作函数Status OrderInser(EventList&ev, QCuEvent en);/按时间顺序插入事件到事件表intQLength(QCustomerpqn);/求窗口队列长度intMinCuQueue(QCupp q);/求队最短的窗口Status DelFirstEvent(EventList&ev);/删除事件表中的第一个事件Status InitCuQueue(QCustomerp&qn);/初始化窗口队列Status EnCuQueue(QCustomerp&qn,QEptr Q);/进入队列Status DeCuQueue(QCustomerp&qn,QCuElem&Q);/删除队列中的元素Status GetQHead(QCustomerpqn,QCuElem&Q);/获得队列中的第一个元素Status DestoryQueue(QCustomerpqn);/销毁队列void Ptint_QStatus(QCustomerpQCu);/打印队列长度voidBank_SimulationFunc();void test(char str);#include stdio.h#include stdlib.h#include time.hint i=0,e=0,counter=0;intTotalTime=0,CustomerNum=0;/累计客户逗留时间,客户数intCloseTime;/关门时间intwindowsnum = 0;/主函数void main() EventListev; / 事件表QCuEvent en; QCuppQCu = NULL;OpenForDay(ev, en, QCu);while (ev-next)en.NType = ev-next-NType;en.OccurTime = ev-next-OccurTime;DelFirstEvent(ev);if (en.NType = 0)CustomerArrived(ev, QCu, en);elseCustomerDeparture(ev, QCu, en);Ptint_QStatus(QCu);CloseForDay();/主要功能子函数Status OpenForDay(EventList&ev, QCuEvent en, QCupp&q)int temp = 0;printf(请输入随机数种子(或输入0使用随机种子):);scanf(%d,&temp);if (temp=0) srand(unsigned)time(NULL);elsesrand(temp);printf(请输入营业时间(单位:分钟):);scanf(%d,&temp);CloseTime = temp;TotalTime = 0;CustomerNum = 0;en.OccurTime = 0;en.NType = 0;en.next = NULL;ev = (EventList) malloc(sizeof(QCuEvent);ev-next = NULL;OrderInser(ev, en);printf(请输入办理业务的窗口数(至少1个):);scanf(%d,&windowsnum);q = (QCustomerp *) malloc(windowsnum+1)*sizeof(QCustomerp);for (int i=1;i=windowsnum;i+)InitCuQueue(qi);return OK;Status CustomerArrived(EventList&ev, QCupp&q, QCuEvent en)test(顾客到达处理);CustomerNum +;/ 产生随机数/srand(54);intdurtime = rand()%30+1;intintertime = rand()%5+1; / 插入到达事件表QCuEventenTemp;int t = en.OccurTime + intertime;enTemp.OccurTime = t;enTemp.NType = 0;enTemp.next = NULL;if (t ArrivalTime = en.OccurTime;Q-Duration = durtime;Q-next = NULL;int i = MinCuQueue(q);EnCuQueue(qi,Q); / 插入离开事件enTemp.OccurTime = en.OccurTime + durtime;enTemp.NType = i;enTemp.next = NULL;if(QLength(qi) = 1)OrderInser(ev, enTemp);return OK;Status CustomerDeparture(EventList&ev, QCupp&q, QCuEvent en)test(顾客离开处理);int i = en.NType;printf(离开时间%dn,en.OccurTime);if(en.OccurTimeCloseTime)DestoryQueue(qi);elseQCuElem customer;DeCuQueue(qi,customer);/ 客户逗留时间TotalTime += en.OccurTime - customer.ArrivalTime;printf(总时间为%dn,TotalTime);if (qi.front-next)GetQHead(qi,customer);QCuEventenTemp;enTemp.OccurTime = en.OccurTime + customer.Duration;enTemp.NType = i;OrderInser(ev, enTemp);return OK;voidCloseForDay()printf(*n);printf(*n);printf(* 所有顾客业务办理总时间:%d分钟n, TotalTime);printf(* 业务办理顾客数:%dn, CustomerNum);printf(* 平均每人办理时间:%fn,(float)TotalTime/(float)CustomerNum);printf(*n);printf(*n);/功能实现子函数Status OrderInser(EventList&ev, QCuEvent en)EventListentemp,qtemp;entemp = (EventList) malloc(sizeof(QCuEvent);entemp-OccurTime = en.OccurTime;entemp-NType = en.NType;entemp-next = NULL;if (!ev-next)ev-next = entemp;return OK;qtemp = ev;while(qtemp-next&qtemp-next-OccurTimenext;entemp-next = qtemp-next;qtemp-next = entemp;return OK;intQLength(QCustomerpqn) QEptrqtemp;int i=0;qtemp = qn.front-next;while(qtemp)qtemp = qtemp-next;i+;return i;intMinCuQueue(QCupp q)inti,min;for (i=1,min=1;i=windowsnum;i+)min = QLength(qmin)next;ev-next = p-next;free(p);return OK;Status InitCuQueue(QCustomerp&qn)qn.front = (QEptr) malloc(sizeof(QCuElem);qn.front-next = NULL;qn.rear = qn.front;return OK;Status EnCuQueue(QCustomerp&qn,QEptr Q)qn.rear-next = Q;qn.rear = Q;r

温馨提示

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

评论

0/150

提交评论