银行业务模拟[1]1

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、需求分析

1.程序所实现的功能;

客户业务分为两种。第一种是申请从银行得到一笔资金,即取款或借款。第二种是向银行投入一笔资金,即存款或还款。银行有两个服务窗口,相应的有两个队列。客户到达银行后先排第一个队。处理每个客户业务时,如果属于第一种,且申请额超出银行现存资金总额而得不到满足,则立即排入第二队等候,直至满足时才离开银行,否则业务处理完后立即离开银行。每接待完一个第二种业务的客户,则顺序检查和处理(如果可能)第二个队列的客户,对能满足的申请者予以满足,不能满足者重新排到第二个队列的队尾。注意,在此检查过程中,一旦银行资金总额少于或等于刚才第一个队列中最后一个客户(第二种业务)被接待之前的数额,或者本次已将第二个队列检查或处理了一遍,就停止检查(因为此时已不可能还有能满足者)转而继续接待第一个队列的客户。任何时刻都只开一个窗口。假设检查不需要时间。营业时间结束时所有客户立即离开银行。写一个上述银行业务的事件驱动模拟系统,通过模拟方法求出客户在银行内逗留的平均时间。

分析该需求,得到如下的流程图:

2.程序的输入,包含输入的数据格式和说明;

int TotalMoney=10000; //银行初始存款

int CloseTime=480; //营业时间

int ArriveTime; //到达的时间

int dealTime; //处理的时间

int dealMoney = 5000; //处理的钱数

int currentTime = 0; //当前时刻

int TotalMoneyTime = 0; //办理业务的总时间

int counter = 0; //初始化客户数

int number = 1;

int state =1; //事件的状态,0和1

int currentTimeOfDeal = 0;

int theArriveTime = 0;

int num; //客户号

int type; //到达或离开

int beginTime; //endtime-begintime为处理的时间

int money; //正数为存款,负数为取款

3.程序的输出,程序输出的形式;

可根据需要输出客户记录表;显示一天内客户的数目,未处理客户清单,输出数据为整型数据。

每个客户的平均逗留时间,银行资金余额,输出数据为float型。

4.测试数据,如果程序输入的数据量比较大,需要给出测试数据;

银行初始资金总额为100000(元).营业时间为600(分钟)。其他模拟参量

自定。两种极端的情况:一是两个到达事件之间的间隔时间很短,而客户

的交易时间很长,另一个恰好相反,设置两个到达事件的间隔时间很长,

而客户的交易时间很短。客户逗留时间,到达时间,客户存取款金额由程

序随机产生。

二、概要设计

1.定义程序中用到的抽象数据类型;

队列的抽象数据类型为:

ADT queue{

数据对象:D={TotalMoney,CloseTime,ArriveTime,dalTime,dealMoney,currentTime,TotalMoneyTime,counter,number }

数据关系:R={|}

数据操作:

initqueue(linkqueue &q)

操作结果:构造一个空队列q

enqueue (linkqueue &q)

初始条件:队列q已存在

操作结果:插入元素为队尾元素,返回头指针q

dequeue(linkqueue &q)

初始条件:队列q已存在

操作结果若队列不空,删除Q的队头元素,把队头元素赋给,并返回

OK,否则返回ERROR

}queue

2.程序中包含的模块及模块间的关系说明。

(1)主程序模块

void main( )

{

初始化;

While(n==1)

{

接受客户信息;

处理客户信息;

}

}

(2)队列模块—实现队列抽象数据类型,记录客户到达时间并处理各模块之间的调用关系如下:

三、详细设计

1. 定义程序中所有用到的数据及其数据结构,及其基本操作的实现;

队列结构体指针结构:

typedef struct queue

{

Queue* head; //队列的头结点

Queue* rear; //队列的尾节点

}queue;

2.主函数和其他函数的伪码算法;

(1)主函数:

int main()

{

printf("\t\t********************************************\n");

printf("\t\t** 银行业务模拟系统**\n");

printf("\t\t** **\n");

printf("\t\t** **\n");

printf("\t\t** 1.开始模拟0.退出**\n");

printf("\t\t** **\n");

printf("\t\t********************************************\n");

printf("\t\t********************************************\n");

printf("\t\t********************************************\n");

int n;

scanf("%d",&n);

while(n==1)

{

srand(time(NULL)); //随机生成0~dealtime的处理时间

printf("输入最大到达时间间隔:\n");

scanf("%d",&ArriveTime);

printf("输入最大的处理时间:\n");

scanf("%d",&dealTime);

theArriveTime +=rand()%ArriveTime + 1;

while(currentTime < CloseTime)

{

currentTime++;

if( currentTimeOfDeal < currentTime ) currentTimeOfDeal = currentTime ;

if( currentTimeOfDeal == currentTime ) state = 1;

if( currentTime == theArriveTime )

{

相关文档
最新文档