版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、2.病人就醫(yī)管理 1.目標(biāo)與要求編寫一個程序,反應(yīng)病人到醫(yī)院看病,排隊看醫(yī)生的情況。在病人排隊的過程中,主要發(fā)生兩件事。(1)病人到達診室,將病歷本交給護士,拍到等待隊列中候診。(2)護士從等待隊列中取出以為病人的病歷,該病人進入診室就診。要求程序采用菜單方式,其選項及功能說明如下。(1)排隊輸入病人的病歷號,加入到病人排隊隊列中。(2)就診病人排列隊列中最前面的病人就診,并將其從隊列中刪除。(3)查看排隊從隊首到隊尾列出所有的排隊病人的病歷號。(4)下班退出運行。 2.工具、準(zhǔn)備工作 在實驗開始前,應(yīng)回顧或復(fù)習(xí)相關(guān)內(nèi)容。需要一臺計算機,其中安裝有Visual C+ 6.0、Visual c+
2、 2005、Visual C+ 2005 Express Dev-c+或MinGW Developer Studio等集成開發(fā)環(huán)境軟件 3.實驗分析 4.代碼如下: /頭文件:hospitalize.h #ifndef _HOSPITALIZE_H_#define _HOSPITALIZE_H_#include lk_queue.h/ 鏈隊列/ 行醫(yī)類class Hospitalizeprivate:/ 行醫(yī)類的數(shù)據(jù)成員:LinkQueue queue;/ 病人隊列/ 輔助函數(shù)void StandInALine();/ 排隊void Cure();/ 就診void Display();/ 查看
3、排隊public:/ 方法聲明及重載編譯系統(tǒng)默認方法聲明:Hospitalize();/ 無參數(shù)的構(gòu)造函數(shù)Hospitalize();/ 析構(gòu)函數(shù)void Work();/ 醫(yī)生工作;/ 行醫(yī)類的實現(xiàn)部分void Hospitalize:StandInALine()/ 操作結(jié)果: 輸入排隊病人的病歷號,加入到病人排隊隊列中unsigned int num;/ 病歷號cout num;/ 輸入排隊病人queue.InQueue(num);/ 將病歷號加入到病人排隊隊列中void Hospitalize:Cure()/ 操作結(jié)果: 病人排隊隊列中最前面的病人就診,并將其從隊列中刪除if (queu
4、e.Empty()/ 無病人cout 現(xiàn)已沒有病人在排隊了! endl;elseunsigned int num;/ 病歷號queue.OutQueue(num);/ 病人排隊隊列中最前面的病人就診,并將其從隊列中刪除cout num 號病人現(xiàn)在就醫(yī). endl;void Hospitalize:Display()/ 操作結(jié)果: 從隊首到隊尾列出所有的排隊病人的病歷號queue.Traverse(Write);/ 從隊首到隊尾列出所有的排隊病人的病歷號cout endl;void Hospitalize:Work()/ 操作結(jié)果: 醫(yī)生工作int select = 0;while (selec
5、t != 4)cout 1. 排隊-輸入病人的病歷號,加入到病人隊列中 endl;cout 2. 就診-病人排隊隊列中最前面的病人就診,并將其從隊列中刪除 endl;cout 3. 查看排隊-從隊首到隊尾列出所有的排隊病人的病歷號 endl;cout 4. 下班-退出運行 endl;cout select;/ 選擇功能switch(select)case 1:StandInALine();/ 排隊-輸入病人的病歷號,加入到病人隊列中break;case 2:Cure();/ 就診-病人排隊隊列中最前面的病人就診,并將其從隊列中刪除break;case 3:Display();/ 查看排隊-從隊
6、首到隊尾列出所有的排隊病人的病歷號break;#endif/頭文件:lk_queue.h#ifndef _LK_QUEUE_H_#define _LK_QUEUE_H_#include utility.h/ 實用程序軟件包#include node.h/ 結(jié)點類模板/ 鏈隊列類模板templateclass LinkQueue protected:/ 鏈隊列實現(xiàn)的數(shù)據(jù)成員:Node *front, *rear;/ 隊頭隊尾指指/ 輔助函數(shù)模板:void Init();/ 初始化隊列public:/ 抽象數(shù)據(jù)類型方法聲明及重載編譯系統(tǒng)默認方法聲明:LinkQueue();/ 無參數(shù)的構(gòu)造函數(shù)模板
7、virtual LinkQueue();/ 析構(gòu)函數(shù)模板int Length() const;/ 求隊列長度 bool Empty() const;/ 判斷隊列是否為空void Clear();/ 將隊列清空void Traverse(void (*visit)(const ElemType &) const ;/ 遍歷隊列StatusCode OutQueue(ElemType &e);/ 出隊操作StatusCode GetHead(ElemType &e) const;/ 取隊頭操作StatusCode InQueue(const ElemType &e);/ 入隊操作LinkQueue
8、(const LinkQueue ©);/ 復(fù)制構(gòu)造函數(shù)模板LinkQueue &operator =(const LinkQueue ©);/ 重載賦值運算符;/ 鏈隊列類模板的實現(xiàn)部分template void LinkQueue:Init()/ 操作結(jié)果:初始化隊列rear = front = new Node;/ 生成頭結(jié)點templateLinkQueue:LinkQueue()/ 操作結(jié)果:構(gòu)造一個空隊列Init();templateLinkQueue:LinkQueue()/ 操作結(jié)果:銷毀隊列Clear();templateint LinkQueue:Lengt
9、h() const/ 操作結(jié)果:返回隊列長度 int count = 0;/ 計數(shù)器 for (Node *tmpPtr = front-next; tmpPtr != NULL; tmpPtr = tmpPtr-next)/ 用tmpPtr依次指向每個元素count+;/ 對棧每個元素進行計數(shù)return count;templatebool LinkQueue:Empty() const/ 操作結(jié)果:如隊列為空,則返回true,否則返回false return rear = front;templatevoid LinkQueue:Clear() / 操作結(jié)果:清空隊列ElemType t
10、mpElem;/ 臨時元素值while (Length() 0)/ 隊列非空,則出列OutQueue(tmpElem);template void LinkQueue:Traverse(void (*visit)(const ElemType &) const / 操作結(jié)果:依次對隊列的每個元素調(diào)用函數(shù)(*visit)for (Node *tmpPtr = front-next; tmpPtr != NULL; tmpPtr = tmpPtr-next)/ 對隊列每個元素調(diào)用函數(shù)(*visit)(*visit)(tmpPtr-data);templateStatusCode LinkQueue
11、:OutQueue(ElemType &e)/ 操作結(jié)果:如果隊列非空,那么刪除隊頭元素,并用e返回其值,返回SUCCESS,/否則返回UNDER_FLOW,if (!Empty() / 隊列非空Node *tmpPtr = front-next;/ 指向隊列頭素e = tmpPtr-data;/ 用e返回隊頭元素front-next = tmpPtr-next;/ front指向下一元素if (rear = tmpPtr)/ 表示出隊前隊列中只有一個元素,出隊后為空隊列rear = front;delete tmpPtr;/ 釋放出隊的結(jié)點return SUCCESS;else/ 隊列為空r
12、eturn UNDER_FLOW;templateStatusCode LinkQueue:GetHead(ElemType &e) const/ 操作結(jié)果:如果隊列非空,那么用e返回隊頭元素,返回SUCCESS,/否則返回UNDER_FLOW,if (!Empty() / 隊列非空Node *tmpPtr = front-next;/ 指向隊列頭素e = tmpPtr-data;/ 用e返回隊頭元素return SUCCESS;else/ 隊列為空return UNDER_FLOW;templateStatusCode LinkQueue:InQueue(const ElemType &e)
13、/ 操作結(jié)果:插入元素e為新的隊尾,返回SUCCESSNode *tmpPtr = new Node(e);/ 生成新結(jié)點rear-next = tmpPtr;/ 新結(jié)點追加在隊尾rear = tmpPtr;/ rear指向新隊尾return SUCCESS;templateLinkQueue:LinkQueue(const LinkQueue ©)/ 操作結(jié)果:由隊列copy構(gòu)造新隊列復(fù)制構(gòu)造函數(shù)模板Init();for (Node *tmpPtr = copy.front-next; tmpPtr != NULL; tmpPtr = tmpPtr-next)/ 對copy隊列每個元
14、素對當(dāng)前隊列作入隊列操作InQueue(tmpPtr-data);templateLinkQueue &LinkQueue:operator =(const LinkQueue ©)/ 操作結(jié)果:將隊列copy賦值給當(dāng)前隊列重載賦值運算符if (© != this)Clear();for (Node *tmpPtr = copy.front-next; tmpPtr != NULL; tmpPtr = tmpPtr-next)/ 對copy隊列每個元素對當(dāng)前隊列作入隊列操作InQueue(tmpPtr-data);return *this;#endif/頭文件: node.h#
15、ifndef _NODE_H_#define _NODE_H_/ 結(jié)點類模板template struct Node / 數(shù)據(jù)成員:ElemType data;/ 數(shù)據(jù)域Node *next;/ 指針域/ 構(gòu)造函數(shù)模板:Node();/ 無參數(shù)的構(gòu)造函數(shù)模板Node(ElemType item, Node *link = NULL);/ 已知數(shù)據(jù)元素值和指針建立結(jié)構(gòu);/ 結(jié)點類模板的實現(xiàn)部分templateNode:Node()/ 操作結(jié)果:構(gòu)造指針域為空的結(jié)點 next = NULL;templateNode:Node(ElemType item, Node *link)/ 操作結(jié)果:構(gòu)造一
16、個數(shù)據(jù)域為item和指針域為link的結(jié)點 data = item; next = link;#endif/頭文件:utility.h#ifndef _UTILITY_H_/ 如果沒有定義_UTILITY_H_#define _UTILITY_H_/ 那么定義_UTILITY_H_/ 實用程序軟件包#ifdef _MSC_VER/ 表示是VC #if _MSC_VER = 1200/ 表示VC6.0/ 標(biāo)準(zhǔn)庫頭文件#include / 標(biāo)準(zhǔn)串和操作#include / 標(biāo)準(zhǔn)流操作#include / 極限#include / 數(shù)學(xué)函數(shù)#include / 文件輸入輸出#include / 字符
17、處理#include / 日期和時間函數(shù)#include / 標(biāo)準(zhǔn)庫#include / 標(biāo)準(zhǔn)輸入輸出#include / 輸入輸出流格式設(shè)置#include / 支持變長函數(shù)參數(shù)#include / 支持斷言#else/ 其它版本的VC+/ ANSI C+標(biāo)準(zhǔn)庫頭文件#include / 標(biāo)準(zhǔn)串和操作#include / 標(biāo)準(zhǔn)流操作#include / 極限#include / 數(shù)學(xué)函數(shù)#include / 文件輸入輸出#include / 字符處理#include / 日期和時間函數(shù)#include / 標(biāo)準(zhǔn)庫#include / 標(biāo)準(zhǔn)輸入輸出#include / 輸入輸出流格式設(shè)置#in
18、clude / 支持變長函數(shù)參數(shù)#include / 支持斷言using namespace std;/ 標(biāo)準(zhǔn)庫包含在命名空間std中#endif/ _MSC_VER = 1200#else/ 非VC / ANSI C+標(biāo)準(zhǔn)庫頭文件#include / 標(biāo)準(zhǔn)串操作#include / 標(biāo)準(zhǔn)流操作#include / 極限#include / 數(shù)據(jù)函數(shù)#include / 文件輸入輸出#include / 字符處理#include / 日期和時間函數(shù)#include / 標(biāo)準(zhǔn)庫#include / 標(biāo)準(zhǔn)輸入輸出#include / 輸入輸出流格式設(shè)置#include / 支持變長函數(shù)參數(shù)#inc
19、lude / 支持斷言using namespace std;/ 標(biāo)準(zhǔn)庫包含在命名空間std中#endif/ _MSC_VER/ 自定義類型enum StatusCode SUCCESS, FAIL, UNDER_FLOW, OVER_FLOW,RANGE_ERROR, DUPLICATE_ERROR,NOT_PRESENT, ENTRY_INSERTED, ENTRY_FOUND, VISITED, UNVISITED;/ 宏定義#define DEFAULT_SIZE 1000/ 缺省元素個數(shù)#define DEFAULT_INFINITY 1000000/ 缺省無窮大/ 實用函數(shù)(模板)
20、聲明static char GetChar(istream &inStream = cin); / 從輸入流inStream中跳過空格及制表符獲取一字符static bool UserSaysYes();/ 當(dāng)用戶肯定回答(yes)時, 返回true, 用戶否定回答(no)時,返回falsestatic void SetRandSeed();/ 設(shè)置當(dāng)前時間為隨機數(shù)種子static int GetRand(int n);/ 生成0 n-1之間的隨機數(shù)static int GetRand();/ 生成隨機數(shù)static int GetPoissionRand(double expectValue
21、);/ 生成期望值為expectValue泊松隨機數(shù) template void Swap(ElemType &e1, ElemType &e2);/ 交換e1, e2之值templatevoid Display(ElemType elem, int n);/ 顯示數(shù)組elem的各數(shù)據(jù)元素值template void Write(const ElemType &e);/ 顯示數(shù)據(jù)元素/ 實用類class Timer;/ 定時器類Timerclass Error;/ 通用異常類static char GetChar(istream &inStream)/ 操作結(jié)果:從輸入流inStream中跳過
22、空格及制表符獲取一字符char ch;/ 臨時變量while (ch = (inStream).peek() != EOF/ 文件結(jié)束符(peek()函數(shù)從輸入流中接受1/ 字符,流的當(dāng)前位置不變)& (ch = (inStream).get() = / 空格(get()函數(shù)從輸入流中接受1字符,流/ 的當(dāng)前位置向后移1個位置)| ch = t);/ 制表符return ch;/ 返回字符static bool UserSaysYes()/ 操作結(jié)果: 當(dāng)用戶肯定回答(yes)時, 返回true, 用戶否定回答(no)時,返回falsechar ch;/ 用戶回答字符bool initialR
23、esponse = true;/ 初始回答do/ 循環(huán)直到用戶輸入恰當(dāng)?shù)幕卮馂橹筰f (initialResponse)/ 初始回答cout (y, n)?; else/ 非初始回答cout 用y或n回答:;while (ch = GetChar() = n);/ 跳過空格,制表符及換行符獲取一字符initialResponse = false; while (ch != y & ch != Y & ch != n & ch != N);while (GetChar() != n);/ 跳過當(dāng)前行后面的字符if (ch = y | ch = Y) return true;else return
24、 false;/ 定時器類Timerclass Timerprivate:/ 數(shù)據(jù)成員clock_t startTime;public:/ 方法聲明Timer() startTime = clock(); / 構(gòu)造函數(shù)Timer() ;/ 析構(gòu)函數(shù)double ElapsedTime()/ 返回已過的時間clock_t endTime = clock();/ 結(jié)束時間return (double)(endTime - startTime) / (double)CLK_TCK;/ 返回從Timer對象啟動或最后一次調(diào)用reset()后所使用的CPU時間void Reset() startTime
25、 = clock(); / 重置開始時間;#define MAX_ERROR_MESSAGE_LEN 100/ 通用異常類 class Errorprivate:/ 數(shù)據(jù)成員char messageMAX_ERROR_MESSAGE_LEN;/ 異常信息public:/ 方法聲明Error(char mes = 一般性異常!)/ 構(gòu)造函數(shù) strcpy(message, mes);/ 復(fù)制異常信息Error(void) ;/ 析構(gòu)函數(shù)void Show() const/ 顯示異常信息cout message endl;/ 顯示異常信息;static void SetRandSeed()/ 操作結(jié)果:設(shè)置當(dāng)前時間為隨機數(shù)種子 srand(unsigned)time(NULL); static int GetRand(int n)/ 操作結(jié)果:生成0 n-1之間的隨機數(shù) return rand() % (n); static int GetRand()/ 操作結(jié)果:生成隨機數(shù) return rand(); static int GetPoissionRand(dou
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 模具保養(yǎng)與加工協(xié)議模板
- 家庭裝飾工程保修合同
- 國際勞動合同樣本
- 施工單位工程保證金協(xié)議書
- 住宅小區(qū)物業(yè)管理合同
- 寫字樓下停車場租賃協(xié)議
- 房屋租賃合同書2024年2
- 2024年合資企業(yè)合作協(xié)議書
- 老年人租房免責(zé)協(xié)議書
- 店鋪合作經(jīng)營協(xié)議書范本
- 珍愛生命主題班會
- 陳皮倉儲合同模板例子
- 2024年安全生產(chǎn)月全國安全生產(chǎn)知識競賽題庫及答案(共六套)
- 2024-2025學(xué)年滬教版小學(xué)四年級上學(xué)期期中英語試卷及解答參考
- DB23T 3844-2024煤礦地區(qū)地震(礦震)監(jiān)測臺網(wǎng)技術(shù)要求
- 《阿凡達》電影賞析
- DB42-T 2286-2024 地鐵冷卻塔衛(wèi)生管理規(guī)范
- 合作伙伴合同協(xié)議書范文5份
- 小學(xué)生主題班會《追夢奧運+做大家少年》(課件)
- 公安機關(guān)人民警察高級執(zhí)法資格考題及解析
- 浙教版信息科技四年級上冊全冊教學(xué)設(shè)計
評論
0/150
提交評論