山東理工大學(xué)計(jì)算機(jī)學(xué)院課程設(shè)計(jì)任務(wù)書與成績?cè)u(píng)定_第1頁
山東理工大學(xué)計(jì)算機(jī)學(xué)院課程設(shè)計(jì)任務(wù)書與成績?cè)u(píng)定_第2頁
山東理工大學(xué)計(jì)算機(jī)學(xué)院課程設(shè)計(jì)任務(wù)書與成績?cè)u(píng)定_第3頁
山東理工大學(xué)計(jì)算機(jī)學(xué)院課程設(shè)計(jì)任務(wù)書與成績?cè)u(píng)定_第4頁
山東理工大學(xué)計(jì)算機(jī)學(xué)院課程設(shè)計(jì)任務(wù)書與成績?cè)u(píng)定_第5頁
已閱讀5頁,還剩27頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、WORD27/32理工大學(xué)計(jì)算機(jī)學(xué)院課程設(shè)計(jì)(數(shù)據(jù)結(jié)構(gòu))班 級(jí)XX學(xué) 號(hào)指導(dǎo)教師二一一年一月二十日課程設(shè)計(jì)任務(wù)書與成績?cè)u(píng)定課題名稱銀行業(yè)務(wù)模擬系統(tǒng)、題目的目的和要求: 1、設(shè)計(jì)目的鞏固和加深對(duì)數(shù)據(jù)結(jié)構(gòu)的理解,通過上機(jī)實(shí)驗(yàn)、調(diào)試程序,加深對(duì)課本知識(shí)的理解,最終使學(xué)生能夠熟練應(yīng)用數(shù)據(jù)結(jié)構(gòu)的知識(shí)寫程序。(1)通過本課程的學(xué)習(xí),能熟練掌握幾種基本數(shù)據(jù)結(jié)構(gòu)的基本操作。(2)能針對(duì)給定題目,選擇相應(yīng)的數(shù)據(jù)結(jié)構(gòu),分析并設(shè)計(jì)算法,進(jìn)而給出問題的正確求解過程并編寫代碼實(shí)現(xiàn)。2、設(shè)計(jì)題目要求:1.客戶業(yè)務(wù)分為兩種:第一種是申請(qǐng)從銀行得到一筆資金,即取款或借款;第二種是向銀行投入一筆資金,即存款或還款。2.銀行有兩

2、個(gè)服務(wù)窗口,相應(yīng)地有兩個(gè)隊(duì)列。客戶到達(dá)銀行后先排第一個(gè)隊(duì)。處理每個(gè)客戶業(yè)務(wù)時(shí),如果屬于第一種,且申請(qǐng)額超出銀行現(xiàn)存資金總額而得不到滿足時(shí),則立即排入第二個(gè)隊(duì)等候,直至滿足時(shí)才離開銀行, 否則業(yè)務(wù)處理完后立即離開銀行。3.每接待完一個(gè)第二種業(yè)務(wù)的客戶,則順序檢查和處理第二個(gè)隊(duì)列中的客戶,對(duì)能滿足的申請(qǐng)者予以滿足,不能滿足者重新排到第二個(gè)隊(duì)列的隊(duì)尾。4.假設(shè)檢查不需要時(shí)間,在此檢查過程中,一旦銀行資金總額少于或等于剛才第一個(gè)隊(duì)列中最后一個(gè)客戶(第二種業(yè)務(wù))被接待之前的數(shù)額,或者本次已將第二個(gè)隊(duì)列檢查或處理了一遍,就停止檢查(因?yàn)榇藭r(shí)已不可能還有滿足者),轉(zhuǎn)而繼續(xù)接待第一個(gè)隊(duì)列的客戶。5.任何時(shí)刻都

