银行业务活动的模拟汇总.docx

上传人:b****1 文档编号:20153918 上传时间:2023-04-25 格式:DOCX 页数:19 大小:163.71KB
下载 相关 举报
银行业务活动的模拟汇总.docx_第1页
第1页 / 共19页
银行业务活动的模拟汇总.docx_第2页
第2页 / 共19页
银行业务活动的模拟汇总.docx_第3页
第3页 / 共19页
银行业务活动的模拟汇总.docx_第4页
第4页 / 共19页
银行业务活动的模拟汇总.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

银行业务活动的模拟汇总.docx

《银行业务活动的模拟汇总.docx》由会员分享,可在线阅读,更多相关《银行业务活动的模拟汇总.docx(19页珍藏版)》请在冰豆网上搜索。

银行业务活动的模拟汇总.docx

银行业务活动的模拟汇总

罗开华 | 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={ai-1ai∈D,i=2,…,n}

约定其中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<num<<"\t\t"<type<<"\t\t"<<"\t\t"<endTime<<"\t\t"<money<

if(eq.head->type=="到达")

cout<num<<"\t\t"<type<<"\t\t"<<"\t\t"<beginTime<<"\t\t"<money<

pop(eq);

}

cout<<"未处理客户:

"<<""<

while(NULL!

=fq.head)

{

totalTime+=(closeTime-fq.head->beginTime);

cout<num<<""<

++counter;

pop(fq);

}

cout<<"客户逗留平均时间为:

"<

cout<<"银行当前余额:

"<

break;

}

return0;

}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 职业教育 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1