77范文网 - 专业文章范例文档资料分享平台

数据结构课程设计报告---银行业务模拟(2)

来源:网络收集 时间:2018-12-22 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

return OK; }

//若队列1不空,则删除Q1的队头元素,并用en返回其值 status DeQueue1() { Queue1 p;

if(Q1.front==Q1.rear) return ERROR; p=Q1.front->next;

en.arrivetime=p->data.arrivetime; en.OccurTime=p->data.OccurTime; en.NType=p->data.NType; en.duration=p->data.duration; en.money=p->data.money; Q1.front->next=p->next;

if(Q1.rear==p) Q1.rear=Q1.front; //只有一个人时 free(p);

return OK; }

//若队列2不空,则删除Q2的队头元素,并用en1返回其值 status DeQueue2() { Queue2 p;

if(Q2.front==Q2.rear)return ERROR; p=Q2.front->next;

en1.arrivetime=p->data.arrivetime; en1.duration=p->data.duration; en1.money=p->data.money; Q2.front->next=p->next;

if(Q2.rear==p) Q2.rear=Q2.front; //只有一个人时 free(p);

return OK; }

//营业时间结束,全部客户离开银行 void free_system() { destroyqueue1(); destroyqueue2(); } //产生随机数

status rand_ar(int *intertime,long int *money, int *duration,int *NType)