3、只開一個(gè)窗口,營業(yè)時(shí)間結(jié)束時(shí)所有客戶立即離開銀行。通過離散的模擬方法求出客戶在銀行逗留的平均時(shí)間。、設(shè)計(jì)進(jìn)度與完成情況日 期 容1.10-1.11選取參考書,查閱有關(guān)文獻(xiàn)資料,完成資料搜集和系統(tǒng)分析工作。1.121.14創(chuàng)建相關(guān)數(shù)據(jù)結(jié)構(gòu),錄入源程序。1.171.19調(diào)試程序并記錄調(diào)試中的問題,初步完成課程設(shè)計(jì)報(bào)告。1.201.21上交課程設(shè)計(jì)報(bào)告打印版并進(jìn)行課程設(shè)計(jì)答辯,要求每個(gè)同學(xué)針對(duì)自己的設(shè)計(jì)回答指導(dǎo)教師3-4個(gè)問題??己私Y(jié)束后將課程設(shè)計(jì)報(bào)告和源程序的電子版交班長統(tǒng)一刻光盤上交。、主要參考文獻(xiàn)與資料1 嚴(yán)蔚敏 數(shù)據(jù)結(jié)構(gòu)(C語言版)清華大學(xué) 19992 嚴(yán)蔚敏 數(shù)據(jù)結(jié)構(gòu)題集(C語言版)清華大

4、學(xué) 19993 譚浩強(qiáng) C語言程序設(shè)計(jì) 清華大學(xué)4 與所用編程環(huán)境相配套的C語言或C+相關(guān)的資料、成績?cè)u(píng)定:設(shè)計(jì)成績:(教師填寫)指導(dǎo)老師:(簽字)二一一年一月二十一日目 錄TOC o 1-3 h z uHYPERLINK l _Toc283109527第一章概述 PAGEREF _Toc283109527 h 1HYPERLINK l _Toc283109528第二章系統(tǒng)分析 PAGEREF _Toc283109528 h 2HYPERLINK l _Toc283109529第三章概要設(shè)計(jì) PAGEREF _Toc283109529 h 3HYPERLINK l _Toc283109530第

5、四章詳細(xì)設(shè)計(jì) PAGEREF _Toc283109530 h 6HYPERLINK l _Toc283109531第五章運(yùn)行與測(cè)試 PAGEREF _Toc283109531 h 24HYPERLINK l _Toc283109532第六章總結(jié)與心得 PAGEREF _Toc283109532 h 28HYPERLINK l _Toc283109533參考文獻(xiàn): PAGEREF _Toc283109533 h 29第一章 概述課程設(shè)計(jì)是實(shí)踐性教學(xué)中的一個(gè)重要環(huán)節(jié),它以某一課程為基礎(chǔ),可以涉與和課程相關(guān)的各個(gè)方面,是一門獨(dú)立于課程之外的特殊課程。課程設(shè)計(jì)是讓同學(xué)們對(duì)所學(xué)的課程更全面的學(xué)習(xí)和應(yīng)用,

6、理解和掌握課程的相關(guān)知識(shí)。數(shù)據(jù)結(jié)構(gòu)是一門重要的專業(yè)基礎(chǔ)課,是計(jì)算機(jī)理論和應(yīng)用的核心基礎(chǔ)課程。數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì),要求學(xué)生在數(shù)據(jù)結(jié)構(gòu)的邏輯特性和物理表示、數(shù)據(jù)結(jié)構(gòu)的選擇和應(yīng)用、算法的設(shè)計(jì)與其實(shí)現(xiàn)等方面,加深對(duì)課程基本容的理解。同時(shí),在程序設(shè)計(jì)方法以與上機(jī)操作等基本技能和科學(xué)作風(fēng)方面受到比較系統(tǒng)和嚴(yán)格的訓(xùn)練。在這次的課程設(shè)計(jì)中我選擇的題目是銀行業(yè)務(wù)模擬系統(tǒng)。一般某個(gè)銀行在某個(gè)地區(qū)營業(yè)前,都要進(jìn)行市場(chǎng)調(diào)查與分析。通過調(diào)查,分析開多少個(gè)窗口使效率最高,而且不會(huì)產(chǎn)生較大的冗余。做此項(xiàng)調(diào)查通常要花費(fèi)大量的人力物力,因此我借助計(jì)算機(jī)系統(tǒng)產(chǎn)生的隨機(jī)數(shù)(時(shí)間間隔,每個(gè)客戶辦理的款數(shù)以與處理時(shí)間)對(duì)銀行客戶的離散事

