版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告銀行業(yè)務(wù)模擬問題描述銀行業(yè)務(wù)模擬問題描述-鏈表和隊列鏈表和隊列班 級: 計算機 091 班 姓 名: 王 威 指導(dǎo)教師: 董 躍 華、井福榮 成 績:_ 信息工程學(xué)院信息工程學(xué)院 2011 年 6 月 20 日摘要摘要問題描述:客戶業(yè)務(wù)分為兩種.第一種是申請從銀行得到一筆資金,即取款或借款。第二種是向銀行投入一筆資金,即存款或還款。銀行有兩個服務(wù)窗口,相應(yīng)的有兩個隊列.客戶到達(dá)銀行后先排第一個隊。處理每個客戶業(yè)務(wù)時,如果屬于第一種,且申請額超出銀行現(xiàn)存資金總額而得不到滿足,則立即排入第二隊等候,直至滿足時才離開銀行,否則業(yè)務(wù)處理完后立即離開銀行。每接待完
2、一個第二種業(yè)務(wù)的客戶,則順序檢查和處理(如果可能)第二個隊列的客戶,對能滿足的申請者予以滿足,不能滿足者重新排到第二個隊列的隊尾。注意,在此檢查過程中,一旦銀行資金總額少于或等于剛才第一個隊列中最后一個客戶(第二種業(yè)務(wù))被接待之前的數(shù)額,或者本次已將第二個隊列檢查或處理了一遍,就停止檢查(因為此時已不可能還有能滿足者)轉(zhuǎn)而繼續(xù)接待第一個隊列的客戶。任何時刻都只開一個窗口.假設(shè)檢查不需要時間。營業(yè)時間結(jié)束時所有客戶立即離開銀行.寫一個上述銀行業(yè)務(wù)的事件驅(qū)動模擬系統(tǒng),通過模擬方法求出客戶在銀行內(nèi)逗留的平均時間。 關(guān)鍵字:關(guān)鍵字: 隊列 鏈表 取款 借款 存款 還款 驅(qū)動模擬系統(tǒng) 平均時間目錄1 1
3、。引言。引言. 4 -2.2.需求分析需求分析. 4 3 3。概要設(shè)計。概要設(shè)計 .- 5 -1.單鏈表的抽象數(shù)據(jù)類型定義為:單鏈表的抽象數(shù)據(jù)類型定義為:. 5 -4 4。詳細(xì)設(shè)計。詳細(xì)設(shè)計 .- 6 -1、程序結(jié)構(gòu)圖、程序結(jié)構(gòu)圖. 6 -2、程序流程圖、程序流程圖.- 6 -3 3、算法設(shè)計、算法設(shè)計.- 7 5 5。測試結(jié)果。測試結(jié)果 .- 12 -6.6.調(diào)試分析調(diào)試分析. 13 7.7.設(shè)計體會設(shè)計體會. 13 8 8。結(jié)束語。結(jié)束語 .- 13 -9.9.參考文獻(xiàn)參考文獻(xiàn) .- 14 -1010。附錄。附錄. 14 -1.1.引言引言 隨著數(shù)據(jù)處理的不斷進(jìn)步和計算機網(wǎng)絡(luò)的迅速發(fā)展,銀
4、行業(yè)務(wù)的處理速度也越來越快,熟悉運用隊列和鏈表編寫程序和掌握現(xiàn)代信息系統(tǒng)的開發(fā)方法也顯得尤為重要.所以對于計算機專業(yè)的學(xué)生來說熟練掌握隊列的運用是每個學(xué)生的必備本領(lǐng).本次課程設(shè)計就是以銀行業(yè)務(wù)模擬問題為模型,運用 C 語言和數(shù)據(jù)結(jié)構(gòu)結(jié)合隊列和鏈表開發(fā)的系統(tǒng)。 關(guān)鍵字:關(guān)鍵字:C 語言 數(shù)據(jù)結(jié)構(gòu) 隊列 鏈表 2.2.需求分析需求分析 基本功能:銀行的辦理業(yè)務(wù)模式。在與傳統(tǒng)的各個窗口排隊的方式相比現(xiàn)在的打卡號的方式更加的科學(xué)和合理,對于這種方法的一種模擬就是本軟件的要求。在不同的時間來不同的人,在未知的情況下來的多少人和銀行辦理業(yè)務(wù)的資源的沖突,還有不會因為個人的辦理業(yè)務(wù)的時間長短而影響到其他人辦
5、理業(yè)務(wù)的時間問題。對于銀行流水線業(yè)務(wù)的模擬。利用等候區(qū)來緩沖在窗口使用為滿時候的資源和使用的沖突。在窗口結(jié)束工作以后排在隊列最前端的顧客去進(jìn)行辦理業(yè)務(wù)。 輸入輸出形式:對于次題目是模擬銀行運做的系統(tǒng),而且時間是隨即產(chǎn)生的,關(guān)于輸入方式??梢圆挥锰?。也可以沒有。個人可以在做界面的時候輸入對應(yīng)的選項。而輸出相應(yīng)的結(jié)果. 必要輸出:客戶到達(dá)時間,客戶進(jìn)入的窗口.客戶辦理的業(yè)務(wù). 測試數(shù)據(jù):營業(yè)時間為 8 小時,其他模擬量自行設(shè)定.測試數(shù)據(jù)為時間產(chǎn)生的隨機數(shù)對于模擬銀行中的時間和業(yè)務(wù)敷值。關(guān)鍵字:關(guān)鍵字:基本功能 輸入輸出 測試數(shù)據(jù)3 3。概要設(shè)計。概要設(shè)計1.單鏈表的抽象數(shù)據(jù)類型定義為: ADT
6、eventlist 數(shù)據(jù)對象: D=qiqiElemSet,i=1,2,,n,n=o 數(shù)據(jù)關(guān)系: R=qi1,qi|qi-1,qiD,i=2,3,,n 隊列的抽象數(shù)據(jù)類型定義: ADT Queue 數(shù)據(jù)對象:D=aiaiElemSet,i=1,2,,n,n=o 數(shù)據(jù)關(guān)系:R=ai1,ai|ai-1,aiD,i=2,3,n 基本操作: Initqueue(linkqueue &q) 操作結(jié)果:構(gòu)造一個空的隊列 q; Initlist(linklist &ev) 操作結(jié)果:構(gòu)造一個空的鏈表 ev; push(queue q,int d) 初始條件:隊列數(shù)組已存在 操作結(jié)果:在隊尾插
7、入一個元素 epop(queue q)初始條件:隊列已存在 操作結(jié)果:獲取隊列 q 的隊頭 service* front(queue &q)初始條件:隊列已存在 操作結(jié)果:返回隊首元素service* back(queue &q)初始條件:隊列已存在 操作結(jié)果:返回隊尾元素service* searchAndDel(queue &q,int m)初始條件:隊列已存在 操作結(jié)果:在隊里尋找可處理元素void putMoney()操作結(jié)果:處理存款事件 void getMoney()操作結(jié)果:處理取款事件void arrive()初始條件:初始化操作完畢 操作結(jié)果:處理客戶
8、到達(dá)事件 2本程序包含五個模塊:主程序模塊:Void main() 接受命令; 處理命令; 事件鏈表表單元模塊實現(xiàn)鏈表的抽象數(shù)據(jù)類型; 隊列單元模塊-實現(xiàn)隊列的抽象數(shù)據(jù)類型;事件結(jié)點結(jié)構(gòu)單元模塊-定義鏈表的結(jié)點結(jié)構(gòu); 隊列結(jié)點結(jié)構(gòu)單元模塊-定義隊列的結(jié)點結(jié)構(gòu); 各模塊之間的調(diào)用關(guān)系如下:主程序模塊鏈表、隊列表單元模塊 隊列、鏈表結(jié)點結(jié)構(gòu)單元模塊。4 4。詳細(xì)設(shè)計。詳細(xì)設(shè)計1、該程序結(jié)構(gòu)圖主函數(shù) Main()到達(dá)事件處理函數(shù)arrive()存款事件函數(shù)putMoney()處理客戶事件函數(shù)findAndDeal()取款事件函數(shù)getMoney()產(chǎn)生隨機數(shù)的函數(shù)Random()返回隊尾函數(shù)back
9、(queue &q)出隊函數(shù)pop()入隊函數(shù)push()圖圖 312、該程序流程圖辦業(yè)務(wù)?開始到達(dá)結(jié)束存款還款?取款借款?否是是是是否否圖圖 323、算法設(shè)計:客戶信息struct service int num; /客戶號string type; /到達(dá)或離開int beginTime;int endTime;int money; /正數(shù)為存款,負(fù)數(shù)為取款service* next; ;Error!Error!隊列struct queue /隊列service* head;service rear; ; 入隊算法,3void push(queue &q,int d) / 插
10、入元素 d 為 Q 的新的隊尾元素service* temp = new service;tempmoney = d;temp-next = NULL;if(NULL = q。head) /隊列為空,初始化q。 head = temp;q. rear = temp;/ifelse /隊列不為空,插入元素 dq。 rearnext = temp;q. rear = q.rear-next;/else 出隊算法void pop(queue &q) / 若隊列不空,出隊列函數(shù)service* temp;temp = q。 head;if(NULL =q。 headnext)q。head =
11、q。 rear =NULL;elseq. head=q。 headnext;delete temp; 返回隊首元素算法service* front(queue &q) /返回隊首元素return q。 head; Error!Error!返回隊尾元素算法service back(queue &q) /返回隊尾元素return q。 rear; Error!Error!處理事件算法service* searchAndDel(queue &q,int m) /在對列中尋找可處理元素service sign = q。 head; /標(biāo)記頭節(jié)點service* temp;whi
12、le(NULL != q。 head) if((q. headmoney) next;q。 head =q. head-next;q。 rear-next = NULL;/else/elseif(q. head = sign)/隊列循環(huán)一周時停止return NULL;return NULL; 客戶到達(dá)事件void arrive() /*”到達(dá)函數(shù) 隨機產(chǎn)生顧客,進(jìn)入隊列一產(chǎn)生到達(dá)事件 進(jìn)入事件隊列*/push(fq,(rand()% (2*dealMoney) dealMoney) ); /隨機產(chǎn)生顧客加入第一隊列back(fq)beginTime = currentTime;back(fq
13、)-num = number;push(eq,(back(fq)-money)); /將產(chǎn)生事件加入事件隊列back(eq)beginTime = currentTime;back(eq)-type = 到達(dá);back(eq)num = number;+number Error!Error!處理存款或還款事件算法void putMoney() /存款函數(shù)total += front(fq)-money; /更新資金總額push(eq,front(fq)-money); /加入事件隊列 離開back(eq)type = 離開;back(eq)-num = front(fq)-num;back(e
14、q)endTime = (front(fq)beginTime + rand()%dealTime +1);+counter; /更新客戶總數(shù)totalTime += (back(eq)endTime - front(fq)-beginTime); /更新逗留時間pop(fq); /刪除第一隊列第一個業(yè)務(wù)currentTimeOfDeal = back(eq)-endTime; state =0; 處理取款或借款事件算法void getMoney() /取款函數(shù)if( (-fq.head-money) total ) /資金短缺 加入第二隊列push( sq,front(fq)-money )
15、;back(sq)beginTime = front(fq)-beginTime;back(sq)num = front(fq)num;pop(fq);/ifelse total += back(fq)money;push(eq,front(fq)-money); /加入事件隊列 離開back(eq)type = ”離開” ;back(eq)-num = front(fq)num;back(eq)-endTime=(front(fq)beginTime + rand()%dealTime +1);back(eq)-beginTime = 0;currentTimeOfDeal = back(e
16、q)endTime;+counter; /更新客戶總數(shù) totalTime += ( back(eq)endTime back(fq)beginTime ); /更新逗留時間pop(fq); /刪除第一隊列第一個業(yè)務(wù)state =0;/elsevoid findAndDeal() /在隊列中尋找可處理元素,對其進(jìn)行處理while( (temped= searchAndDel(sq,total)&NULL != temped ) /查找可處理取款total += temped-money; /更新資金總額push(eq,temped-money) ; /加入事件隊列訓(xùn) 離開back(eq
17、)type = ”離開” ;back(eq)-num = tempednum;randomTemp = rand()%dealTime +1;back(eq)endTime = currentTime + randomTemp ;currentTimeOfDeal += randomTemp;+counter; /更新客戶總數(shù)totalTime += ( back(eq)endTime - temped-beginTime ) ; /更新逗留時間 delete temped; /刪除節(jié)點temped = NULL;state = 0;5.5.測試結(jié)果測試結(jié)果初始界面:圖圖 5-15-1模擬界面
18、:圖圖 5-25-26 6。調(diào)試分析。調(diào)試分析1、我開始沒有處理系統(tǒng)時間, 即直接使用隨機生成的客戶到達(dá)時間,經(jīng)查閱資料才知道,原來分鐘用 ti/60 顯示,秒用 ti60 顯示即可。2、變成過程中犯了一個極其簡單的錯誤,把棧和隊列竟然弄反了,在運行結(jié)果不對的情況下很難發(fā)現(xiàn)錯誤,花了我好長時間才找出來,我真是糊涂啊.7 7。設(shè)計體會。設(shè)計體會本次課程設(shè)計我最大的體會是:編程能力怎么樣要看能不能用編程來解決實際生活當(dāng)中的問題,簡單說就是理論聯(lián)系實際。開始接觸這個題目的時候(銀行業(yè)務(wù)模擬)根本不知從何下手,銀行業(yè)務(wù)怎么和編程聯(lián)系得上呢?后來通過上網(wǎng)了解一些實例后,慢慢的一步步上手,等完成以后才知道
19、原來真的可以用編程來解決一些實際當(dāng)中的問題的??磥硪院筮€要多多接觸這樣的問題,來提高自己的實際能力。8 8。結(jié)束語。結(jié)束語這個程序是在 C-Free5.0 版本下完成的。使用時只需直接雙擊 exe 文件即可。9 9。參考文獻(xiàn)。參考文獻(xiàn)1、嚴(yán)蔚敏 吳偉民 著 數(shù)據(jù)結(jié)構(gòu)(C 語言版) 清華大學(xué)出版社 20102、譚浩強 著 C 程序設(shè)計(第三版) 清華大學(xué)出版社 20051010。附錄。附錄#include #include next = NULL;if(NULL = q。head) /隊列為空,初始化q. head = temp;q. rear = temp;/ifelse /隊列不為空,插入元
20、素 dq. rear-next = temp;q。 rear = q。rearnext;/elsevoid pop(queue &q) / 若隊列不空,出隊列函數(shù)service* temp;temp = q。 head;if(NULL =q. headnext)q。head = q. rear =NULL;elseq. head=q。 headnext;delete temp;service* front(queue &q) /返回隊首元素return q. head;service back(queue &q) /返回隊尾元素return q. rear;servic
21、e searchAndDel(queue q,int m) /在對列中尋找可處理元素service* sign = q。 head; /標(biāo)記頭節(jié)點service temp;while(NULL != q. head) if((q。 headmoney)) m) /隊首元素可以處理if(q. head=q。rear) temp = q. head;q. head = q. rear = NULL;return temp;/ifelse /隊首元素出列temp = q. head; q。 head = q. head-next; / 首節(jié)點后移一位,返回原首節(jié)點return temp;/else/
22、whileelse /隊首元首不能被處理if(q. head = q. rear)else /首節(jié)點移到隊列尾部q. rear-next = q。 head; q. rear = q. rearnext;q。 head =q。 head-next;q。 rearnext = NULL;/else/elseif(q。 head = sign)/隊列循環(huán)一周時停止return NULL;return NULL;bool state =1; /用于判斷是否有窗口在處理int currentTimeOfDeal = 0;int theArriveTime = 0;queue eq; /事件隊列queu
23、e fq; /隊列一queue sq; /對列二/初始化三個隊列void arrive() /*”到達(dá)函數(shù) 隨機產(chǎn)生顧客,進(jìn)入隊列一產(chǎn)生到達(dá)事件 進(jìn)入事件隊列*/push(fq, (rand()% (2dealMoney) -dealMoney); /隨機產(chǎn)生顧客加入第一隊列back(fq)beginTime = currentTime;back(fq)-num = number;push(eq,(back(fq)money)); /將產(chǎn)生事件加入事件隊列back(eq)-beginTime = currentTime;back(eq)type = 到達(dá);back(eq)-num = numb
24、er;+number;void putMoney() /存款函數(shù)total += front(fq)-money; /更新資金總額push(eq,front(fq)money); /加入事件隊列 離開back(eq)type = 離開;back(eq)-num = front(fq)num;back(eq)endTime = (front(fq)beginTime + rand()dealTime +1);+counter; /更新客戶總數(shù)totalTime += (back(eq)-endTime - front(fq)-beginTime); /更新逗留時間pop(fq); /刪除第一隊列
25、第一個業(yè)務(wù)currentTimeOfDeal = back(eq)endTime; state =0;void getMoney() /取款函數(shù)if( (fq。headmoney) total ) /資金短缺 加入第二隊列push( sq,front(fq)money ) ;back(sq)beginTime = front(fq)beginTime;back(sq)-num = front(fq)-num;pop(fq);/ifelse total += back(fq)-money;push(eq,front(fq)money) ; /加入事件隊列 離開back(eq)type = ”離開
26、”;back(eq)-num = front(fq)num;back(eq)-endTime = (front(fq)-beginTime + rand()%dealTime +1) ;back(eq)beginTime = 0;currentTimeOfDeal = back(eq)endTime;+counter; /更新客戶總數(shù) totalTime += ( back(eq)-endTime - back(fq)beginTime ); /更新逗留時間pop(fq) ; /刪除第一隊列第一個業(yè)務(wù)state =0;/elseservice temped ;int randomTemp;vo
27、id findAndDeal() /在對列中尋找可處理元素,對其進(jìn)行處理while( (temped= searchAndDel(sq,total)&NULL != temped ) /查找可處理取款total += temped-money; /更新資金總額push(eq,temped-money) ; /加入事件隊列訓(xùn) 離開back(eq)-type = ”離開;back(eq)num = tempednum;randomTemp = rand()dealTime +1;back(eq)-endTime = currentTime + randomTemp ;currentTimeOfDeal += randomTemp;+counter; /更新客戶總數(shù)totalTime += ( back(eq)-endTime - tempedbeginTime ); /更新逗留時間 delete temped; /刪除節(jié)點
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版商鋪購買意向定金合同模板3篇
- 2024年版校車租賃合同范本
- 二零二五版車輛行駛安全協(xié)議及事故責(zé)任認(rèn)定3篇
- 二零二五年度甜品店經(jīng)營管理權(quán)及專利轉(zhuǎn)讓合同3篇
- 2024授權(quán)簽訂合同的委托書
- 二零二五年燈具及五金配件銷售合同3篇
- 二零二五年快餐外賣平臺加盟與合作協(xié)議3篇
- 瀟湘職業(yè)學(xué)院《用戶畫像與精準(zhǔn)營銷》2023-2024學(xué)年第一學(xué)期期末試卷
- 西藏藏醫(yī)藥大學(xué)《鍋爐原理及設(shè)備》2023-2024學(xué)年第一學(xué)期期末試卷
- 溫州醫(yī)科大學(xué)《中醫(yī)護(hù)理技能》2023-2024學(xué)年第一學(xué)期期末試卷
- 三年級道德與法治教學(xué)工作總結(jié)
- 托卡馬克等離子體約束
- 各級各類護(hù)理人員崗位職責(zé)
- 狂犬病與破傷風(fēng)的同意告知書
- FZ/T 81013-2016寵物狗服裝
- PPVT幼兒語言能力測試題附答案
- JB∕T 14089-2020 袋式除塵器 濾袋運行維護(hù)技術(shù)規(guī)范
- 陜西省寶雞市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名居民村民委員會明細(xì)及行政區(qū)劃代碼
- 中華人民共和國職業(yè)分類大典電子版
- 畢業(yè)設(shè)計小型液壓機主機結(jié)構(gòu)設(shè)計與計算
- 19XR開機運行維護(hù)說明書
評論
0/150
提交評論