數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)銀行業(yè)務(wù)模擬系統(tǒng)_第1頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)銀行業(yè)務(wù)模擬系統(tǒng)_第2頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)銀行業(yè)務(wù)模擬系統(tǒng)_第3頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)銀行業(yè)務(wù)模擬系統(tǒng)_第4頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)銀行業(yè)務(wù)模擬系統(tǒng)_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

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

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

3、待第一個(gè)隊(duì)列的客戶。 5.任何時(shí)刻都只開一個(gè)窗口,營業(yè)時(shí)間結(jié)束時(shí)所有客戶立即離開銀行。通過模擬方法求出客戶在銀行內(nèi)逗留的平均時(shí)間。、設(shè)計(jì)進(jìn)度及完成情況日 期內(nèi) 容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é)針對自己的設(shè)計(jì)回答指導(dǎo)教師3-4個(gè)問題。考核結(jié)束后將課程設(shè)計(jì)報(bào)告和源程序的電子版交班長統(tǒng)一刻光盤上交。、主要參考文獻(xiàn)及資料1 嚴(yán)蔚敏 數(shù)據(jù)結(jié)構(gòu)(c語言版)清華大學(xué)出版社 19992

4、 嚴(yán)蔚敏 數(shù)據(jù)結(jié)構(gòu)題集(c語言版)清華大學(xué)出版社 19993 譚浩強(qiáng) c語言程序設(shè)計(jì) 清華大學(xué)出版社4 與所用編程環(huán)境相配套的c語言或c+相關(guān)的資料、成績評定:設(shè)計(jì)成績: (教師填寫)指導(dǎo)老師: (簽字)二一一 年 一 月 二 十一 日目 錄第一章 概述1第二章 系統(tǒng)分析2第三章 概要設(shè)計(jì)第四章 詳細(xì)設(shè)計(jì)第五章 運(yùn)行與測試第六章 總結(jié)與心得參考文獻(xiàn)第一章 概述課程設(shè)計(jì)是實(shí)踐性教學(xué)中的一個(gè)重要環(huán)節(jié),它以某一課程為基礎(chǔ),可以涉及和課程相關(guān)的各個(gè)方面,是一門獨(dú)立于課程之外的特殊課程。課程設(shè)計(jì)是讓同學(xué)們對所學(xué)的課程更全面的學(xué)習(xí)和應(yīng)用,理解和掌握課程的相關(guān)知識。數(shù)據(jù)結(jié)構(gòu)是一門重要的專業(yè)基礎(chǔ)課,是計(jì)算機(jī)理

5、論和應(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)等方面,加深對課程基本內(nèi)容的理解。同時(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)行市場調(diào)查與分析。通過調(diào)查,分析開多少個(gè)窗口使效率最高,而且不會產(chǎn)生較大的冗余。做此項(xiàng)調(diào)查通常要花費(fèi)大量的人力物力,因此我借助計(jì)算機(jī)系統(tǒng)產(chǎn)生的隨機(jī)數(shù)(時(shí)間間隔,每個(gè)客戶辦理的款數(shù)以及處理時(shí)間)對銀行客戶的離散事件進(jìn)行預(yù)測,通過銀行業(yè)務(wù)模擬系統(tǒng)計(jì)算出客戶在銀行逗留的總時(shí)間并計(jì)算

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

7、隊(duì)列中有關(guān)客戶的信息是客戶到達(dá)的時(shí)間和客戶辦理業(yè)務(wù)所需要的時(shí)間。隊(duì)列中的隊(duì)頭客戶即為正在窗口辦理事務(wù)的客戶,他辦完業(yè)務(wù)離開隊(duì)列的時(shí)刻影響著即將發(fā)生的客戶離開事件的時(shí)刻,這就是說,對每個(gè)隊(duì)頭客戶都存在一個(gè)將要驅(qū)動的客戶離開事件。因此在任何時(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á)的最大時(shí)間間隔都設(shè)置成程序運(yùn)行時(shí)動態(tài)輸入,但是客戶辦理業(yè)務(wù)的時(shí)間和兩個(gè)客戶到達(dá)的時(shí)間間隔用隨機(jī)函

