銀行業(yè)務(wù)模擬課程設(shè)計(jì)_第1頁(yè)
已閱讀1頁(yè),還剩23頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p>  課程名稱: 計(jì)算機(jī)技術(shù)綜合課程設(shè)計(jì) </p><p>  題 目: 銀行業(yè)務(wù)模擬 </p><p>  學(xué) 院: 信息工程 系: * </p><p>  專(zhuān) 業(yè): * </p>&l

2、t;p>  班 級(jí): 0* </p><p>  學(xué) 號(hào): * </p><p>  學(xué)生姓名: * </p><p>  時(shí) 間: * </p><p><b>  問(wèn)題

3、描述:</b></p><p>  客戶業(yè)務(wù)分為兩種。第一種是申請(qǐng)從銀行得到一筆資金,即取款或借款;第二種是向銀行中投入一筆資金,即存款或還款。銀行有兩個(gè)服務(wù)窗口,相應(yīng)地有兩個(gè)隊(duì)列??蛻舻竭_(dá)銀行后先排第一個(gè)隊(duì)。處理每個(gè)客戶業(yè)務(wù)時(shí),如果屬于第一種,且申請(qǐng)額超出銀行現(xiàn)存資金總額而得不到滿足,則立刻排入第二個(gè)隊(duì)等候,直到滿足時(shí)才離開(kāi)銀行;否則業(yè)務(wù)處理完后立刻離開(kāi)銀行。每接待完一個(gè)第二種業(yè)務(wù)的客戶,則順序檢查

4、和處理(如果可能)第二個(gè)隊(duì)列中的客戶,對(duì)滿足的申請(qǐng)者予以滿足,不能滿足者重新排到第二個(gè)隊(duì)列的隊(duì)尾。注意,在此檢查過(guò)程中,一旦銀行資金總額少于或等于剛才第一個(gè)隊(duì)列中最后一個(gè)客戶(第二種業(yè)務(wù))被接待之前的數(shù)額,或者本次已將第二個(gè)隊(duì)列檢查或處理了一遍,就停止檢查(因?yàn)榇藭r(shí)已不可能還有能滿足者)轉(zhuǎn)而繼續(xù)接待第一個(gè)隊(duì)列的客戶。任何時(shí)刻都只開(kāi)一個(gè)窗口。假設(shè)檢查不需要時(shí)間。營(yíng)業(yè)時(shí)間結(jié)束時(shí)所有客戶立即離開(kāi)銀行。</p><p>

5、  寫(xiě)一個(gè)銀行業(yè)務(wù)的事件驅(qū)動(dòng)模擬系統(tǒng),通過(guò)模擬方法求出客戶在銀行內(nèi)逗留的平均時(shí)間。</p><p><b>  分析與設(shè)計(jì)</b></p><p><b>  問(wèn)題分析:</b></p><p>  本問(wèn)題主要需要處理兩個(gè)隊(duì)列(fq,sq)和一個(gè)事件表(eq)。一個(gè)隊(duì)列(fq)表示第一種業(yè)務(wù)(存款或還款),另一個(gè)隊(duì)列(sq

6、)表示第二種業(yè)務(wù)(取款或借款)。事件有兩類(lèi):到達(dá)銀行和離開(kāi)銀行。到達(dá)事件發(fā)生時(shí)隨機(jī)地設(shè)置此用戶的交易時(shí)間和距下一到達(dá)事件之間的時(shí)間間隔。每個(gè)客戶要辦理的款額也應(yīng)該是隨機(jī)確定的。初始時(shí)銀行現(xiàn)存資金總額為total。開(kāi)始營(yíng)業(yè)后的第一個(gè)事件是客戶到達(dá),營(yíng)業(yè)時(shí)間從0到closetime。Total和closetime以及隨機(jī)產(chǎn)生的時(shí)間和款項(xiàng)的上下界都是交互地從讓用戶從輸入,作為模擬參數(shù)。要得到相關(guān)的結(jié)果:由于下班時(shí)間到而沒(méi)能辦理的顧客數(shù);分別

7、列出需要辦理兩種業(yè)務(wù)的顧客數(shù);分別列出已成功辦理兩種業(yè)務(wù)的顧客數(shù);分別列出兩種業(yè)務(wù)的成功辦理率;客戶在銀行內(nèi)的平均逗留時(shí)間;下班時(shí)銀行所剩余的資金總額。</p><p>  測(cè)試數(shù)據(jù)及期望結(jié)果:</p><p><b>  輸入:</b></p><p>  用戶需要在程序運(yùn)行開(kāi)始時(shí)輸入以下數(shù)據(jù):</p><p>  銀

8、行初始資金total(測(cè)試數(shù)據(jù)為10000)</p><p>  銀行營(yíng)業(yè)時(shí)間closetime(測(cè)試數(shù)據(jù)為600)</p><p>  客戶交易時(shí)間上下界dealmaxtime和dealmintime,用于給隨機(jī)數(shù)產(chǎn)生函數(shù)傳遞參數(shù),產(chǎn)生一個(gè)介于這兩個(gè)值之間的值。</p><p>  客戶到達(dá)時(shí)間間隔上界arrivemaxtime arrivemintime,用于給

