數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告-銀行業(yè)務(wù)模擬_第1頁
已閱讀1頁,還剩19頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p> 《數(shù)據(jù)結(jié)構(gòu)》課 程 設(shè) 計(jì) 報(bào) 告題 目: 銀行業(yè)務(wù)模擬 學(xué)院(系): 數(shù)學(xué)與計(jì)算科學(xué)學(xué)院班 級(jí): 11級(jí)信息與計(jì)算科學(xué)4班 2013年 6月28 日</p><p><b>  目 錄</b></p><p>  摘要………………………………………………………………………2</p><p>  一、

2、需求分析……………………………………………………………2</p><p>  二、概要設(shè)計(jì)……………………………………………………………3</p><p>  三、詳細(xì)設(shè)計(jì)……………………………………………………………3</p><p>  1、預(yù)定義和定義結(jié)構(gòu)體 ……………………………………………………3</p><p>  2、基本操

3、作的算法描述………………………………………………………6</p><p>  3、測(cè)試界面操作提示 ………………………………………………………8</p><p>  4、不斷進(jìn)入隊(duì)列,出隊(duì)列,時(shí)間的更新,總金額的更新 …………………………9</p><p>  5、營(yíng)業(yè)結(jié)束時(shí)判斷是否為所有客戶服務(wù),并輸出最后的銀行總金額 ………………9</p>&

4、lt;p>  四、設(shè)計(jì)和調(diào)試分析……………………………………………………10五、用戶手冊(cè)……………………………………………………………11</p><p>  六、測(cè)試結(jié)果……………………………………………………………11</p><p>  七、設(shè)計(jì)心得……………………………………………………………14八、參考文獻(xiàn)……………………………………………………………14</p>

5、;<p>  九、附錄…………………………………………………………………14</p><p><b>  摘 要</b></p><p>  在日常生活中,我們經(jīng)常會(huì)遇到許多為了維護(hù)社會(huì)正常秩序而需要排隊(duì)的情況,這樣一類活動(dòng)的模擬程序通常需要用到隊(duì)列和線性表之類的數(shù)據(jù)結(jié)構(gòu),因此是隊(duì)列的典型應(yīng)用例子之一,而這次實(shí)驗(yàn)的題目銀行業(yè)務(wù)的模擬程序就正是這樣一個(gè)典

6、型的例子。隊(duì)列是一種先進(jìn)先出的線性表,它只允許在表的一端插入,而在另一端刪除元素。在隊(duì)列中允許插入的一端叫做隊(duì)尾,允許刪除的一端則稱為隊(duì)頭。我們需要編寫一個(gè)程序已模擬銀行的這種各種業(yè)務(wù)活動(dòng),并計(jì)算一天中客戶在銀行逗留的平均時(shí)間。這是一個(gè)離散事件驅(qū)動(dòng)模擬程序。這也是一個(gè)的操作系統(tǒng)中的排隊(duì)問題。假設(shè)某銀行有3個(gè)窗口對(duì)外接待客戶,從早晨銀行開門(開門9:00am,關(guān)門5:00pm)起不斷有客戶進(jìn)入銀行。由于每個(gè)窗口在某個(gè)時(shí)刻只能接待一個(gè)客戶,

7、因此在客戶人數(shù)眾多時(shí)需要在每個(gè)窗口前順次排隊(duì),對(duì)于剛進(jìn)入銀行的客戶(客戶進(jìn)入時(shí)間使用隨機(jī)函數(shù)產(chǎn)生),如果某個(gè)窗口的業(yè)務(wù)員正空閑,則可上前辦理業(yè)務(wù)。</p><p>  關(guān)鍵詞:排隊(duì)、隊(duì)列、先進(jìn)先出、離散事件驅(qū)動(dòng)模擬程序、</p><p>  一、需求分析 </p><p>  程序中處理的對(duì)象主要是“事件”,事件的主要信息是事件類型和事件發(fā)生的時(shí)刻。算法中處理

8、的事件有兩類:一類是客戶到達(dá)事件,另一類是客戶離開事件。前一類事件發(fā)生的時(shí)間隨客戶到來自然形成,后一類事件發(fā)生時(shí)刻則由客戶事物所需時(shí)間和等待所耗時(shí)間而定。由于程序驅(qū)動(dòng)是按事件發(fā)生時(shí)刻的先后順序進(jìn)行,則時(shí)間應(yīng)是有序表,其主要操作是插入和刪除事件。</p><p>  由于在實(shí)際的銀行中,客戶到達(dá)的時(shí)刻及其辦理事物所需時(shí)間都是隨機(jī)的,在模擬中可用隨機(jī)數(shù)代替??蛻舻竭_(dá)時(shí)間時(shí)需產(chǎn)生兩個(gè)隨機(jī)數(shù),其一為此時(shí)刻到達(dá)的客戶辦理事