8、數(shù)產(chǎn)生的隨機(jī)數(shù)表示。這樣可以對程序進(jìn)行理性的分析,從而實(shí)現(xiàn)真正的模擬。4. 測試數(shù)據(jù)。第三章 概要設(shè)計(jì)1、 銀行業(yè)務(wù)模擬程序流程圖結(jié)束進(jìn)入隊(duì)列1排隊(duì)服務(wù)并離開能否滿足客戶服務(wù)并離開進(jìn)隊(duì)2等待每接待完1個(gè)用戶順序檢查隊(duì)2能否滿足取隊(duì)頭隊(duì)頭是否存在時(shí)間到?開始客戶到達(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

9、返回值 if(客戶到達(dá)) customerarrived(); /處理客戶到達(dá)事件 else customerdeparture(); /處理客戶離開事件 計(jì)算出客戶的平均逗留時(shí)間并輸出返回主界面:選擇操作:繼續(xù)進(jìn)行業(yè)務(wù)模擬退出程序;if(選擇的是退出)退出程序;客戶到達(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ù)對象: d=ai|aiqueueelem,i=1,2,n, n0數(shù)據(jù)關(guān)系: r1

10、=|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é)果:新元素en入隊(duì)列。dequeue(&q,&en)初始條件:隊(duì)列已存在。操作結(jié)果:隊(duì)頭元素出隊(duì)列,并以en返回其值。queuelength(q)初始條件:隊(duì)列已存在。操作結(jié)果:返回隊(duì)列中元素的個(gè)數(shù),即隊(duì)列長度。 adt linkqueue 第四章 詳細(xì)設(shè)計(jì)#include #include#include #include #

11、define money 5000 /個(gè)人業(yè)務(wù)值,交易額上限 #define ok 1 #define error 0 #define overflow -2 typedef int status;typedef struct 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 arrivet

12、ime; /到達(dá)時(shí)間 int duration; /辦理業(yè)務(wù)時(shí)間 long int money; /交易金額wait,elemtype2;typedef struct qnode1elemtype1 data;struct qnode1 *next;qnode1,*queue1;typedef struct qnode2elemtype2 data;struct qnode2 *next;qnode2,*queue2;typedef struct queue1 front; queue1 rear;linkqueue1;typedef struct queue2 front; queue2 r

