版權(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ì)報(bào)告書</p><p> 題 目 一個(gè)銀行業(yè)務(wù)模擬的程序 </p><p> 姓 名 </p><p> 學(xué) 號(hào) </p><p> 學(xué) 院 信息工程學(xué)院
2、 </p><p> ?! I(yè) 計(jì)算機(jī) </p><p> 指導(dǎo)教師 </p><p> 完成日期: 2009-6-25</p><p><b> 銀行業(yè)務(wù)模擬</b></p&
3、gt;<p><b> 一、需求分析</b></p><p><b> 1程序問題描寫:</b></p><p> 本程序?yàn)殂y行客戶業(yè)務(wù)模擬, 其業(yè)務(wù)模擬分為兩種: 第一功能是申請(qǐng)從銀行得到一筆資金,即取款或借款。第二功能是向銀行投入一筆資金,即存款或還款。銀行有兩個(gè)服務(wù)窗口,相應(yīng)地有兩個(gè)隊(duì)列。</p><
4、p> 2程序具體實(shí)現(xiàn)的功能:</p><p> 1)第一功能: 客戶到達(dá)銀行后先排第一個(gè)隊(duì)。處理每個(gè)客戶業(yè)務(wù)時(shí),且申請(qǐng)額超出銀 行現(xiàn)存資金總額而得不到滿足,則立刻排入第二個(gè)隊(duì)等候,直至滿足時(shí)才離開銀行;否則業(yè)務(wù)處理完后立刻離開銀行。每接待完一個(gè)第二種業(yè)務(wù)的客戶,則順序檢查和處理(如果可能)第二個(gè)隊(duì)列中的客戶,對(duì)能滿足的申請(qǐng)者予以滿足,不能滿足者重新排到第二個(gè)隊(duì)列的隊(duì)尾。</p><p
5、> 2)第二種功能: 如果在此檢查過(guò)程中,一旦銀行資金總額小于或等于剛才第一個(gè)隊(duì)列 中最后一個(gè)客戶(第二種業(yè)務(wù))被接待之前的數(shù)額,或者本次已將第二個(gè)隊(duì)列檢查或處理了一遍,就停止檢查(因?yàn)榇藭r(shí)已不可能還有能滿足者)轉(zhuǎn)而繼續(xù)接待第一個(gè)隊(duì)列的客戶。任何時(shí)刻都只開一個(gè)窗口。假設(shè)檢查不需要時(shí)間。營(yíng)業(yè)時(shí)間結(jié)束時(shí)所有客戶立即離開銀行。</p><p> 3)該程序要求實(shí)現(xiàn)銀行業(yè)務(wù)的事件驅(qū)動(dòng)模擬系統(tǒng),通過(guò)模擬方法求
6、出客戶在銀行內(nèi)逗留的平均時(shí)間。</p><p> 3. 演示程序以用戶與計(jì)算機(jī)交互方式執(zhí)行,即在計(jì)算機(jī)終端上顯示"提示信息" 之后,由用戶在鍵盤上輸入演示程序中規(guī)定的運(yùn)算命令;相應(yīng)的輸入數(shù)據(jù)(濾去輸入中的非法字符)和運(yùn)算結(jié)果顯示在其后。</p><p><b> 4.數(shù)據(jù)測(cè)試</b></p><p> 一天營(yíng)
7、業(yè)開始時(shí)銀行擁有的款額為10000(元),營(yíng)業(yè)時(shí)間為600(分鐘)。其他模擬參</p><p> 量自定,注意測(cè)定兩種極端的情況:一是兩個(gè)到達(dá)事件之間的間隔時(shí)間很短,而客戶的交易時(shí)間很長(zhǎng),另一個(gè)恰好相反,設(shè)置兩個(gè)到達(dá)事件的間隔時(shí)間很長(zhǎng),而客戶的交易時(shí)間很短。</p><p> 注: 測(cè)試數(shù)據(jù)均由程序隨機(jī)產(chǎn)生。運(yùn)行數(shù)據(jù)將在后面使用說(shuō)明中給出</p><p><
8、;b> 二、概要設(shè)計(jì)</b></p><p><b> 1基本要求:</b></p><p> 用動(dòng)態(tài)存儲(chǔ)結(jié)構(gòu)以及隊(duì)列來(lái)實(shí)現(xiàn)</p><p><b> 2所需的數(shù)據(jù)類型</b></p><p> 為實(shí)現(xiàn)上述程序功能,應(yīng)以需要定義單鏈表的抽象數(shù)據(jù)類型以及隊(duì)列集合并還需要用到
9、結(jié)構(gòu)體。為此,需要兩個(gè)抽象數(shù)據(jù)類型:?jiǎn)捂湵砗完?duì)列還有結(jié)構(gòu)體聲明。</p><p> (1)單鏈表的抽象數(shù)據(jù)類型定義為:</p><p> 關(guān)于線性表的鏈表存儲(chǔ)結(jié)構(gòu)的本質(zhì)是:在邏輯上相鄰的兩個(gè)數(shù)據(jù)元素ai-1, ai,在存儲(chǔ)地址中可以不相鄰,既地址不連續(xù)。不同的教材的表示基本是一致的。</p><p> typedef struct LNode</p&g
10、t;<p> { ElemType data; /* 數(shù)據(jù)子域 */</p><p> struct LNode *next; /* 指針子域 */</p><p> }LNode; /* 結(jié)點(diǎn)結(jié)構(gòu)類型 */</p>&l
11、t;p> ?。?)隊(duì)列的抽象數(shù)據(jù)類型定義為:</p><p><b> 用單鏈表表示的隊(duì)列</b></p><p> typedef struct QNode </p><p> { QElemType data;</p><p> struct QNode *next;</p>
12、<p> }QNode,*QueuePtr;</p><p> typedef struct{</p><p> QueuePtr front;//頭指針</p><p> QueuePtr rear;//尾指針</p><p> }LinkQueue;</p><p> InitQueue(Li
13、nkQueue &Q)</p><p> 操作結(jié)果:構(gòu)造一個(gè)空的隊(duì)列。</p><p> DestroyQueue (LinkQueue &Q)</p><p> 初始條件:隊(duì)列Q已存在。</p><p> 操作結(jié)果:銷毀隊(duì)列Q。</p><p> QueueLength(LinkQueu
14、e Q)</p><p> 初始條件:隊(duì)列已存在。</p><p> 操作結(jié)果:返回隊(duì)列的長(zhǎng)度。</p><p> QueueEmpty(LinkQueue Q)</p><p> 初始條件:隊(duì)列已存在。</p><p> 操作結(jié)果:隊(duì)列為空表,則返回True,否則返回 False。</p>
15、<p> ClearQueue(LinkQueue Q)</p><p> 初始條件:隊(duì)列已存在。</p><p><b> 操作結(jié)果:清空隊(duì)列</b></p><p> EnQueue(LinkQueue *Q,int x);</p><p> 初始條件:隊(duì)列已存在。</p>&l
16、t;p> 操作結(jié)果:插入元素為x的新的對(duì)尾元素 </p><p> DeleteQueue(LinkQueue *Q,int e)</p><p> 初始條件:隊(duì)列已存在。</p><p> 操作結(jié)果:刪除對(duì)頭元素,用e返回。</p><p> ?。?)定義結(jié)構(gòu)體的一般格式:</p><p> stru
17、ct 結(jié)構(gòu)體類型名</p><p> { 類型名1 變量名1; //數(shù)據(jù)子域</p><p> 類型名2 變量名2;……</p><p> 類型名n 變量名n;</p><p><b> };</b></p><p> 其中struct是保留字
18、。結(jié)構(gòu)體類型名由用戶自己命名。在使用時(shí)必須聲明一個(gè)具體的結(jié)構(gòu)體類型的變量,聲明創(chuàng)建一個(gè)結(jié)構(gòu)體變量的方法是:</p><p> struct 結(jié)構(gòu)體類型名 結(jié)構(gòu)體變量名;</p><p><b> 4程序包括三個(gè)模塊</b></p><p><b> 1)主函數(shù)模塊</b></p><p>
19、;<b> main()</b></p><p><b> {</b></p><p><b> 初始化:</b></p><p> while("命令"!="退出")</p><p><b> {</b>
20、</p><p><b> 建立事件;</b></p><p><b> 接受命令;</b></p><p><b> 處理命令;</b></p><p><b> }</b></p><p><b> }<
21、;/b></p><p> 2)動(dòng)態(tài)存儲(chǔ)結(jié)構(gòu)模塊</p><p> 第一部分:外部變量聲明</p><p> 第二部分: 隊(duì)列結(jié)構(gòu)體以及鏈表建立</p><p><b> 3)函數(shù)模塊:</b></p><p> 5 三個(gè)模塊的圖形關(guān)系:</p><p>&
22、lt;b> 三詳細(xì)設(shè)計(jì)</b></p><p><b> [1]原代碼:</b></p><p> 1 **************所需要的文件庫(kù)********************************************</p><p> #include <iostream> //
23、C++T頭文件庫(kù)</p><p> #include <string> //字符頭文件庫(kù)</p><p> #include <time.h> //時(shí)間文件庫(kù)</p><p> #include"stdlib.h" //隨機(jī)函數(shù)文件庫(kù)</p><p>
24、 #include"stdio.h" //頭文件庫(kù)</p><p> #include"math.h" //函數(shù)文件庫(kù)</p><p> #define max_arrivetime 10//定義隨機(jī)數(shù)</p><p> using namespace std;</p><
25、;p> 2 ***********動(dòng)態(tài)存儲(chǔ)模塊*************************************************</p><p> //************************外部變量***************************************</p><p> int close_time=600;//營(yíng)業(yè)結(jié)束時(shí)間&l
26、t;/p><p> int totle_time;//客戶呆在銀行的總時(shí)間</p><p> int totle_money=0;//初始時(shí)銀行資金總額</p><p> int arrivetime;//兩個(gè)事件到達(dá)的時(shí)間間隔上限</p><p> int dealtime=10;//客戶之間交易時(shí)間的上限</p><
27、;p> int slovetime;//交易解決的時(shí)間</p><p> int currentTime=0;//當(dāng)前時(shí)間</p><p> int clientnum=0;//客戶序列號(hào)</p><p> int totle_people;//客戶總數(shù)</p><p> int currenttime;//處理當(dāng)前時(shí)間<
28、;/p><p> //****************客戶變量***********************************************</p><p> struct clientdeal{</p><p> char name[50];//客戶名</p><p> double deposit ;//存取款金
29、額</p><p> int sloveTime;//處理需要的時(shí)間</p><p> int arriveTime;//到達(dá)時(shí)間,距開業(yè)的分鐘數(shù)</p><p> int grap;//與前一個(gè)客戶的間隔時(shí)間</p><p> int waitTime;//總的等待時(shí)間</p><p> i
30、nt num; //用戶號(hào)</p><p><b> };</b></p><p> typedef struct Node{ //建立單鏈表</p><p> clientdeal data;</p><p> Node *next;</p><p> }Lin
31、kNode,*LinkList;</p><p> typedef struct //單鏈表表示的隊(duì)列</p><p><b> {</b></p><p> Node *front; //隊(duì)頭</p><p> Node *rear; //隊(duì)尾</p>&l
32、t;p> }LinkQueue,*Queue;</p><p> 3 **************函數(shù)模塊*************************************************</p><p> //***************各種函數(shù)源代碼******************************************</p>
33、<p> void InitList(LinkList *L); //建立單鏈表連,分配空間</p><p> int InitQueue(LinkQueue *Q);//初始化隊(duì)列</p><p> int Empty(LinkQueue* Q); //判斷隊(duì)列是否為空,為空返回1,不為空返回0。</p><p> int EnterQue
34、ue(LinkQueue *Q,clientdeal x);//將客戶進(jìn)行入隊(duì)。</p><p> clientdeal DeleteQueue(LinkQueue *Q); //出隊(duì)函數(shù)。</p><p> LinkList input() ; //輸入事件表信息</p><p> LinkNode *F
35、ind(LinkList head, char name[]); //尋找,定位客戶在事件表中的位置。</p><p> void Queuetwo(LinkList L,LinkQueue *Q,int money) ; //對(duì)第二個(gè)隊(duì)的客戶進(jìn)行業(yè)務(wù)處理。</p><p> void dealwith(LinkNode *L,LinkQueue *P,LinkQueue *Q)
36、;//交易處理</p><p> void output(LinkList L); //輸出最后結(jié)果。</p><p> //**************函數(shù)模塊*****************************************************</p><p> //---------------------
37、-------建 立 單 鏈 表 --------------------——----</p><p> void InitList(LinkList *L) { //建立單鏈表連,分配空間</p><p> *L=(LinkList )malloc(sizeof(Node));</p><p> (*L)->next=0;<
38、;/p><p><b> }</b></p><p> //--------------------隊(duì)列初始化函數(shù)---------------------------------------</p><p> int InitQueue(LinkQueue *Q)//初始化隊(duì)列</p><p><b>
39、{</b></p><p> Q->front=(LinkNode *)malloc(sizeof(LinkNode));</p><p> if(Q->front!=NULL)</p><p><b> {</b></p><p> Q->rear=Q->front;<
40、/p><p> Q->front->next=NULL;</p><p> return(1);</p><p><b> }</b></p><p> else return(0);</p><p><b> }</b></p><p&
41、gt; //-----------------------判空函數(shù)------------------------------------------</p><p> int Empty(LinkQueue* Q) //判斷隊(duì)列是否為空,為空返回1,不為空返回0。</p><p><b> {</b></p><p>
42、if(Q->front==Q->rear)</p><p><b> return 1;</b></p><p><b> else </b></p><p><b> return 0;</b></p><p><b> }</b>&
43、lt;/p><p> //----------------------入隊(duì)函數(shù)-------------------------------------------</p><p> int EnterQueue(LinkQueue *Q,clientdeal x)//將客戶進(jìn)行入隊(duì)。</p><p><b> { </b></p&g
44、t;<p> /* 將數(shù)據(jù)元素x插入到隊(duì)列Q中 */</p><p> Node *NewNode;</p><p> NewNode=(LinkNode *)malloc(sizeof(LinkNode)); </p><p><b> //申請(qǐng)新結(jié)點(diǎn)。</b></p><p> i
45、f(NewNode!=NULL)</p><p><b> {</b></p><p> NewNode->data=x;</p><p> NewNode->next=NULL;</p><p> Q->rear->next=NewNode;</p><p>
46、Q->rear=NewNode;</p><p> return 1 ;</p><p><b> }</b></p><p> else return(0); /* 溢出!*/</p><p><b> }</b></p><p> //------
47、--------------------出隊(duì)函數(shù)-----------------------------------------</p><p> clientdeal DeleteQueue(LinkQueue *Q) //出隊(duì)函數(shù)。</p><p><b> { </b></p><p> /* 將隊(duì)列Q的
48、隊(duì)頭元素出隊(duì),并存放到x所指的存儲(chǔ)空間中 */</p><p><b> Node *p;</b></p><p> clientdeal M;</p><p> if(Q->front==Q->rear)</p><p><b> return M;</b></p>
49、<p> p=Q->front->next;</p><p> Q->front->next=p->next; /* 隊(duì)頭元素p出隊(duì) */</p><p> if(Q->rear==p) /* 如果隊(duì)中只有一個(gè)元素p,則p出隊(duì)后成為空隊(duì) */</p><p> Q->rear=Q->front
50、; </p><p> M=p->data;</p><p> free(p); /* 釋放存儲(chǔ)空間 */</p><p> return(M);</p><p><b> }</b></p><p> //----------------輸入事件表信息函數(shù)--------
51、---------------------------------</p><p> LinkList input() //輸入事件表信息</p><p><b> {</b></p><p> cout<<"**************** 建立事件表 ******
52、******************\n\n\n";</p><p> int i;//定義i</p><p> currenttime=0;//當(dāng)前時(shí)間初始值為0</p><p> LinkList head;//建立頭指針</p><p> clientdeal temp;//聲名客戶信息</p><
53、p> LinkNode *p;//建立鏈表</p><p> LinkNode *rear;//建立隊(duì)尾指針</p><p> InitList(&head);//建立隊(duì)列</p><p> rear=head;//隊(duì)空</p><p> cout<<"客戶之間交易時(shí)間的上限"<
54、<dealtime<<"分鐘"<<endl;</p><p> cout<<"****** 早上六點(diǎn)開業(yè) ********\n";</p><p> system("pause");//任意鍵開始</p><p> srand((unsigned)time(
55、NULL));//產(chǎn)生隨機(jī)時(shí)間種子</p><p> for(i=0;;i++){</p><p> cout<<"*******************************\n";</p><p><b> //產(chǎn)生事件間隔</b></p><p> arrivetime+
56、=rand()%max_arrivetime;//隨機(jī)兩個(gè)事件到達(dá)的時(shí)間間隔上限</p><p> currenttime +=arrivetime ;//兩個(gè)事件到達(dá)的時(shí)間間隔上限給當(dāng)前時(shí)間</p><p> if(currenttime<=close_time)</p><p><b> {</b></p><
57、;p> temp.grap =arrivetime ;</p><p> temp.arriveTime = currentTime;</p><p> clientnum=i+1;//客戶序列號(hào)</p><p> cout<<"過(guò)了 "<<arrivetime <<" 分鐘"
58、<<endl;</p><p> cout<<"開業(yè)后 "<< currenttime <<" 分鐘 , 第"<<clientnum <<"客戶到達(dá)"<<endl;</p><p> //產(chǎn)生業(yè)務(wù)解決所需時(shí)間</p><p
59、> slovetime=rand()%dealtime;</p><p> temp.sloveTime = slovetime;</p><p> cout<<"處理該客戶業(yè)務(wù)需要 "<< slovetime <<"分鐘"<<endl;</p><p><b&
60、gt; //輸入用戶名</b></p><p> cout<<"******** 請(qǐng)輸入該客戶的其他信息 ************"<<endl;</p><p> cout<<"客戶名(exit表退出):"; </p><p> cin>>temp.nam
61、e;</p><p> if (strcmp(temp.name , "exit") == 0) break;</p><p> //產(chǎn)生存取款金額,并輸出</p><p> double money;</p><p> cout<<"輸入錢數(shù):"<<endl;</
62、p><p> cin>>money; //產(chǎn)生用戶所要辦理的錢</p><p> temp.deposit = money;</p><p> cout<<"需要辦理的業(yè)務(wù):"<<endl;</p><p> if (money > 0 ) cout<< te
63、mp.name <<"請(qǐng)求辦理存款 "<<money<<" 元"<<endl;//如果錢數(shù)大于0則請(qǐng)求辦理存款,否則請(qǐng)求辦理取款</p><p> else cout<< temp.name <<" 請(qǐng)求辦理取款 "<<fabs(money)<<"
64、 元"<<endl;</p><p><b> //鏈入鏈表</b></p><p> p = (LinkNode*) malloc(sizeof(LinkNode));//輸入下一個(gè)客戶業(yè)務(wù)辦理</p><p> p->data = temp;</p><p> p->next
65、 = NULL;</p><p> rear->next = p;</p><p><b> rear = p;</b></p><p> system("pause");</p><p><b> }</b></p><p><b&g
66、t; else </b></p><p><b> {</b></p><p> cout<<"*******************************\n";</p><p> cout<<"————時(shí)間已到停止辦理—————"<<endl
67、;</p><p> cout<<"*******************************\n";</p><p> cout<<"*******************************\n";</p><p> cout<<"***********一天的辦理
68、客戶業(yè)務(wù)記錄表****************"<<endl;</p><p> cout<<"****************************************************\n";</p><p><b> break;</b></p><p><b&g
69、t; }</b></p><p><b> }</b></p><p> return(head);</p><p> } //輸出一天之內(nèi)的營(yíng)業(yè)信息。</p><p><b> }</b></p><p> //-----
70、-----------定位客戶在事件表中的位置函數(shù)-------------------------------</p><p> LinkNode *Find(LinkList head, char name[]){ //尋找,定位客戶在事件表中的位置。</p><p> LinkNode* p;</p><p> p=head->ne
71、xt;</p><p> while( p != NULL){</p><p> if ( strcmp(p->data.name,name)==0) </p><p> return p; //返回值為指向該客戶地址的指針。</p><p> p = p->next;
72、</p><p><b> } </b></p><p> return NULL; //如果沒有找到,返回空</p><p><b> } </b></p><p> //------------------第二隊(duì)業(yè)務(wù)處理
73、------------------------------------------</p><p> void Queuetwo(LinkList L,LinkQueue *Q,int money) //對(duì)第二個(gè)隊(duì)的客戶進(jìn)行業(yè)務(wù)處理。</p><p><b> {</b></p><p> clientdeal M;<
74、/p><p> LinkList s;</p><p> while(!Empty(Q)&&money<totle_money)//第二個(gè)隊(duì)不空且現(xiàn)在的錢比該客戶上次取的時(shí)候錢多。</p><p><b> { </b></p><p> M=DeleteQueue(Q);</p>
75、<p> if(totle_money>=fabs(M.deposit))</p><p><b> {</b></p><p> totle_money+=M.deposit;</p><p> s=Find(L,M.name); //定位該客戶在事件表中的位置。</p><
76、p> if(M.arriveTime>currentTime)</p><p><b> { </b></p><p> s->data.arriveTime=currentTime;</p><p> s->data.waitTime=M.sloveTime;
77、 //計(jì)算客戶在銀行內(nèi)的停留時(shí)間和當(dāng)前時(shí)間。</p><p> currentTime=M.arriveTime+M.sloveTime;</p><p> cout<<"*******************************\n";</p><p> cout<<"第"<<
78、M.num<<"客戶"<<endl;</p><p> cout<<"用戶名為"<<M.name<<endl;</p><p> cout<<"到達(dá)"<<s->data.arriveTime<<"分鐘"&l
79、t;<endl;</p><p> cout<<"停留"<<s->data.waitTime<<"分鐘"<<endl;</p><p> cout<<currentTime<<"分鐘離開"<<endl;</p><
80、;p> cout<<"*******************************\n";</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p>
81、 s->data.arriveTime=currentTime;</p><p> s->data.waitTime=currentTime-M.arriveTime+M.sloveTime;</p><p> currentTime=currentTime+M.sloveTime;</p><p> cout<<"****
82、***************************\n";</p><p> cout<<"第"<<M.num<<"客戶"<<endl;</p><p> cout<<"用戶名為"<<M.name<<endl;</p>
83、<p> cout<<"到達(dá)"<<s->data.arriveTime<<"分鐘"<<endl;</p><p> cout<<"停留"<<s->data.waitTime<<"分鐘"<<endl;</p
84、><p> cout<<currentTime<<"分鐘離開"<<endl;</p><p> cout<<"*******************************\n";</p><p><b> }</b></p><p&
85、gt;<b> }</b></p><p><b> else</b></p><p><b> { </b></p><p> EnterQueue(Q,M); //若錢仍不夠該客戶需求,則該客戶繼續(xù)留在第二隊(duì)。</p><p> cout<<&qu
86、ot;第"<<clientnum<<"客戶"<<"繼續(xù)留在第二隊(duì)"<<endl;</p><p><b> }</b></p><p> }//while結(jié)束。</p><p><b> }</b></p>
87、<p> //-------------------------交易處理函數(shù)-------------------------------------</p><p> void dealwith(LinkNode *L,LinkQueue *P,LinkQueue *Q)//交易處理</p><p><b> {</b></p>&
88、lt;p> LinkNode *s,*n;</p><p><b> s=L;</b></p><p> currentTime=0;</p><p> clientnum=1;//辦理第一個(gè)客戶</p><p> totle_people=0;//初始時(shí)客戶總數(shù)</p><p>
89、; totle_money=10000;//初始時(shí)銀行資金總額</p><p> int money=0;</p><p> clientdeal M;</p><p> while(s->next!=NULL)</p><p><b> { </b></p><p> tot
90、le_people++;</p><p> EnterQueue(P,s->next->data); //統(tǒng)計(jì)事件表內(nèi)的信息,并且將它們?nèi)氲谝魂?duì)。</p><p> s=s->next;</p><p><b> }</b></p><p><b> s=L;</b&
91、gt;</p><p> n=s->next;</p><p> while(!Empty(P)&¤tTime<close_time) //若第一隊(duì)內(nèi)的等待人數(shù)不為零且未到關(guān)門時(shí)間,則執(zhí)行下面語(yǔ)句。</p><p><b> { </b></p><p> M=Dele
92、teQueue(P); //隊(duì)頭元素出隊(duì),準(zhǔn)備接受業(yè)務(wù)處理。</p><p> if(M.deposit>0) //存款或者還款業(yè)務(wù)。</p><p><b> {</b></p><p> money=totle_money;</p><p
93、> totle_money += M.deposit;</p><p> s=Find(L,M.name); //找到元素在事件表中的位置。</p><p> if(M.arriveTime>currentTime) //計(jì)算等待時(shí)間以及當(dāng)前時(shí)間。 </p><p><b> {</b><
94、;/p><p> s->data.arriveTime=currentTime;</p><p> s->data.waitTime=M.sloveTime;</p><p> currentTime=M.arriveTime+M.sloveTime;</p><p> cout<<"**********
95、*********************\n";</p><p> cout<<"第"<<clientnum<<"客戶"<<"到達(dá)"<<s->data.arriveTime<<"分鐘"<<endl;</p><
96、p> cout<<"第"<<clientnum<<"客戶"<<"停留"<<s->data.waitTime<<"分鐘"<<endl;</p><p> cout<<currentTime<<"分鐘離開b
97、ank"<<endl;</p><p> cout<<"*******************************\n";</p><p><b> }</b></p><p><b> else</b></p><p><b&
98、gt; {</b></p><p> s->data.arriveTime=currentTime;</p><p> s->data.waitTime=currentTime-M.arriveTime+M.sloveTime;</p><p> currentTime=currentTime+M.sloveTime;</p&g
99、t;<p> cout<<"*******************************\n";</p><p> cout<<"第"<<clientnum<<"客戶"<<"到達(dá)"<<s->data.arriveTime<<
100、"分鐘"<<endl;</p><p> cout<<"第"<<clientnum<<"客戶"<<"停留"<<s->data.waitTime<<"分鐘"<<endl;</p><p>
101、 cout<<currentTime<<"分鐘離開bank"<<endl;</p><p> cout<<"*******************************\n";</p><p><b> }</b></p><p> if(!Emp
102、ty(Q)) </p><p><b> {</b></p><p> cout<<"準(zhǔn)備處理第二隊(duì)中人的業(yè)務(wù)"<<endl; //如果第二隊(duì)中的人數(shù)不為零,則準(zhǔn)備處理第二隊(duì)中人的業(yè)</p><p> Queuetwo(L,Q,money);</
103、p><p><b> }}</b></p><p> else //取款或者貸款業(yè)務(wù)。</p><p><b> {</b></p><p> if(totle_money>fabs(M.deposit))
104、 //看錢是否夠取走。夠則取,不夠則入第二隊(duì)。 </p><p> {totle_money+=M.deposit;</p><p> s=Find(L,M.name);</p><p> s->data.waitTime=M.sloveTime;</p><p> currentTime=M.arrive
105、Time+M.sloveTime;</p><p> cout<<"*******************************\n";</p><p> cout<<"第"<<clientnum<<"客戶"<<"到達(dá)"<<s-&g
106、t;data.arriveTime<<"分鐘"<<endl;</p><p> cout<<"第"<<clientnum<<"客戶"<<"停留"<<s->data.waitTime<<"分鐘"<<en
107、dl;</p><p> cout<<currentTime<<"分鐘離開"<<endl;</p><p> cout<<"*******************************\n";</p><p><b> }</b></p>
108、;<p><b> else </b></p><p><b> { </b></p><p> M.num=clientnum;</p><p> EnterQueue(Q,M); //所取的錢數(shù)太多,不夠取出。入第二隊(duì)。 </p><p> cout<
109、<"第"<<clientnum<<"客戶"<<"繼續(xù)留在第二隊(duì)"<<endl;</p><p><b> }</b></p><p> } //else結(jié)束。</p><p> clientnum++;</p&g
110、t;<p> }//while結(jié)束。</p><p> }//dealwith結(jié)束。</p><p> //--------------------輸出函數(shù)-------------------------------------------</p><p> void output(LinkList L)
111、 //輸出最后結(jié)果。</p><p><b> {</b></p><p> totle_time=0;</p><p> LinkList s;</p><p><b> s=L;</b></p><p> while(s->next!=0)</p&
112、gt;<p> { //計(jì)算客戶在銀行內(nèi)呆的總時(shí)間。</p><p> totle_time+=s->next->data.waitTime;</p><p> s=s->next;</p><p><b> }</b></p><p> float
113、m=static_cast<float>(totle_time)/static_cast<float>(totle_people);//數(shù)值類型轉(zhuǎn)換。</p><p> cout<<"***************一天之內(nèi)的營(yíng)業(yè)信息如下*****************"<<endl;</p><p> cout<
114、;<"顧客呆的總時(shí)間為 "<<totle_time<<endl;</p><p> cout<<"一天之內(nèi)來(lái)的總顧客人數(shù)為 "<<totle_people<<endl;</p><p> cout<<"顧客呆的平均時(shí)間為 "<<m<
115、;<endl;</p><p><b> }</b></p><p> 4 ***********主函數(shù)****************************************</p><p> #include"bank.h"//----所需要頭文件</p><p> #inc
116、lude <iostream>//所需要C++頭文件</p><p> #include"stdio.h"</p><p> using namespace std;</p><p> //----------------------main()函數(shù)-----------------——————----------</p&
117、gt;<p> void main()</p><p><b> { </b></p><p> printf(" ********************************************\n");</p><p> printf(" 歡迎進(jìn)入銀行模擬系統(tǒng)\n");&
118、lt;/p><p> printf(" ********************************************\n");</p><p> printf("1.開始模擬 0.退出\n");</p><p><b> int n;</b></p><p> sc
119、anf("%d",&n);</p><p> while(n==1)</p><p><b> {</b></p><p> cout<<"開始進(jìn)行業(yè)務(wù)辦理------"<<endl; //程序開始。</p><p> cout&l
120、t;<"銀行每天營(yíng)業(yè)初始資金為10000元. 每日營(yíng)業(yè)時(shí)間為600分鐘."<<endl;</p><p> LinkList L; </p><p> LinkQueue P,Q; //P為第一個(gè)隊(duì)列,Q為第二個(gè)隊(duì)列.</p><p&
121、gt; InitQueue(&P); //隊(duì)列初始化。cout<<"After Init(P)"<<endl;</p><p> InitQueue(&Q); //隊(duì)列初始化。cout<<"After Init(Q)"<<endl;</p><p&g
122、t; L=input(); //建成事件表.函數(shù)返回值為事件表的首地址.</p><p> dealwith(L,&P,&Q);//處理客戶請(qǐng)求.首先將客戶排入第一隊(duì).</p><p> output(L);</p><p><b> }</b></p><p><b> }</
123、b></p><p> [2]各程序之間調(diào)用關(guān)系如下 :</p><p><b> ,</b></p><p> ?。?</p><p><b> .</b></p><p><b> 四、調(diào)試分析</b&g
124、t;</p><p> 1. 由于對(duì)隊(duì)列以及單鏈表的算法推敲不足,導(dǎo)致一些小錯(cuò)誤出現(xiàn)以及對(duì)題目不太理解導(dǎo)致算法錯(cuò)誤和調(diào)試結(jié)果的不正確;經(jīng)過(guò)老師的幫助和不斷閱讀題目,最后設(shè)計(jì)出正確的代碼。</p><p> 2. 剛開始時(shí)曾忽略了一些變量參數(shù)的標(biāo)識(shí)"*",使調(diào)試程序時(shí)費(fèi)時(shí)不少。今后應(yīng)多注意確定參數(shù)的變量和外部變量屬性的區(qū)分和標(biāo)識(shí)。</p><p&
125、gt; 3. 程序的模塊劃分比較合理,且盡可能將指針的操作封裝在動(dòng)態(tài)存儲(chǔ)和函數(shù)的兩個(gè)模塊中,致使主函數(shù)模塊的調(diào)試比較順利。反之,如此劃分的模塊并非完全合理,因?yàn)樵趯?shí)現(xiàn)隊(duì)列操作的編碼中仍然需要判別指針是否為空。</p><p> 4. 算法的時(shí)空分析</p><p> 1)由于程序采用單鏈表建立隊(duì)列,并增設(shè)頭指針和尾指針兩個(gè)標(biāo)識(shí),各種操作的算法時(shí)間復(fù)雜度比較合理。InitList,
126、InitQueue ,Empty, EnterQueue和clientdeal DeleteQueue算法的時(shí)間復(fù)雜度是O(l); input,output,Queuetwo和LinkNode Find定位客戶在事件表中的位置則是O(n)的;dealwith交易處理函數(shù)為O(n* n)n為鏈表長(zhǎng)度。</p><p><b> 注:各種函數(shù)</b></p><p>
127、 void InitList(LinkList *L);//建立單鏈表連,分配空間int InitQueue(LinkQueue *Q);//初始化隊(duì)列</p><p> int Empty(LinkQueue* Q);//判斷隊(duì)列是否為空,為空返回1,不為空返回0。</p><p> int EnterQueue(LinkQueue *Q,clientdeal x);//將客戶進(jìn)行入
128、隊(duì)。</p><p> clientdeal DeleteQueue(LinkQueue *Q); //出隊(duì)函數(shù)。</p><p> LinkList input() ; //輸入事件表信息</p><p> LinkNode *Find(LinkList head, char name[]); //尋找,定位客戶在事件表中的位置。
129、</p><p> void Queuetwo(LinkList L,LinkQueue *Q,int money) ; //對(duì)第二個(gè)隊(duì)的客戶進(jìn)行業(yè)務(wù)處理。</p><p> void dealwith(LinkNode L,LinkQueue P,LinkQueue Q);//交易處理</p><p> void output(LinkList L);//輸
130、出最后結(jié)果。</p><p> 2)表實(shí)現(xiàn)的隊(duì)列各種操作的時(shí)間復(fù)雜度分析如下:</p><p> [1] 建立單鏈表連InitList函數(shù)由于申請(qǐng)空間時(shí)一個(gè)一個(gè)申請(qǐng)不需要太多的時(shí)間,因此時(shí)間復(fù)雜度為O(1),空間復(fù)雜度為S(1)同理InitQueue初始化隊(duì)列的時(shí)間復(fù)雜度為O(1),空間復(fù)雜度為S(1)</p><p> [2] 入隊(duì)EnterQueue函數(shù)和
131、clientdeal DeleteQueue出隊(duì)函數(shù)由于隊(duì)列特點(diǎn)為先進(jìn)先出,有因?yàn)樵陉?duì)尾進(jìn),隊(duì)頭出所以時(shí)間復(fù)雜度為O(1),空間復(fù)雜度為S(0;,判斷隊(duì)列是否為空Empty時(shí)間復(fù)雜度為O(1),空間復(fù)雜度為S(0)。</p><p> [3] 輸入事件表信息input函數(shù)雖然用建立單鏈表連方法建立事件表,但又利用FOR語(yǔ)句實(shí)現(xiàn)操作,所以由分析可得時(shí)間復(fù)雜度為O(n) ,空間復(fù)雜度為S(n);對(duì)于output,Q
132、ueuetwo和LinkNode Find定位客戶在事件表中的位置的函數(shù)由于都需要先一個(gè)一個(gè)判斷是否滿足函數(shù)所規(guī)定的要求,應(yīng)用WHILE語(yǔ)句因此需要一個(gè)一個(gè)判斷所以時(shí)間復(fù)雜度為O(n); 空間復(fù)雜度為S(0).</p><p> [4] dealwith交易處理函數(shù)先要一個(gè)一個(gè)處理,同時(shí)有調(diào)用LinkNode Find函數(shù)以及Queuetwo函數(shù)又要逐步判斷是否為空隊(duì),空間復(fù)雜度較為復(fù)雜,經(jīng)過(guò)分析時(shí)間復(fù)雜度為O
133、(n* n) ,空間復(fù)雜度為S(n+n)。</p><p> 5. 本實(shí)習(xí)作業(yè)采用數(shù)據(jù)抽象(c++)的程序設(shè)計(jì)方法,將程序劃分為三個(gè)層次結(jié)構(gòu);主程序模塊,動(dòng)態(tài)存儲(chǔ)結(jié)構(gòu)模塊,函數(shù)模塊。使得設(shè)計(jì)時(shí)思路清晰,實(shí)現(xiàn)時(shí)調(diào)試順利。各模塊具有較好的可重用性。經(jīng)過(guò)本次實(shí)驗(yàn)充分得到了一次良好的程序設(shè)計(jì)訓(xùn)練,而且獲得到學(xué)多知識(shí)例如srand((unsigned) time(&t)) 用來(lái)設(shè)置隨機(jī)時(shí)間的種子,一般與rand
134、()結(jié)合使用;以及system含義以及用法等等也進(jìn)一步掌握了隊(duì)列和鏈表的應(yīng)用。</p><p><b> 五、用戶手冊(cè)</b></p><p> 1.本程序的運(yùn)行環(huán)繞為XP下的程序名為“bank.cpp”,運(yùn)行環(huán)境為Microsoft Visual 6.0 C++。</p><p> 2進(jìn)入演示程序后即顯示的用戶界面;</p>
135、<p> *************************************************************************</p><p> 歡迎進(jìn)入銀行模擬系統(tǒng)</p><p> *************************************************************************</
136、p><p> 1 開始模擬 0退出</p><p><b> 1 </b></p><p> 開始進(jìn)行業(yè)務(wù)辦理--------------</p><p> 銀行每天營(yíng)業(yè)初始資金為10000元,每日營(yíng)業(yè)時(shí)間為600分鐘</p><p> **************** 建立事件表 ***
溫馨提示
- 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)銀行業(yè)務(wù)模擬
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告---銀行業(yè)務(wù)模擬
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告-銀行業(yè)務(wù)模擬
- 銀行業(yè)務(wù)模擬課程設(shè)計(jì)
- 銀行業(yè)務(wù)模擬系統(tǒng)課程設(shè)計(jì)
- 銀行業(yè)務(wù)活動(dòng)的模擬課程設(shè)計(jì)
- 銀行業(yè)務(wù)活動(dòng)的模擬課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---銀行模擬系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)(銀行模擬系統(tǒng))
- 《銀行業(yè)務(wù)模擬實(shí)訓(xùn)》課程的改革方案
- 投資銀行業(yè)務(wù)-結(jié)構(gòu)融資
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--編制一個(gè)演示集合的并、交和差運(yùn)算的程序
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---以鄰接鏈表的方式確定一個(gè)無(wú)向網(wǎng)
- 銀行業(yè)務(wù)分析報(bào)告
- 私人銀行業(yè)務(wù)淺析
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)----行編輯程序
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--電梯模擬
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)----huffman編碼
- 面向銀行業(yè)務(wù)的數(shù)據(jù)平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn).pdf
- 數(shù)據(jù)挖掘在銀行業(yè)務(wù)中的應(yīng)用.pdf
評(píng)論
0/150
提交評(píng)論