




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、合肥老浣必靠機科學與技術系課程設計任務書20122013學年第二學期back(eq)-endTime = currentTime + randomTemp ;客戶離開時間為 當前時間加上處理時間currentTimeOfDeal += randomTemp;/更新交易時間+counter; /更新客戶總數(shù)totalTime += ( back(eq)-endTime - temped-beginTime ); 更新逗留時間delete temped; /冊I除節(jié)點 temped = NULL;state = 0;)4.上機調試過程1 .在處理顧客的第一種業(yè)務(從銀行取出一筆錢)時,我沒有特殊處
2、理,僅是和 處理第二種一樣,即是等到該顧客交易時間結束時才開始判斷,如果不夠取進入 第二隊列等候。但題目中有“如果屬于第一種,且申請額超出銀行現(xiàn)存資金總額 而得不到滿足,那么立刻排入第2個隊等候,直至滿足時才離開銀行,否那么業(yè)務處 理完后立刻離開銀行”。想想這也是符合實際。于是改算法的判斷為以下算法:偽代碼:(if(! empry (fq) & fq.head-money0)/如果隊列一不空,而且隊頭客戶辦理第二種業(yè)務1 .可以辦,完成離開(即銀行現(xiàn)金足夠取)2.不可以辦,排隊2等候)else/存款,第一種業(yè)務if(!empty(fq) & temped= searchAndDel(sq,to
3、tal)當交易時間到辦理該業(yè)務,并開始掃描第二隊列,看是否能滿足第二隊列需要if(currentime=next_arrtime )(當當前時間等于即將到來的顧客到來時間,初始化該顧客節(jié)點,并設置下一顧客到達時間)2.對于計算客戶在銀行內的平均逗留時間,一直不成功,后經老 師指導,平均逗留時間算法思想如下:已成功交易的客戶,逗留時 間為他的離開時間和到達時間之差,直到銀行營業(yè)結束,沒有成功 交易的客戶的逗留時間不算入內,總的逗留時間為每個成功交易的 客戶的逗留時間之和,平均逗留時間為總的逗留時間除以成功交易 的客戶數(shù)。5 .測試結果及分析正確輸入并開始模擬運行:輸入一般數(shù)據(jù):a.銀行初始資金t
4、otal = 5000b.銀行營業(yè)時間closetime = 50c.客戶到達時間間隔上界arrivemaxtime = 5和 arrivemintime=3客戶交易時間上界dealmaxtime = 8和dealmintime=40.退出.進入模擬系統(tǒng)ywr 1 T-nr- Mlnr _r,輸入銀行的初始存款:5000產輸入銀行的營業(yè)時間:營輸入最大到達時間間隔:請輸入最小到達時間間隔: f青輸入最大的處理時間: :青輸入最小的處理時間:圖表1需.晟成存0 112 3達玄達開玄達達在達233126293034343841494550-2559-25591369-38051369-3805-3
5、605-2448 776776 -3907-3180銀清數(shù)旁戶1060為38 人人客客,;間10! 戶戶的的雙序時.出 備fiB私理理均幫 的的存果辦本鍵 班第理理功功郎更刖意 存等徐成逗意 要要功也翌役德310 .:圖表2.用戶使用說明用戶按任意鍵繼續(xù),那么會出現(xiàn)如下主界面:用戶選擇1開始模擬。按提示輸入相應的數(shù)據(jù)設置,就能得到想要的模擬 結果。退出選擇0.對用戶輸入要求如下:銀行開始的資金總額應該大于零。銀行開始的資金總額應該大于零。銀行的營業(yè)時間必須小于1440分鐘(24小時)。最大到達時間間隔必須小于營業(yè)時間。最小到達時間間隔必須介于零和最大到達時間之間。最大處理時間必須小于營業(yè)時間。
6、最小處理時間必須介于零和最大處理時間之間。最大交易額應該小于銀行開始時的資金總額且小于程序設置的50000o如果輸入不符合上述要求,程序會提示用戶哪里輸入出錯,可以再次輸入。 每個輸入數(shù)據(jù)都有3次機會。當三次輸入都錯的時候,程序停止運行,按任意鍵 退出?,F(xiàn)給出最小處理時間出錯時的三種提示截圖:請輸入最大到達時間間隔:10番輸入最小到達時間間隔:瞬搞蠲眼間隔必須介于零和最大到達時間之間圖表3請輸入最大到達時間間隔:L0ii圜善端前襦請輸入最小到達時間間隔: 20達時間間隔必須介于零和最大到達時間之間!請再次輸入!咨!最小到達時間間隔必須介于零和最大到達時間之間!請最后一次輸入! 翕小到達時間間隔
7、:圖表4請輸入最大到達時間間隔:10請輸入最小到達時間間隔:20輒惜誨L最小到達時間間隔必須介于零和最大到達時間之間!請再次輸入! 清輸入最小篁達時間間隔:20觸&胤最小到達時間間隔必須介于零和最大到達時間之間!請最后一次輸入! 清輸關最小到達時間間隔:20三次輸入都錯誤!請按任意鍵退出!圖表5.參考文獻1王昆侖,李紅.數(shù)據(jù)結構與算法.北京:中國鐵道出版社,2006年5月。2德國明,王國均.數(shù)據(jù)結構 清華大學出版社3汪泌,奚李峰.數(shù)據(jù)結構清華大學出版社流程圖8附錄銀行業(yè)務模擬系統(tǒng)#include #include #include #include using namespace std;st
8、ruct service(int num; /客戶號string type; /到達或離開int beginTime; 到達時間int endTime;/離開時間int money;/正數(shù)為存款,負數(shù)為取款 service* next;/指針域);struct queue 隊歹U(service* head;/隊列頭指針service* rear;/隊列尾指針);int total; 初始時銀行現(xiàn)存資金總額int closeTime; 營業(yè)結束時間int arriveMaxTime; 兩個至lj達事件之間的間隔上限 int arriveMinTime; /兩個到達事件之間的間隔下限 int d
9、ealMaxTime; /客戶之間交易的時間上限 int dealMinTime; /客戶之間交易的時間下限 int dealMaxMoney ; /交易額上限int ndn=0;需要存款的人數(shù)int nwn=0;需要取款的人數(shù)int sdn=0;成功存款的人數(shù)int swn=0;/成功取款的人數(shù)int currentTime = 0; 當前時間int totalTime=0; 客戶逗留總時間int counter = 0; 客戶總數(shù)int number = 1;/初始客戶序列號bool state =1; /用于判斷是否有窗口在處理int currentTimeOfDeal = 0;交易時間
10、int thearriveMaxTime = 0;/最大到達時間queue eq; /事件隊列queue fq; /隊列一queue sq; 對歹U 二初始化三個隊列service* front(queue &q)返回隊首元素(return q. head;)service* back(queue &q)返回隊尾元素(return q. rear;)void push(queue&q,int d)/入隊列函數(shù),插入元素d為隊列q的新的隊尾元素 (service* temp = new service;temp-money = d;temp-next = NULL;if(q.head=NULL)
11、隊列為空,初始化(q. head = temp;q. rear = temp;)else/隊列不為空,插入元素d(q. rear-next = temp;q. rear = q.rear-next;)void pop(queue &q)/假設隊列不空,出對列函數(shù)(service* temp;temp = q. head;if(q. head-next=NULL)對列只有一個元素 q.head = q. rear 二NULL;elseq. head=q. head-next;delete temp;)void arrive。/”到達”函數(shù),隨機產生顧客,進入隊列一產生到達事件 進入事件隊列 (p
12、ush(fq,(rand()% (2*dealMaxMoney) -dealMaxMoney); /隨機產生顧客加入第一隊列back(fq)-beginTime = currentTime; 當前時間為客戶的到達時間back(fq)-num = number;/客戶號為客戶序列號push(eq,(back(fq)-money); 將產生事件力口入事件隊歹ijback(eq)-beginTime = currentTime;back(eq)-type = 到達”;back(eq)-num = number;+number;)void putMoney()存款函數(shù)(total +二 front(f
13、q)-money; /更新資金總額push(eq,front(fq)-money); 力口入事件隊歹Uback(eq)-type = 離開”;back(eq)-num = front(fq)-num;back(eq)-endTime = (front(fq)-beginTime + rand()%(dealMaxTime-dealMinTime+ l)+dealMinTime);離開時間為到達時間加上隨機產生的介于最大處理時間和最小處理時間 的處理時間+counter; /更新客戶總數(shù)totalTime += (back(eq)-endTime - front(fq)-beginTime);
14、更新逗留時間pop(fq); 刪除第一隊列第一個業(yè)務currentTi meOfDeal = back(eq)-endTime; 交易時間為客戶的離開時間state =0;窗口沒有交易需要處理void getMoney。/”取款”函數(shù)(if( (-fq.head-money) total)/資金短缺 加入第二隊列push( sq,front(fq)-money );back(sq)-beginTime = front(fq)-beginTime;back(sq)-num = front(fq)-num;pop(fq);) else (total + 二 back(fq)-money;更新資金總
15、額push(eq,front(fq)-money); 力H入事件隊歹Uback(eq)-type 二離開“;back(eq)-num = front(fq)-num;back(eq)-endTime = (front(fq)-beginTime +rand()%(dealMaxTime-dealMinTime+ l)+dealMinTime);客戶的離開時間為客戶的到達時間加上隨機產生的介于最大處理時間和 最小處理時間的處理時間back(eq)-beginTime = 0;currentTimeOfDeal = back(eq)-endTime;交易時間為客戶的離開時間+counter; 更新
16、客戶總數(shù)totalTime += ( back(eq)-endTime - back(fq)-beginTime ); /更新逗留時間pop(fq); 刪除第一隊列第一個業(yè)務state =0;/窗口沒有交易需要處理) service* searchAndDeal(queue &q,int m)搜索函數(shù),在對列中尋找可處理元素 (service* sign = q. head; 標記頭節(jié)點service* temp;while(q. head!=NULL )(if(-(q. head-money) next; /首節(jié)點后移一位,返回原首節(jié)點 return temp;題目:銀行業(yè)務模擬客戶的業(yè)務分
17、為兩種:第一種是申請從銀行得到一筆資金,即取款或借款;第二種是 向銀行中投入一筆資金,即存款或還款。銀行有兩個服務窗口,相應地有兩個隊列。客戶到 達銀行后先排第一個隊。處理每個客戶業(yè)務時,如果屬于第一種,且申請額超出銀行現(xiàn)存資 金總額而得不到滿足,那么立刻排入第二個隊等候,直至滿足時才離開銀行;否那么業(yè)務處理完 后立刻離開銀行。每接待完一個第二種業(yè)務的客戶,那么順序檢查和處理(如果可能)第二個 隊列中的客戶,對能滿足的申請者予以滿足,不能滿足者重新排到第二個隊列的隊尾。注意, 在此檢查過程中,一旦銀行資金總額少于或等于剛才第一個隊列中最后一個客戶(第二種業(yè) 務)被接待之前的數(shù)額,或者本次已將第
18、二個隊列檢查或處理了一遍,就停止檢查(因為此 時已不可能還有能滿足者)轉而繼續(xù)接待第一個隊列的客戶。任何時刻都只開一個窗口。假 設檢查不需要時間。營業(yè)時間結束時所有客戶立刻離開銀行。要求:寫一個上述銀行業(yè)務的事件驅動模擬系統(tǒng),模擬出并輸出系統(tǒng)處理所有客戶的流程, 并計算出所有客戶在銀行內逗留的平均時間。.問題分析和任務定義本問題主要需要處理兩個交易隊列(fq, sq)和一個事件隊列(eq)。當有客戶來交 易時,讓客戶先進隊列一 fq,然后讓事件隊列eq記下客戶隨機產生的到達時間,如果客戶 辦理存款,那么更新銀行的資金并且記下客戶隨機產生的逗留時間,辦理完后讓事件隊列記錄 客戶的離開時間,然后從
19、隊列一中刪除該客戶的結點;如果客戶辦理取款,當銀行此刻的金 額可以滿足該客戶,那么更新銀行的資金并且記下客戶隨機產生的逗留時間,辦理完后讓事件 隊列記錄客戶的離開時間,然后從隊列一中刪除該客戶的結點,當銀行此刻的金額不能夠滿 足該客戶,那么將該客戶轉移到隊列二等待,直到下一個辦理存款的客戶辦理完存款后,從隊 列二的頭結點開始搜索,看看有沒有可以滿足其取款的客戶,如果隊列二的頭結點客戶能滿 足,那么為其辦理取款,然后從隊列二中刪除該節(jié)點,并讓事件隊列記錄該客戶的離開時間, 如果隊列二的頭結點客戶仍然不能滿足,那么搜索下一個客戶直到將隊列二搜索完。等到銀行 的營業(yè)時間到了后,輸出事件隊列,需要辦理
20、兩種業(yè)務的顧客數(shù),已成功辦理兩種業(yè)務的顧 客數(shù),兩種業(yè)務的成功辦理率,客戶在銀行內的平均逗留時間和下班時銀行所剩余的資金總 額。.數(shù)據(jù)結構的選擇和概要設計事件有兩類:到達銀行和離開銀行。初始時銀行現(xiàn)存資金總額為total。開始營業(yè)后的第 一今事件是客戶到達,營業(yè)時間從。到closetime。到達事件發(fā)生時隨機地設置此客戶的交 易時間和距下一到達事件之間的時間間隔。每個客戶要辦理的款額也是隨機確定的,用負值 和正值分別表示第一類和第二類業(yè)務。變量total, closetime以及上述兩個隨機量的上下界 均交互地從終端讀入,作為模擬參數(shù)。兩個隊列和一個事件表均要用動態(tài)存儲結構實現(xiàn)。注意弄清應該在
21、什么條件下設置離開事 件,以及第二個隊列用怎樣的存儲結構實現(xiàn)時可以獲得較高的效率。注意:事件表是按時間 順序有序的。else/隊首元首不能被處理(if(q. head = q. rear) else/首節(jié)點移到隊列尾部q. rear-next = q. head;q. rear = q. rear-next;q. head =q. head-next;q. rear-next 二 NULL;)if(q. head = sign)/隊列循環(huán)一周時停止 return NULL;)return NULL;)service* temped ;int randomTemp;/void findAndDe
22、al。/”處理”函數(shù),在對列中尋找可處理元素,對其進行處理 (while( (temped= searchAndDeal(sq,total)&temped!=NULL/查找可處理取款(total += temped-money; 更新資金總額push(eq,temped-money); 力口入事件隊歹Uback(eq)-type 二離開”;back(eq)-num = temped-num;randomTemp = rand()%(dealMaxTime-dealMinTime +l)+dealMinTime; 處理時間為隨機產生的介于最大處理時間和最小處理時間之間的處理時間back(eq)-
23、endTime=currentTime + randomTemp ;客戶離開時間為當前時間加上處 理時間currentTimeOfDeal 十= randomTemp;/更新交易時間+counter; /更新客戶總數(shù)totalTime +=(back(eq)-endTime - temped-beginTime ); 更新逗留時間delete temped; /冊lj除節(jié)點 temped = NULL;)state = 0;)int main()printf(nk|* k!* k!* kJ*!*1* *!*!*K!*!* *!*!* *1*!*K|* *1* I f *7* *7*、*1* *
24、1* *7* *7* *7* *T*7*Tw *7*7* *T* *T* 、*T*7* *7* *7* *T*T* *7* *7* *1* *1、*1*7*T*7* *7*、*T*7* *7* *7* *T* B printf(n*1*1*1* *1*1* *1*1* f ! * ,* * * *k * * * *宇*k * * * ,* * * * * * * * .,*宇* * * * * ,-* * * *-.n);printf(Mk1k k k! *1*k1 k1 k k1 k1* k| k1 k1 kk1 *1*k k k k k1*1* * vl* k kT 1 k1 kJ k!
25、k k!k! k k k1*k k| kY k k1kIx *不不*,卜*不示*不不*不米木號不不杯小跳不不小號不初跳木木不不*E );printf(n c 5|c 5jc |c jC jC r|c 5jc 5jC #|c 51c歡迎進入銀行業(yè)務模擬系統(tǒng)*口”)printf(H :k:kik:f *i*:k *1*:k *1* *1* k :k *n”)printf(n*3 );printf(n 江*1*1# * *1*!* *1* !* *1* * *X* !* !* 1* !* * * *1* !* !* !* *1* *1* * 1* !* !* 1* * !* !* *1*1*!* *
26、1* 1* * !* *1* 江1* 1* *X*、X* f t TOC o 1-5 h z 卜;、卜卜卜 *z* ; ,; ,; *T* 卜卜 *t* ; ,;、卜 卜卜、:、 1 卜卜 *7* ;、:、*1* 卜卜卜; 卜】 卜卜,;、printf(M* *2* *1 kV k1 1 k*k! k k| kIk 1* k| k1k1 k1 k| kY 1* *1* k! k k1 kV k!k k k| k|k11 k| k1 k1kL* k1 kJ k1 1 k kL k| k k1 ! ! :、乙、乙、卜.、.、,,、乙、.、.、.、乙、乙、1、4、乙、.、】、乙、乙、,1、.、.、,
27、4、乙、.、.、.、1、. I、4 乙、 、.、.、】. 乙、乙、卜.、.、,4、乙、B Mlprintf(Hnn);printf(Hnu);printf(nnH);printf(請按任意鍵繼續(xù)nn);getch();int i;for(i=0;i kI k1 k1 k1* *k| k1I、1、1、J* *7* *(*1、.廣,4、0 .退出L進入模擬系統(tǒng)*n”)printf(n7,7,7,*1* *i* *1* *1* 1* 7,. 、q、rj* 、* n ”) printf(Hprintf(nLit .L*虹 i t ! * * * *”小* * * * ,*, 卜* 小、* * * 利*
28、卜* 相 卜 * +、&* n );* 請 擇月艮務 *n”)int n,tl =0,t2=0,t3=0,t4=0,m=0;scanf(n%du,&n);while(n=l)(srand(time(NULL); 初始化隨機函數(shù) printf(”請輸入銀行的初始存款:rT);scanf(H%dH,&total);if(total0)(printf(輸入錯誤!初始存款不能小于0!請再次輸入! n); printf(”請輸入銀行的初始存款:n) scanf(%dn,&total);if(total0)printf(輸入錯誤!初始存款不能小于0!請最后一次輸入! nn);printf(”請輸入銀行的初
29、始存款:nf);scanf(H%d&total);if(total= 1440)printf(輸入錯誤! 一天的營業(yè)時間不能超過1440分鐘(24個小時)!請再次輸入! n)printf(”請輸入銀行的營業(yè)時間:n) scanf(H%dn,&closeTime);if(closeTime= 1440)printff輸入錯誤! 一天的營業(yè)時間不能超過1440分鐘(24個小時)!請最后一次輸入! nn);printf(請輸入銀行的營業(yè)時間:nf);scanf(n%dn,&closeTime);if(closeTime= 1440) (printf(三次輸入都錯誤!請按任意鍵退出! n”); get
30、ch();printf(請按任意鍵退出!n”); goto end;printf(請輸入最大到達時間間隔:nn);scanf(%dH,&arriveMaxTime);if(arriveMaxTimecloseTime)printf(輸入錯誤!最大到達時間間隔必須小于營業(yè)時間!請再次輸入! n); printf(請輸入最大到達時間間隔:nH);scanf(H%dn,&arriveMaxTime); if(arriveMaxTimecloseTime)printf(輸入錯誤!最大到達時間間隔必須小于營業(yè)時間!請最后一次輸入!叫;printf(請輸入最大到達時間間隔:nH);scanf(H%d,&a
31、rriveMaxTime);if(arriveMaxTimecloseTime) (printf(三次輸入都錯誤!請按任意鍵退出! nn);getch();printf(請按任意鍵退出!n); goto end;)printf(請輸入最小到達時間間隔:nH);scanf(%dn,&arriveMinTime);if(arriveMinTime=arriveMaxTime) (printf(輸入錯誤!最小到達時間間隔必須介于零和最大到達時間之間!請再次 輸入! nn);printf(請輸入最小到達時間間隔:n );scanf(n%dn,&arriveMinTime);if(arriveMinTi
32、me=arriveMaxTime) (printff輸入錯誤!最小到達時間間隔必須介于零和最大到達時間之間!請 最后一次輸入! nn);printf(請輸入最小到達時間間隔:rT);scanf(H%dn,&arriveMinTime);if(arriveMinTime=arriveMaxTime) (printf(三次輸入都錯誤!請按任意鍵退出! nn);getch();printf(請按任意鍵退出!n); goto end;)printf(請輸入最大的處理時間:nn);scanf(n%dn,&dealMaxTime);if(dealMaxTimecloseTime)(printf(輸入錯誤!
33、最大處理時間必須小于營業(yè)時間!請再次輸入! n”);printf(請輸入最大的處理時間:nn);scanf(n%d&dealMaxTime);if(dealMaxTimecloseTime)printf(輸入錯誤!最大處理時間必須小于營業(yè)時間!請最后一次輸入! n); printf(”請輸入最大的處理時間:n) scanf(n%dn,&dealMaxTime);if(dealMaxTimecloseTime) (printf(三次輸入都錯誤!請按任意鍵退出! nn);getch();printf(請按任意鍵退出!rT);goto end;)printf(請輸入最小的處理時間:nn);scanf
34、(n%dn,&dealMinTime);if(dealMinTime=dealMaxTime) (printff輸入錯誤!最小處理時間必須介于零和最大處理時間之間!請再次輸入!n)printf(請輸入最小的處理時間:n);scanf(H%dn,&dealMinTime);if(dealMinTime=dealMaxTime) (printff輸入錯誤!最小處理時間必須介于零和最大處理時間之間!請最后 一次輸入! n”);printf(請輸入最小的處理時間:nH);scanf(u%dn,&dealMinTime);if(dealMinTime=dealMaxTime) (printf(三次輸入都
35、錯誤!請按任意鍵退出! nn);getch();printf(請按任意鍵退出!n”); goto end;)printf(”請輸入交易額的最大上限:n)scanf(H%dn,&dealMaxMoney);if(dealMaxMoney=total | dealMaxMoney50000)(printf(輸入錯誤!超出本銀行的服務范圍!最大交易額應低于銀行開始營業(yè)時 的資金總額且小于50000!請再次輸入! nn);printf(”請輸入交易額的最大上限:nn);scanf(n%dH,&dealMaxMoney);if(dealMaxMoney=total | dealMaxMoney50000
36、)printf(輸入錯誤!超出本銀行的服務范圍!最大交易額應低于銀行開始營 業(yè)時的資金總額且小于50000!請最后一次輸入! n”);printf(”請輸入交易額的最大上限:nn);scanf(%dH,&dealMaxMoney);if(dealMaxMoney=total | dealMaxMoney50000)(printf(三次輸入都錯誤!請按任意鍵退出! nn);getch();printf(請按任意鍵退出!nn); goto end;)theamveMaxTime +=rand()%(amveMaxTime-arriveMinTime + l)+arriveMinTime; / 隨機
37、生成介于最大到達時間間隔和最小到達時間間隔之間的首次到達時間while(currentTime closeTime)當前時間小于營業(yè)時間(+4-currentTime;if( currentTimeOfDeal money = 0)(putMoney();調用存款函數(shù)EndAndDeal。;/調用搜索處理函數(shù) ndn+;)else(getMoney。;/調用取款函數(shù)nwn+;printf(客戶序列事件類型時間處理金額n”);while( eq.head!=NULL ) /清除事件隊列 (if(eq.head-type=離開”)( printf(n%d離開%d%dnH,eq.head-num,
38、eq.head-endTime,eq.head-money);if(eq.head-money=0)tl+; 成功存款人數(shù)elset3+;成功取款人數(shù)) else ( printf(n%d至 I達%d%dnH,eq.head-num, eq.head-beginTime,eq.head-money);if(eq.head-money=0)t2+; 需要存款人數(shù)elset4+;/需要取款人數(shù)sdn=ndn-(t2-tl);swn=nwn-(t4-t3); pop(eq);)while( fq.head!=NULL )更新結束時第一隊列中未處理的客戶 (totalTime += ( closeTi
39、me - fq.head-beginTime );+counter; pop(fq);)printf(nnH);printf(”需要存款的客戶人數(shù):%dnn,ndn);printff需要取款的客戶人數(shù):%dnH,nwn);printf(成功辦理存款的客戶人數(shù):%dn;sdn);printf(成功辦理取款的客戶人數(shù):%dn;swn);printf(存款成功辦理率:%fnH,float(sdn* 100)/ndn);printf(”取款成功辦理率:%fnn,float(swn* 100)/nwn);printf(客戶逗留平均時間為:fn”,float(totalTime)/counter);pri
40、ntf(銀行當前余額:%dnH,total);printf(請按任意鍵退出! nn); break;)if(n=0)printf(請按任意鍵退出! nu);end:getch();return 0;)3.詳細設計和編碼結構體的定義如下:struct service(int num; /客戶號string type; /到達或離開int beginTime;/到達時間int endTime;/離開時間int money; /正數(shù)為存款,負數(shù)為取款 service* next;指針域);隊列的抽象數(shù)據(jù)類型定義如下:ADT Queue 數(shù)據(jù)對象:D= ai | aiElemSet,n50 數(shù)據(jù)關系:
41、RI = |ai-l, aiWD, i=2,n )基本操作:void init_Q(Queue &Q);操作結果:構造空隊列Qint Q_empty(Queue Q);初始條件:隊列Q存在操作結果:假設Q為空隊列,貝1J返回TRUE,否那么FALSE int Qength(Queue Q);初始條件:隊列Q存在操作結果:返回隊列Q的元素個數(shù),即隊列長度int gethead_Q(Queue Q);初始條件:隊列Q存在操作結果:返回隊列Q的隊頭元素void en_Q(Queue &Q,int e);初始條件:隊列Q存在操作結果:插入元素e為Q的新的隊尾元素。void de_Q(Queue &Q,
42、int &e);初始條件:隊列Q存在操作結果:刪除Q的隊頭元素。ADT Queue/隊列類型typedef struct QNode/隊列節(jié)點類型int data; struct QNode *next; QNode,*PQNode;typedef struct PQNode front;/隊頭指針 PQNode rear; 隊尾指針 Queue;隊列的基本操作設置如下:void init_Q(Queue &Q);初始化,構造空隊列Q (Q.front=Q.rear)int Q_empty(Queue Q);/假設隊列Q存在假設Q為空隊列,那么返回TRUE,否那么FALSEint Q_leng
43、th(Queue Q);/假設隊列Q存在返回隊列Q的元素個數(shù),即隊列長度int gethead_Q(Queue Q);假設隊列Q存在返回隊列Q的隊頭元素void en_Q(Queue &Q,int e);假設隊列Q存在插入元素e為Q的新的隊尾元素。void de_Q(Queue &Q,int &e);假設隊列Q存在/刪除Q的隊頭元素。排隊操作算法:void init_Q(Queue &Q) (初始化,構造空隊列Q (Q.front=Q.rear)Q.front=Q.rear=(PQNode)malloc(sizeof(QNode);if(!Q.front)exit(-l);)int Q_emp
44、ty(Queue Q) (/假設隊列Q存在假設Q為空隊列,那么返回TRUE,否那么FALSEi f(Q. fron. rear)return 1;else return 0;)int gethead_Q(Queue Q)假設隊列Q存在返回隊列Q的隊頭元素if(!Q_empty(Q)retum Q.front-next-data; else return 0;) int Q_length(Queue Q) (/假設隊列Q存在返回隊列Q的元素個數(shù),即隊列長度 int count=0;PQNode p=Q.front; while(p!=Q.rear) (count+; p=p-next;) ret
45、urn count;) void en_Q(Queue &Q,int e) (假設隊列Q存在插入元素e為Q的新的隊尾元素。PQNode p=(PQNode)malloc(sizeof(QNode); if(!p)exit(-l);p-data=e; p-next=NULL;Q.rear-next=p;Q.rear=p;) void de_Q(Queue &Q,int &e) (假設隊列Q存在 刪除Q的隊頭元素PQNode p;if(Q.front=Q.rear)return ; p=Q.front-next;e=p-data;Q.front-next=p-next;if(Q.rear=p)Q.
46、rear=Q.front; free(p);)其他函數(shù)算法int rand_num(int max,int min)/隨機數(shù)生成根據(jù)傳進的max和min,生成介于max和min的一個/整數(shù)randomize();RandSeed=Now();return ( random( 100000) % (max - min + 1) +min );)詳細設計int main()主函數(shù)printf(n*!* *4* *L*!*!*1* *.*!*!* *1* *1*! *4* *JL* *1*kJ* *L*.!* !*!*L* *. k|* *1* *1* *!*A* *?*! !*!*L* * *1
47、I ! 木字”個小木稱個工木.個4次字不個小木木木個木木木本“亭工小木字個個不W不個小木木木”個小木木an);printf(n*1*1* .* *1 *1*1*1* *1*2*! t x*,、*,、*.,、*,、*,*i*、*,*/n);printf(u*不*木不*人*不*小*不*不*木木不不*號*不*木*不不*斗*木木不不八n );printf(n|c |c 5jc|c |c 5jc 5Jc* *n) 歡迎進入銀行業(yè)務模擬系統(tǒng)printf(n : |c r!c |c |c *|c *|C printf(n*1*1*2* vl* f x*.$*k*、*,i*,、*.,.,*、*,*/n);pr
48、intf(n*5 );printf(n,小個個小小小,卜小個個小小*個率,卜小,門、個個小小,卜.必個個小小小,卜小個個小小,卜,門、小小小,卜,門個個小小小.必個個小,卜.卜,卜小個個小宿);printf(nnn);printf(,nn);printf(,nn);printf(請按任意鍵繼續(xù)nn);getch();int i;for(i=0;i 7, 7, 7,*1* *1* *1* 7, 7, 7,7, *1* *1* 4, U,7, 7,7,*1* *1* !,7, 7 7 7,7, 7, 7,*1* *1* *1* 7, 7, fix丁丁,q. 、*1* q. 、*1* *1、q、*1
49、*、4、q. 、*J* *J* *1* q、q、q. 、q、 1 t/11 . . , , . . , *1* , * . * , . ., . 7,7,*!* . . 7* ” 1,1. *1* , .kJ K!*L !*1* *1* *!*1*!* *!* *1*!*1*T* *T* *T*7*1* *T* *7* *7* *T* *T*5* *T *T*T* *T* *T *1*T* *T* *7* *T*11*1* *!* *1* *1*!* *1* * *t* * *1*1* *1* * *t 1* *2* * * * *1*1* * * !* !* *1* *X* * * *1*
50、!* 以 *1*!* *1* *1* *1*, ; 卜卜1; 1 卜】 r7% 卜,卜,1 *1* *.* . *T* ; ,卜, 1 .; e* ; 卜卜卜卜.; ; 1 卜卜 , *7* 卜,【 ,】 *1* *1* , V、; ,卜, 1 *7* ; e* 卜卜n);nn);n”);” * 請選擇月艮務 *n”)int n,tl =0,t2=0,t3=0,t4=0,m=0;scanf(d”,&n);while(n=l)(srand(time(NULL); /初始化隨機函數(shù)printf(”請輸入銀行的初始存款:n”);scanf(%d,&total);printf(”請輸入銀行的營業(yè)時間:
51、nn);scanf(%dH,&closeTime);printf(H請輸入最大到達時間間隔:n);scanf(n%dn,&arriveMaxTime);printf(請輸入最小到達時間間隔:nM);scanf(n%dn9&arriveMinTime);printf(請輸入最大的處理時間:nn);scanf(n%d,&dealMaxTime);printf(”請輸入最小的處理時間:nn);scanf(n%dn,&dealMinTime);printf(”請輸入交易額的最大上限:W);scanf(n%d,&dealMaxMoney);)void arrive。/”到達”函數(shù),隨機產生顧客,進入隊列
52、一產生到達事件進入事 件隊列(push(fq,(rand()% (2*dealMaxMoney) -dealMaxMoney); /隨機產生顧客 加入第一隊列back(fq)-beginTime = currentTime;/當前時間為客戶的到達時間 back(fq)-num = number;/客戶號為客戶序列號 push(eq,(back(fq)-money); /將產生事件加入事件隊列 back(eq)-beginTime = currentTime;back(eq)-type =到達”;back(eq)-num = number;+number;)void putMoney。/”存款函數(shù)(total += front(fq)-mone
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 銷售公司業(yè)務員勞動合同協(xié)議
- 房屋按揭共同還款合同樣本2025
- 生態(tài)養(yǎng)殖基地租賃合同
- 特許經營合同示范文本
- 新能源貨車租賃合同
- 采購合同管理:風險防范與應對措施
- 合作建房借款合同(單位集體住房)
- 度產品試用合同協(xié)議
- 金屬冶煉安全管理課件
- 寵物營養(yǎng)與寵物骨骼健康考核試卷
- GB/T 5916-2008產蛋后備雞、產蛋雞、肉用仔雞配合飼料
- 《中小學教育懲戒規(guī)則》(試用)試題及答案
- GB/T 30516-2014高粘高彈道路瀝青
- GB/T 23723.1-2009起重機安全使用第1部分:總則
- 安全測試工具、蹭網(wǎng)利器wifiphisher新增漢化版
- 中學教育-中學生心理健康量表參考范本
- 外科病人體液失衡-課件
- 生物氧化 Biological Oxidation課件
- 電力拖動自動控制系統(tǒng)-運動控制系統(tǒng)(第5版)習題答案
- 贛美版四年級美術下冊全冊課件匯總
- 工會專業(yè)知識考試題庫
評論
0/150
提交評論