13、ear;linkqueue2;/全局變量long int total_money; /銀行現(xiàn)存資金總額int total_time; /客戶逗留總時(shí)間int use_time;/每個(gè)顧客所用時(shí)間int money;/每個(gè)顧客辦理的款數(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元素/初始化隊(duì)列1status ini

14、tqueue1()q1.front=q1.rear=(queue1)malloc(sizeof(qnode1); if(!q1.front)exit(overflow); q1.front-next=null; return ok; /初始化隊(duì)列2status initqueue2()q2.front=q2.rear=(queue2)malloc(sizeof(qnode2); if(!q2.front)exit(overflow); q2.front-next=null; return ok;/銷毀隊(duì)列1status destroyqueue1()while(q1.front) q1.rea

15、r=q1.front-next; free(q1.front); q1.front=q1.rear; return ok;/銷毀隊(duì)列2status destroyqueue2()while(q2.front) q2.rear=q2.front-next; free(q2.front); q2.front=q2.rear; return ok;/隊(duì)列1入隊(duì)列status enqueue1() queue1 p,r,r1; p=(queue1)malloc(sizeof(qnode1); if(!p)exit(overflow); p-data.arrivetime=en.arrivetime;

16、p-data.occurtime=en.occurtime; p-data.ntype=en.ntype; p-data.duration=en.duration; p-data.money=en.money; r=q1.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

17、; q1.rear=p; q1.rear-next=null; elsep-next=null; q1.rear-next=p; q1.rear=p; return ok;/隊(duì)列2入隊(duì)列status enqueue2()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=

18、p; return ok; /若隊(duì)列1不空,則刪除q1的隊(duì)頭元素,并用en返回其值status dequeue1() queue1 p; if(q1.front=q1.rear) return error; p=q1.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.r

19、ear=q1.front; /只有一個(gè)人時(shí) free(p); return ok;/若隊(duì)列2不空,則刪除q2的隊(duì)頭元素,并用en1返回其值status dequeue2() queue2 p;if(q2.front=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í) fre

20、e(p);return ok;/營業(yè)時(shí)間結(jié)束,全部客戶離開銀行void free_system() destroyqueue1(); destroyqueue2(); /產(chǎn)生隨機(jī)數(shù)status rand_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ù)所要

21、時(shí)間,不大于duration *ntype=rand()%2; /事件類型分為0和1兩種 return ok;void openforday() /初始化操作printf( 請輸入銀行的初始存款:); scanf(%d,&total_money); printf( 請輸入銀行的營業(yè)時(shí)間(分鐘):); scanf(%d,&closetime); printf( 請輸入最大到達(dá)時(shí)間間隔(分鐘):); scanf(%d,&intertime); printf( 請輸入最大的處理時(shí)間(分鐘):); scanf(%d,&duration); total_time=0; /客戶逗留總時(shí)間(初始值) num

22、ber=0; /辦理業(yè)務(wù)的次序(初始值) initqueue1(); /初始化隊(duì)列1 initqueue2(); /初始化隊(duì)列2 en.arrivetime=0; /到達(dá)時(shí)間 en.occurtime=0; /事件發(fā)生時(shí)間 en.ntype=0; /事件類型,暫時(shí)值en.money=0; /交易金額,暫時(shí)值en.duration=0; /辦理業(yè)務(wù)時(shí)間,暫時(shí)值enqueue1(); /事件進(jìn)隊(duì)列/查找上一離開事件的發(fā)生時(shí)間int find_leave() queue1 p; int i=0; p=q1.front-next;while(p!=null) if(p-data.ntype!=0) i

23、=p-data.occurtime; p=p-next; return i;void customerarrived()int intertime;int i;time1=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)/

24、本事件到達(dá)時(shí)上一事件還未離開 en.occurtime=i+en.duration; /則此事件的離開時(shí)間=上一事件的離開時(shí)間+本事件處理時(shí)間 else /上一事件離開之后,本事件才到達(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í)值

25、en.duration=0; /暫時(shí)值 enqueue1();/返回隊(duì)列2的長度int getlong_q2()int i=0; queue2 p; p=q2.front-next; while(p) i+; p=p-next; return i; /順序檢查隊(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) prin

26、tf(-tt%dtt%dtt%dtt%dt%dn,z,use_time,number,z,(en1.arrivetime),en1.money); else time1=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.

27、arrivetime),(en1.money); else /若隊(duì)列2出隊(duì)元素的要交易的金額銀行現(xiàn)存金額,不能辦理if(time1closetime) printf(-tt%dtt%dtt%dtt%dt%dn,z,use_time,number,z,(en1.arrivetime),en1.money); else enqueue2(); /繼續(xù)插入隊(duì)列2的隊(duì)尾,繼續(xù)等待 return ok;/隊(duì)列1離開事件減duration(辦理業(yè)務(wù)時(shí)間) int cut_duration(int e) /e即形參辦理業(yè)務(wù)的時(shí)間 queue1 p,q,r; elemtype1 en; p=q1.front-

28、next; r=q1.front; if(p) if(p-data.ntype!=0) q=p-next; r-next=q; /刪除結(jié)點(diǎn) en.arrivetime=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;void customerdeparture() i

29、nt i; i=en.ntype; /業(yè)務(wù)類型,1表示存款,2表示取款 time1=en.occurtime-en.duration; if(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

30、.occurtime; /更新系統(tǒng)當(dāng)前時(shí)間 printf(%ldtt%dtt%dtt%dtt%dt%dn,total_money,use_time,number,en.occurtime,en.arrivetime,en.money); check_q2(); /檢查隊(duì)列2是否有滿足條件者 else /辦理取款 if(en.moneytotal_money) /辦理取款,當(dāng)申請金額不能滿足時(shí),離開隊(duì)列1進(jìn)入隊(duì)列2等待 cut_duration(en.duration);/從隊(duì)列1中刪除該結(jié)點(diǎn) en1.arrivetime=en.arrivetime; en1.duration=en.durat

31、ion; en1.money=en.money; enqueue2(); /進(jìn)入隊(duì)列2繼續(xù)等待 else /辦理取款,當(dāng)能滿足所申請金額時(shí)進(jìn)行隊(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+; /更新客戶總

32、數(shù) printf(%ldtt%dtt%dtt%dtt%dt-%dn,total_money,use_time,number,en.occurtime,en.arrivetime,en.money); void main() cout=endl; cout 歡迎使用銀行業(yè)務(wù)模擬系統(tǒng) n; cout-endl; cout 姓名:王寧 endl; cout 學(xué)號: 1022051029 endl; cout 班級:計(jì)升1班 endl; cout=endl; cout請選擇開始或退出:endl;cout1.進(jìn)入銀行業(yè)務(wù)模擬系統(tǒng)endl;cout0.退出程序n; while(n=1) openforda

33、y(); /初始化操作 cout-endl; couttotal_moneytuse_timetnumberten.occurtimeten.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

34、,total_money) ; printf(2.營業(yè)時(shí)間內(nèi)實(shí)現(xiàn)交易的客戶數(shù)(人): %dn,number);printf(3.客戶在銀行逗留的總時(shí)間(分鐘): %dn,total_time); printf(4.客戶在銀行的平均逗留時(shí)間(分鐘): %fn,(float)total_time/(float)number); cout-endlendl; cout以上為模擬結(jié)果!請繼續(xù)選擇繼續(xù)或退出:endl;cout1.繼續(xù)模擬endl;cout0.退出程序n;if(n=0) cout 謝謝使用本系統(tǒng),再見!endl; break; 第五章 運(yùn)行與測試1、在調(diào)試程序的過程中遇到什么問題,是如何

35、解決的?2、設(shè)計(jì)了那些測試數(shù)據(jù)?測試結(jié)果是什么?1.調(diào)試程序過程遇到的問題及解決的方法 首先是對指針初始化的問題,一些指針如果不先申請一個(gè)新變量就會報(bào)錯,即使是直接把這個(gè)指針賦值為空也要現(xiàn)為其申請一個(gè)新的空間。其次就是對循環(huán)退出條件的選擇,有幾次發(fā)現(xiàn)模擬過程出現(xiàn)了停止現(xiàn)象,此時(shí)發(fā)現(xiàn)問題就可以對循環(huán)體進(jìn)行調(diào)試,一般只要對循環(huán)體內(nèi)加上一些認(rèn)為的輸出判斷它的執(zhí)行情況就可以比較方便的發(fā)現(xiàn)和解決問題。2.算法的時(shí)空分析:基于有序鏈表的時(shí)空分析:時(shí)間復(fù)雜度:由于對有序鏈表操作的主要時(shí)間在于插入操作的查找部分,而刪除操作不需查找,只是刪除第一個(gè)結(jié)點(diǎn),故有:1(n)=o(n*n).(其中n為進(jìn)入銀行的客戶總數(shù)

36、.)空間復(fù)雜度:因?yàn)槊總€(gè)客戶只能產(chǎn)生兩個(gè)事件:到達(dá)事件和離開事件,所以有序鏈表的總長度不可能超過客戶總數(shù)的兩倍,故有:1(n)=o(n). (其中n為進(jìn)入銀行的客戶總數(shù).)基于用戶信息隊(duì)列的時(shí)空分析:時(shí)間復(fù)雜度:因?yàn)槊總€(gè)客戶都要且只要進(jìn)入第一個(gè)隊(duì)列一次,而是否進(jìn)入第二個(gè)隊(duì)列或是離開則是隨機(jī)的作最壞情況打算,設(shè)n1為直接離開的客戶數(shù),n2為進(jìn)入第二個(gè)隊(duì)列的客戶數(shù),則當(dāng)n1n2n/2,且每次從第一隊(duì)中離開一個(gè)客戶,第二個(gè)隊(duì)列中的客戶都要進(jìn)出隊(duì)列一次,則(n1*n2)|max=n*n/4 ,故有:t2(n)=o(n*n).空間復(fù)雜度:作最壞打算,假設(shè)每個(gè)客戶都要分別進(jìn)入第一和第第二個(gè)隊(duì)列,則兩個(gè)隊(duì)列元素的最大個(gè)數(shù)為客戶數(shù)量的兩倍故有:s2(n)=o(n).總的時(shí)空分析:總的時(shí)間復(fù)

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論