银行业务活动的模拟汇总.docx
- 文档编号:20153918
- 上传时间:2023-04-25
- 格式:DOCX
- 页数:19
- 大小:163.71KB
银行业务活动的模拟汇总.docx
《银行业务活动的模拟汇总.docx》由会员分享,可在线阅读,更多相关《银行业务活动的模拟汇总.docx(19页珍藏版)》请在冰豆网上搜索。
银行业务活动的模拟汇总
罗开华 | 193132班 | 20131001842
2015年1月5日
数据结构
指导老师:
陈桂玲
题号:
1题目:
银行业务活动的模拟
1.需求分析
1.客户的业务分为两种:
第一种是申请从银行得到一笔资金,即取款或借款;
2.第二种是向银行中投入一笔资金,即存款或还款。
银行有两个服务窗口,相应地有两个队列。
客户到达银行后先排第一个队。
3.处理每个客户业务时,如果属于第一种,且申请额超出银行现存资金总额而得不到满足,则立刻排入第二个队等候,直至满足时才离开银行;否则业务处理完后立刻离开银行。
每接待完一个第二种业务的客户,则顺序检查和处理(如果可能)第二个队列中的客户,对能满足的申请者予以满足,不能满足者重新排到第二个队列的队尾。
4.注意,在此检查过程中,一旦银行资金总额少于或等于刚才第一个队列中最后一个客户(第二种业务)被接待之前的数额,或者本次已将第二个队列检查或处理了一遍,就停止检查(因为此时已不可能还有能满足者)转而继续接待第一个队列的客户。
任何时刻都只开一个窗口。
假设检查不需要时间。
营业时间结束时所有客户立刻离开银行。
5.要求:
模拟银行业务活动,按时间顺序输出业务活动的事件,并求出客户在银行内逗留的平均时间。
2.设计
2.1设计思想
(1)数据结构设计(采用的结构及原因)
本题我采用的是用队列来储存客户数据,用rand函数来提取随值。
(2)算法设计(函数模块及功能,可画流程图)
2.2设计表示
(1)关系调用图
(2)函数接口规格说明
函数调用
1.主函数main
2.进栈函数push
3.出栈函数pop
4.查找和处理函数service*searchAndDel
5.到达函数arrive
6.存款函数putMoney
7.群款函数getMoney
8.随机函数rand
2.3详细设计(伪码,注释)
ADTQueue{
数据对象:
D={ai∈Elemseti=1,2,…,n,n≥0}
数据关系:
R1={
约定其中a1端为队列头,an端为队列尾.
基本操作:
InitQueue(&Q)
操作结果:
构造一个空队列Q
QueueEmpty(Q)
操作结果:
若Q为空队列,则返回TRUE,否则FALSE
GetHead(Q&q)EnQueue(&Qq)
操作结果:
插入元素q为Q的新的队尾素
DeQueue(&Q&q);操作结果删除Q的队头元素,并用q返回其值。
3调试分析(时间空间复杂度)
银行业务模拟程序,在编译的时候,由于对话框之间的衔接不太懂,所以并没有实现应有的结果。
但后来还是通过学生,上网查询等多种方法,终于弄清了对话框之间的衔接和一些基本算法。
最终也运行出来了。
4.用户手册
本程序是在visualsdudio2012上编译测试的。
5.测试数据及测试结果
测试数据:
存款10000,时间480,最大时间间隔30,最大处理时间5
存款30000,时间360,最大时间间隔10,最大处理时间10
6.源程序清单
#include
#include
usingnamespacestd;
inttotal;
intcloseTime;
intarriveTime;
intdealTime;
intdealMoney=5000;
intcurrentTime=0;
inttotalTime=0;
intcounter=0;
intnumber=1;+
structservice
{
intnum;
stringtype;
intbeginTime;
intendTime;
intmoney;
service*next;
};
structqueue
{
service*head;
service*rear;
};
voidpush(queue&q,intd)
{
service*temp=newservice;
temp->money=d;
temp->next=NULL;
if(NULL==q.head)
{
q.head=temp;
q.rear=temp;
}
else
{
q.rear->next=temp;
q.rear=q.rear->next;
}
}
voidpop(queue&q)
{
service*temp;
temp=q.head;
if(NULL==q.head->next)
q.head=q.rear=NULL;
else
q.head=q.head->next;
deletetemp;
}
service*front(queue&q)
{
returnq.head;
}
service*back(queue&q)
{
returnq.rear;
}
service*searchAndDel(queue&q,intm)
{
service*sign=q.head;
service*temp;
while(NULL!
=q.head)
{
if((-(q.head->money)) { if(q.head==q.rear) { temp=q.head; q.head=q.rear=NULL; returntemp; } else { temp=q.head; q.head=q.head->next; returntemp; } } else { if(q.head==q.rear){} else { q.rear->next=q.head; q.rear=q.rear->next; q.head=q.head->next; q.rear->next=NULL; } } if(q.head==sign) returnNULL; } returnNULL; } boolstate=1; intcurrentTimeOfDeal=0; inttheArriveTime=0; queueeq; queuefq; queuesq; voidarrive() { push(fq,(rand()%(2*dealMoney)-dealMoney)); back(fq)->beginTime=currentTime; back(fq)->num=number; push(eq,(back(fq)->money)); back(eq)->beginTime=currentTime; back(eq)->type="到达"; back(eq)->num=number; ++number; } voidputMoney() { total+=front(fq)->money; push(eq,front(fq)->money); back(eq)->type="离开"; back(eq)->num=front(fq)->num; back(eq)->endTime=(front(fq)->beginTime+rand()%dealTime+1); ++counter; totalTime+=(back(eq)->endTime-front(fq)->beginTime); pop(fq); currentTimeOfDeal=back(eq)->endTime; state=0; } voidgetMoney() { if((-fq.head->money)>total) { push(sq,front(fq)->money); back(sq)->beginTime=front(fq)->beginTime; back(sq)->num=front(fq)->num; pop(fq); } else { total+=back(fq)->money; push(eq,front(fq)->money); back(eq)->type="离开"; back(eq)->num=front(fq)->num; back(eq)->endTime=(front(fq)->beginTime+rand()%dealTime+1); back(eq)->beginTime=0; currentTimeOfDeal=back(eq)->endTime; ++counter; totalTime+=(back(eq)->endTime-back(fq)->beginTime); pop(fq); state=0; } } service*temped; intrandomTemp; voidfindAndDeal() { while((temped=searchAndDel(sq,total))&&NULL! =temped) { total+=temped->money; push(eq,temped->money); back(eq)->type="离开"; back(eq)->num=temped->num; randomTemp=rand()%dealTime+1; back(eq)->endTime=currentTime+randomTemp; currentTimeOfDeal+=randomTemp; ++counter; totalTime+=(back(eq)->endTime-temped->beginTime); deletetemped; temped=NULL; } state=0; } intmain() { printf("********************************************\n"); printf("**\n"); printf("*欢迎进入银行模拟系统*\n"); printf("**\n"); printf("********************************************\n"); printf("1.开始模拟0.退出\n"); intn; scanf("%d",&n); while(n==1) { srand(NULL); printf("输入银行的初始存款: \n"); scanf("%d",&total); printf("输入银行的营业时间: \n"); scanf("%d",&closeTime); printf("输入最大到达时间间隔: \n"); scanf("%d",&arriveTime); printf("输入最大的处理时间: \n"); scanf("%d",&dealTime); theArriveTime+=rand()%arriveTime+1; while(currentTime { ++currentTime; if(currentTimeOfDeal if(currentTimeOfDeal==currentTime)state=1; if(currentTime==theArriveTime) { arrive(); theArriveTime+=rand()%arriveTime+1; }//if if(1==state&&NULL! =fq.head) { if(fq.head->money>=0) { putMoney(); findAndDeal(); }//if else getMoney(); }//if } cout< while(NULL! =eq.head) { if(eq.head->type=="离开") cout< if(eq.head->type=="到达") cout< pop(eq); } cout<<"未处理客户: "<<""< while(NULL! =fq.head) { totalTime+=(closeTime-fq.head->beginTime); cout< ++counter; pop(fq); } cout<<"客户逗留平均时间为: "< cout<<"银行当前余额: "< break; } return0; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 银行业务 活动 模拟 汇总