病人就医管理规定代码_第1页
病人就医管理规定代码_第2页
病人就医管理规定代码_第3页
病人就医管理规定代码_第4页
病人就医管理规定代码_第5页
免费预览已结束,剩余9页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、2.病人就医管理 1.目标与要求编写一个程序,反应病人到医院看病,排队看医生的情况。在病人排队的过程中,主要发生两件事。(1)病人到达诊室,将病历本交给护士,拍到等待队列中候诊。(2)护士从等待队列中取出以为病人的病历,该病人进入诊室就诊。要求程序采用菜单方式,其选项及功能说明如下。(1)排队输入病人的病历号,加入到病人排队队列中。(2)就诊病人排列队列中最前面的病人就诊,并将其从队列中删除。(3)查看排队从队首到队尾列出所有的排队病人的病历号。(4)下班退出运行。 2.工具、准备工作 在实验开始前,应回顾或复习相关内容。需要一台计算机,其中安装有Visual C+ 6.0、Visual c+

2、 2005、Visual C+ 2005 Express Dev-c+或MinGW Developer Studio等集成开发环境软件 3.实验分析 4.代码如下: /头文件:hospitalize.h #ifndef _HOSPITALIZE_H_#define _HOSPITALIZE_H_#include "lk_queue.h"/ 链队列/ 行医类class Hospitalizeprivate:/ 行医类的数据成员:LinkQueue <unsigned int> queue;/ 病人队列/ 辅助函数void StandInALine();/ 排队vo

3、id Cure();/ 就诊void Display();/ 查看排队public:/ 方法声明及重载编译系统默认方法声明:Hospitalize();/ 无参数的构造函数Hospitalize();/ 析构函数void Work();/ 医生工作;/ 行医类的实现部分void Hospitalize:StandInALine()/ 操作结果: 输入排队病人的病历号,加入到病人排队队列中unsigned int num;/ 病历号cout << "请输入病历号:" cin >> num;/ 输入排队病人queue.InQueue(num);/ 将病历

