版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告-銀行業(yè)務(wù)模擬
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)銀行業(yè)務(wù)模擬
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---一個(gè)銀行業(yè)務(wù)模擬的程序
- 銀行業(yè)務(wù)模擬課程設(shè)計(jì)
- 銀行業(yè)務(wù)模擬系統(tǒng)課程設(shè)計(jì)
- 銀行業(yè)務(wù)活動(dòng)的模擬課程設(shè)計(jì)
- 銀行業(yè)務(wù)活動(dòng)的模擬課程設(shè)計(jì)
- 銀行業(yè)務(wù)分析報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---銀行模擬系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)(銀行模擬系統(tǒng))
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告--電梯模擬
- 投資銀行業(yè)務(wù)-結(jié)構(gòu)融資
- 《銀行業(yè)務(wù)模擬實(shí)訓(xùn)》課程的改革方案
- 銀行業(yè)務(wù)發(fā)展情況調(diào)研報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告--電梯模擬.doc
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告
評(píng)論
0/150
提交評(píng)論