9、務(wù)所需時(shí)間solvetime;其二為下一客戶將到達(dá)的時(shí)間間隔waitTime,假設(shè)當(dāng)前事件發(fā)生的時(shí)刻為occurtime,則下一個(gè)客戶到達(dá)事件發(fā)生的時(shí)刻為occurtime+waitTime。由此應(yīng)產(chǎn)生一個(gè)新的客戶到達(dá)事件插入事件表。將客戶到達(dá)事件插入事件表,剛到達(dá)的客戶則插入到當(dāng)前所含元素最少的隊(duì)列中。</p><p>  客戶離開事件的處理比較簡(jiǎn)單。首先計(jì)算該客戶在銀行逗留時(shí)間,然后從隊(duì)列中刪除該客戶后查看隊(duì)

10、列是否空,若不空則設(shè)定一個(gè)新的隊(duì)頭客戶離開此事件。</p><p>  當(dāng)然其中涉及到存取款功能,測(cè)試窗口會(huì)出現(xiàn)很多提示信息。測(cè)試出來的結(jié)果相應(yīng)的也會(huì)很全面。</p><p>  界面要求使用VC++6.0的運(yùn)行環(huán)境。</p><p><b>  二、概要設(shè)計(jì)</b></p><p>  1、隊(duì)列抽象數(shù)據(jù)類型的定義如下:

11、</p><p>  ADT Queue{數(shù)據(jù)對(duì)象:D={ai|ai∈ElemSet, i=1,2, …,n, n≥0}數(shù)據(jù)關(guān)系:R1={<ai-1,ai>|ai-1,ai∈D, i=1,2, …,n } 約定a1為隊(duì)列頭,an為隊(duì)列尾?;静僮鳎?InitQueue( &Q ) 操作結(jié)果:構(gòu)造一個(gè)空隊(duì)列Q。 DestroyQue

12、ue ( &Q ) 初始條件:隊(duì)列Q已存在。 操作結(jié)果:銷毀隊(duì)列Q。 ClearQueue ( &Q ) 初始條件:隊(duì)列Q已存在。 操作結(jié)果:將Q清為空隊(duì)列。 QueueEmpty( Q ) 初始條件:隊(duì)列Q已存在。 操作結(jié)果:若Q為空隊(duì)列,則返回TRUE,否則返回FALSE。 QueueLength( Q ) 初

13、始條件:隊(duì)列Q已存在。 操作結(jié)果:返回Q的數(shù)據(jù)元素個(gè)數(shù),即隊(duì)列的長(zhǎng)度。 GetHead( Q, &e ) 初始條件:隊(duì)列Q已存在且非空。 操作結(jié)果:用e返回Q</p><p>  2、本程序調(diào)用的函數(shù)如下:</p><p>  void Enterqueue1(Event m);將事件m插入隊(duì)尾</p><p> 

14、 void solvequeue1();辦理銀行存款業(yè)務(wù)</p><p>  void solvequeue2(); 辦理銀行取款業(yè)務(wù)</p><p>  printf("***************** 早上九點(diǎn)開業(yè),歡迎光臨 *****************\n");//打印輸出</p><p>  srand((unsigned)ti

15、me( NULL ));//隨機(jī)產(chǎn)生時(shí)間</p><p><b>  主函數(shù)</b></p><p>  void main()</p><p><b>  {</b></p><p>  cout<<"請(qǐng)輸入銀行總資金(元)和營(yíng)業(yè)總時(shí)間(分鐘):"<<e

16、ndl;</p><p>  cin>>total_money>>closetime;</p><p>  cout<<"請(qǐng)輸入存錢的最大值(元)和取錢的最大值(元)"<<endl;</p><p>  cin>>max_cunqian>>max_qvqian;</p&

17、gt;<p>  cout<<"請(qǐng)輸入事件的解決時(shí)間最大值(分鐘)和客戶的間隔時(shí)間的最大值(分鐘)"<<endl;</p><p>  cin>>max_solve_time>>max_intertime_time;</p><p>  system("cls");</p>

18、<p>  printf("***************** 早上九點(diǎn)開業(yè),歡迎光臨 *****************\n");</p><p>  cout<<" ============================================="<<endl;</p><p>  c

19、out<<" 歡迎使用銀行業(yè)務(wù)模擬系統(tǒng)\n";</p><p>  cout<<" ---------------------------------------------"<<endl;</p><p>  cout<<"

20、 姓名:石站鋒 "<<endl;</p><p>  cout<<" 學(xué)號(hào):1107020404"<<endl;</p><p>  cout<<" 班級(jí):信計(jì)四班 "<<endl; <

