数据结构课程设计实习报告银行业务模拟Word格式.doc
- 文档编号:826540
- 上传时间:2023-04-29
- 格式:DOC
- 页数:7
- 大小:50.50KB
数据结构课程设计实习报告银行业务模拟Word格式.doc
《数据结构课程设计实习报告银行业务模拟Word格式.doc》由会员分享,可在线阅读,更多相关《数据结构课程设计实习报告银行业务模拟Word格式.doc(7页珍藏版)》请在冰点文库上搜索。
模型靠每一个事件引发其它事件的方式来维持运转。
每个事件都有发生时间,模型的运转实际就是按事件发生时间顺序逐个处理事件,'
处理'
将产生新的事件。
因此,建模的关键就是全面分析事物的主要特点,抽象出几种能反映本质的事件和它们之间的驱动关系。
有时,这种驱动关系不一定反映实际的因果关系,而是维持系统运转的需要。
系统时间就是当前事件的事件发生时间,它不是等间隔变化而是跳跃变化的。
4.模型中的简化和假设应是合理的,避免歪曲事物的主要性质。
每个客户到达和下一客户到达时间的间隔以及每个客户业务花费时间都应是随机的,其平均值应便于调整。
其中,客户到达时间的平均间隔应能在运行中用键盘实时调整。
每个客户到达和下一个客户到达时间的间隔有时可能取零值(相当于两人同时到达),但每一个客户花费的业务处理时间则不可能取零值(>
=1分钟)。
5.能比较形象地实时显示各队列的状态及客户平均逗留时间、平均队列长度、已办完业务的客户数。
模型应能自动根据平均队长调整营业窗口数,缩减窗口时,应将此前排在被减窗口的客户继续处理完。
6.还要形象地实时显示系统时间,即当前业务发生时间,采用分钟:
秒的形式输出,当到达银行关门时间时,若还有客户没处理完业务,将继续处理,直至最后一个客户离开,但不能延时过久,尽快将剩余客户处理完。
7.为了简化操作我没有用C语言而是用了C++,因为C++有地址传送,方便处理。
二.概要设计:
1.单链表的抽象数据类型定义为:
ADTeventlist{
数据对象:
D={qi|qi∈ElemSet,i=1,2,……,n,n>
=o}
数据关系:
R={〈qi-1,qi>
|qi-1,qi∈D,i=2,3,……,n}
队列的抽象数据类型定义:
ADTQueue{
D={ai|ai∈ElemSet,i=1,2,……,n,n>
R={〈ai-1,ai>
|ai-1,ai∈D,i=2,3,……,n}
基本操作:
Initqueue(linkqueue&
q)
操作结果:
构造一个空的队列q;
Initlist(linklist&
ev)
构造一个空的链表ev;
Queueempty(linkqueueq)
初始条件:
队列q已存在;
操作结果:
若队列为空,则返回TURE,否则返回ERROR;
Queuelength(linkqueueq)
返回队列的长度;
Mininum(linkqueueq[])
队列数组已存在
返回队列数组中最短队的长度;
Enqueue(linkqueue&
q,qelemtypee)
队列数组已存在
在队尾插入一个元素e
Delqueue(linkqueue&
q,intl)
队列数组已存在
删除队列q的队头
Orderinsert(eventlist&
ev,eventen)
事件链表ev已存在
将新生成客户到达事件插入事件链表ev中
Openforday()
初始化操作
Customerarrived()
初始化操作完毕
处理客户到达事件
Customerdepature(eventen)
初始化操作完毕,已有客户到达
处理客户离开事件
Time()
客户到达时间已随机生成
化为系统时间,用分:
秒形式表示
Bank_Simulation()
打印出窗口,平均队长,近20人的平均逗留时间,客户到达人数和已处理的客户人数
2.本程序包含五个模块:
(1)主程序模块:
Voidmain(){
接受命令;
处理命令;
}
(2)事件链表表单元模块——实现链表的抽象数据类型;
(3)队列单元模块——实现队列的抽象数据类型;
(4)事件结点结构单元模块——定义链表的结点结构;
(5)队列结点结构单元模块——定义队列的结点结构;
各模块之间的调用关系如下:
主程序模块—〉链表、队列表单元模块—>
队列、链表结点结构单元模块。
三.详细设计:
#defineQu4
#defineKhjg5
#defineBlsj30
#include"
c1.h"
typedefstruct
{
intOccurTime;
intNType;
}Event,ElemType;
c2_5.h"
typedefLinkListEventList;
bo2_5.cpp"
//
intArrivalTime;
intDuration;
}QElemType;
c3_2.h"
bo3_2.cpp"
EventListev;
Eventen;
Eventet;
LinkQueueq[Qu];
QElemTypecustomer;
intTotalTime=0,CustomerNum=0;
intCloseTime;
intcmp(Eventa,Eventb)
if(a.OccurTime==b.OccurTime)
return0;
else
return(a.OccurTime-b.OccurTime)/abs(a.OccurTime-b.OccurTime);
voidOpenForDay()
inti;
InitList(ev);
en.OccurTime=0;
en.NType=Qu;
OrderInsert(ev,en,cmp);
for(i=0;
i<
Qu;
++i)
InitQueue(q[i]);
voidRandom(int&
d,int&
i)
d=rand()%Blsj+1;
i=rand()%Khjg+1;
intMinimum(LinkQueueQ[])
intl[Qu];
inti,k;
i++)
l[i]=QueueLength(Q[i]);
k=0;
for(i=1;
if(l[i]<
l[0])
{
l[0]=l[i];
k=i;
}
returnk;
voidCustomerArrived()
QElemTypef;
intdurtime,intertime,i;
++CustomerNum;
Random(durtime,intertime);
et.OccurTime=en.OccurTime+intertime;
et.NType=Qu;
if(et.OccurTime<
CloseTime)
OrderInsert(ev,et,cmp);
i=Minimum(q);
f.ArrivalTime=en.OccurTime;
f.Duration=durtime;
EnQueue(q[i],f);
if(QueueLength(q[i])==1)
{
et.OccurTime=en.OccurTime+durtime;
et.NType=i;
}
voidCustomerDeparture()
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;
voidBank_Simulation()
Linkp;
OpenForDay();
while(!
ListEmpty(ev))
DelFirst(ev,GetHead(ev),p);
en.OccurTime=GetCurElem(p).OccurTime;
en.NType=GetCurElem(p).NType;
if(en.NType==Qu)
CustomerArrived();
else
CustomerDeparture();
printf("
客户总数:
%d\n客户共耗时:
%d分钟\n平均每人耗时:
%d\n"
CustomerNum,TotalTime,TotalTime/CustomerNum);
intmain()
请输入银行营业时间(单位:
分)\n"
);
scanf("
%d"
&
CloseTime);
Bank_Simulation();
return0;
四.测试数据:
五.调试分析:
1.我在编写这些函数时觉得Orderinsert(eventlist&
ev,eventen)函数使我很迷惑,不知道该怎么插入新生事件,因为不是直接插入队尾,我不明白该用什么方法。
后来又仔细研究了课本上那个例子才发现原来是比较事件发生时间,这样才正确插进去了。
2.显示队列时我遇到最大障碍,开始时每个队列只能显示一个客户,查了好久后发现原来我的事件表只生成了一个结点,而且后面的指针都没指正确,当然不对了,又做修改后发现又出了个大问题,队列只能进人却不能出人了,开始我怀疑是不是删除队头函数写错了,但查了很久发现并没错,又继续查,才发现原来在Customerdepature(eventen)函数中,我没有写打印队列函数,这怎么能显示离开状态呢?
修改后,显示就正常了。
3.开始我不知道老师要求的是近二十人的平均逗留时间,于是求的就是全部客户的平均逗留时间,后来老师说这样不行,还要修改,于是我又编写了一个数组专门来存放这二十人的,用这些人的全部逗留时间除以20才得到正确的时间。
4.我开始没有处理系统时间,即直接将随机生成的客户到达时间输出,在老师哪儿没有通过,经老师提点,原来分钟用ti/60显示,秒用ti%60显示即可。
5.在用上下键控制间隔时间时也有很多麻烦,发现编写算法后,虽然能调动时间的显示,但对队列的显示根本没有作用,又是一番周折才查出原来这两个地方根本没有联系起来,重新编写后,又调试好久才运行正常了。
七.附录
1.主程序:
bank.cpp
2.常用定义文件:
c1.h
3.链表定义与操作文件:
c2_5.hbo2_5.h
4.队列定义与操作文件:
c3-2.hbo3-2.h
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 实习 报告 银行业务 模拟
![提示](https://static.bingdoc.com/images/bang_tan.gif)