4、号加入到病人排队队列中void Hospitalize:Cure()/ 操作结果: 病人排队队列中最前面的病人就诊,并将其从队列中删除if (queue.Empty()/ 无病人cout << "现已没有病人在排队了!" << endl;elseunsigned int num;/ 病历号queue.OutQueue(num);/ 病人排队队列中最前面的病人就诊,并将其从队列中删除cout << num << "号病人现在就医." << endl;void Hospitalize:Display

5、()/ 操作结果: 从队首到队尾列出所有的排队病人的病历号queue.Traverse(Write);/ 从队首到队尾列出所有的排队病人的病历号cout << endl;void Hospitalize:Work()/ 操作结果: 医生工作int select = 0;while (select != 4)cout << "1. 排队-输入病人的病历号,加入到病人队列中" << endl;cout << "2. 就诊-病人排队队列中最前面的病人就诊,并将其从队列中删除" << endl;cout

6、 << "3. 查看排队-从队首到队尾列出所有的排队病人的病历号" << endl;cout << "4. 下班-退出运行" << endl;cout << "请选择:"cin >> select;/ 选择功能switch(select)case 1:StandInALine();/ 排队-输入病人的病历号,加入到病人队列中break;case 2:Cure();/ 就诊-病人排队队列中最前面的病人就诊,并将其从队列中删除break;case 3:Display(

7、);/ 查看排队-从队首到队尾列出所有的排队病人的病历号break;#endif/头文件:lk_queue.h#ifndef _LK_QUEUE_H_#define _LK_QUEUE_H_#include "utility.h"/ 实用程序软件包#include "node.h"/ 结点类模板/ 链队列类模板template<class ElemType>class LinkQueue protected:/ 链队列实现的数据成员:Node<ElemType> *front, *rear;/ 队头队尾指指/ 辅助函数模板:voi

8、d Init();/ 初始化队列public:/ 抽象数据类型方法声明及重载编译系统默认方法声明:LinkQueue();/ 无参数的构造函数模板virtual LinkQueue();/ 析构函数模板int Length() const;/ 求队列长度 bool Empty() const;/ 判断队列是否为空void Clear();/ 将队列清空void Traverse(void (*visit)(const ElemType &) const ;/ 遍历队列StatusCode OutQueue(ElemType &e);/ 出队操作StatusCode GetHea

9、d(ElemType &e) const;/ 取队头操作StatusCode InQueue(const ElemType &e);/ 入队操作LinkQueue(const LinkQueue<ElemType> &copy);/ 复制构造函数模板LinkQueue<ElemType> &operator =(const LinkQueue<ElemType> &copy);/ 重载赋值运算符;/ 链队列类模板的实现部分template <class ElemType>void LinkQueue<

10、ElemType>:Init()/ 操作结果:初始化队列rear = front = new Node<ElemType>/ 生成头结点template<class ElemType>LinkQueue<ElemType>:LinkQueue()/ 操作结果:构造一个空队列Init();template<class ElemType>LinkQueue<ElemType>:LinkQueue()/ 操作结果:销毁队列Clear();template<class ElemType>int LinkQueue<El

11、emType>:Length() const/ 操作结果:返回队列长度 int count = 0;/ 计数器 for (Node<ElemType> *tmpPtr = front->next; tmpPtr != NULL; tmpPtr = tmpPtr->next)/ 用tmpPtr依次指向每个元素count+;/ 对栈每个元素进行计数return count;template<class ElemType>bool LinkQueue<ElemType>:Empty() const/ 操作结果:如队列为空,则返回true,否则返回

12、false return rear = front;template<class ElemType>void LinkQueue<ElemType>:Clear() / 操作结果:清空队列ElemType tmpElem;/ 临时元素值while (Length() > 0)/ 队列非空,则出列OutQueue(tmpElem);template <class ElemType>void LinkQueue<ElemType>:Traverse(void (*visit)(const ElemType &) const / 操作结果

13、:依次对队列的每个元素调用函数(*visit)for (Node<ElemType> *tmpPtr = front->next; tmpPtr != NULL; tmpPtr = tmpPtr->next)/ 对队列每个元素调用函数(*visit)(*visit)(tmpPtr->data);template<class ElemType>StatusCode LinkQueue<ElemType>:OutQueue(ElemType &e)/ 操作结果:如果队列非空,那么删除队头元素,并用e返回其值,返回SUCCESS,/否则返

14、回UNDER_FLOW,if (!Empty() / 队列非空Node<ElemType> *tmpPtr = front->next;/ 指向队列头素e = tmpPtr->data;/ 用e返回队头元素front->next = tmpPtr->next;/ front指向下一元素if (rear = tmpPtr)/ 表示出队前队列中只有一个元素,出队后为空队列rear = front;delete tmpPtr;/ 释放出队的结点return SUCCESS;else/ 队列为空return UNDER_FLOW;template<class

15、ElemType>StatusCode LinkQueue<ElemType>:GetHead(ElemType &e) const/ 操作结果:如果队列非空,那么用e返回队头元素,返回SUCCESS,/否则返回UNDER_FLOW,if (!Empty() / 队列非空Node<ElemType> *tmpPtr = front->next;/ 指向队列头素e = tmpPtr->data;/ 用e返回队头元素return SUCCESS;else/ 队列为空return UNDER_FLOW;template<class ElemTy

16、pe>StatusCode LinkQueue<ElemType>:InQueue(const ElemType &e)/ 操作结果:插入元素e为新的队尾,返回SUCCESSNode<ElemType> *tmpPtr = new Node<ElemType>(e);/ 生成新结点rear->next = tmpPtr;/ 新结点追加在队尾rear = tmpPtr;/ rear指向新队尾return SUCCESS;template<class ElemType>LinkQueue<ElemType>:LinkQ

17、ueue(const LinkQueue<ElemType> &copy)/ 操作结果:由队列copy构造新队列复制构造函数模板Init();for (Node<ElemType> *tmpPtr = copy.front->next; tmpPtr != NULL; tmpPtr = tmpPtr->next)/ 对copy队列每个元素对当前队列作入队列操作InQueue(tmpPtr->data);template<class ElemType>LinkQueue<ElemType> &LinkQueue&l

18、t;ElemType>:operator =(const LinkQueue<ElemType> &copy)/ 操作结果:将队列copy赋值给当前队列重载赋值运算符if (&copy != this)Clear();for (Node<ElemType> *tmpPtr = copy.front->next; tmpPtr != NULL; tmpPtr = tmpPtr->next)/ 对copy队列每个元素对当前队列作入队列操作InQueue(tmpPtr->data);return *this;#endif/头文件: no

19、de.h#ifndef _NODE_H_#define _NODE_H_/ 结点类模板template <class ElemType>struct Node / 数据成员:ElemType data;/ 数据域Node<ElemType> *next;/ 指针域/ 构造函数模板:Node();/ 无参数的构造函数模板Node(ElemType item, Node<ElemType> *link = NULL);/ 已知数据元素值和指针建立结构;/ 结点类模板的实现部分template<class ElemType>Node<ElemTy

20、pe>:Node()/ 操作结果:构造指针域为空的结点 next = NULL;template<class ElemType>Node<ElemType>:Node(ElemType item, Node<ElemType> *link)/ 操作结果:构造一个数据域为item和指针域为link的结点 data = item; next = link;#endif/头文件:utility.h#ifndef _UTILITY_H_/ 如果没有定义_UTILITY_H_#define _UTILITY_H_/ 那么定义_UTILITY_H_/ 实用程序软件

21、包#ifdef _MSC_VER/ 表示是VC #if _MSC_VER = 1200/ 表示VC6.0/ 标准库头文件#include <string.h>/ 标准串和操作#include <iostream.h>/ 标准流操作#include <limits.h>/ 极限#include <math.h>/ 数学函数#include <fstream.h>/ 文件输入输出#include <ctype.h> / 字符处理#include <time.h> / 日期和时间函数#include <stdl

22、ib.h>/ 标准库#include <stdio.h>/ 标准输入输出#include <iomanip.h>/ 输入输出流格式设置#include <stdarg.h> / 支持变长函数参数#include <assert.h>/ 支持断言#else/ 其它版本的VC+/ ANSI C+标准库头文件#include <string>/ 标准串和操作#include <iostream>/ 标准流操作#include <limits>/ 极限#include <cmath>/ 数学函数#in

23、clude <fstream>/ 文件输入输出#include <cctype>/ 字符处理#include <ctime> / 日期和时间函数#include <cstdlib>/ 标准库#include <cstdio> / 标准输入输出#include <iomanip>/ 输入输出流格式设置#include <cstdarg> / 支持变长函数参数#include <cassert>/ 支持断言using namespace std;/ 标准库包含在命名空间std中#endif/ _MSC_

24、VER = 1200#else/ 非VC / ANSI C+标准库头文件#include <string>/ 标准串操作#include <iostream>/ 标准流操作#include <limits>/ 极限#include <cmath>/ 数据函数#include <fstream>/ 文件输入输出#include <cctype>/ 字符处理#include <ctime> / 日期和时间函数#include <cstdlib>/ 标准库#include <cstdio> /

25、 标准输入输出#include <iomanip>/ 输入输出流格式设置#include <cstdarg> / 支持变长函数参数#include <cassert>/ 支持断言using namespace std;/ 标准库包含在命名空间std中#endif/ _MSC_VER/ 自定义类型enum StatusCode SUCCESS, FAIL, UNDER_FLOW, OVER_FLOW,RANGE_ERROR, DUPLICATE_ERROR,NOT_PRESENT, ENTRY_INSERTED, ENTRY_FOUND, VISITED, U

26、NVISITED;/ 宏定义#define DEFAULT_SIZE 1000/ 缺省元素个数#define DEFAULT_INFINITY 1000000/ 缺省无穷大/ 实用函数(模板)声明static char GetChar(istream &inStream = cin); / 从输入流inStream中跳过空格及制表符获取一字符static bool UserSaysYes();/ 当用户肯定回答(yes)时, 返回true, 用户否定回答(no)时,返回falsestatic void SetRandSeed();/ 设置当前时间为随机数种子static int Get

27、Rand(int n);/ 生成0 n-1之间的随机数static int GetRand();/ 生成随机数static int GetPoissionRand(double expectValue);/ 生成期望值为expectValue泊松随机数 template <class ElemType >void Swap(ElemType &e1, ElemType &e2);/ 交换e1, e2之值template<class ElemType>void Display(ElemType elem, int n);/ 显示数组elem的各数据元素值t

28、emplate <class ElemType>void Write(const ElemType &e);/ 显示数据元素/ 实用类class Timer;/ 定时器类Timerclass Error;/ 通用异常类static char GetChar(istream &inStream)/ 操作结果:从输入流inStream中跳过空格及制表符获取一字符char ch;/ 临时变量while (ch = (inStream).peek() != EOF/ 文件结束符(peek()函数从输入流中接受1/ 字符,流的当前位置不变)&& (ch = (

29、inStream).get() = ' '/ 空格(get()函数从输入流中接受1字符,流/ 的当前位置向后移1个位置)| ch = 't');/ 制表符return ch;/ 返回字符static bool UserSaysYes()/ 操作结果: 当用户肯定回答(yes)时, 返回true, 用户否定回答(no)时,返回falsechar ch;/ 用户回答字符bool initialResponse = true;/ 初始回答do/ 循环直到用户输入恰当的回答为止if (initialResponse)/ 初始回答cout << "(

30、y, n)" else/ 非初始回答cout << "用y或n回答:"while (ch = GetChar() = 'n');/ 跳过空格,制表符及换行符获取一字符initialResponse = false; while (ch != 'y' && ch != 'Y' && ch != 'n' && ch != 'N');while (GetChar() != 'n');/ 跳过当前行后面的字符if (c

31、h = 'y' | ch = 'Y') return true;else return false;/ 定时器类Timerclass Timerprivate:/ 数据成员clock_t startTime;public:/ 方法声明Timer() startTime = clock(); / 构造函数Timer() ;/ 析构函数double ElapsedTime()/ 返回已过的时间clock_t endTime = clock();/ 结束时间return (double)(endTime - startTime) / (double)CLK_TCK;/

32、 返回从Timer对象启动或最后一次调用reset()后所使用的CPU时间void Reset() startTime = clock(); / 重置开始时间;#define MAX_ERROR_MESSAGE_LEN 100/ 通用异常类 class Errorprivate:/ 数据成员char messageMAX_ERROR_MESSAGE_LEN;/ 异常信息public:/ 方法声明Error(char mes = "一般性异常!")/ 构造函数 strcpy(message, mes);/ 复制异常信息Error(void) ;/ 析构函数void Show() const/ 显示异常信息cout << message << endl;/ 显示异常信息;static void SetRandSeed()/ 操作结果:设置当前时间为随机数种子 srand(unsigned)time(NULL); static int GetRand(int n)/ 操作结果:生成0 n-1之间的随机数 return rand() % (n); static i

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论