21、/p><p>  cout<<" ============================================"<<endl;</p><p>  cout<<"銀行每天開業(yè)總資金為"<<total_money<<"元. 每日營(yíng)業(yè)時(shí)間為"<&

22、lt;closetime<<"分鐘."<<endl;</p><p>  Event temp;</p><p>  int intertime=0,n=1,i;</p><p>  intdurtime;</p><p>  int money;</p><p>  int

23、 waitTime=0;</p><p>  srand((unsigned)time( NULL ));//隨機(jī)產(chǎn)生時(shí)間</p><p>  intertime = rand() % max_intertime_time;</p><p>  temp.intertime = intertime;</p><p>  close_time

24、= temp.intertime+close_time;</p><p>  temp.arriveTime = close_time;</p><p>  money =rand()%(max_cunqian+max_qvqian)-max_qvqian;</p><p>  temp.money=money;</p><p>  solv

25、eTime = rand() % max_solve_time;</p><p>  temp.solveTime =durtime;</p><p><b>  temp.n=n;</b></p><p>  Enterqueue1(temp);</p><p>  solvequeue1();</p>

26、<p>  //system("pause");</p><p><b>  for(;;)</b></p><p><b>  {</b></p><p>  intertime = rand() % max_intertime_time;</p><p>  tem

27、p.intertime = intertime;</p><p>  close_time = temp.intertime+close_time;</p><p>  temp.arriveTime = close_time;</p><p>  if (close_time>closetime)</p><p><b> 

28、 { </b></p><p>  cout<<"******************銀行營(yíng)業(yè)結(jié)束,謝謝光臨*******************\n";</p><p>  cout<<"今天來了"<<n<<"個(gè)顧客,"<<endl;</p>

29、<p>  if(q2.size()!=0)</p><p>  cout<<"未能給"<<q2.size()<<"位顧客提供服務(wù),很抱歉!"<<endl;</p><p><b>  else</b></p><p>  cout<<

30、"為全部的顧客提供的服務(wù),歡迎再次光臨!"<<endl;</p><p>  cout<<"銀行余額為"<<total_money<<endl;</p><p><b>  break;</b></p><p><b>  }</b>&

31、lt;/p><p>  i=rand()%2;</p><p><b>  if(i==0)</b></p><p>  money =rand()%max_cunqian;</p><p><b>  else</b></p><p>  money=-rand()%max_q

32、vqian;</p><p>  temp.money=money;</p><p>  solveTime = rand() % max_solve_time;</p><p>  temp.solveTime =durtime;</p><p><b>  n++;</b></p><p>&

33、lt;b>  temp.n=n;</b></p><p>  Enterqueue1(temp);</p><p>  solvequeue1();</p><p>  //system("pause");</p><p><b>  }</b></p><p&

34、gt;<b>  }</b></p><p><b>  三、詳細(xì)設(shè)計(jì)</b></p><p>  1、預(yù)定義和定義結(jié)構(gòu)體</p><p>  #include <iostream></p><p>  #include "list"</p><p

35、>  #include "queue"</p><p>  #include "time.h"</p><p>  using namespace std;</p><p>  void solvequeue1();//辦理銀行存款業(yè)務(wù)隊(duì)列</p><p>  void solvequeue2()

36、;//辦理銀行取款業(yè)務(wù)隊(duì)列</p><p>  class Event{</p><p><b>  public:</b></p><p>  int n; //客戶的位子</p><p>  int money ; //交易金額</p><p>  i

37、ntdurtime;//處理需要的時(shí)間</p><p>  int arriveTime;//到達(dá)時(shí)間</p><p>  int intertime;//處理業(yè)務(wù)所花費(fèi)時(shí)間</p><p>  int waitTime; //等待時(shí)間</p><p><b>  };</b></p>

38、;<p>  queue<Event>q1,q2; //聲明兩個(gè)隊(duì)列</p><p>  int close_time=0,total_people=0,closet_ime,total_money; //close_time為當(dāng)前時(shí)間,也是距離關(guān)門的時(shí)間 close_time為營(yíng)業(yè)總時(shí)間to

39、tal_money為開業(yè)時(shí)銀行內(nèi)的資金總額totle_people為一天之內(nèi)辦理總的客戶數(shù) </p><p>  int max_solve_time,max_intertime_time; //max_slove_time辦理業(yè)務(wù)花的最長(zhǎng)的時(shí)間 //max_intertime_time為客戶的間隔時(shí)間的最大值</p><p>  int max_cunqian

40、,max_qvqian //max_cunqian為存錢的最大值 //max_qvqian為取錢的最大值</p><p>  int currentTime=0;//初始化當(dāng)前時(shí)間為0</p><p><b>  基本操作的算法描述</b></p><p>  void Enterqueue1(Event m)&