{ *intertime=rand()%INTERTIME+1; //下个客户到达的时间间隔,不大于INTERTIME *money=rand()%MONEY+1; //每个顾客办理的款数,不大于MONEY *duration=rand()%DURATION+1; //客户办理业务所要时间,不大于DURATION *NType=rand()%2; //事件类型分为0和1两种 return OK; }

void OpenForDay() { //初始化操作 printf(\请输入银行的初始存款:\ scanf(\

printf(\请输入银行的营业时间(分钟):\ scanf(\

printf(\请输入最大到达时间间隔(分钟):\

scanf(\

printf(\请输入最大的处理时间(分钟):\ scanf(\

total_time=0; //客户逗留总时间(初始值) number=0; //办理业务的次序(初始值) InitQueue1(); //初始化队列1 InitQueue2(); //初始化队列2 en.arrivetime=0; //到达时间 en.OccurTime=0; //事件发生时间 en.NType=0; //事件类型,暂时值 en.money=0; //交易金额,暂时值 en.duration=0; //办理业务时间,暂时值 EnQueue1(); //事件进队列 } //查找上一离开事件的发生时间 int find_leave() { Queue1 p; int i=0;

p=Q1.front->next; while(p!=NULL) { if(p->data.NType!=0) i=p->data.OccurTime; p=p->next; } return i; } void CustomerArrived() { int intertime; int i; time1=en.OccurTime; rand_ar(&intertime,&(en.money), &(en.duration),&(en.NType));//设置一离开事件插入事件表 en.NType++; //0变1,1变2 i=find_leave(); //查找上一离开事件的发生时间 if(i==0) //第一位顾客 en.OccurTime=en.arrivetime+en.duration; else if(i>=en.arrivetime)//本事件到达时上一事件还未离开 en.OccurTime=i+en.duration; //则此事件的离开时间=上一事件的离开时间+本事件处理时间 else //上一事件离开之后,本事件才到达

en.OccurTime=en.arrivetime+en.duration;//则此事件的离开时间=本事件到达时间+本事件处理时间 EnQueue1(); //设置下一用户到达事件插入队列1 en.arrivetime=en.arrivetime+intertime; //下一客户到达时间 en.OccurTime=en.arrivetime; en.NType=0; //暂时值 en.money=0; //暂时值 en.duration=0; //暂时值 EnQueue1(); }

//返回队列2的长度 int QueueLength_q2() { int i=0; Queue2 p;

p=Q2.front->next; while(p) { i++;

p=p->next; } return i; }

//顺序检查队列2是否有满足条件者 status check_q2() { int i,j,z=0;

i=QueueLength_q2(); //用i返回队列2长度 for(j=1;j<=i;j++)

{ DeQueue2(); //队列2出队,用en1返回其值

if(en1.money<=total_money) //若队列2出队元素的要交易的金额<=银行现存金额,则可以办理

{ if(time1>closetime)

{ printf(\ } else{ time1=time1+en1.duration; //更新系统当前时间 use_time=time1-en1.arrivetime; total_time+=use_time; //更新逗留时间 total_money-=en1.money; //更新资金总额 number++; //更新实现交易的客户数 printf(\money)); } } else { //若队列2出队元素的要交易的金额>银行现存金额,不能办理

if(time1>closetime)

{ printf(\ else{ EnQueue2(); //继续插入队列2的队尾,继续等待 } } } return OK; }

//队列1离开事件减duration(办理业务时间) int cut_duration(int e) //e即形参办理业务的时间 { Queue1 p,q,r; ElemType1 en; p=Q1.front->next; r=Q1.front; if(p) {if(p->data.NType!=0) { q=p->next; r->next=q; //删除结点 en.arrivetime=p->data.arrivetime; //到达时间 en.OccurTime=p->data.OccurTime-e; //事件发生时间 en.NType=p->data.NType; //事件类型

en.duration=p->data.duration; //办理业务时间 en.money=p->data.money; //数额 free(p); EnQueue1(); } } return OK; }

void CustomerDeparture() { int i;

i=en.NType; //业务类型,1表示存款,2表示取款 time1=en.OccurTime-en.duration; if(i==OK) //是否是办理存款 { if(en.OccurTime>closetime) //营业结束,全部客户离开银行 free_system(); else //营业时间没有结束,继续办理 { use_time=en.OccurTime-en.arrivetime; total_time+=use_time; //更新逗留的总时间 total_money=total_money+en.money; //更新资金总额 number++; //更新服务的客户数 time1=en.OccurTime; //更新系统当前时间

printf(\n.money); check_q2(); //检查队列2是否有满足条件者 } } else //办理取款 { if(en.money>total_money) //办理取款,当申请金额不能满足时,离开队列1进入队列2等待 { cut_duration(en.duration);//从队列1中删除该结点 en1.arrivetime=en.arrivetime; en1.duration=en.duration; en1.money=en.money; EnQueue2(); //进入队列2继续等待 } else //办理取款,当能满足所申请金额时进行队列1 { if(en.OccurTime>closetime) //营业结束,全部客户离开银行 free_system(); else

{ use_time=en.OccurTime-en.arrivetime;//顾客所用时间=事件发生时间-事件到达时间 total_time+=use_time; //更新逗留的总时间 total_money-=en.money; //更新资金总额 time1=en.OccurTime; //更新系统当前时间

number++; //更新客户总数

printf(\

en.money); } } } }

void main()

{ cout<<\ cout<<\欢迎使用银行业务模拟系统-------------- \ cout<<\ cout<<\姓名:钟永平----------------------- \

cout<<\学号: 200905030325 **************\ cout<<\班级:计科3班----------------------\ cout<<\ cout<<\请选择开始或退出:\ cout<<\开始银行业务模拟系统\ cout<<\退出程序\ int n; cin>>n; while(n==1) { OpenForDay(); //初始化操作 cout<<\ cout<<\ while(Q1.front) { DeQueue1(); //队列1出队列,并用en返回值 if(en.NType==0) //en.NType等于0表示客户到达,1表示客户离开 CustomerArrived(); //处理客户到达事件 else

CustomerDeparture(); //处理客户离开事件,业务类型en.NType等于1表示存款,2表示取款 } printf(\营业结束后银行现存资金总额(元): %ld\\n\ printf(\营业时间内实现交易的客户数(人): %d\\n\ printf(\客户在银行逗留的总时间(分钟): %d\\n\ printf(\客户在银行的平均逗留时间(分钟): %f\\n\ cout<<\ cout<<\以上为模拟结果!请继续选择继续或退出:\ cout<<\继续模拟\ cout<<\退出程序\ int n; cin>>n; if(n==0) { cout<<\谢谢使用本系统,再见!\ break; } } }

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库数据结构课程设计报告---银行业务模拟(2)在线全文阅读。

数据结构课程设计报告---银行业务模拟(2).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/384085.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: