已閱讀5頁(yè),還剩5頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告 題目:銀行業(yè)務(wù)活動(dòng)的模擬 一、 實(shí)驗(yàn)?zāi)康?銀行業(yè)務(wù)活動(dòng)的模擬任務(wù):假設(shè)某銀行有4個(gè)窗口對(duì)外接待客戶,從早晨銀行開(kāi)門(mén)起不斷有客戶進(jìn)入銀行,由于每個(gè)窗口在某個(gè)時(shí)刻只能接待一個(gè)客戶。因此在客戶人數(shù)眾多時(shí)需要在每個(gè)窗口前順次排隊(duì),對(duì)于剛進(jìn)入銀行的客戶。如果某個(gè)窗口的業(yè)務(wù)員正空閑,則可上前輸業(yè)務(wù)。反之,若個(gè)窗口均有客戶所占,他便會(huì)排在為數(shù)最少的隊(duì)伍后面。編制一個(gè)程序模擬銀行的這種業(yè)務(wù)活動(dòng)并計(jì)算一天中客戶在銀行的平均逗留時(shí)間。功能要求:1).實(shí)現(xiàn)數(shù)據(jù)的輸入;2).各個(gè)窗口數(shù)據(jù)的訪問(wèn)和輸出;3)當(dāng)前窗口的人員分布情況動(dòng)態(tài)顯示。界面要求:有合理的提示,每個(gè)功能可以設(shè)立菜單,根據(jù)提示,可以完成相關(guān)的功能要求。存儲(chǔ)結(jié)構(gòu):學(xué)生自己根據(jù)系統(tǒng)功能要求自己設(shè)計(jì)。請(qǐng)?jiān)谧詈蟮纳辖毁Y料中指明你用到的存儲(chǔ)結(jié)構(gòu);測(cè)試數(shù)據(jù):要求使用1、全部合法數(shù)據(jù);2、整體非法數(shù)據(jù);3、局部非法數(shù)據(jù)。進(jìn)行程序測(cè)試,以保證程序的穩(wěn)定。測(cè)試數(shù)據(jù)及測(cè)試結(jié)果請(qǐng)?jiān)谏辖坏馁Y料中寫(xiě)明;二、 總體設(shè)計(jì) 1.設(shè)計(jì)原理: 為了計(jì)算平均時(shí)間,就要掌握每個(gè)客戶到達(dá)銀行和離開(kāi)銀行這兩個(gè)時(shí)刻,后者減去前者即為每個(gè)客戶在銀行逗留的時(shí)間。所有客戶逗留時(shí)間的總和被一天內(nèi)進(jìn)入銀行的客戶數(shù)除便是所求的平均時(shí)間。 事件的主要信息是事件類型和事件發(fā)生的時(shí)刻,算法中要處理的事件有兩類:一類是客戶到達(dá)的時(shí)間,另一類是客戶離開(kāi)的時(shí)間。前一類事件發(fā)生的時(shí)刻隨客戶到來(lái)自然形成,后一類事件發(fā)生時(shí)刻則由客戶事務(wù)所需時(shí)間 和等待所耗時(shí)間而定。由于驅(qū)動(dòng)程序是按時(shí)間發(fā)生時(shí)刻的先后順序進(jìn)行,則事件表應(yīng)該是有序表,其主要操作是插入和刪除事件。2.設(shè)計(jì)方案及流程 由于在實(shí)際的銀行中,客戶到達(dá)的時(shí)刻及其辦理事務(wù)所需時(shí)間都是隨機(jī)的,在模擬程序中可用隨機(jī)數(shù)代替,不失一般性。假設(shè)第一個(gè)客戶進(jìn)門(mén)的時(shí)刻為0,即是模擬程序處理的第一個(gè)事件,之后每個(gè)客戶到達(dá)的時(shí)刻在前一個(gè)客戶到達(dá)時(shí)設(shè)定。因此在客戶到達(dá)事件發(fā)生時(shí)需先產(chǎn)生兩個(gè)隨機(jī)數(shù):其一為此時(shí)刻到達(dá)的客戶辦理事務(wù)所需時(shí)間durtime;其二為下一個(gè)客戶將到達(dá)的時(shí)間間隔intertime,假設(shè)當(dāng)前事件發(fā)生的時(shí)刻為occurtime,則下一個(gè)客戶到達(dá)事件發(fā)生的時(shí)刻為occurtime+intertime。由此應(yīng)產(chǎn)生一個(gè)新的客戶到達(dá)時(shí)間插入表;剛到達(dá)的客戶則應(yīng)插入到當(dāng)前所含元素最少的隊(duì)列中;若該隊(duì)列在插入前為空,則還應(yīng)產(chǎn)生一個(gè)客戶離開(kāi)事件插入事件表。 客戶離開(kāi)時(shí)間的處理比較簡(jiǎn)單。首先計(jì)算該客戶在銀行逗留的時(shí)間,然后從隊(duì)列中刪除該客戶后查看隊(duì)列是否為空,若不空則設(shè)定一個(gè)新的隊(duì)頭客戶離開(kāi)事件。三、 實(shí)驗(yàn)步驟 第1次:完成程序的主框架設(shè)計(jì),進(jìn)行調(diào)試,驗(yàn)證其正確性;第2次:詳細(xì)設(shè)計(jì),進(jìn)行調(diào)試,驗(yàn)證其正確性;第3次:進(jìn)行整體調(diào)試,運(yùn)行程序,對(duì)運(yùn)行結(jié)果進(jìn)行分析,完成實(shí)驗(yàn)報(bào)告。程序代碼如下:#include#include / malloc()等#include #include#include #define TRUE 1#define FALSE 0#define OK 1#define ERROR 0typedef int Status; / Status是函數(shù)的類型,其值是函數(shù)結(jié)果狀態(tài)代碼,如OK等#define Qu 4 / 客戶隊(duì)列數(shù)typedef struct int OccurTime; / 事件發(fā)生時(shí)刻 int NType; Event,ElemType;typedef struct LNode ElemType data; LNode *next; *Link,*Position;struct LinkList / 鏈表類型 Link head,tail; int len; ;typedef struct int ArrivalTime; / 到達(dá)時(shí)刻 int Duration; / 辦理事務(wù)所需時(shí)間QElemType; / 定義QElemType(隊(duì)列的數(shù)據(jù)元素類型)為結(jié)構(gòu)體類型;typedef struct QNode QElemType data; QNode *next;*QueuePtr;struct LinkQueue QueuePtr front,rear; / 隊(duì)頭、隊(duì)尾指針;typedef LinkList EventList; / 事件鏈表類型,定義為有序鏈表EventList ev; / 事件表Event en; / 事件Event et; / 臨時(shí)變量LinkQueue qQu; / Qu個(gè)客戶隊(duì)列QElemType customer; / 客戶記錄int TotalTime=0,CustomerNum=0; / 累計(jì)客戶逗留時(shí)間,客戶數(shù)(初值為0)int CloseTime; / 銀行營(yíng)業(yè)時(shí)間(單位是分)/對(duì)鏈表的操作:Status InitList(LinkList &L) / 構(gòu)造一個(gè)空的線性鏈表 Link p; p=(Link)malloc(sizeof(LNode); / 生成頭結(jié)點(diǎn) if(p) p-next=NULL; L.head=L.tail=p; L.len=0; return OK; else return ERROR;Status DelFirst(LinkList &L,Link h,Link &q) q=h-next; if(q) / 鏈表非空 h-next=q-next; if(!h-next) / 刪除尾結(jié)點(diǎn) L.tail=h; / 修改尾指針 L.len-; return OK; else return FALSE; / 鏈表空ElemType GetCurElem(Link p) / 已知p指向線性鏈表中的一個(gè)結(jié)點(diǎn),返回p所指結(jié)點(diǎn)中數(shù)據(jù)元素的值 return p-data;Status ListEmpty(LinkList L) if(L.len) return FALSE; else return TRUE;int ListLength(LinkList L) return L.len;Position GetHead(LinkList L) / 返回線性鏈表L中頭結(jié)點(diǎn)的位置 return L.head;Status OrderInsert(LinkList &L,ElemType e,int (*comp)(ElemType,ElemType) / 已知L為有序線性鏈表,將元素e按非降序插入在L中。 Link o,p,q; q=L.head; p=q-next; while(p!=NULL&comp(p-data,e)next; o=(Link)malloc(sizeof(LNode); / 生成結(jié)點(diǎn) o-data=e; / 賦值 q-next=o; / 插入 o-next=p; L.len+; / 表長(zhǎng)加1 if(!p) / 插在表尾 L.tail=o; / 修改尾結(jié)點(diǎn) return OK;/對(duì)隊(duì)列的操作:Status InitQueue(LinkQueue &Q) / 構(gòu)造一個(gè)空隊(duì)列Q if(!(Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode) exit(OVERFLOW); Q.front-next=NULL; return OK;Status QueueEmpty(LinkQueue Q) / 若Q為空隊(duì)列,則返回TRUE,否則返回FALSE if(Q.front=Q.rear) return TRUE; else return FALSE;int QueueLength(LinkQueue Q) / 求隊(duì)列的長(zhǎng)度 int i=0; QueuePtr p; p=Q.front; while(Q.rear!=p) i+; p=p-next; return i;Status GetHead(LinkQueue Q,QElemType &e) / 若隊(duì)列不空,則用e返回Q的隊(duì)頭元素,并返回OK,否則返回ERROR QueuePtr p; if(Q.front=Q.rear) return ERROR; p=Q.front-next; e=p-data; return OK; Status EnQueue(LinkQueue &Q,QElemType e) / 插入元素e為Q的新的隊(duì)尾元素 QueuePtr p; if(!(p=(QueuePtr)malloc(sizeof(QNode) / 存儲(chǔ)分配失敗 exit(OVERFLOW); p-data=e; p-next=NULL; Q.rear-next=p; Q.rear=p; return OK;Status DeQueue(LinkQueue &Q,QElemType &e) / 若隊(duì)列不空,刪除Q的隊(duì)頭元素,用e返回其值,并返回OK,否則返回ERROR QueuePtr p; if(Q.front=Q.rear) return ERROR; p=Q.front-next; e=p-data; Q.front-next=p-next; if(Q.rear=p) Q.rear=Q.front; free(p); return OK;int cmp(Event a,Event b) / 依事件a的發(fā)生時(shí)刻事件b的發(fā)生時(shí)刻分別返回-1、0或1 if(a.OccurTime=b.OccurTime) return 0; else return (a.OccurTime-b.OccurTime)/abs(a.OccurTime-b.OccurTime);void OpenForDay() / 初始化操作 int i; InitList(ev); / 初始化事件鏈表為空 en.OccurTime=0; / 設(shè)定第一個(gè)客戶到達(dá)事件 en.NType=Qu; / 到達(dá) OrderInsert(ev,en,cmp); / 插入事件表 for(i=0;iQu;+i) / 置空隊(duì)列 InitQueue(qi);void Random(int &d,int &i) d=rand()%30+1; / 1到30之間的隨機(jī)數(shù) 每個(gè)客戶辦理業(yè)務(wù)的時(shí)間最大值30 i=rand()%5+1; / 1到5之間的隨機(jī)數(shù) 兩相鄰到達(dá)的客戶的時(shí)間間隔最大值5int Minimum(LinkQueue Q) / 返回最短隊(duì)列的序號(hào) int tQu; int i,k; for(i=0;iQu;i+) ti=QueueLength(Qi); k=0; for(i=1;iQu;i+) if(tit0) t0=ti; k=i; return k;void CustomerArrived() / 處理客戶到達(dá)事件,en.NType=Qu QElemType f; int durtime,intertime,i; +CustomerNum; Random(durtime,intertime); / 生成隨機(jī)數(shù) et.OccurTime=en.OccurTime+intertime; / 下一客戶到達(dá)時(shí)刻 et.NType=Qu; / 隊(duì)列中只有一個(gè)客戶到達(dá)事件 if(et.OccurTimeCloseTime) / 銀行尚未關(guān)門(mén),插入事件表 OrderInsert(ev,et,cmp); i=Minimum(q); / 求長(zhǎng)度最短隊(duì)列 f.ArrivalTime=en.OccurTime; f.Duration=durtime; EnQueue(qi,f); if(QueueLength(qi)=1) et.OccurTime=en.OccurTime+durtime; et.NType=i; OrderInsert(ev,et,cmp); / 設(shè)定第i隊(duì)列的一個(gè)離開(kāi)事件并插入事件表 void CustomerDeparture() int i; i=en.NType; DeQueue(qi,customer); / 刪除第i隊(duì)列的排頭客戶 TotalTime+=en.OccurTime-customer.ArrivalTime; / 累計(jì)客戶逗留時(shí)間 if(!QueueEmpty(qi) / 設(shè)定第i隊(duì)列的一個(gè)離開(kāi)事件并插入事件表 GetHead(qi,customer); et.OccurTime=en.OccurTime+customer.Duration; et.NType=i; OrderInsert(ev,et,cmp); void Bank_Simulation() Link p; OpenForDay(); / 初始化 while(!ListEmpty(ev) DelFirst(ev,GetHead(ev),p); en.OccurTime=GetCurElem(p).OccurTime; en.NType=GetCurElem(p).NT
溫馨提示
- 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026北京協(xié)和醫(yī)院緩和醫(yī)學(xué)中心合同制行政助理招聘?jìng)淇碱}庫(kù)帶答案詳解(輕巧奪冠)
- 2026上半年安徽事業(yè)單位聯(lián)考懷遠(yuǎn)縣筆試招聘58人備考題庫(kù)及答案詳解一套
- 2026上海復(fù)旦大學(xué)計(jì)算與智能創(chuàng)新學(xué)院招聘專任高級(jí)工程師1人備考題庫(kù)及答案詳解(必刷)
- 2026內(nèi)蒙古能源集團(tuán)有限公司所屬部分單位招聘工作人員272名備考題庫(kù)及答案詳解(有一套)
- 2026廣東事業(yè)單位招聘(公基)筆試題目及答案
- 2026年度上海中醫(yī)藥大學(xué)公開(kāi)招聘?jìng)淇碱}庫(kù)附參考答案詳解(研優(yōu)卷)
- 2026四川綿陽(yáng)文化旅游發(fā)展投資集團(tuán)有限公司招聘投資管理崗等崗位的3人備考題庫(kù)含答案詳解(達(dá)標(biāo)題)
- 2026內(nèi)蒙古鄂爾多斯東勝區(qū)萬(wàn)佳小學(xué)招聘英語(yǔ)教師1人備考題庫(kù)含答案詳解(滿分必刷)
- 2026天津職業(yè)技術(shù)師范大學(xué)第三批招聘方案(高技能人才崗位)2人備考題庫(kù)含答案詳解(完整版)
- 2026廣東廣州市中山大學(xué)附屬口腔醫(yī)院工勤人員招聘1人備考題庫(kù)附答案詳解(黃金題型)
- QC/T 262-2025汽車滲碳齒輪金相檢驗(yàn)
- T-CFLP 0016-2023《國(guó)有企業(yè)采購(gòu)操作規(guī)范》【2023修訂版】
- 谷雨生物2024環(huán)境、社會(huì)及管治(ESG)報(bào)告
- 2025金風(fēng)變流器2.0MW故障代碼手冊(cè)V4
- 龍湖物業(yè)培訓(xùn)課件
- 反詐知識(shí)競(jìng)賽題庫(kù)附答案(150 題)
- 2025年注冊(cè)可靠性工程師資格認(rèn)證考試題庫(kù)500題(含真題、重點(diǎn)題)
- 個(gè)人購(gòu)房合同樣本大全
- T-CBMF 91-2020 T-CCPA 17-2020 城市綜合管廊結(jié)構(gòu)混凝土應(yīng)用技術(shù)規(guī)程
- 電力配網(wǎng)工程各種材料重量表總
- 抗菌藥物臨床應(yīng)用指導(dǎo)原則
評(píng)論
0/150
提交評(píng)論