41、lt;/p><p>  {//將事件m插入隊(duì)尾</p><p>  q1.push(m);</p><p><b>  }</b></p><p>  void Enterqueue2(Event m)</p><p>  {//將事件m插入隊(duì)尾</p><p>  q2.pu

42、sh(m);</p><p><b>  }</b></p><p>  void solvequeue1()</p><p><b>  {</b></p><p>  Event x=q1.front();</p><p><b>  q1.pop();<

43、/b></p><p>  cout<<"現(xiàn)在是"<<(x.arriveTime/60+9)<<":"<<(x.arriveTime-(x.arriveTime/60)*60)<<",第"<<x.n<<"個(gè)客戶到達(dá)"<<endl;&l

44、t;/p><p>  if(total_money+x.money>=0)</p><p><b>  {</b></p><p>  total_money+=x.money;</p><p>  if (x.money > 0)</p><p><b>  {</b&g

45、t;</p><p>  if(currentTime>x.arriveTime)</p><p>  x.waitTime=currentTime-x.arriveTime;</p><p><b>  else</b></p><p>  x.waitTime=0;</p><p>  

46、cout<<"第"<<x.n<<"個(gè)顧客等了"<<x.waitTime<<"分鐘后,辦理了存款 "<<x.money<<" 元的業(yè)務(wù),用了"<<x.solveTime<<"分鐘"<<",此時(shí)銀行余額為"

47、;<<total_money<<endl;</p><p>  currentTime=x.arriveTime+x.waitTime+x.solveTime;</p><p>  solvequeue2();</p><p><b>  }</b></p><p><b>  else

48、 </b></p><p><b>  {</b></p><p>  if(currentTime>x.arriveTime)</p><p>  x.waitTime=currentTime-x.arriveTime;</p><p><b>  else</b></p&

49、gt;<p>  x.waitTime=0;</p><p>  cout<<"第"<<x.n<<"個(gè)顧客等了"<<x.waitTime<<"分鐘后,辦理了取款 "<<-x.money<<" 元的業(yè)務(wù),用了"<<x.solv

50、eTime<<"分鐘"<<",此時(shí)銀行余額為"<<total_money<<endl;</p><p>  currentTime=x.arriveTime+x.waitTime+x.solveTime;</p><p><b>  }</b></p><p&g

51、t;<b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  cout<<"為第"<<x.n<<"個(gè)該顧客辦理取款 "<<-x.money&l

52、t;<" 元的業(yè)務(wù),"<<"此時(shí)銀行余額為"<<total_money<<",無法為他辦理業(yè)務(wù),請(qǐng)稍等片刻"<<endl;</p><p>  Enterqueue2(x);</p><p><b>  }</b></p><p>

53、<b>  }</b></p><p>  void solvequeue2()</p><p><b>  {</b></p><p>  int n=q2.size(),i=0;</p><p>  while(n!=0)</p><p><b>  {<

54、/b></p><p>  Event x=q2.front();</p><p><b>  q2.pop();</b></p><p>  if(total_money+x.money>0)</p><p><b>  {</b></p><p>  tota

55、l_money+=x.money;</p><p>  if(currentTime>x.arriveTime)</p><p>  x.waitTime=currentTime-x.arriveTime;</p><p><b>  else</b></p><p>  x.waitTime=0;</p&g

56、t;<p>  cout<<"第"<<x.n<<"個(gè)顧客等了"<<x.waitTime<<"分鐘后,辦理了取款 "<<-x.money<<" 元的業(yè)務(wù),用了"<<x.solveTime<<"分鐘,"<<&

57、quot;此時(shí)銀行余額為"<<total_money<<endl;</p><p><b>  n--;</b></p><p>  currentTime=x.arriveTime+x.waitTime+x.solveTime;</p><p><b>  }</b></p>

58、<p><b>  else</b></p><p><b>  {</b></p><p>  Enterqueue2(x);</p><p><b>  i++;</b></p><p><b>  }</b></p>&l

59、t;p><b>  if(i==n)</b></p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  3、測(cè)試界面操作提示</p><p

60、>  cout<<"請(qǐng)輸入銀行總資金(元)和營(yíng)業(yè)總時(shí)間(分鐘):"<<endl;</p><p>  cin>>total_money>>closetime;</p><p>  cout<<"請(qǐng)輸入存錢的最大值(元)和取錢的最大值(元)"<<endl;</p>

61、<p>  cin>>max_cunqian>>max_qvqian;</p><p>  cout<<"請(qǐng)輸入事件的解決時(shí)間最大值(分鐘)和客戶的間隔時(shí)間的最大值(分鐘)"<<endl;</p><p>  cin>>max_solve_time>>max_intertime_tim

62、e;</p><p>  system("cls");</p><p>  printf("***************** 早上九點(diǎn)開業(yè),歡迎光臨 *****************\n");</p><p>  cout<<" ===========================

63、=================="<<endl;</p><p>  cout<<" 歡迎使用銀行業(yè)務(wù)模擬系統(tǒng)\n";</p><p>  cout<<" ---------------------------------------------"<<e

64、ndl;</p><p>  cout<<" 姓名:石站鋒 "<<endl;</p><p>  cout<<" 學(xué)號(hào):1107020404"<<endl;</p><p>  cout<&l

65、t;" 班級(jí):信計(jì)四班 "<<endl; </p><p>  cout<<" ============================================"<<endl;</p><p>  cout<<"銀行每天開業(yè)總資金

66、為"<<total_money<<"元. 每日營(yíng)業(yè)時(shí)間為"<<closetime<<"分鐘."<<endl;</p><p>  4、不斷進(jìn)入隊(duì)列,出隊(duì)列,時(shí)間的更新,總金額的更新</p><p>  Event temp;</p><p>  int in

67、tertime=0,n=1,i;</p><p>  intdurtime;</p><p>  int money;</p><p>  int waitTime=0;</p><p>  srand((unsigned)time( NULL ));//隨機(jī)產(chǎn)生時(shí)間</p><p>  intertime = ran

68、d() % max_intertime_time;</p><p>  temp.intertime = intertime;</p><p>  close_time = temp.intertime+close_time;</p><p>  temp.arriveTime = close_time;</p><p>  money =r

69、and()%(max_cunqian+max_qvqian)-max_qvqian;</p><p>  temp.money=money;</p><p>  solveTime = rand() % max_solve_time;</p><p>  temp.solveTime =durtime;</p><p><b>  

70、temp.n=n;</b></p><p>  Enterqueue1(temp);</p><p>  solvequeue1();</p><p>  5、營(yíng)業(yè)結(jié)束時(shí)判斷是否為所有客戶服務(wù),并輸出最后的銀行總金額</p><p><b>  for(;;)</b></p><p>

71、<b>  {</b></p><p>  intertime = rand() % max_intertime_time;</p><p>  temp.intertime = intertime;</p><p>  close_time = temp.intertime+close_time;</p><p>  

72、temp.arriveTime = close_time;</p><p>  if (close_time>closetime)</p><p><b>  { </b></p><p>  cout<<"******************銀行營(yíng)業(yè)結(jié)束,謝謝光臨*******************\n"

73、;;</p><p>  cout<<"今天來了"<<n<<"個(gè)顧客,"<<endl;</p><p>  if(q2.size()!=0)</p><p>  cout<<"未能給"<<q2.size()<<"位

74、顧客提供服務(wù),很抱歉!"<<endl;</p><p><b>  else</b></p><p>  cout<<"為全部的顧客提供的服務(wù),歡迎再次光臨!"<<endl;</p><p>  cout<<"銀行余額為"<<total

75、_money<<endl;</p><p><b>  break;</b></p><p><b>  }</b></p><p>  i=rand()%2;</p><p><b>  if(i==0)</b></p><p>  mon

76、ey =rand()%max_cunqian;</p><p><b>  else</b></p><p>  money=-rand()%max_qvqian;</p><p>  temp.money=money;</p><p>  solveTime = rand() % max_solve_time;<

77、/p><p>  temp.solveTime =durtime;</p><p><b>  n++;</b></p><p><b>  temp.n=n;</b></p><p>  Enterqueue1(temp);</p><p>  solvequeue1();&l

78、t;/p><p>  //system("pause");</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  四、設(shè)計(jì)和調(diào)試分析</b></p><p>  1、銀行業(yè)務(wù)的模擬程

79、序是一個(gè)很典型的排隊(duì)問題,運(yùn)用到隊(duì)列以及大量的對(duì)時(shí)間金錢等數(shù)據(jù)的操作。在數(shù)據(jù)結(jié)構(gòu)的課本上我們學(xué)到了有關(guān)隊(duì)列操作的一些基本知識(shí),這次實(shí)驗(yàn)就是將這些知識(shí)運(yùn)用到實(shí)際中。</p><p>  2、銀行業(yè)務(wù)的模擬程序是一個(gè)很完整的,連貫性很強(qiáng)的程序,中間運(yùn)用到了大量的語句,有結(jié)構(gòu)體的定義,有函數(shù)的調(diào)用,有隨機(jī)變量的產(chǎn)生,以及大量的變量之間的先后順序和邏輯關(guān)系等。程序很復(fù)雜,要考慮的因素很多。要注意的細(xì)節(jié)也很多。</p

80、><p>  3、進(jìn)入測(cè)試界面,可以看到提示:"請(qǐng)輸入銀行總資金(元)和營(yíng)業(yè)總時(shí)間(分鐘):”</p><p>  輸入后緊接著:“請(qǐng)輸入存錢的最大值(元)和取錢的最大值(元)”輸入后有:"請(qǐng)輸入事件的解決時(shí)間最大值(分鐘)和客戶的間隔時(shí)間的最大值(分鐘)"所有的都輸入完后得出結(jié)果</p><p>  4、程序中需要用到多個(gè)隊(duì)列,有連續(xù)的入

81、隊(duì)出隊(duì)的操作。有時(shí)候因?yàn)椴患?xì)心,編寫程序的 時(shí)候沒有注意就弄混淆了。然后調(diào)試時(shí)就調(diào)試不出結(jié)果</p><p>  5、輸入表達(dá)式如:(3+4)*2#按erter鍵可以看到結(jié)果是:****</p><p>  6、開始時(shí)隨機(jī)產(chǎn)生數(shù)的函數(shù)不會(huì)用,后來通過上網(wǎng)查找資料,看來例子,自己調(diào)試才會(huì)。</p><p><b>  五、用戶手冊(cè)</b><

82、/p><p>  1、本程序運(yùn)行環(huán)境為VC++6.0,打開界面后可按!鍵進(jìn)入測(cè)試界面。</p><p>  2、按照界面上的提示輸入信息</p><p>  3、按erter鍵可以看到結(jié)果。</p><p><b>  六、測(cè)試結(jié)果</b></p><p>  1、運(yùn)行程序,顯示系統(tǒng)主界面: <

83、/p><p>  輸入總資金和總時(shí)間:</p><p>  3輸入存錢的最大值和取錢的最大值:</p><p>  4、輸入解決時(shí)間最大值和間隔時(shí)間最大值:</p><p><b>  5、輸出結(jié)果:</b></p><p><b>  七、設(shè)計(jì)心得</b></p>

84、<p>  這次數(shù)據(jù)結(jié)構(gòu)的實(shí)驗(yàn)我的題目是銀行業(yè)務(wù)模擬,這個(gè)程序的用到了大量的語言以及算法。最重要的以及最基本的是用到了隊(duì)列。這個(gè)實(shí)驗(yàn)也主要是針對(duì)書上隊(duì)列這一章的內(nèi)容來開展,書上也有版面專門介紹這個(gè)程序,同時(shí)也提供了一些程序,但書上僅僅提供了一些主要的函數(shù),也就是一個(gè)大體的框架,很多細(xì)節(jié)需要我們自己去查看資料。這次實(shí)驗(yàn)我在網(wǎng)上搜索了很多資料,我通過自己的理解將別人的知識(shí)和自己的知識(shí)融合。中間也遇到看很多困難,一度寫不下去,稍不

85、留神就是整版整版的錯(cuò)誤,但是我堅(jiān)持下來,然后通過問其他同學(xué)和在網(wǎng)上查找資料等慢慢的解決問題終于完成。</p><p>  通過這次試驗(yàn),我對(duì)數(shù)據(jù)結(jié)構(gòu)這門課程有了更深入的了解。也才真正做到了將理論聯(lián)系到實(shí)際中去,從中也看到了自己的很多方面的欠缺,包括不細(xì)心,不熟練,對(duì)一些基本錯(cuò)誤不會(huì)改等等。因此,我也有了很大的進(jìn)步,我認(rèn)識(shí)到了這些不足,并且努力去改正。</p><p>  我覺得這次試驗(yàn)學(xué)到

86、的最多的就是堅(jiān)持的重要性,要?jiǎng)邮值闹匾浴.?dāng)遇到困難時(shí)只有堅(jiān)持著不斷的動(dòng)手去調(diào)試才能克服困難,沒有其他捷徑。我相信經(jīng)過了這次實(shí)驗(yàn),我以后會(huì)做得更好。</p><p><b>  參考文獻(xiàn)</b></p><p>  [1] 嚴(yán)蔚敏等編著 . 數(shù)據(jù)結(jié)構(gòu)(C語言版).北京:清華大學(xué)出版社2007</p><p>  [2] 嚴(yán)蔚敏等編著 .?dāng)?shù)據(jù)結(jié)構(gòu)