9、隨機(jī)數(shù)產(chǎn)生函數(shù)傳遞參數(shù),產(chǎn)生一個(gè)介于這兩個(gè)值之間的值。</p><p>  交易額的最大上限dealMaxMoney.用于給隨機(jī)函產(chǎn)生函數(shù)參數(shù),產(chǎn)生一個(gè)介于-dealMaxMoney和dealMaxMoney之間的值,作為顧客到銀行辦理業(yè)務(wù)的交易額。</p><p><b>  輸出:</b></p><p>  本程序用dos界面模擬輸出整個(gè)

10、銀行業(yè)務(wù)辦理及排隊(duì)的結(jié)果,最后給出一下數(shù)據(jù):</p><p>  由于下班時(shí)間到而沒(méi)能辦理的顧客數(shù)</p><p>  分別列出需要辦理兩種業(yè)務(wù)的顧客數(shù)</p><p>  分別列出已成功辦理兩種業(yè)務(wù)的顧客數(shù)</p><p>  分別列出兩種業(yè)務(wù)的成功辦理率。</p><p>  客戶在銀行內(nèi)的平均逗留時(shí)間</p

11、><p>  下班時(shí)銀行所剩余的資金總額</p><p>  所有數(shù)據(jù)均要正確輸入,并對(duì)輸入合法性進(jìn)行檢測(cè),如只能輸入數(shù)字,且上界必須不小于下界。</p><p><b>  預(yù)計(jì)實(shí)現(xiàn)結(jié)果截圖:</b></p><p>  用戶打開(kāi)運(yùn)行程序以后會(huì)出現(xiàn)如下的首界面:</p><p>  用戶按任意鍵

12、繼續(xù),則會(huì)出現(xiàn)如下主界面:</p><p>  用戶選擇1開(kāi)始模擬。按提示輸入相應(yīng)的數(shù)據(jù)設(shè)置,就能得到想要的模擬結(jié)果。退出選擇0.</p><p>  對(duì)用戶輸入要求如下:</p><p>  銀行開(kāi)始的資金總額應(yīng)該大于零。</p><p>  銀行的營(yíng)業(yè)時(shí)間必須小于1440分鐘(24小時(shí))。</p><p>  最大

13、到達(dá)時(shí)間間隔必須小于營(yíng)業(yè)時(shí)間。</p><p>  最小到達(dá)時(shí)間間隔必須介于零和最大到達(dá)時(shí)間之間。</p><p>  最大處理時(shí)間必須小于營(yíng)業(yè)時(shí)間。</p><p>  最小處理時(shí)間必須介于零和最大處理時(shí)間之間。</p><p>  最大交易額應(yīng)該小于銀行開(kāi)始時(shí)的資金總額且小于程序設(shè)置的50000。</p><p>

14、  如果輸入不符合上述要求,程序會(huì)提示用戶哪里輸入出錯(cuò),可以再次輸入。每個(gè)輸入數(shù)據(jù)都有3次機(jī)會(huì)。當(dāng)三次輸入都錯(cuò)的時(shí)候,程序停止運(yùn)行,按任意鍵退出。</p><p>  現(xiàn)給出最小處理時(shí)間出錯(cuò)時(shí)的三種提示截圖:</p><p>  模塊結(jié)果及各個(gè)模塊的實(shí)現(xiàn)方法描述:</p><p><b>  概要設(shè)計(jì)</b></p><p&

