數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---銀行模擬系統(tǒng)_第1頁(yè)
已閱讀1頁(yè),還剩21頁(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>  數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告</p><p>  班 級(jí):軟件092班</p><p><b>  姓 名: </b></p><p><b>  學(xué) 號(hào): </b></p><p><b>  指導(dǎo)教師: </b></p><p&

2、gt;<b>  成 績(jī):</b></p><p><b>  信息工程學(xué)院</b></p><p>  2011 年 6月 6日</p><p>  摘要(題目) 課題題目是:客戶業(yè)務(wù)分為兩種。第一種是申請(qǐng)從銀行得到一筆資金,即取款或借款。第二種是向銀行投入一筆資金,即存款或還款。銀行有兩個(gè)服務(wù)窗口,

3、相應(yīng)的有兩個(gè)隊(duì)列。客戶到達(dá)銀行后先排第一個(gè)隊(duì)。處理每個(gè)客戶業(yè)務(wù)時(shí),如果屬于第一種,且申請(qǐng)額超出銀行現(xiàn)存資金總額而得不到滿足,則立即排入第二隊(duì)等候,直至滿足時(shí)才離開(kāi)銀行,否則業(yè)務(wù)處理完后立即離開(kāi)銀行。每接待完一個(gè)第二種業(yè)務(wù)的客戶,則順序檢查和處理(如果可能)第二個(gè)隊(duì)列的客戶,對(duì)能滿足的申請(qǐng)者予以滿足,不能滿足者重新排到第二個(gè)隊(duì)列的隊(duì)尾。 目錄</p><p><b>  1.引言<

4、;/b></p><p><b>  1.1引言</b></p><p><b>  1.2課題意義</b></p><p>  1.3背景和應(yīng)用領(lǐng)域</p><p><b>  2.需求分析</b></p><p><b>  2.1

5、功能需求</b></p><p><b>  2.2數(shù)據(jù)需求</b></p><p><b>  3.概要設(shè)計(jì)</b></p><p><b>  3.1簡(jiǎn)要算法分析</b></p><p><b>  3.2算法流程圖</b></p&g

6、t;<p><b>  3.3客戶服務(wù)系統(tǒng)</b></p><p><b>  4.詳細(xì)設(shè)計(jì)</b></p><p><b>  4.1 調(diào)試</b></p><p><b>  4.2 測(cè)試</b></p><p><b>  5

7、.測(cè)試結(jié)果</b></p><p><b>  6.調(diào)試分析</b></p><p><b>  7.設(shè)計(jì)體會(huì)</b></p><p><b>  8.結(jié)束語(yǔ)</b></p><p><b>  參考文獻(xiàn)</b></p><

8、p><b>  第一章 引言</b></p><p><b>  1.1引言:</b></p><p>  隨著社會(huì)的迅速發(fā)展,人們的生活水平越來(lái)越高,人們的經(jīng)濟(jì)越來(lái)越多,所以人們對(duì)自己的資產(chǎn)保護(hù)也越來(lái)越注重,這便產(chǎn)生了銀行,而隨著人口的迅速增長(zhǎng),存錢(qián)的人也越來(lái)越多,因此設(shè)計(jì)一個(gè)程序是存錢(qián)和取錢(qián)的時(shí)間縮短是非常重要的,設(shè)計(jì)一個(gè)好的程序,使之

9、能更好的方便我們的生活。在開(kāi)發(fā)這個(gè)銀行系統(tǒng)時(shí),用到了c語(yǔ)言里的函數(shù)調(diào)用,結(jié)構(gòu)體等,并用基本對(duì)話框的一些控件對(duì)之進(jìn)行實(shí)現(xiàn)。使之完成了一些功能。報(bào)告將會(huì)對(duì)銀行模擬系統(tǒng)程序的一些功能模塊進(jìn)行具體的分析,寫(xiě)出概要設(shè)計(jì)方案,詳細(xì)設(shè)計(jì),各個(gè)功能的流程圖,以及調(diào)試分析等,從各個(gè)方面具體的對(duì)程序進(jìn)行了分析。</p><p><b>  1.2課題意義</b></p><p>  銀行

10、系統(tǒng)是非常之重要的,對(duì)于我們的生活將有巨大的作用,所以我們學(xué)習(xí)是更應(yīng)該努力學(xué),以對(duì)銀行取款信息有充分的了解,并進(jìn)行編程實(shí)現(xiàn)。通過(guò)程序?qū)嵺`來(lái)鞏固運(yùn)用所學(xué)的專業(yè)知識(shí),提高我們的計(jì)算機(jī)應(yīng)用技能,提高編程能力, 加深對(duì)相關(guān)內(nèi)容的理解,拓寬知識(shí)面,培養(yǎng)我們的創(chuàng)新精神和實(shí)踐能力。</p><p>  1.3背景和應(yīng)用領(lǐng)域</p><p>  隨著社會(huì)的迅速發(fā)展,人們的生活水平越來(lái)越高,人們的經(jīng)濟(jì)越來(lái)越

11、多,所以人們對(duì)自己的資產(chǎn)保護(hù)也越來(lái)越注重,這便產(chǎn)生了銀行,而隨著人口的迅速增長(zhǎng),存錢(qián)的人也越來(lái)越多,因此設(shè)計(jì)一個(gè)程序是存錢(qián)和取錢(qián)的時(shí)間縮短是非常重要的,設(shè)計(jì)一個(gè)好的程序,使之能更好的方便我們的生活。它的領(lǐng)域使用在人們快速取款或存款當(dāng)中。</p><p>  第二章 需求分析:</p><p><b>  2.1 功能需求</b></p><p&g

12、t;  設(shè)計(jì)一個(gè)簡(jiǎn)單的銀行業(yè)務(wù)模擬程序,主要實(shí)現(xiàn)的功能是使每個(gè)存款或取款的窗口都不是空閑的,保持每個(gè)窗口都在工作。即是實(shí)現(xiàn)最大的工作效率。</p><p>  1本題需要求客戶在銀行內(nèi)逗留的平均時(shí)間,用客戶逗留除以客戶總數(shù)即可</p><p>  2本題涉及到隊(duì)列的建立、初始化和插入,隊(duì)列的關(guān)鍵字為整數(shù),處理 第一、二種業(yè)務(wù)分別用負(fù)數(shù)和正數(shù)表示。</p><p> 

13、 3 對(duì)客戶進(jìn)行編號(hào)用來(lái)統(tǒng)計(jì)客戶總數(shù),同時(shí)在隊(duì)列元素的循環(huán)處理中更新總的逗留時(shí)間。</p><p>  4演示程序以用戶和計(jì)算機(jī)的對(duì)話方式執(zhí)行,即在計(jì)算機(jī)終端顯示的“提示信息”下,輸入數(shù)據(jù)進(jìn)行測(cè)試。</p><p>  5 最后對(duì)所得結(jié)果進(jìn)行簡(jiǎn)要分析。設(shè)計(jì)一個(gè)簡(jiǎn)單的銀行業(yè)務(wù)模擬程序,主要實(shí)現(xiàn)的功能是使每個(gè)存款或取款的窗口都不是空閑的,保持每個(gè)窗口都在工作。即是實(shí)現(xiàn)最大的工作效率。</

14、p><p><b>  2.2數(shù)據(jù)需求</b></p><p>  銀行業(yè)務(wù)模擬程序主要用于存取的各種信息,所包含的有排隊(duì)的人數(shù)扽很多重要數(shù)據(jù)。</p><p><b>  第三章.概要設(shè)計(jì):</b></p><p><b>  3.1簡(jiǎn)要算法分析</b></p>&

15、lt;p>  本程序包含兩個(gè)模塊:</p><p><b>  1)主程序模塊:</b></p><p>  Void main(){</p><p><b>  初始化:</b></p><p><b>  do {</b></p><p>&l

16、t;b>  接受命令;</b></p><p><b>  處理命令</b></p><p>  }while(“命令”!=“退出”);</p><p>  2)隊(duì)列單元模塊—實(shí)現(xiàn)隊(duì)列的抽象數(shù)據(jù)類型</p><p>  各模塊之間的調(diào)用關(guān)系。 </p><p>

17、  1隊(duì)列的抽象數(shù)據(jù)類型定義</p><p>  ADT Queue{</p><p>  數(shù)據(jù)對(duì)象:D={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>  約定其中a1端為隊(duì)列頭,an端為隊(duì)列尾.</p&

18、gt;<p><b>  基本操作:</b></p><p>  Init Queue(&Q)</p><p>  操作結(jié)果:構(gòu)造一個(gè)空隊(duì)列Q</p><p>  QueueEmpty(Q)</p><p>  操作結(jié)果:若Q為空隊(duì)列,則返回TRUE,否則FALSE</p><p

19、>  GetHead(Q &q) EnQueue(&Q q)</p><p>  操作結(jié)果:插入元素q為Q的新的隊(duì)尾素 </p><p>  DeQueue(&Q &q);操作結(jié)果刪除Q的隊(duì)頭元素,并用q返回其值。</p><p><b>  3.2算法流程圖</b></p><p&g

20、t;<b>  3.3客戶服務(wù)系統(tǒng)</b></p><p>  客戶服務(wù) 模塊包含兩個(gè)子系統(tǒng):取款系統(tǒng)和存款系統(tǒng)。 客戶服務(wù)功能圖模塊如圖2</p><p><b>  圖2</b></p><p>  取款系統(tǒng)和存款系統(tǒng):銀行通過(guò)判斷用戶業(yè)務(wù)類型進(jìn)行業(yè)務(wù)辦理。</p><p><b> 

21、 3.4數(shù)據(jù)管理系統(tǒng)</b></p><p>  數(shù)據(jù)管理系統(tǒng)模塊包含兩個(gè)子系統(tǒng):數(shù)據(jù)整理系統(tǒng)和數(shù)據(jù)管理系統(tǒng)。 數(shù)據(jù)管理功能圖模塊如圖。</p><p>  數(shù)據(jù)采集系統(tǒng):收集客戶信息包括存取款的資金數(shù)目</p><p>  數(shù)據(jù)整理系統(tǒng):更新銀行現(xiàn)存資金總額、客戶的逗留時(shí)間、已辦理的客戶總數(shù)。</p><p><b>

22、  3.5 簡(jiǎn)要算法</b></p><p>  為了實(shí)現(xiàn)上述程序功能,需要定義單鏈表的抽象數(shù)據(jù)類型如下:</p><p><b>  鏈表結(jié)構(gòu)體:</b></p><p>  struct Action{</p><p>  char name[50];//客戶名</p><p>

23、;  double deposit ;//存取款金額</p><p>  int sloveTime;//處理需要的時(shí)間</p><p>  int arriveTime;//到達(dá)時(shí)間,距開(kāi)業(yè)的分鐘數(shù)</p><p>  int grap;//與前一個(gè)客戶的間隔時(shí)間</p><p>  int waitTime;//總的等

24、待時(shí)間</p><p><b>  };</b></p><p>  typedef struct Node{</p><p>  Action data;</p><p>  Node* next;</p><p>  }LinkNode,*LinkList;</p><p&

25、gt;<b>  隊(duì)列結(jié)構(gòu)體如下:</b></p><p>  typedef struct Node{</p><p>  Action data;</p><p>  Node* next;</p><p>  }LinkNode,*LinkList;</p><p>  typedef st

26、ruct</p><p><b>  {</b></p><p>  Node *front;</p><p>  Node *rear;</p><p>  }LinkQueue,*Queue;</p><p><b>  3.6函數(shù)調(diào)用</b></p>&l

27、t;p>  1.主函數(shù) main</p><p>  2.進(jìn)棧函數(shù)push</p><p><b>  3.出棧函數(shù)pop</b></p><p>  4.查找和處理函數(shù)service* searchAndDel</p><p>  5.到達(dá)函數(shù)arrive</p><p>  6.存款函數(shù)

28、putMoney</p><p>  7.群款函數(shù)getMoney</p><p>  8.隨機(jī)函數(shù)rand</p><p>  第四章 調(diào)試與測(cè)試:</p><p><b>  4.1 調(diào)試</b></p><p>  編制銀行業(yè)務(wù)模擬程序時(shí),用到了很多語(yǔ)句,如隊(duì)列,指針,函數(shù)調(diào)用等等許多程序。

29、由于自己的知識(shí)有限且學(xué)習(xí)的也不是很多,總的來(lái)說(shuō)還是很缺乏編程知識(shí),經(jīng)過(guò)我的努力最后還是運(yùn)行成功。 </p><p><b>  4.2 測(cè)試</b></p><p>  銀行業(yè)務(wù)模擬程序,在編譯的時(shí)候,由于對(duì)話框之間的銜接不太懂,所以并沒(méi)有實(shí)現(xiàn)應(yīng)有的結(jié)果。但后來(lái)還是通過(guò)學(xué)生,上網(wǎng)查詢等多種方法,終于弄清了對(duì)話框之間的銜接和一些基本算法。最終也運(yùn)行出來(lái)了。 </p

30、><p><b>  第五章.測(cè)試結(jié)果:</b></p><p><b>  :</b></p><p><b>  第六章.設(shè)計(jì)體會(huì):</b></p><p>  經(jīng)過(guò)了兩周的數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì),至今我仍感受頗深,從選題到定稿,從理論到實(shí)踐,在短短的兩個(gè)星期的日子里,我雖然吃了很多

31、苦,但我學(xué)到了很多很多以前不知道的的東西,同時(shí)不僅復(fù)習(xí)和鞏固了以前所學(xué)過(guò)的知識(shí),而且看到了和學(xué)到了很多在書(shū)本上所沒(méi)有學(xué)到過(guò)的知識(shí),使我懂得了很多,理論必須和實(shí)踐永遠(yuǎn)的結(jié)合起來(lái),才能有質(zhì)的飛躍,只有理論知識(shí)是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識(shí)與實(shí)踐相結(jié)合起來(lái),從理論中得出結(jié)論,從而提高自己的實(shí)際動(dòng)手能力和獨(dú)立思考的能力。在設(shè)計(jì)的過(guò)程中遇到過(guò)很多問(wèn)題,困難很多,但我一直堅(jiān)持著,這畢竟第一次做的,難免會(huì)遇到過(guò)各種各樣的問(wèn)題,同時(shí)在設(shè)計(jì)的過(guò)程中發(fā)

32、現(xiàn)了自己的不足之處,對(duì)以前所學(xué)過(guò)的知識(shí)理解得不夠深刻,掌握得不夠牢固,現(xiàn)在覺(jué)得一定要把以前所學(xué)過(guò)的知識(shí)重新溫故。雖然我的算法不夠完好,還有許多問(wèn)題,但我一定會(huì)調(diào)試成功的。</p><p><b>  第七章 結(jié)束語(yǔ):</b></p><p>  時(shí)間過(guò)的很快,在不知不覺(jué)中,課程設(shè)計(jì)也接近了尾聲.說(shuō)起課程設(shè)計(jì),我認(rèn)為最重要的就是做好設(shè)計(jì)的預(yù)習(xí),并且認(rèn)真的去復(fù)習(xí)以前的知識(shí)

33、和查各種資料同時(shí)認(rèn)真的研究老師給的題目,老師對(duì)題目的講解要一絲不茍的去聽(tīng)去想,因?yàn)橹挥卸济靼琢耍銎鹪O(shè)計(jì)來(lái)才會(huì)有底,有信心。課程設(shè)計(jì)是一門(mén)培養(yǎng)學(xué)生綜合運(yùn)用所學(xué)知識(shí),發(fā)現(xiàn),提出,分析和解決實(shí)際問(wèn)題的學(xué)科,它能充分鍛煉我們的動(dòng)手能力,時(shí)我們實(shí)踐能力的重要環(huán)節(jié),是對(duì)學(xué)生實(shí)際工作能力的具體訓(xùn)練和考 察過(guò)程。我想這次不只是一次簡(jiǎn)單的課程設(shè)計(jì),更體現(xiàn)了數(shù)據(jù)結(jié)構(gòu)算法和生活的緊密聯(lián)系。生活中也存在許多與數(shù)據(jù)結(jié)構(gòu)有關(guān)聯(lián)的事情,它讓人不得不深思,這一個(gè)學(xué)期

34、的學(xué)習(xí),這兩年來(lái)的大學(xué)學(xué)習(xí)生涯,自己究竟學(xué)會(huì)了什么,掌握了多少,我也不清楚,我以前也瘋狂的玩過(guò),現(xiàn)在才知道自己時(shí)多么的缺乏知識(shí),大多數(shù)問(wèn)題自己不能解決,感覺(jué)將來(lái)自己是否能勝任以后作編譯人員的職位。我想大家都心里都有很多的感觸。對(duì)于自己,我想我已經(jīng)認(rèn)識(shí)到了自己的不足,在今后的學(xué)習(xí)過(guò)程中,我一定以最好的心態(tài)去對(duì)待,以最好的面貌來(lái)迎接大三的軟件專業(yè)課程,并且經(jīng)常上機(jī)調(diào)試,堅(jiān)持理論與實(shí)踐相結(jié)合。相信自己將會(huì)有很大的進(jìn)步。 。&l

35、t;/p><p><b>  參考文獻(xiàn)</b></p><p>  嚴(yán)蔚敏,吳偉民 數(shù)據(jù)結(jié)構(gòu)(C語(yǔ)言版) 清華大學(xué)出版社</p><p>  譚浩強(qiáng) C程序設(shè)計(jì)(第三版) 清華大學(xué)出版社</p><p><b>  附錄 源代碼:</b></p><p>  #includ

36、e <iostream></p><p>  #include <string></p><p>  using namespace std;</p><p>  int total; //初始時(shí)銀行現(xiàn)存資金總額</p><p>  int closeTime; //營(yíng)業(yè)結(jié)束時(shí)間</p&g

37、t;<p>  int arriveTime; //兩個(gè)到達(dá)事件之間的間隔上限</p><p>  int dealTime; //客戶之間交易的時(shí)間上限</p><p>  int dealMoney = 5000; //交易額上限</p><p>  int currentTime = 0; //當(dāng)前時(shí)間</p&g

38、t;<p>  int totalTime = 0; //客戶逗留總時(shí)間</p><p>  int counter = 0; //客戶總數(shù)</p><p>  int number = 1; //初始客戶序列號(hào)+</p><p>  struct service</p><p><b>  {<

39、/b></p><p>  int num; //客戶號(hào)</p><p>  string type; //到達(dá)或離開(kāi)</p><p>  int beginTime;</p><p>  int endTime;</p><p>  int money; //正數(shù)為存款,負(fù)數(shù)為

40、取款</p><p>  service* next;</p><p><b>  };</b></p><p>  struct queue</p><p>  { //隊(duì)列</p><p>  service* head;</p><p>  

41、service* rear;</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&

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

43、lt;/p><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->

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

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

46、gt;next;</p><p>  delete temp;</p><p><b>  }</b></p><p>  service* front(queue &q)</p><p><b>  {//返回隊(duì)首元素</b></p><p>  return q.

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

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

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

50、lt;p><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>&

51、lt;b>  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 t

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

53、 q. rear){}</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>

54、  q. head =q. head->next;</p><p>  q. rear->next = NULL;</p><p><b>  }//else</b></p><p><b>  }//else</b></p><p>  if(q. head == sign)//隊(duì)列循

55、環(huán)一周時(shí)停止</p><p>  return NULL;</p><p><b>  }</b></p><p>  return NULL;</p><p><b>  }</b></p><p>  bool state =1; //用于判斷是否有窗口在處理<

56、/p><p>  int currentTimeOfDeal = 0;</p><p>  int theArriveTime = 0;</p><p>  queue eq; //事件隊(duì)列</p><p>  queue fq; //隊(duì)列一</p><p>  queue sq; //對(duì)列二</p

57、><p><b>  //初始化三個(gè)隊(duì)列</b></p><p>  void arrive()</p><p>  {/*"到達(dá)"函數(shù) 隨機(jī)產(chǎn)生顧客,進(jìn)入隊(duì)列一</p><p>  產(chǎn)生到達(dá)事件 進(jìn)入事件隊(duì)列*/</p><p>  push(fq,(rand()% (2*dea

58、lMoney) -dealMoney)); //隨機(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ì)列&l

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

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

61、oney); //加入事件隊(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 + rand()%d

62、ealTime +1);</p><p>  ++counter; //更新客戶總數(shù)</p><p>  totalTime += (back(eq)->endTime - front(fq)->beginTime); //更新逗留時(shí)間</p><p>  pop(fq); //刪除第一隊(duì)列第一個(gè)業(yè)務(wù)</p><p>  cu

63、rrentTimeOfDeal = back(eq)->endTime; </p><p><b>  state =0;</b></p><p><b>  }</b></p><p>  void getMoney()</p><p><b>  {//取款函數(shù)</b

64、></p><p>  if( (-fq.head->money) > total ) </p><p>  {//資金短缺 加入第二隊(duì)列</p><p>  push( sq,front(fq)->money );</p><p>  back(sq)->beginTime = front(fq)->b

65、eginTime;</p><p>  back(sq)->num = front(fq)->num;</p><p><b>  pop(fq);</b></p><p><b>  }//if</b></p><p><b>  else</b></p&g

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

67、;<p>  back(eq)->num = front(fq)->num;</p><p>  back(eq)->endTime = (front(fq)->beginTime + rand()%dealTime +1);</p><p>  back(eq)->beginTime = 0;</p><p>  cur

68、rentTimeOfDeal = back(eq)->endTime;</p><p>  ++counter; //更新客戶總數(shù) </p><p>  totalTime += ( back(eq)->endTime - back(fq)->beginTime ); //更新逗留時(shí)間</p><p>  pop(fq);

69、//刪除第一隊(duì)列第一個(gè)業(yè)務(wù)</p><p><b>  state =0;</b></p><p><b>  }//else</b></p><p><b>  }</b></p><p>  service* temped ;</p><p>  i

70、nt randomTemp;</p><p>  void findAndDeal()</p><p>  {//在對(duì)列中尋找可處理元素,對(duì)其進(jìn)行處理</p><p>  while( (temped= searchAndDel(sq,total))&&NULL != temped ) </p><p>  {//查找可處

71、理取款</p><p>  total += temped->money; //更新資金總額</p><p>  push(eq,temped->money); //加入事件隊(duì)列訓(xùn) 離開(kāi)</p><p>  back(eq)->type = "離開(kāi)";</p><p>  back(eq)-&

72、gt;num = temped->num;</p><p>  randomTemp = rand()%dealTime +1;</p><p>  back(eq)->endTime = currentTime + randomTemp ;</p><p>  currentTimeOfDeal += randomTemp;</p>&l

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

74、/p><p><b>  }</b></p><p>  state = 0;</p><p><b>  }</b></p><p>  int main()</p><p><b>  { </b></p><p>  pr

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

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

77、****************************************\n");</p><p>  printf("1.開(kāi)始模擬 0.退出\n");</p><p><b>  int n;</b></p><p>  scanf("%d",&n);</p&g

78、t;<p>  while(n==1)</p><p><b>  {</b></p><p>  srand(time(NULL)); //初始化隨機(jī)函數(shù)</p><p>  printf("輸入銀行的初始存款:\n");</p><p>  scanf("%d&quo

79、t;,&total);</p><p>  printf("輸入銀行的營(yíng)業(yè)時(shí)間:\n");</p><p>  scanf("%d",&closeTime);</p><p>  printf("輸入最大到達(dá)時(shí)間間隔:\n"); </p><p>  scanf

80、("%d",&arriveTime);</p><p>  printf("輸入最大的處理時(shí)間:\n");</p><p>  scanf("%d",&dealTime);</p><p>  theArriveTime +=rand()%arriveTime + 1; //首次到達(dá)時(shí)間

81、</p><p>  while(currentTime < closeTime)</p><p><b>  {</b></p><p>  ++currentTime;</p><p>  if( currentTimeOfDeal < currentTime ) currentTimeOfDeal

82、= currentTime ;</p><p>  if( currentTimeOfDeal == currentTime ) state = 1;</p><p>  if( currentTime == theArriveTime ) //到達(dá)事件</p><p><b>  {</b></p><p>

83、<b>  arrive();</b></p><p>  theArriveTime +=rand()%arriveTime +1; </p><p><b>  }//if</b></p><p>  if( 1 == state && NULL != fq.head)</p><p

84、><b>  {</b></p><p>  if(fq.head->money >= 0)</p><p><b>  {</b></p><p>  putMoney();</p><p>  findAndDeal();</p><p><b&g

85、t;  }//if</b></p><p><b>  else </b></p><p>  getMoney();</p><p><b>  }//if</b></p><p><b>  }</b></p><p>  cout &l

86、t;<endl<< "客戶序列"<<"\t" <<"事件類型"<<"\t\t"<<" 時(shí)間"<<"\t"<<" 處理金額"<<endl;</p><p>

87、  while( NULL != eq.head) //清除事件隊(duì)列</p><p><b>  {</b></p><p>  if(eq.head->type=="離開(kāi)")</p><p>  cout << eq.head->num<<"\t\t"<

88、<eq.head->type<<"\t\t"<<"\t\t"<<eq.head->endTime<<"\t\t"<<eq.head->money<<endl;</p><p>  if(eq.head->type=="到達(dá)")<

89、/p><p>  cout << eq.head->num<<"\t\t"<<eq.head->type<<"\t\t"<<"\t\t"<<eq.head->beginTime<<"\t\t"<<eq.head->mon

90、ey<<endl;</p><p><b>  pop(eq);</b></p><p><b>  }</b></p><p>  cout << "未處理客戶:" <<""<<endl;</p><p>  

91、while( NULL != fq.head)</p><p><b>  {</b></p><p>  totalTime += ( closeTime - fq.head->beginTime ); //更新結(jié)束時(shí)第一隊(duì)列中未處理的客戶</p><p>  cout <<fq.head->num <<

92、;" "<<endl ;</p><p>  ++counter;</p><p><b>  pop(fq);</b></p><p>  }//while </p><p>  cout <<"客戶逗留平均時(shí)間為: " << total

93、Time/counter <<endl;</p><p>  cout<<"銀行當(dāng)前余額:"<<total<<endl;</p><p><b>  break;</b></p><p>  }//while(n==1)</p><p><b>

溫馨提示

  • 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)論