87、題集(C語言版).北京:清華大學(xué)出版社1999</p><p>  [3] 李世群編著.離散數(shù)學(xué).天津:天津大學(xué)出版社,2010.8</p><p><b>  九、附錄</b></p><p><b>  源程序代碼:</b></p><p>  #include <iostream>

88、</p><p>  #include "list"</p><p>  #include "queue"</p><p>  #include "time.h"</p><p>  using namespace std;</p><p>  void so

89、lvequeue1();</p><p>  void solvequeue2();</p><p>  class Event{</p><p><b>  public:</b></p><p>  int n; //客戶的位子</p><p>  int money

90、 ; //存取款金額</p><p>  int solveTime;//處理需要的時(shí)間</p><p>  int arriveTime;//到達(dá)時(shí)間,距開業(yè)的分鐘數(shù)</p><p>  int grap;//與前一個(gè)客戶的間隔時(shí)間,為了記錄營(yíng)業(yè)時(shí)間</p><p>  int waitTime;

91、//等待時(shí)間</p><p><b>  };</b></p><p>  queue<Event>q1,q2; //聲明兩個(gè)隊(duì)列</p><p>  int close_time=0,total_people=0,closetime,total_m

92、oney; //close_time為當(dāng)前時(shí)間,也是距離關(guān)門的時(shí)間 closetime為營(yíng)業(yè)總時(shí)間totle_money為開業(yè)時(shí)銀行內(nèi)的資金總額totle_people為一天之內(nèi)辦理總的客戶數(shù) </p><p>  int max_solve_time,max_grap_time; //max_slove_time為事件的解決時(shí)間最大值

93、//max_grap_time為客戶的間隔時(shí)間的最大值</p><p>  int max_insertmoney,max_drawmoney; //max_insertmoney為存錢的最大值 //max_drawmoney為取錢的最大值</p><p>  int currentTime=0;</p><p

94、>  void putqueue1(Event m)</p><p><b>  {</b></p><p>  q1.push(m);</p><p><b>  }</b></p><p>  void putqueue2(Event m)</p><p><

95、b>  {</b></p><p>  q2.push(m);</p><p><b>  }</b></p><p>  void solvequeue1()</p><p><b>  {</b></p><p>  Event x=q1.front()

96、;</p><p><b>  q1.pop();</b></p><p>  cout<<"現(xiàn)在是"<<(x.arriveTime/60+9)<<":"<<(x.arriveTime-(x.arriveTime/60)*60)<<",第"<&

97、lt;x.n<<"個(gè)客戶到達(dá)"<<endl;</p><p>  if(total_money+x.money>=0)</p><p><b>  {</b></p><p>  total_money+=x.money;</p><p>  if (x.money &g

98、t; 0)</p><p><b>  {</b></p><p>  if(currentTime>x.arriveTime)</p><p>  x.waitTime=currentTime-x.arriveTime;</p><p><b>  else</b></p>&

99、lt;p>  x.waitTime=0;</p><p>  cout<<"第"<<x.n<<"個(gè)顧客等了"<<x.waitTime<<"分鐘后,辦理了存款 "<<x.money<<" 元的業(yè)務(wù),用了"<<x.solveTime<

100、;<"分鐘"<<",此時(shí)銀行余額為"<<total_money<<endl;</p><p>  currentTime=x.arriveTime+x.waitTime+x.solveTime;</p><p>  solvequeue2();</p><p><b>  }

101、</b></p><p><b>  else </b></p><p><b>  {</b></p><p>  if(currentTime>x.arriveTime)</p><p>  x.waitTime=currentTime-x.arriveTime;</p&

102、gt;<p><b>  else</b></p><p>  x.waitTime=0;</p><p>  cout<<"第"<<x.n<<"個(gè)顧客等了"<<x.waitTime<<"分鐘后,辦理了取款 "<<-x.m

103、oney<<" 元的業(yè)務(wù),用了"<<x.solveTime<<"分鐘"<<",此時(shí)銀行余額為"<<total_money<<endl;</p><p>  currentTime=x.arriveTime+x.waitTime+x.solveTime;</p><

104、p><b>  }</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  cout<<"為第"<<x.n&

105、lt;<"個(gè)該顧客辦理取款 "<<-x.money<<" 元的業(yè)務(wù),"<<"此時(shí)銀行余額為"<<total_money<<",無法為他辦理業(yè)務(wù),請(qǐng)稍等片刻"<<endl;</p><p>  putqueue2(x);</p><p>

106、;<b>  }</b></p><p><b>  }</b></p><p>  void solvequeue2()</p><p><b>  {</b></p><p>  int n=q2.size(),i=0;</p><p>  whil

107、e(n!=0)</p><p><b>  {</b></p><p>  Event x=q2.front();</p><p><b>  q2.pop();</b></p><p>  if(total_money+x.money>0)</p><p><b

108、>  {</b></p><p>  total_money+=x.money;</p><p>  if(currentTime>x.arriveTime)</p><p>  x.waitTime=currentTime-x.arriveTime;</p><p><b>  else</b>

109、</p><p>  x.waitTime=0;</p><p>  cout<<"第"<<x.n<<"個(gè)顧客等了"<<x.waitTime<<"分鐘后,辦理了取款 "<<-x.money<<" 元的業(yè)務(wù),用了"<<

110、;x.solveTime<<"分鐘,"<<"此時(shí)銀行余額為"<<total_money<<endl;</p><p><b>  n--;</b></p><p>  currentTime=x.arriveTime+x.waitTime+x.solveTime;</p>

111、;<p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  putqueue2(x);</p><p><b>  i++;</b></p><

112、;p><b>  }</b></p><p><b>  if(i==n)</b></p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p&g

113、t;<p>  void main()</p><p><b>  {//主函數(shù)</b></p><p>  cout<<"請(qǐng)輸入銀行總資金(元)和營(yíng)業(yè)總時(shí)間(分鐘):"<<endl;</p><p>  cin>>total_money>>closetime;&

114、lt;/p><p>  cout<<"請(qǐng)輸入存錢的最大值(元)和取錢的最大值(元)"<<endl;</p><p>  cin>>max_insertmoney>>max_drawmoney;</p><p>  cout<<"請(qǐng)輸入事件的解決時(shí)間最大值(分鐘)和客戶的間隔時(shí)間的最

115、大值(分鐘)"<<endl;</p><p>  cin>>max_solve_time>>max_grap_time;</p><p>  system("cls");</p><p>  cout<<"***************** 早上九點(diǎn)開業(yè),歡迎光臨 ******

116、***********\n";</p><p>  cout<<" ============================================="<<endl;</p><p>  cout<<" 歡迎使用銀行業(yè)務(wù)模擬系統(tǒng)\n";</p>&

117、lt;p>  cout<<" ---------------------------------------------"<<endl;</p><p>  cout<<" 姓名:石站鋒 "<<endl;</p><p>  cout&l

118、t;<" 學(xué)號(hào):1107020404"<<endl;</p><p>  cout<<" 班級(jí):信計(jì)四班 "<<endl; </p><p>  cout<<" ================

119、============================"<<endl;</p><p>  cout<<"銀行每天開業(yè)總資金為"<<total_money<<"元. 每日營(yíng)業(yè)時(shí)間為"<<closetime<<"分鐘."<<endl;</p>&l

120、t;p>  Event temp;</p><p>  int grap=0,n=1,i;</p><p>  int solveTime;</p><p>  int money;</p><p>  int waitTime=0;</p><p>  srand((unsigned)time( NULL ))

121、;</p><p>  grap = rand() % max_grap_time;</p><p>  temp.grap = grap;</p><p>  close_time = temp.grap+close_time;</p><p>  temp.arriveTime = close_time;</p><p

122、>  money =rand()%(max_insertmoney+max_drawmoney)-max_drawmoney;</p><p>  temp.money=money;</p><p>  solveTime = rand() % max_solve_time;</p><p>  temp.solveTime = solveTime;</

123、p><p><b>  temp.n=n;</b></p><p>  putqueue1(temp);</p><p>  solvequeue1();</p><p>  //system("pause");</p><p><b>  for(;;)</b&g

124、t;</p><p><b>  {</b></p><p>  grap = rand() % max_grap_time;</p><p>  temp.grap = grap;</p><p>  close_time = temp.grap+close_time;</p><p>  te

125、mp.arriveTime = close_time;</p><p>  if (close_time>closetime)</p><p><b>  { </b></p><p>  cout<<"******************銀行營(yíng)業(yè)結(jié)束,謝謝光臨*******************\n";

126、</p><p>  cout<<"今天來了"<<n<<"個(gè)顧客,"<<endl;</p><p>  if(q2.size()!=0)</p><p>  cout<<"未能給"<<q2.size()<<"位顧客

127、提供服務(wù),很抱歉!"<<endl;</p><p><b>  else</b></p><p>  cout<<"為全部的顧客提供的服務(wù),歡迎再次光臨!"<<endl;</p><p>  cout<<"銀行余額為"<<total_m

128、oney<<endl;</p><p><b>  break;</b></p><p><b>  }</b></p><p>  i=rand()%2;</p><p><b>  if(i==0)</b></p><p>  money

129、 =rand()%max_insertmoney;</p><p><b>  else</b></p><p>  money=-rand()%max_drawmoney;</p><p>  temp.money=money;</p><p>  solveTime = rand() % max_solve_time

130、;</p><p>  temp.solveTime = solveTime;</p><p><b>  n++;</b></p><p><b>  temp.n=n;</b></p><p>  putqueue1(temp);</p><p>  solvequeue

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論