7、件進(jìn)行預(yù)測(cè),通過銀行業(yè)務(wù)模擬系統(tǒng)計(jì)算出客戶在銀行逗留的總時(shí)間并計(jì)算出客戶在銀行的平均逗留時(shí)間。通過計(jì)算機(jī)模擬的方法減少實(shí)際調(diào)查的勞動(dòng)量,資金與時(shí)間耗費(fèi),輕松的得到高效的方法。第二章 系統(tǒng)分析1銀行業(yè)務(wù)模擬程序的主要處理對(duì)象是“事件”,事件的主要信息是事件的類型和事件的發(fā)生時(shí)刻。算法中處理的事件有兩類:一類是客戶到達(dá)事件;另一類是客戶離開事件。前一類事件發(fā)生的時(shí)刻隨客戶的到來自然形成;后一類事件發(fā)生的時(shí)刻由客戶辦理業(yè)務(wù)所需時(shí)間和等待時(shí)間而定。由于程序驅(qū)動(dòng)是按事件發(fā)生時(shí)刻的先后順序進(jìn)行的,所以事件表應(yīng)是有序表,其主要操作是插入和刪除事件,用一個(gè)單鏈表表示。2銀行業(yè)務(wù)模擬程序中需要的另一數(shù)據(jù)結(jié)構(gòu)是表

8、示客戶排隊(duì)的隊(duì)列,由于假設(shè)銀行有2個(gè)窗口,因此程序中需要2個(gè)隊(duì)列,隊(duì)列中有關(guān)客戶的信息是客戶到達(dá)的時(shí)間和客戶辦理業(yè)務(wù)所需要的時(shí)間。隊(duì)列中的隊(duì)頭客戶即為正在窗口辦理事務(wù)的客戶,他辦完業(yè)務(wù)離開隊(duì)列的時(shí)刻影響著即將發(fā)生的客戶離開事件的時(shí)刻,我們要記錄前一客戶的離開時(shí)間。這就是說,對(duì)每個(gè)隊(duì)頭客戶都存在一個(gè)將要驅(qū)動(dòng)的客戶離開事件。因此在任何時(shí)刻即將發(fā)生的事伯只有4種可能:1)新的客戶到達(dá);2)隊(duì)列1隊(duì)頭客戶辦完業(yè)務(wù)離開;3)隊(duì)列1取款客戶由于得不到滿足而轉(zhuǎn)至隊(duì)列2;4)隊(duì)列2隊(duì)頭客戶辦完業(yè)務(wù)離開;3. 為了使編寫的程序具有通用性,在編程序時(shí)將銀行的營業(yè)時(shí)間、初始存款客戶辦理業(yè)務(wù)的最長時(shí)間與兩個(gè)客戶到達(dá)的

9、最大時(shí)間間隔都設(shè)置成程序運(yùn)行時(shí)動(dòng)態(tài)輸入,但是客戶辦理業(yè)務(wù)的時(shí)間和兩個(gè)客戶到達(dá)的時(shí)間間隔用隨機(jī)函數(shù)產(chǎn)生的隨機(jī)數(shù)表示。這樣可以對(duì)程序進(jìn)行理性的分析,從而實(shí)現(xiàn)真正離散事件的模擬。4.測(cè)試數(shù)據(jù)。客戶的存取款金額,不大于5000元客戶辦理業(yè)務(wù)所要時(shí)間,不大于20分鐘下個(gè)客戶到達(dá)的時(shí)間間隔,不大于30分鐘當(dāng)然,系統(tǒng)的模擬性能完全不受這些規(guī)定的限制,用戶完全可以根據(jù)實(shí)際需要作簡單的修改和調(diào)整而且以上各模擬量均由隨機(jī)函數(shù)給出,符合離散事件要求第三章 概要設(shè)計(jì)銀行業(yè)務(wù)模擬程序流程圖結(jié)束進(jìn)入隊(duì)列1排隊(duì)服務(wù)并離開能否滿足客戶服務(wù)并離開進(jìn)隊(duì)2等待接待1個(gè)存款業(yè)務(wù)順序檢查隊(duì)2能否滿足取隊(duì)頭隊(duì)頭是否存在時(shí)間到?開始客戶到