15、gt;<b>  結(jié)構(gòu)體的定義如下:</b></p><p>  struct service</p><p><b>  {</b></p><p>  int num; //客戶號(hào)</p><p>  string type; //到達(dá)或離開(kāi)</p><p>  int

16、beginTime;//到達(dá)時(shí)間</p><p>  int endTime;//離開(kāi)時(shí)間</p><p>  int money; //正數(shù)為存款,負(fù)數(shù)為取款</p><p>  service* next;//指針域</p><p><b>  };</b></p><p>  隊(duì)列的抽象數(shù)據(jù)

17、類(lèi)型定義如下:</p><p>  ADT Queue{</p><p>  數(shù)據(jù)對(duì)象:D={ ai | ai∈ElemSet, i=1,2,...,n, n≥0 }</p><p>  數(shù)據(jù)關(guān)系:R1={ <ai-1, ai>|ai-1, ai∈D, i=2,...,n }</p><p><b>  基本操作:&l

18、t;/b></p><p>  void init_Q(Queue &Q);</p><p>  操作結(jié)果:構(gòu)造空隊(duì)列Q</p><p>  int Q_empty(Queue Q);</p><p>  初始條件:隊(duì)列Q存在</p><p>  操作結(jié)果:若Q為空隊(duì)列,則返回TRUE,否則FALSE&l

19、t;/p><p>  int Q_length(Queue Q);</p><p>  初始條件:隊(duì)列Q存在</p><p>  操作結(jié)果:返回隊(duì)列Q的元素個(gè)數(shù),即隊(duì)列長(zhǎng)度</p><p>  int gethead_Q(Queue Q);</p><p>  初始條件:隊(duì)列Q存在</p><p>

20、  操作結(jié)果:返回隊(duì)列Q的隊(duì)頭元素</p><p>  void en_Q(Queue &Q,int e);</p><p>  初始條件:隊(duì)列Q存在</p><p>  操作結(jié)果:插入元素e為Q的新的隊(duì)尾元素。</p><p>  void de_Q(Queue &Q,int &e);</p><

21、p>  初始條件:隊(duì)列Q存在</p><p>  操作結(jié)果:刪除Q的隊(duì)頭元素。</p><p>  }ADT Queue</p><p><b>  模塊及相互調(diào)用關(guān)系</b></p><p>  本程序包含3個(gè)模塊:</p><p><b>  主程序模塊</b>&l

22、t;/p><p>  隊(duì)列模塊--實(shí)現(xiàn)隊(duì)列抽象數(shù)據(jù)類(lèi)型</p><p>  各模塊相互調(diào)用關(guān)系如下:</p><p><b>  主程序模塊</b></p><p><b>  隊(duì)列模塊</b></p><p><b>  算法設(shè)計(jì)</b></p>

23、;<p><b>  隊(duì)列類(lèi)型</b></p><p>  typedef struct QNode</p><p>  {//隊(duì)列節(jié)點(diǎn)類(lèi)型 </p><p>  int data;</p><p>  struct QNode *next;</p><p>  }Q

24、Node,*PQNode;</p><p>  typedef struct {</p><p>  PQNode front;//隊(duì)頭指針</p><p>  PQNode rear;//隊(duì)尾指針</p><p><b>  }Queue;</b></p><p>  隊(duì)列的基本操作設(shè)

25、置如下:</p><p>  void init_Q(Queue &Q);</p><p>  //初始化,構(gòu)造空隊(duì)列Q(Q.front=Q.rear)</p><p>  int Q_empty(Queue Q);</p><p><b>  //若隊(duì)列Q存在</b></p><p> 

26、 //若Q為空隊(duì)列,則返回TRUE,否則FALSE</p><p>  int Q_length(Queue Q);</p><p><b>  //若隊(duì)列Q存在</b></p><p>  //返回隊(duì)列Q的元素個(gè)數(shù),即隊(duì)列長(zhǎng)度</p><p>  int gethead_Q(Queue Q);</p>&

27、lt;p><b>  //若隊(duì)列Q存在</b></p><p>  //返回隊(duì)列Q的隊(duì)頭元素</p><p>  void en_Q(Queue &Q,int e);</p><p><b>  //若隊(duì)列Q存在</b></p><p>  //插入元素e為Q的新的隊(duì)尾元素。</

28、p><p>  void de_Q(Queue &Q,int &e);</p><p><b>  //若隊(duì)列Q存在</b></p><p>  //刪除Q的隊(duì)頭元素。</p><p><b>  其中操作算法:</b></p><p>  void init_Q

29、(Queue &Q)</p><p><b>  {</b></p><p>  //初始化,構(gòu)造空隊(duì)列Q(Q.front=Q.rear)</p><p>  Q.front=Q.rear=(PQNode)malloc(sizeof(QNode));</p><p>  if(!Q.front)exit(-1);

30、</p><p><b>  } </b></p><p>  int Q_empty(Queue Q)</p><p><b>  {</b></p><p><b>  //若隊(duì)列Q存在</b></p><p>  //若Q為空隊(duì)列,則返回TRUE,

31、否則FALSE</p><p>  if(Q.front==Q.rear)return 1;</p><p>  else return 0;</p><p><b>  }</b></p><p>  int gethead_Q(Queue Q)</p><p><b>  {<

32、/b></p><p><b>  //若隊(duì)列Q存在</b></p><p>  //返回隊(duì)列Q的隊(duì)頭元素</p><p>  if(!Q_empty(Q))return Q.front->next->data;</p><p>  else return 0;</p><p>

33、<b>  }</b></p><p>  int Q_length(Queue Q)</p><p><b>  {</b></p><p><b>  //若隊(duì)列Q存在</b></p><p>  //返回隊(duì)列Q的元素個(gè)數(shù),即隊(duì)列長(zhǎng)度</p><p>

34、;  int count=0;</p><p>  PQNode p=Q.front;</p><p>  while(p!=Q.rear)</p><p><b>  {</b></p><p><b>  count++;</b></p><p>  p=p->ne

35、xt;</p><p><b>  }</b></p><p>  return count;</p><p><b>  }</b></p><p>  void en_Q(Queue &Q,int e)</p><p><b>  {</b>

36、</p><p><b>  //若隊(duì)列Q存在</b></p><p>  //插入元素e為Q的新的隊(duì)尾元素。</p><p>  PQNode p=(PQNode)malloc(sizeof(QNode));</p><p>  if(!p)exit(-1);</p><p>  p->d

37、ata=e;p->next=NULL;</p><p>  Q.rear->next=p;</p><p><b>  Q.rear=p;</b></p><p><b>  }</b></p><p>  void de_Q(Queue &Q,int &e)</

38、p><p><b>  {</b></p><p><b>  //若隊(duì)列Q存在</b></p><p>  //刪除Q的隊(duì)頭元素</p><p><b>  PQNode p;</b></p><p>  if(Q.front==Q.rear)return

39、 ;</p><p>  p=Q.front->next;</p><p>  e=p->data;</p><p>  Q.front->next=p->next;</p><p>  if(Q.rear==p)Q.rear=Q.front;</p><p><b>  free(p

40、);</b></p><p><b>  }</b></p><p><b>  隊(duì)列掃描算法</b></p><p><b>  偽碼:</b></p><p><b>  {</b></p><p>  if(!em

41、pry(fq)&& fq.head->money<0)</p><p>  //如果隊(duì)列一不空,而且隊(duì)頭客戶辦理第二種業(yè)務(wù)</p><p><b>  {</b></p><p>  //1.可以辦,完成離開(kāi)(即銀行現(xiàn)金足夠取)</p><p>  //2.不可以辦,排隊(duì)2等候</p&g

42、t;<p><b>  }</b></p><p><b>  else </b></p><p>  //存款 ,第一種業(yè)務(wù) </p><p>  if(!empty(fq) && temped= searchAndDel(sq,total)))</p><p>

43、;<b>  //當(dāng)交易時(shí)間到</b></p><p><b>  {</b></p><p>  //辦理該業(yè)務(wù),并開(kāi)始掃描第二隊(duì)列,看是否能滿足//第二隊(duì)列需要</p><p><b>  }</b></p><p>  if(currentime==next_arrti

44、me )</p><p><b>  {</b></p><p>  //當(dāng)當(dāng)前時(shí)間等于即將到來(lái)的顧客到來(lái)時(shí)間,初始化//該顧客節(jié)點(diǎn),并設(shè)置下一顧客到達(dá)時(shí)間</p><p><b>  }</b></p><p><b>  }</b></p><p&g

45、t;<b>  其他函數(shù)算法</b></p><p>  int rand_num(int max,int min)//隨機(jī)數(shù)生成</p><p><b>  {</b></p><p>  //根據(jù)傳進(jìn)的max和min,生成介于max和min的一個(gè)//整數(shù)</p><p>  random

46、ize();</p><p>  RandSeed=Now();</p><p>  return ( random(100000) % (max - min + 1) +min );</p><p><b>  } </b></p><p><b>  源代碼:</b></p>&l

47、t;p>  //銀行業(yè)務(wù)模擬系統(tǒng)</p><p>  #include <iostream></p><p>  #include <string></p><p>  #include <conio.h></p><p>  #include <time.h></p>&l

48、t;p>  using namespace std;</p><p>  struct service</p><p><b>  {</b></p><p>  int num; //客戶號(hào)</p><p>  string type; //到達(dá)或離開(kāi)</p><p>  int begi

49、nTime;//到達(dá)時(shí)間</p><p>  int endTime;//離開(kāi)時(shí)間</p><p>  int money; //正數(shù)為存款,負(fù)數(shù)為取款</p><p>  service* next;//指針域</p><p><b>  };</b></p><p>  struct queu

50、e</p><p><b>  { //隊(duì)列</b></p><p>  service* head;//隊(duì)列頭指針</p><p>  service* rear;//隊(duì)列尾指針</p><p><b>  };</b></p><p>  int total; //初始時(shí)

51、銀行現(xiàn)存資金總額</p><p>  int closeTime; //營(yíng)業(yè)結(jié)束時(shí)間</p><p>  int arriveMaxTime; //兩個(gè)到達(dá)事件之間的間隔上限</p><p>  int arriveMinTime; //兩個(gè)到達(dá)事件之間的間隔下限</p><p>  int dealMaxTime; //客戶之間交易的時(shí)間上

52、限</p><p>  int dealMinTime; //客戶之間交易的時(shí)間下限</p><p>  int dealMaxMoney ; //交易額上限</p><p>  int ndn=0;//需要存款的人數(shù)</p><p>  int nwn=0;//需要取款的人數(shù)</p><p>  int sdn=0;

53、//成功存款的人數(shù)</p><p>  int swn=0;//成功取款的人數(shù)</p><p>  int currentTime = 0; //當(dāng)前時(shí)間</p><p>  int totalTime = 0; //客戶逗留總時(shí)間</p><p>  int counter = 0; //客戶總數(shù)</p><p> 

54、 int number = 1; //初始客戶序列號(hào)</p><p>  bool state =1; //用于判斷是否有窗口在處理</p><p>  int currentTimeOfDeal = 0;</p><p>  int thearriveMaxTime = 0;</p><p>  queue eq; //事件隊(duì)列</p

55、><p>  queue fq; //隊(duì)列一</p><p>  queue sq; //對(duì)列二</p><p><b>  //初始化三個(gè)隊(duì)列</b></p><p>  service* front(queue &q)</p><p><b>  {//返回隊(duì)首元素</b&

56、gt;</p><p>  return q. head;</p><p><b>  }</b></p><p>  service* back(queue &q)</p><p><b>  {//返回隊(duì)尾元素</b></p><p>  return q. re

57、ar;</p><p><b>  }</b></p><p>  void push(queue &q,int d)</p><p>  {// 插入元素d為Q的新的隊(duì)尾元素</p><p>  service* temp = new service;</p><p>  temp-&g

58、t;money = d;</p><p>  temp->next = NULL;</p><p>  if(q.head==NULL)</p><p>  {//隊(duì)列為空,初始化</p><p>  q. head = temp;</p><p>  q. rear = temp;</p><

59、;p><b>  }//if</b></p><p><b>  else </b></p><p>  {//隊(duì)列不為空,插入元素d</p><p>  q. rear->next = temp;</p><p>  q. rear = q.rear->next;</p&g

60、t;<p><b>  }//else</b></p><p><b>  }</b></p><p>  void pop(queue &q)</p><p>  {// 若隊(duì)列不空,出對(duì)列函數(shù)</p><p>  service* temp;</p><

61、p>  temp = q. head;</p><p>  if(q. head->next==NULL )</p><p>  q.head = q. rear =NULL;</p><p><b>  else</b></p><p>  q. head=q. head->next;</p&g

62、t;<p>  delete temp;</p><p><b>  }</b></p><p>  void arrive()</p><p>  {//"到達(dá)"函數(shù),隨機(jī)產(chǎn)生顧客,進(jìn)入隊(duì)列一產(chǎn)生到達(dá)事件 進(jìn)入事件隊(duì)列</p><p>  push(fq,(rand()% (2*dea

63、lMaxMoney) -dealMaxMoney)); //隨機(jī)產(chǎn)生顧客加入第一隊(duì)列</p><p>  back(fq)->beginTime = currentTime;</p><p>  back(fq)->num = number;</p><p>  push(eq,(back(fq)->money)); //將產(chǎn)生事件加入事件隊(duì)列&

