c语言银行业务模拟.docxVIP

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
银行业务模拟 2) 银行业务模拟(难度系数4)[问题描述] 客户业务分为两种。第一种是申请从银行得到一笔资金,即取款或借款。第二种是向银行投入一笔资金,即存款或换款。银行有两个服务窗口,相应地有两个队列。客户到达银行后先派第一个队列。处理每一个 客户业务时, 如属于第一种, 且申请超出银行现存资金总额而得不到满足的, 则立即排入第二个队列等候, 直到满足时才离开银行;否则业务处理完后立即离开银行。每接待完一个第二种业务的客户,则顺序检查 和处理(如果可能)第二个队列中的客户,对能满足的申请者予以满足,不能满足者重新排到第二个队列 的末尾。注意:在此检查过程中,一旦银行资金总额少于或等于刚才第一个队列中最后一个客户(第二种 业务)被接待之前的数额,或者本次已将第二个队列检查或处理了一遍,就停止检查(因为此时已不可能 还有满足者)转而继续接待第一个队列的客户。任何时刻都只开一个窗口。假设检查不需要时间。营业时 间结束时所有客户立即离开银行。 写一个上述银行业务的事件驱动模拟系统,通过模拟方法求出客户在银行内逗留的平均时间。 [基本要求] 利用动态存储结构实现模拟。 [测试数据] 一天营业开始银行拥有的款项 10000 (元),营业时间为 600 分钟。其他模拟的参量自定。注意测定两种 极端情况:一是两个到达事件之间的间隔很短,而客户的交易时间很长;另一个正好相反,设置两个到达 事件的间隔时间很长,而客户之间交易的时间很短。 [实现提示] 事件有两类:到达银行和离开银行。初始时银行现存资金总额为 Total 。开始营业后的第一个事件是客户到 达,营业时间从 0 到 Closetime。到达事件发生时随机地设置各客户的交易时间和距下一次到达时间之间的 时间间隔。每个客户要办理的款项也是随机确定的,用负值和正值分别表示第一类和第二类业务。变量 To tal、 CloseTime 以及上述两个随机量的上下界均交互地从终端读入,作为模拟参数。 两个队列和一个事件表均要用动态的存储结构实现。注意弄清应该在什么条件下设置离开事件,以及第二 个队列用怎样的存储结构实现可以获得较高的效率。注意:时间表是按照时间顺序有序的。 #include <iostream> #include <string> #include <time.h> using namespace std; int total; // 初始时银行现存资金总额 int closeTime; //营业结束时间 int arriveTime; // 两个到达事件之间的间隔上限 int dealTime; // 客户之间交易的时间上限 int dealMoney = 5000; //交易额上限 int currentTime = 0; //当前时间 int totalTime = 0; // 客户逗留总时间 1 / 8 int counter = 0; //客户总数 int number = 1; //初始客户序列号 + struct service { int num; // 客户号 string type; //到达或离开 int beginTime; int endTime; int money; //正数为存款,负数为取款 service* next; }; struct queue { //队列 service* head; service* rear; }; void push(queue &q,int d) {// 插入元素 d 为 Q 的新的队尾元素 service* temp = new service; temp->money = d; temp->next = NULL; if(NULL == q.head) {// 队列为空,初始化 q. head = temp; q. rear = temp; }//if else {// 队列不为空,插入元素 d q. rear->next = temp; q. rear = q.rear->next; }//else } 2 / 8 void pop(queue &q) {// 若队列不空 ,出对列函数 service* temp; temp = q. head; if(NULL ==q. head->next) q.head = q. rear =NULL; else q. head=q. head->next; delete temp; } service* front(queue &q) {// 返回队首元素 return q. head; } service* back(queue &q) {// 返回队尾元素 return q.

文档评论(0)

baoyue + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档