10、達(dá)否 否 是 是 否2、本程序包含三個(gè)模塊主程序模塊:void main() 輸出主界面;選擇操作:進(jìn)入銀行業(yè)務(wù)模擬系統(tǒng)退出程序;While(進(jìn)入銀行業(yè)務(wù)模擬窗口)OpenForDay();進(jìn)行初始化操作;輸出格式控制; 銀行業(yè)務(wù)模擬:while(有要處理的事件時(shí)) /有事件可處理 DeQueue1(); /隊(duì)列1出隊(duì)列,并用en返回值 if(客戶到達(dá))CustomerArrived(); /處理客戶到達(dá)事件 else CustomerDeparture(); /處理客戶離開事件 計(jì)算出客戶的平均逗留時(shí)間并輸出返回主界面:選擇操作:繼續(xù)進(jìn)行業(yè)務(wù)模擬退出程序;If(選擇的是退出)退出程序;客戶到

11、達(dá)事件處理模塊實(shí)現(xiàn)客戶信息隊(duì)列的抽象數(shù)據(jù)類型客戶離開事件處理模塊實(shí)現(xiàn)有序事件鏈表的抽象數(shù)據(jù)類型3、函數(shù)調(diào)用關(guān)系如圖所示:主函數(shù)調(diào)用客戶到達(dá)事件處理模塊調(diào)用客戶到達(dá)事件處理模塊4、設(shè)定客戶信息隊(duì)列的抽象數(shù)據(jù)類型定義:ADT LinkQueue 數(shù)據(jù)對(duì)象: D=ai|aiQueueElem,i=1,2,n, n0數(shù)據(jù)關(guān)系: R1=|ai-1,aiQueueElem ,i=2,3, ,n 基本操作:InitQueue(&Q)操作結(jié)果:構(gòu)造一個(gè)空隊(duì)列。destroyqueue(&Q)初始條件:隊(duì)列已存在。操作結(jié)果:銷毀隊(duì)列,此隊(duì)列不再存在。EnQueue(&Q,en)初始條件:隊(duì)列已存在。操作結(jié)果:新

12、元素en入隊(duì)列。DeQueue(&Q,&en)初始條件:隊(duì)列已存在。操作結(jié)果:隊(duì)頭元素出隊(duì)列,并以en返回其值。QueueLength(Q)初始條件:隊(duì)列已存在。操作結(jié)果:返回隊(duì)列中元素的個(gè)數(shù),即隊(duì)列長度。 ADT LinkQueue 第四章 詳細(xì)設(shè)計(jì)1源文件中所包含的頭文件#include #include#include #include2.宏定義#define MONEY 5000 /個(gè)人業(yè)務(wù)值,交易額上限 #define OK 1 #define ERROR 0 #define OVERFLOW -2 typedef int status;3.定義的結(jié)構(gòu)體typedef struct

13、int arrivetime; /到達(dá)時(shí)間 int OccurTime; /事件發(fā)生時(shí)間 int NType; /事件類型,0表示到達(dá)事件,1表示離開事件。同時(shí)用1表示存款,2表示取款。 int duration; /辦理業(yè)務(wù)時(shí)間 long int money;/交易金額Event,ElemType1;typedef struct /等待隊(duì)列元素 int arrivetime; /到達(dá)時(shí)間 int duration; /辦理業(yè)務(wù)時(shí)間 long int money; /交易金額wait,ElemType2;typedef struct QNode1ElemType1 data;struct QN

14、ode1 *next;QNode1,*Queue1;typedef struct QNode2ElemType2 data;struct QNode2 *next;QNode2,*Queue2;typedef struct Queue1 front; Queue1 rear;LinkQueue1;typedef struct Queue2 front; Queue2 rear;LinkQueue2;4.全局變量long int total_money; /銀行現(xiàn)存資金總額int total_time; /客戶逗留總時(shí)間int use_time;/每個(gè)顧客所用時(shí)間int money;/每個(gè)顧客辦

