醫院病床安排算法_第1頁
醫院病床安排算法_第2頁
醫院病床安排算法_第3頁
醫院病床安排算法_第4頁
醫院病床安排算法_第5頁
已閱讀5頁,還剩11頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

TOC\o"1-5"\h\z目錄 I\o"CurrentDocument"1課程設計內容 1\o"CurrentDocument"1.1課程設計目的 1\o"CurrentDocument"1.2課程設計要求 1\o"CurrentDocument"1.3課程設計背景 1\o"CurrentDocument"2概要設計 2\o"CurrentDocument"2.1程序模塊結構圖 2\o"CurrentDocument"2.2主界面模塊說明 2\o"CurrentDocument"2.3病人模塊說明 22.3.1病人數據模塊說明 22.3.2狀態顯示模塊說明 22.3.3病人初始化模塊說明 22.3.4看病模塊(遞歸)說明 2\o"CurrentDocument"2.4系統模塊說明 22.4.1系統界面模塊說明 22.4.2隨機數模塊說明 32.4.3隊列處理模塊說明 3\o"CurrentDocument"3詳細設計 4\o"CurrentDocument"3.1主程序的實現 4\o"CurrentDocument"3.2病人模塊的實現 43.2.1病人數據模塊的實現 43.2.2狀態顯示模塊的實現 43.2.3病人初始化模塊的實現 53.2.4看病模塊的實現 7\o"CurrentDocument"3.3系統模塊的實現 83.3.1系統界面模塊的實現 83.3.2隨機數模塊的實現. 83.3.3隊列處理模塊的實現 8\o"CurrentDocument"4運行結果 11\o"CurrentDocument"4.1輸入 11\o"CurrentDocument"4.2模擬病人看病流程 11\o"CurrentDocument"小結 14\o"CurrentDocument"參考文獻 151課程設計內容1.1課程設計目的1) 課程設計題目:醫院病床安排2) 需求分析:根據自己的選題,書寫相關的文字說明。3) 總體結構設計:繪制所選題目系統的功能模塊圖(函數)及相關說明。4) 各子模塊設計:各子模塊的程序流程圖及相關說明。5) 編程實現:選定C或C++語言對各子模塊進行編程并進行集成。6) 測試結果:輸入數據、輸出結果的圖示。7) 總結:總結課程設計的過程、體會及建議。1.2課程設計要求隨機產生n個病人,現醫院有m張病床,m張病床上當前已經有p(p<=m)位正在住院的病人,每個已經住院或準備住院的病人都有對應自身的住院時長。合理安排所有病人,使所有病人在最短等待時間完成住院治療。病人看病的流程是:掛號,排隊等待安排住院時間,住院,手術,出院等幾個階段。醫院實行先到先服務的原則。既如果問診時有剩余床位,可立即入住,如果沒有,則排隊等待,同時醫院對急診病人有特殊照顧,如果是外傷,則不需要排隊,可直接接受服務。既外傷病人有較高的優先權。其排隊流程可如下圖所示:輸”四口判斷肉邛蟹:入住|恒和忡町輸出景,立熟入在因為病人n是確定的常數,我們在分析該問題時不考慮后面病人的增加,平均等待時間=總等待時間/病人總數,因為病人總數n是確定的,所以只要下去分析如何使總等待時間最小就行。1.3課程設計背景醫院病床利用統計是醫院信息管理最活躍的要素之一,合理分析床位利用情況對于提高醫院經濟效益,改善病房管理,挖掘潛力增強服務能力等有十分重要的意義。當該住院部對全體非急癥病人是按照FCFS(Firstcome,Firstserve)規則安排住院,但等待住院病人隊列卻越來越長,醫院希望能通過某種方式來解決該住院部的病床合理安排問題,以提高對醫院資源的有效利用。為此,我們引進高響應比優先(High-priorityresponseratio)算法。2概要設計2.1程序模塊結構圖馨獲取隊首||插入隊首馨獲取隊首||插入隊首||插入隊尾冊U除指定病人繆£排序看病模塊(遞歸)病人初始化模塊狀態顯示模塊病人數據模塊2.2主界面模塊說明主界面模塊提供本程序的功能菜單,使本程序各個功能一目了然,給用戶一個直觀的使用體驗,方便用戶簡單快捷的使用本程序。2.3病人模塊說明2.3.1病人數據模塊說明這個模塊用struct包裝病人數據,并放在3個隊列中。一個是未入院病人列表,一個是等待病人列表,另一個是正在治療列表。2.3.2狀態顯示模塊說明這個模塊用于實現顯示所有病人的實時狀態,通過列表的方式直觀的顯示在界面上。2.3.3病人初始化模塊說明這個模塊用于初始化所有病人數據,同時建立3個隊列。2.3.4看病模塊(遞歸)說明這個模塊用于實現對病人的處理以及調動。2.4系統模塊說明2.4.1系統界面模塊說明這個模塊用于顯示系統的標題畫面,以及等待畫面。2.4.2隨機數模塊說明這個模塊用于生成隨機數來支持病人初始化模塊的運行。2.4.3隊列處理模塊說明這個模塊用于處理病人隊列,實現對病人隊列的插入、取出、刪除、排序等功能,來支持看病模塊中對病人的3個隊列處理。3詳細設計3.1主程序的實現主程序通過獲得輸入數據和調用其他模塊來實現整個系統的功能。以上過程的主要實現代碼如下:#include<iostream>#include"patient.h"intmain(intargc,char**argv){intn,m,p,w=0; //n:未看病病人,m:病床數,p:已入住病人,w:等待人數patientinList[100];//未看病病人列表patientwaitList[100]; 〃等待列表patienttreatList[100];〃治療列表////////病人初始化//////////patient_init(&n,&m,&p,&w,inList,waitList,treatList);////////看病//////////see_doctor(&n,m,&p,&w,inList,waitList,treatList);return0;}3.2病人模塊的實現3.2.1病人數據模塊的實現用struct包裝病人數據。以上過程主要實現代碼如下:structpatient{intid;inttreatTime;boolemergency;};3.2.2狀態顯示模塊的實現在界面上直觀的顯示所有病人的實時狀態。以上過程主要實現代碼如下:////////////////////病人顯示/////////////////////voidpatient_display(intn,intm,intp,intw,patient*inList,patient*waitList,patient*treatList){boolflag1,flag2,flag3;std::cout<<"未入院病人 等待中病人 治療中病人"<<std::endl;std::cout<<"idtimeemergencyidtimeemergencyidtime"<<std::endl;for(inti=0;i<100;i++){//////////輸出未入院病人///////////if(i<n){flag1=false;std::cout<<inList[i].id<<""<<inList[i].treatTime<<"";if(inList[i].emergency==true)std::cout<<"true\t\t";elsestd::cout<<"false\t\t";}else{flag1=true;std::cout<<"\t\t\t";}///////////輸出等待中病人////////////////if(i<w){flag2=false;std::cout<<waitList[i].id<<""<<waitList[i].treatTime<<""if(waitList[i].emergency==true)std::cout<<"true\t\t";elsestd::cout<<"false\t\t";}else{flag2=true;std::cout<<" ";}///////////輸出治療中病人////////////////////if(i<p){flag3=false;std::cout<<treatList[i].id<<""<<treatList[i].treatTime;}else{flag3=true;std::cout<<"";}///////////換行/////////////////////std::cout<<std::endl;if(flag1==true&&flag2==true&&flag3==true)break;}}3.2.3病人初始化模塊的實現初始化所有病人的數據,同時建立3個關鍵列表。以上過程主要實現代碼如下://////病人初始化///////////////voidpatient_init(int*n,int*m,int*p,int*w,patient*inList,patient*waitList,patient*treatList){///////////////////////////輸入/////////////////////////////////////////boolflag=false;while(!flag){system("cls");sys_display();std::cout<<"輸入_病人數:";std::cin>>*n;std::cout<<"輸入_病床數:";std::cin>>*m;std::cout<<"輸入_已入住病人數:";std::cin>>*p;if(*p<=*m){flag=true;}else{std::cout<<"error:輸入錯誤!"<<std::endl;Sleep(2000);}}/////////////////////////創建病人//////////////////////////////////////for(inti=0;i<*p;i++){ 〃創建正在被治療的病人treatList[i].id=i;treatList[i].treatTime=random(20);sys_handle();Sleep(200);}for(inti=0;i<*n;i++){ 〃創建尚未入院的病人inList[i].id=i+*p;inList[i].treatTime=random(20);if(random(2)==1)inList[i].emergency=true;elseinList[i].emergency=false;sys_handle();Sleep(200);3.2.4看病模塊的實現這個模塊用于實現對病人的處理以及調動。以上過程主要實現代碼如下:intdoctor_time=0;/////////////病人看病//////////////voidsee_doctor(int*n,intm,int*p,int*w,patient*inList,patient*waitList,patient*treatList){doctor_time++;system("cls");sys_display();std::cout<<"Time:"<<doctor_time<<std::endl;//std::cout<<m<<std::endl;std::cout<<" "<<std::endl;patient_display(*n,m,*p,*w,inList,waitList,treatList);patientindat;///////////如果為入院病人>0貝0進入等待隊列///////if(*n>0){indat=pop(n,inList);if(indat.emergency==true){push_front(w,waitList,indat);}elsepush_back(w,waitList,indat);}//////////正在治療的病人treatTime--/////////////for(inti=0;i<*p;i++){if(treatList[i].treatTime>0)treatList[i].treatTime--;elsedel(p,treatList,i);}//////////如果存在空余病房貝0等待病人入院///////if(*p<m){if(*w>0){indat=pop(w,waitList);push_back(p,treatList,indat);}}sort(*w,waitList);Sleep(1000);if(*p>0)see_doctor(n,m,p,w,inList,waitList,treatList);}3.3系統模塊的實現3.3.1系統界面模塊的實現這個模塊用于顯示系統的標題畫面,以及等待畫面以上過程主要實現代碼如下:voidsys_display()(std::cout<<"**********************************************************"<<std::endl;std::cout<<"* 醫院病床安排算法 *"<<std::endl;std::cout<<"**********************************************************"<<std::endl;}///////////////////////////顯示正在處理/////////////////////////////////////intsys_sign=0;chardelaySign[]={'-','\\','|','/'};voidsys_handle(){system("cls");sys_display();std::cout<<"正在處理..."<<delaySign[sys_sign]<<std::endl;sys_sign++;if(sys_sign==4)sys_sign=0;}3.3.2隨機數模塊的實現這個模塊用于用于生成隨機數來支持病人初始化模塊的運行。以上過程主要實現如下代碼:///////////產生隨機數///////////intrandom(intend){srand((int)time(NULL)); 〃每次執行種子不同,生成不同的隨機數returnrand()%end+1;}3.3.3隊列處理模塊的實現這個模塊用于處理病人隊列,實現對病人隊列的插入、取出、刪除、排序等功能,來支持看病模塊中對病人的3個隊列處理。以上過程主要實現代碼如下://////////////獲取隊首//////////////patientpop(int*n,patient*inList){patientoutdat=inList[0];outdat.emergency=inList[0].emergency;patientdatx;*n=*n-1;for(inti=0;i<*n;i++){datx=inList[i];inList[i]=inList[i+1];inList[i+1]=datx;}returnoutdat;}/////////////添加到隊首(專用于加入等待隊列)/////////////voidpush_front(int*n,patient*inList,patientindat){patientdatx;intj=0;for(j=0;j<*n;j++){if(inList[j].emergency==false)break;}for(inti=*n;i>j;i--){datx=inList[i];inList[i]=inList[i-1];}*n=*n+1;inList[j]=indat;}///////////添加到隊尾///////////////voidpush_back(int*n,patient*inList,patientindat){inList[*n]=indat;*n=*n+1;}///////////刪除指定id病人///////////voiddel(int*n,patient*inList,intix){*n=*n-1;for(inti=ix;i<*n;i++){inList[i]=inList[i+1];}}///////////排序(等待隊列專用)/////////voidsort(intn,patient*inList){intem=n;for(inti=0;i<n;i++){if(inList[i].e

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論