电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

c语言银行业务模拟VIP免费

c语言银行业务模拟_第1页
1/4
c语言银行业务模拟_第2页
2/4
c语言银行业务模拟_第3页
3/4
1/8银行业务模拟(2)银行业务模拟(难度系数4)[问题描述]客户业务分为两种。第一种是申请从银行得到一笔资金,即取款或借款。第二种是向银行投入一笔资金,即存款或换款。银行有两个服务窗口,相应地有两个队列。客户到达银行后先派第一个队列。处理每一个客户业务时,如属于第一种,且申请超出银行现存资金总额而得不到满足的,则立即排入第二个队列等候,直到满足时才离开银行;否则业务处理完后立即离开银行。每接待完一个第二种业务的客户,则顺序检查和处理(如果可能)第二个队列中的客户,对能满足的申请者予以满足,不能满足者重新排到第二个队列的末尾。注意:在此检查过程中,一旦银行资金总额少于或等于刚才第一个队列中最后一个客户(第二种业务)被接待之前的数额,或者本次已将第二个队列检查或处理了一遍,就停止检查(因为此时已不可能还有满足者)转而继续接待第一个队列的客户。任何时刻都只开一个窗口。假设检查不需要时间。营业时间结束时所有客户立即离开银行。写一个上述银行业务的事件驱动模拟系统,通过模拟方法求出客户在银行内逗留的平均时间。[基本要求]利用动态存储结构实现模拟。[测试数据]一天营业开始银行拥有的款项10000(元),营业时间为600分钟。其他模拟的参量自定。注意测定两种极端情况:一是两个到达事件之间的间隔很短,而客户的交易时间很长;另一个正好相反,设置两个到达事件的间隔时间很长,而客户之间交易的时间很短。[实现提示]事件有两类:到达银行和离开银行。初始时银行现存资金总额为Total。开始营业后的第一个事件是客户到达,营业时间从0到Closetime。到达事件发生时随机地设置各客户的交易时间和距下一次到达时间之间的时间间隔。每个客户要办理的款项也是随机确定的,用负值和正值分别表示第一类和第二类业务。变量Total、CloseTime以及上述两个随机量的上下界均交互地从终端读入,作为模拟参数。两个队列和一个事件表均要用动态的存储结构实现。注意弄清应该在什么条件下设置离开事件,以及第二个队列用怎样的存储结构实现可以获得较高的效率。注意:时间表是按照时间顺序有序的。#include#include#includeusingnamespacestd;inttotal;//初始时银行现存资金总额intcloseTime;//营业结束时间intarriveTime;//两个到达事件之间的间隔上限intdealTime;//客户之间交易的时间上限intdealMoney=5000;//交易额上限intcurrentTime=0;//当前时间inttotalTime=0;//客户逗留总时间2/8intcounter=0;//客户总数intnumber=1;//初始客户序列号+structservice{intnum;//客户号stringtype;//到达或离开intbeginTime;intendTime;intmoney;//正数为存款,负数为取款service*next;};structqueue{//队列service*head;service*rear;};voidpush(queue&q,intd){//插入元素d为Q的新的队尾元素service*temp=newservice;temp->money=d;temp->next=NULL;if(NULL==q.head){//队列为空,初始化q.head=temp;q.rear=temp;}//ifelse{//队列不为空,插入元素dq.rear->next=temp;q.rear=q.rear->next;}//else}3/8voidpop(queue&q){//若队列不空,出对列函数service*temp;temp=q.head;if(NULL==q.head->next)q.head=q.rear=NULL;elseq.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))next;//首节点后移一位,返回原首节点returntemp;}//else}//whileelse4/8{//队首元首不能被处理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;}//else}//elseif(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;}

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

c语言银行业务模拟

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部