64、lt;/p><p>  back(eq)->beginTime = currentTime;</p><p>  back(eq)->type = "到達(dá)";</p><p>  back(eq)->num = number;</p><p><b>  ++number;</b><

65、;/p><p><b>  }</b></p><p>  void putMoney()</p><p>  { //"存款"函數(shù)</p><p>  total += front(fq)->money; //更新資金總額</p><p>  push(eq,front(f

66、q)->money); //加入事件隊(duì)列 離開(kāi)</p><p>  back(eq)->type = "離開(kāi)";</p><p>  back(eq)->num = front(fq)->num;</p><p>  back(eq)->endTime = (front(fq)->beginTime + ran

67、d()%(dealMaxTime-dealMinTime +1)+dealMinTime);</p><p>  ++counter; //更新客戶總數(shù)</p><p>  totalTime += (back(eq)->endTime - front(fq)->beginTime); //更新逗留時(shí)間</p><p>  pop(fq); //刪除第一

68、隊(duì)列第一個(gè)業(yè)務(wù)</p><p>  currentTimeOfDeal = back(eq)->endTime; </p><p><b>  state =0;</b></p><p><b>  }</b></p><p>  void getMoney()</p><

69、p><b>  {//"取款"函數(shù)</b></p><p>  if( (-fq.head->money) > total ) </p><p>  {//資金短缺 加入第二隊(duì)列</p><p>  push( sq,front(fq)->money );</p><p>  

70、back(sq)->beginTime = front(fq)->beginTime;</p><p>  back(sq)->num = front(fq)->num;</p><p><b>  pop(fq);</b></p><p><b>  }//if</b></p>&l