15、理的款數(shù)int closetime;/銀行營業(yè)時(shí)間int INTERTIME; /下一用戶到達(dá)的時(shí)間間隔int DURATION; /辦理業(yè)務(wù)所需時(shí)間int number; /辦理業(yè)務(wù)的次序int time1; /系統(tǒng)現(xiàn)在時(shí)間LinkQueue1 Q1;LinkQueue2 Q2;Event en; /事件wait en1; /列表2元素5.初始化隊(duì)列1status InitQueue1()Q1.front=Q1.rear=(Queue1)malloc(sizeof(QNode1); if(!Q1.front)exit(OVERFLOW); Q1.front-next=NULL; return

16、 OK;6.初始化隊(duì)列2status InitQueue2()Q2.front=Q2.rear=(Queue2)malloc(sizeof(QNode2); if(!Q2.front)exit(OVERFLOW); Q2.front-next=NULL; return OK;7.銷毀隊(duì)列1status destroyqueue1()while(Q1.front) Q1.rear=Q1.front-next; free(Q1.front); Q1.front=Q1.rear; return OK;8.銷毀隊(duì)列2status destroyqueue2()while(Q2.front) Q2.re

17、ar=Q2.front-next; free(Q2.front); Q2.front=Q2.rear; return OK;9.隊(duì)列1入隊(duì)列status EnQueue1() Queue1 p,r,r1; p=(Queue1)malloc(sizeof(QNode1); if(!p)exit(OVERFLOW); p-data.arrivetime=en.arrivetime; p-data.OccurTime=en.OccurTime; p-data.NType=en.NType; p-data.duration=en.duration; p-data.money=en.money; r=Q

18、1.front-next; while(r)if(p-data.arrivetime data.arrivetime) if(r=Q1.front-next) p-next=r; Q1.front-next=p; elser1-next=p; p-next=r; r1=r;r=r-next;if(!r) if(Q1.front-next=NULL) Q1.front-next=p; Q1.rear=p; Q1.rear-next=NULL; elsep-next=NULL;Q1.rear-next=p; Q1.rear=p; return OK;10.隊(duì)列2入隊(duì)列status EnQueue2

19、()Queue2 p; p=(Queue2)malloc(sizeof(QNode2); if(!p)exit(OVERFLOW); p-data.arrivetime=en1.arrivetime; p-data.duration=en1.duration; p-data.money=en1.money; p-next=NULL; Q2.rear-next=p; Q2.rear=p; return OK;11.若隊(duì)列1不空,則刪除Q1的隊(duì)頭元素,并用en返回其值status DeQueue1() Queue1 p; if(Q1.front=Q1.rear) return ERROR; p=Q

20、1.front-next; en.arrivetime=p-data.arrivetime; en.OccurTime=p-data.OccurTime; en.NType=p-data.NType; en.duration=p-data.duration; en.money=p-data.money; Q1.front-next=p-next; if(Q1.rear=p) Q1.rear=Q1.front; /只有一個(gè)人時(shí) free(p); return OK;12.若隊(duì)列2不空,則刪除Q2的隊(duì)頭元素,并用en1返回其值status DeQueue2() Queue2 p;if(Q2.fro

21、nt=Q2.rear)return ERROR; p=Q2.front-next; en1.arrivetime=p-data.arrivetime; en1.duration=p-data.duration; en1.money=p-data.money; Q2.front-next=p-next; if(Q2.rear=p) Q2.rear=Q2.front; /只有一個(gè)人時(shí) free(p);return OK;13.營業(yè)時(shí)間結(jié)束,全部客戶離開銀行void free_system() destroyqueue1(); destroyqueue2(); 14.產(chǎn)生隨機(jī)數(shù)status rand

22、_ar(int *intertime,long int *money, int *duration,int *NType)*intertime=rand()%INTERTIME+1; /下個(gè)客戶到達(dá)的時(shí)間間隔,不大于INTERTIME *money=rand()%MONEY+1; /每個(gè)顧客辦理的款數(shù),不大于MONEY *duration=rand()%DURATION+1; /客戶辦理業(yè)務(wù)所要時(shí)間,不大于DURATION *NType=rand()%2; /事件類型分為0和1兩種 return OK;15.初始化操作void OpenForDay() printf( 請(qǐng)輸入銀行的初始存款:)

23、; scanf(%d,&total_money); printf( 請(qǐng)輸入銀行的營業(yè)時(shí)間(分鐘):); scanf(%d,&closetime); printf( 請(qǐng)輸入最大到達(dá)時(shí)間間隔(分鐘):); scanf(%d,&INTERTIME); printf( 請(qǐng)輸入最大的處理時(shí)間(分鐘):); scanf(%d,&DURATION); total_time=0; /客戶逗留總時(shí)間(初始值) number=0; /辦理業(yè)務(wù)的次序(初始值) InitQueue1(); /初始化隊(duì)列1 InitQueue2(); /初始化隊(duì)列2 en.arrivetime=0; /到達(dá)時(shí)間 en.OccurTim

24、e=0; /事件發(fā)生時(shí)間 en.NType=0; /事件類型,暫時(shí)值en.money=0; /交易金額,暫時(shí)值en.duration=0; /辦理業(yè)務(wù)時(shí)間,暫時(shí)值EnQueue1(); /事件進(jìn)隊(duì)列16.查找上一離開事件的發(fā)生時(shí)間int find_leave() Queue1 p; int i=0; p=Q1.front-next;while(p!=NULL) if(p-data.NType!=0) i=p-data.OccurTime; p=p-next; return i;17.處理客戶到達(dá)事件void CustomerArrived()int intertime;int i;time1=

25、en.OccurTime;rand_ar(&intertime,&(en.money), &(en.duration),&(en.NType);/設(shè)置一離開事件插入事件表en.NType+; /0變1,1變2i=find_leave(); /查找上一離開事件的發(fā)生時(shí)間if(i=0) /第一位顧客 en.OccurTime=en.arrivetime+en.duration; else if(i=en.arrivetime)/本事件到達(dá)時(shí)上一事件還未離開 en.OccurTime=i+en.duration; /則此事件的離開時(shí)間=上一事件的離開時(shí)間+本事件處理時(shí)間 else /上一事件離開之后

26、,本事件才到達(dá) en.OccurTime=en.arrivetime+en.duration;/則此事件的離開時(shí)間=本事件到達(dá)時(shí)間+本事件處理時(shí)間 EnQueue1(); /設(shè)置下一用戶到達(dá)事件插入隊(duì)列1 en.arrivetime=en.arrivetime+intertime; /下一客戶到達(dá)時(shí)間 en.OccurTime=en.arrivetime; en.NType=0; /暫時(shí)值 en.money=0; /暫時(shí)值 en.duration=0; /暫時(shí)值 EnQueue1();18.返回隊(duì)列2的長度int getlong_q2()int i=0; Queue2 p; p=Q2.fron

27、t-next; while(p) i+; p=p-next; return i;19.順序檢查隊(duì)列2是否有滿足條件者status check_q2() int i,j,z=0; i=getlong_q2(); /用i返回隊(duì)列2長度 for(j=1;j=i;j+) DeQueue2(); /隊(duì)列2出隊(duì),用en1返回其值 if(en1.money=total_money) /若隊(duì)列2出隊(duì)元素的要交易的金額closetime) printf(-tt%dtt%dtt%dtt%dt%dn,z,use_time,number,z,(en1.arrivetime),en1.money); else time

28、1=time1+en1.duration; /更新系統(tǒng)當(dāng)前時(shí)間 use_time=time1-en1.arrivetime; total_time+=use_time; /更新逗留時(shí)間 total_money-=en1.money; /更新資金總額 number+; /更新實(shí)現(xiàn)交易的客戶數(shù) printf(%ldtt%dtt%dtt%dtt%dt-%dn,total_money,use_time,number,time1,(en1.arrivetime),(en1.money); else /若隊(duì)列2出隊(duì)元素的要交易的金額銀行現(xiàn)存金額,不能辦理if(time1closetime) printf(

29、-tt%dtt%dtt%dtt%dt%dn,z,use_time,number,z,(en1.arrivetime),en1.money); else EnQueue2(); /繼續(xù)插入隊(duì)列2的隊(duì)尾,繼續(xù)等待 return OK;20.隊(duì)列1離開事件減duration(辦理業(yè)務(wù)時(shí)間) int cut_duration(int e) /e即形參辦理業(yè)務(wù)的時(shí)間 Queue1 p,q,r; ElemType1 en; p=Q1.front-next; r=Q1.front; if(p) if(p-data.NType!=0) q=p-next; r-next=q; /刪除結(jié)點(diǎn) en.arriveti

30、me=p-data.arrivetime; /到達(dá)時(shí)間 en.OccurTime=p-data.OccurTime-e; /事件發(fā)生時(shí)間 en.NType=p-data.NType; /事件類型 en.duration=p-data.duration; /辦理業(yè)務(wù)時(shí)間 en.money=p-data.money; /數(shù)額 free(p); EnQueue1(); return OK;21.處理客戶離開事件void CustomerDeparture() int i; i=en.NType; /業(yè)務(wù)類型,1表示存款,2表示取款 time1=en.OccurTime-en.duration; if

31、(i=OK) /是否是辦理存款 if(en.OccurTimeclosetime) /營業(yè)結(jié)束,全部客戶離開銀行 free_system(); else /營業(yè)時(shí)間沒有結(jié)束,繼續(xù)辦理 use_time=en.OccurTime-en.arrivetime; total_time+=use_time; /更新逗留的總時(shí)間 total_money=total_money+en.money;/更新資金總額 number+; /更新服務(wù)的客戶數(shù) time1=en.OccurTime; /更新系統(tǒng)當(dāng)前時(shí)間 printf(%ldtt%dtt%dtt%dtt%dt%dn,total_money,use_ti

32、me,number,en.OccurTime,en.arrivetime,en.money); check_q2(); /檢查隊(duì)列2是否有滿足條件者 else /辦理取款 if(en.moneytotal_money) /辦理取款,當(dāng)申請(qǐng)金額不能滿足時(shí),離開隊(duì)列1進(jìn)入隊(duì)列2等待 cut_duration(en.duration);/從隊(duì)列1中刪除該結(jié)點(diǎn) en1.arrivetime=en.arrivetime; en1.duration=en.duration; en1.money=en.money; EnQueue2(); /進(jìn)入隊(duì)列2繼續(xù)等待 else /辦理取款,當(dāng)能滿足所申請(qǐng)金額時(shí)進(jìn)行

33、隊(duì)列1 if(en.OccurTimeclosetime)/營業(yè)結(jié)束,全部客戶離開銀行 free_system(); else use_time=en.OccurTime-en.arrivetime;/顧客所用時(shí)間=事件發(fā)生時(shí)間-事件到達(dá)時(shí)間 total_time+=use_time;/更新逗留的總時(shí)間total_money-=en.money; /更新資金總額 time1=en.OccurTime; /更新系統(tǒng)當(dāng)前時(shí)間 number+; /更新客戶總數(shù) printf(%ldtt%dtt%dtt%dtt%dt-%dn,total_money,use_time,number,en.OccurTi

34、me,en.arrivetime,en.money); 22.主函數(shù)void main() cout=endl; cout 歡迎使用銀行業(yè)務(wù)模擬系統(tǒng) n; coutendl; cout :王寧 endl; cout 學(xué)號(hào): 1022051029 endl; cout 班級(jí):計(jì)升1班 endl; cout=endl; cout請(qǐng)選擇開始或退出:endl;cout1.進(jìn)入銀行業(yè)務(wù)模擬系統(tǒng)endl;cout0.退出程序n; while(n=1) OpenForDay(); /初始化操作 coutendl; coutTotal_moneytuse_timetnumberten.OccurTimeten

35、.arrivetimetmoneyendl; while(Q1.front) DeQueue1(); /隊(duì)列1出隊(duì)列,并用en返回值 if(en.NType=0)/en.NType等于0表示客戶到達(dá),1表示客戶離開 CustomerArrived(); /處理客戶到達(dá)事件 else CustomerDeparture(); /處理客戶離開事件,業(yè)務(wù)類型en.NType等于1表示存款,2表示取款 printf(1.營業(yè)結(jié)束后銀行現(xiàn)存資金總額(元): %ldn,total_money) ; printf(2.營業(yè)時(shí)間實(shí)現(xiàn)交易的客戶數(shù)(人): %dn,number);printf(3.客戶在銀行逗留

36、的總時(shí)間(分鐘): %dn,total_time); printf(4.客戶在銀行的平均逗留時(shí)間(分鐘): %fn,(float)total_time/(float)number); coutendlendl; cout以上為模擬結(jié)果!請(qǐng)繼續(xù)選擇繼續(xù)或退出:endl;cout1.繼續(xù)模擬endl;cout0.退出程序n;if(n=0) cout 使用本系統(tǒng),再見!endl; break; 第五章 運(yùn)行與測(cè)試1.調(diào)試程序過程遇到的問題與解決的方法 首先是對(duì)指針初始化的問題,一些指針如果不先申請(qǐng)一個(gè)新變量就會(huì)報(bào)錯(cuò),即使是直接把這個(gè)指針賦值為空也要現(xiàn)為其申請(qǐng)一個(gè)新的空間。其次就是對(duì)循環(huán)退出條件的選擇,有幾次發(fā)現(xiàn)模

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲(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)論