71、t;p><b>  else</b></p><p><b>  {</b></p><p>  total += back(fq)->money;</p><p>  push(eq,front(fq)->money); //加入事件隊(duì)列 離開(kāi)</p><p>  back(eq

72、)->type = "離開(kāi)";</p><p>  back(eq)->num = front(fq)->num;</p><p>  back(eq)->endTime = (front(fq)->beginTime +rand()%(dealMaxTime-dealMinTime +1)+dealMinTime);</p>

73、<p>  back(eq)->beginTime = 0;</p><p>  currentTimeOfDeal = back(eq)->endTime;</p><p>  ++counter; //更新客戶總數(shù) </p><p>  totalTime += ( back(eq)->endTime - back(fq)->

74、beginTime ); //更新逗留時(shí)間</p><p>  pop(fq); //刪除第一隊(duì)列第一個(gè)業(yè)務(wù)</p><p><b>  state =0;</b></p><p><b>  }//else</b></p><p><b>  }</b></p>

75、<p>  service* searchAndDel(queue &q,int m)</p><p>  {//"搜索"函數(shù),在對(duì)列中尋找可處理元素</p><p>  service* sign = q. head; //標(biāo)記頭節(jié)點(diǎn)</p><p>  service* temp;</p><p>

76、  while(q. head!=NULL )</p><p><b>  {</b></p><p>  if((-(q. head->money)) <m)</p><p>  {//隊(duì)首元素可以處理</p><p>  if(q. head==q.rear)</p><p>&

77、lt;b>  {</b></p><p>  temp = q. head;</p><p>  q. head = q. rear = NULL;</p><p>  return temp;</p><p><b>  }//if</b></p><p><b> 

78、 else</b></p><p><b>  {//隊(duì)首元素出列</b></p><p>  temp = q. head; </p><p>  q. head = q. head->next; // 首節(jié)點(diǎn)后移一位,返回原首節(jié)點(diǎn)</p><p>  return temp;</p>

79、<p><b>  }//else</b></p><p><b>  }//while</b></p><p><b>  else</b></p><p>  {//隊(duì)首元首不能被處理</p><p>  if(q. head == q. rear){}</

80、p><p><b>  else</b></p><p>  {//首節(jié)點(diǎn)移到隊(duì)列尾部</p><p>  q. rear->next = q. head; </p><p>  q. rear = q. rear->next;</p><p>  q. head =q. head->

81、;next;</p><p>  q. rear->next = NULL;</p><p><b>  }//else</b></p><p><b>  }//else</b></p><p>  if(q. head == sign)//隊(duì)列循環(huán)一周時(shí)停止</p><

82、p>  return NULL;</p><p><b>  }</b></p><p>  return NULL;</p><p><b>  }</b></p><p>  service* temped ;</p><p>  int randomTemp;&l

83、t;/p><p>  void findAndDeal()</p><p>  {//"處理"函數(shù) 在對(duì)列中尋找可處理元素,對(duì)其進(jìn)行處理</p><p>  while( (temped= searchAndDel(sq,total))&&temped!=NULL ) </p><p>  

84、{//查找可處理取款</p><p>  total += temped->money; //更新資金總額</p><p>  push(eq,temped->money); //加入事件隊(duì)列 離開(kāi)</p><p>  back(eq)->type = "離開(kāi)";</p><p>  back(eq)-&

85、gt;num = temped->num;</p><p>  randomTemp = rand()%(dealMaxTime-dealMinTime +1)+dealMinTime;</p><p>  back(eq)->endTime = currentTime + randomTemp ;</p><p>  currentTimeOfDeal

86、 += randomTemp;</p><p>  ++counter; //更新客戶總數(shù)</p><p>  totalTime += ( back(eq)->endTime - temped->beginTime ); //更新逗留時(shí)間 </p><p>  delete temped; //刪除節(jié)點(diǎn)</p><p>  te

87、mped = NULL;</p><p><b>  }</b></p><p>  state = 0;</p><p><b>  }</b></p><p>  int main()</p><p><b>  { </b></p>

88、<p>  printf(" ********************************************\n");</p><p>  printf(" ********************************************\n");</p><p>  printf(" *************

89、*******************************\n");</p><p>  printf(" *** *** 學(xué)院:信息工程學(xué)院\n");</p><p>  printf(" ***

90、 ***\n");</p><p>  printf(" *** ***\n");</p><p>  printf(" *** *** 專(zhuān)業(yè):計(jì)算機(jī)科學(xué)與技術(shù)\

91、n");</p><p>  printf(" *** ***\n");</p><p>  printf(" *** ***\n");</p><p>  printf

92、(" *** 歡迎進(jìn)入銀行模擬系統(tǒng) *** 班級(jí):061\n");</p><p>  printf(" *** ***\n");</p><p>  printf(" ***

93、 ***\n");</p><p>  printf(" *** *** 姓名:邱雨田\n");</p><p>  printf(" *** *

94、**\n");</p><p>  printf(" *** ***\n");</p><p>  printf(" *** *** 學(xué)號(hào):6103106020\n");

95、 </p><p>  printf(" ********************************************\n");</p><p>  printf(" ********************************************\n");</p><p>  prin

96、tf(" ********************************************\n");</p><p>  printf("\n");</p><p>  printf("\n");</p><p>  printf("\n");</p><p&

97、gt;  printf("請(qǐng)按任意鍵繼續(xù)......\n");</p><p><b>  getch();</b></p><p><b>  int i;</b></p><p>  for(i=0;i<=14;i++)</p><p>  printf("\

98、n");</p><p>  printf(" ********************************************\n");</p><p>  printf(" ********************************************\n");</p><p>  printf

99、(" ********************************************\n");</p><p>  printf(" *** 1.開(kāi)始模擬 ***\n");</p><p>  printf(" *** 0.退出

100、 ***\n");</p><p>  printf(" ********************************************\n");</p><p>  printf(" ********************************************\n");</p><p>

101、;  printf(" ********************************************\n");</p><p>  int n,t1=0,t2=0,t3=0,t4=0,m=0;</p><p>  scanf("%d",&n);</p><p>  while(n==1)</p>

102、<p><b>  {</b></p><p>  srand(time(NULL)); //初始化隨機(jī)函數(shù)</p><p>  printf("請(qǐng)輸入銀行的初始存款:\n");</p><p>  scanf("%d",&total); </p><p> 

103、 if(total<0) </p><p><b>  {</b></p><p>  printf("輸入錯(cuò)誤!初始存款不能小于0!請(qǐng)?jiān)俅屋斎耄n"); </p><p>  printf("請(qǐng)輸入銀行的初始存款:\n");</p>&l

104、t;p>  scanf("%d",&total); </p><p>  if(total<0) </p><p><b>  {</b></p><p>  printf("輸入錯(cuò)誤!初始存款不能小于0!請(qǐng)最后一次輸入!\n");</p><p>  

105、printf("請(qǐng)輸入銀行的初始存款:\n");</p><p>  scanf("%d",&total); </p><p>  if(total<0)</p><p><b>  {</b></p><p>  printf("三次輸入都錯(cuò)誤!請(qǐng)按任意鍵

106、退出!\n");</p><p><b>  getch();</b></p><p>  printf("請(qǐng)按任意鍵退出!\n");</p><p>  goto end; </p><p><b>  }</b></p><p><b&

107、gt;  }</b></p><p><b>  }</b></p><p>  printf("請(qǐng)輸入銀行的營(yíng)業(yè)時(shí)間:\n");</p><p>  scanf("%d",&closeTime);</p><p>  if(closeTime>=1440

108、) </p><p><b>  {</b></p><p>  printf("輸入錯(cuò)誤!一天的營(yíng)業(yè)時(shí)間不能超過(guò)1440分鐘(24個(gè)小時(shí))!請(qǐng)?jiān)俅屋斎?!\n");</p><p>  printf("請(qǐng)輸入銀行的營(yíng)業(yè)時(shí)間:\n");</p><p> 

109、 scanf("%d",&closeTime);</p><p>  if(closeTime>=1440) </p><p><b>  {</b></p><p>  printf("輸入錯(cuò)誤!一天的營(yíng)業(yè)時(shí)間不能超過(guò)1440分鐘(24個(gè)小時(shí))!請(qǐng)最后一次輸入!\n");</p>

110、;<p>  printf("請(qǐng)輸入銀行的營(yíng)業(yè)時(shí)間:\n");</p><p>  scanf("%d",&closeTime);</p><p>  if(closeTime>=1440) </p><p><b>  {</b></p><p>  

111、printf("三次輸入都錯(cuò)誤!請(qǐng)按任意鍵退出!\n");</p><p><b>  getch();</b></p><p>  printf("請(qǐng)按任意鍵退出!\n");</p><p><b>  goto end;</b></p><p><b

112、>  }</b></p><p><b>  }</b></p><p><b>  } </b></p><p>  printf("請(qǐng)輸入最大到達(dá)時(shí)間間隔:\n"); </p><p>  scanf("%d",&arriveM

113、axTime);</p><p>  if(arriveMaxTime>closeTime) </p><p><b>  {</b></p><p>  printf("輸入錯(cuò)誤!最大到達(dá)時(shí)間間隔必須小于營(yíng)業(yè)時(shí)間!請(qǐng)?jiān)俅屋斎?!\n");</p><p>  printf("

114、;請(qǐng)輸入最大到達(dá)時(shí)間間隔:\n"); </p><p>  scanf("%d",&arriveMaxTime);</p><p>  if(arriveMaxTime>closeTime) </p><p><b>  {</b></p><p>  printf("

115、;輸入錯(cuò)誤!最大到達(dá)時(shí)間間隔必須小于營(yíng)業(yè)時(shí)間!請(qǐng)最后一次輸入!\n");</p><p>  printf("請(qǐng)輸入最大到達(dá)時(shí)間間隔:\n"); </p><p>  scanf("%d",&arriveMaxTime);</p><p>  if(arriveMaxTime>closeTime)<

116、;/p><p><b>  {</b></p><p>  printf("三次輸入都錯(cuò)誤!請(qǐng)按任意鍵退出!\n");</p><p><b>  getch(); </b></p><p>  printf("請(qǐng)按任意鍵退出!\n");</p>&

117、lt;p><b>  goto end;</b></p><p><b>  } </b></p><p><b>  }</b></p><p><b>  }</b></p><p>  printf("請(qǐng)輸入最小到達(dá)時(shí)間間隔:\n&q

118、uot;); </p><p>  scanf("%d",&arriveMinTime);</p><p>  if(arriveMinTime<=0 || arriveMinTime>=arriveMaxTime) </p><p><b>  {</b></p><p>

119、;  printf("輸入錯(cuò)誤!最小到達(dá)時(shí)間間隔必須介于零和最大到達(dá)時(shí)間之間!請(qǐng)?jiān)俅屋斎?!\n"); </p><p>  printf("請(qǐng)輸入最小到達(dá)時(shí)間間隔:\n"); </p><p>  scanf("%d",&arriveMinTime);</p><p>  if(arriveMinT

120、ime<=0 || arriveMinTime>=arriveMaxTime) </p><p><b>  {</b></p><p>  printf("輸入錯(cuò)誤!最小到達(dá)時(shí)間間隔必須介于零和最大到達(dá)時(shí)間之間!請(qǐng)最后一次輸入!\n"); </p><p>  printf("請(qǐng)輸入最小到達(dá)時(shí)間間隔:

121、\n"); </p><p>  scanf("%d",&arriveMinTime);</p><p>  if(arriveMinTime<=0 || arriveMinTime>=arriveMaxTime)</p><p><b>  {</b></p><p>

122、  printf("三次輸入都錯(cuò)誤!請(qǐng)按任意鍵退出!\n");</p><p><b>  getch();</b></p><p>  printf("請(qǐng)按任意鍵退出!\n");</p><p><b>  goto end;</b></p><p><

123、;b>  } </b></p><p><b>  }</b></p><p><b>  } </b></p><p>  printf("請(qǐng)輸入最大的處理時(shí)間:\n");</p><p>  scanf("%d",&dealMax

124、Time);</p><p>  if(dealMaxTime>closeTime) </p><p><b>  {</b></p><p>  printf("輸入錯(cuò)誤!最大處理時(shí)間必須小于營(yíng)業(yè)時(shí)間!請(qǐng)?jiān)俅屋斎耄n"); </p><p>  printf("請(qǐng)輸入

125、最大的處理時(shí)間:\n");</p><p>  scanf("%d",&dealMaxTime);</p><p>  if(dealMaxTime>closeTime) </p><p><b>  {</b></p><p>  printf("輸入錯(cuò)誤!最

126、大處理時(shí)間必須小于營(yíng)業(yè)時(shí)間!請(qǐng)最后一次輸入!\n"); </p><p>  printf("請(qǐng)輸入最大的處理時(shí)間:\n");</p><p>  scanf("%d",&dealMaxTime);</p><p>  if(dealMaxTime>closeTime)</p><p

127、><b>  {</b></p><p>  printf("三次輸入都錯(cuò)誤!請(qǐng)按任意鍵退出!\n");</p><p><b>  getch(); </b></p><p>  printf("請(qǐng)按任意鍵退出!\n");</p><p><b&

128、gt;  goto end;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  printf("請(qǐng)輸入最小的處理時(shí)間:\n");</p>

129、<p>  scanf("%d",&dealMinTime); </p><p>  if(dealMinTime<=0 || dealMinTime>=dealMaxTime) </p><p><b>  {</b></p><p>  printf(&q

130、uot;輸入錯(cuò)誤!最小處理時(shí)間必須介于零和最大處理時(shí)間之間!請(qǐng)?jiān)俅屋斎?!\n");</p><p>  printf("請(qǐng)輸入最小的處理時(shí)間:\n");</p><p>  scanf("%d",&dealMinTime); </p><p>  if(dealMinTime<=0 || dealM

131、inTime>=dealMaxTime) </p><p><b>  {</b></p><p>  printf("輸入錯(cuò)誤!最小處理時(shí)間必須介于零和最大處理時(shí)間之間!請(qǐng)最后一次輸入!\n");</p><p>  printf("請(qǐng)輸入最小的處理時(shí)間:\n");</p>

132、<p>  scanf("%d",&dealMinTime); </p><p>  if(dealMinTime<=0 || dealMinTime>=dealMaxTime)</p><p><b>  { </b></p><p>  printf("三次輸入都錯(cuò)誤!請(qǐng)按任意

133、鍵退出!\n");</p><p><b>  getch();</b></p><p>  printf("請(qǐng)按任意鍵退出!\n");</p><p><b>  goto end;</b></p><p><b>  }</b></p&g

134、t;<p><b>  }</b></p><p><b>  }</b></p><p>  printf("請(qǐng)輸入交易額的最大上限:\n");</p><p>  scanf("%d",&dealMaxMoney);</p><p>

135、  if(dealMaxMoney>=total || dealMaxMoney>50000)</p><p><b>  { </b></p><p>  printf("輸入錯(cuò)誤!超出本銀行的服務(wù)范圍!最大交易額應(yīng)低于銀行開(kāi)始營(yíng)業(yè)時(shí)的資金總額且小于50000!請(qǐng)?jiān)俅屋斎?!\n");</p><p>  pri

136、ntf("請(qǐng)輸入交易額的最大上限:\n");</p><p>  scanf("%d",&dealMaxMoney);</p><p>  if(dealMaxMoney>=total || dealMaxMoney>50000)</p><p><b>  {</b></p&g

137、t;<p>  printf("輸入錯(cuò)誤!超出本銀行的服務(wù)范圍!最大交易額應(yīng)低于銀行開(kāi)始營(yíng)業(yè)時(shí)的資金總額且小于50000!請(qǐng)最后一次輸入!\n");</p><p>  printf("請(qǐng)輸入交易額的最大上限:\n");</p><p>  scanf("%d",&dealMaxMoney);</p&g

138、t;<p>  if(dealMaxMoney>=total || dealMaxMoney>50000)</p><p><b>  {</b></p><p>  printf("三次輸入都錯(cuò)誤!請(qǐng)按任意鍵退出!\n");</p><p><b>  getch();</b>

139、;</p><p>  printf("請(qǐng)按任意鍵退出!\n");</p><p><b>  goto end;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b&g

140、t;  }</b></p><p>  thearriveMaxTime +=rand()%(arriveMaxTime-arriveMinTime + 1)+arriveMinTime; //首次到達(dá)時(shí)間</p><p>  while(currentTime < closeTime)</p><p><b>  {</b>

141、</p><p>  ++currentTime;</p><p>  if( currentTimeOfDeal < currentTime ) currentTimeOfDeal = currentTime ;</p><p>  if( currentTimeOfDeal == currentTime ) state = 1;</p>&l

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論