病人就医管理代码.docx
- 文档编号:23717310
- 上传时间:2023-05-20
- 格式:DOCX
- 页数:21
- 大小:20.71KB
病人就医管理代码.docx
《病人就医管理代码.docx》由会员分享,可在线阅读,更多相关《病人就医管理代码.docx(21页珍藏版)》请在冰豆网上搜索。
病人就医管理代码
2.病人就医管理
1.目标与要求
编写一个程序,反应病人到医院看病,排队看医生的情况。
在病人排队的过程中,主要发生两件事。
(1)病人到达诊室,将病历本交给护士,拍到等待队列中候诊。
(2)护士从等待队列中取出以为病人的病历,该病人进入诊室就诊。
要求程序采用菜单方式,其选项及功能说明如下。
(1)排队—输入病人的病历号,加入到病人排队队列中。
(2)就诊—病人排列队列中最前面的病人就诊,并将其从队列中删除。
(3)查看排队—从队首到队尾列出所有的排队病人的病历号。
(4)下班—退出运行。
2.工具、准备工作
在实验开始前,应回顾或复习相关内容。
需要一台计算机,其中安装有VisualC++6.0、Visualc++2005、VisualC++2005ExpressDev-c++或MinGWDeveloperStudio等集成开发环境软件
3.实验分析
4.代码如下:
//头文件:
hospitalize.h
#ifndef__HOSPITALIZE_H__
#define__HOSPITALIZE_H__
#include"lk_queue.h"//链队列
//行医类
classHospitalize
{
private:
//行医类的数据成员:
LinkQueue
//辅助函数
voidStandInALine();//排队
voidCure();//就诊
voidDisplay();//查看排队
public:
//方法声明及重载编译系统默认方法声明:
Hospitalize(){};//无参数的构造函数
~Hospitalize(){};//析构函数
voidWork();//医生工作
};
//行医类的实现部分
voidHospitalize:
:
StandInALine()
//操作结果:
输入排队病人的病历号,加入到病人排队队列中
{
unsignedintnum;//病历号
cout<<"请输入病历号:
";
cin>>num;//输入排队病人
queue.InQueue(num);//将病历号加入到病人排队队列中
}
voidHospitalize:
:
Cure()
//操作结果:
病人排队队列中最前面的病人就诊,并将其从队列中删除
{
if(queue.Empty())
{//无病人
cout<<"现已没有病人在排队了!
"< } else { unsignedintnum;//病历号 queue.OutQueue(num);//病人排队队列中最前面的病人就诊,并将其从队列中删除 cout< } } voidHospitalize: : Display() //操作结果: 从队首到队尾列出所有的排队病人的病历号 { queue.Traverse(Write);//从队首到队尾列出所有的排队病人的病历号 cout< } voidHospitalize: : Work() //操作结果: 医生工作 { intselect=0; while(select! =4) { cout<<"1.排队--输入病人的病历号,加入到病人队列中"< cout<<"2.就诊--病人排队队列中最前面的病人就诊,并将其从队列中删除"< cout<<"3.查看排队--从队首到队尾列出所有的排队病人的病历号"< cout<<"4.下班--退出运行"< cout<<"请选择: "; cin>>select;//选择功能 switch(select) { case1: StandInALine();//排队--输入病人的病历号,加入到病人队列中 break; case2: Cure();//就诊--病人排队队列中最前面的病人就诊,并将其从队列中删除 break; case3: Display();//查看排队--从队首到队尾列出所有的排队病人的病历号 break; } } } #endif //头文件: lk_queue.h #ifndef__LK_QUEUE_H__ #define__LK_QUEUE_H__ #include"utility.h"//实用程序软件包 #include"node.h"//结点类模板 //链队列类模板 template classLinkQueue { protected: //链队列实现的数据成员: Node //辅助函数模板: voidInit();//初始化队列 public: //抽象数据类型方法声明及重载编译系统默认方法声明: LinkQueue();//无参数的构造函数模板 virtual~LinkQueue();//析构函数模板 intLength()const;//求队列长度 boolEmpty()const;//判断队列是否为空 voidClear();//将队列清空 voidTraverse(void(*visit)(constElemType&))const;//遍历队列 StatusCodeOutQueue(ElemType&e);//出队操作 StatusCodeGetHead(ElemType&e)const;//取队头操作 StatusCodeInQueue(constElemType&e);//入队操作 LinkQueue(constLinkQueue LinkQueue }; //链队列类模板的实现部分 template voidLinkQueue : Init() //操作结果: 初始化队列 { rear=front=newNode } template LinkQueue : LinkQueue() //操作结果: 构造一个空队列 { Init(); } template LinkQueue : ~LinkQueue() //操作结果: 销毁队列 { Clear(); } template intLinkQueue : Length()const //操作结果: 返回队列长度 { intcount=0;//计数器 for(Node =NULL;tmpPtr=tmpPtr->next) {//用tmpPtr依次指向每个元素 count++;//对栈每个元素进行计数 } returncount; } template boolLinkQueue : Empty()const //操作结果: 如队列为空,则返回true,否则返回false { returnrear==front; } template voidLinkQueue : Clear() //操作结果: 清空队列 { ElemTypetmpElem;//临时元素值 while(Length()>0) {//队列非空,则出列 OutQueue(tmpElem); } } template voidLinkQueue : Traverse(void(*visit)(constElemType&))const //操作结果: 依次对队列的每个元素调用函数(*visit) { for(Node =NULL; tmpPtr=tmpPtr->next) {//对队列每个元素调用函数(*visit) (*visit)(tmpPtr->data); } } template StatusCodeLinkQueue : OutQueue(ElemType&e) //操作结果: 如果队列非空,那么删除队头元素,并用e返回其值,返回SUCCESS, //否则返回UNDER_FLOW, { if(! Empty()) {//队列非空 Node e=tmpPtr->data;//用e返回队头元素 front->next=tmpPtr->next;//front指向下一元素 if(rear==tmpPtr) {//表示出队前队列中只有一个元素,出队后为空队列 rear=front; } deletetmpPtr;//释放出队的结点 returnSUCCESS; } else {//队列为空 returnUNDER_FLOW; } } template StatusCodeLinkQueue : GetHead(ElemType&e)const //操作结果: 如果队列非空,那么用e返回队头元素,返回SUCCESS, //否则返回UNDER_FLOW, { if(! Empty()) {//队列非空 Node e=tmpPtr->data;//用e返回队头元素 returnSUCCESS; } else {//队列为空 returnUNDER_FLOW; } } template StatusCodeLinkQueue : InQueue(constElemType&e) //操作结果: 插入元素e为新的队尾,返回SUCCESS { Node rear->next=tmpPtr;//新结点追加在队尾 rear=tmpPtr;//rear指向新队尾 returnSUCCESS; } template LinkQueue : LinkQueue(constLinkQueue //操作结果: 由队列copy构造新队列——复制构造函数模板 { Init(); for(Node =NULL; tmpPtr=tmpPtr->next) {//对copy队列每个元素对当前队列作入队列操作 InQueue(tmpPtr->data); } } template LinkQueue : operator=(constLinkQueue //操作结果: 将队列copy赋值给当前队列——重载赋值运算符 { if(©! =this) { Clear(); for(Node =NULL; tmpPtr=tmpPtr->next) {//对copy队列每个元素对当前队列作入队列操作 InQueue(tmpPtr->data); } } return*this; } #endif //头文件: node.h #ifndef__NODE_H__ #define__NODE_H__ //结点类模板 template structNode { //数据成员: ElemTypedata;//数据域 Node //构造函数模板: Node();//无参数的构造函数模板 Node(ElemTypeitem,Node }; //结点类模板的实现部分 template Node : Node() //操作结果: 构造指针域为空的结点 { next=NULL; } template Node : Node(ElemTypeitem,Node //操作结果: 构造一个数据域为item和指针域为link的结点 { 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 //标准库头文件 #include #include #include #include #include #include #include #include #include #include #include #include #else//其它版本的VC++ //ANSIC++标准库头文件 #include #include #include #include #include #include #include #include #include #include #include #include usingnamespacestd;//标准库包含在命名空间std中 #endif//_MSC_VER==1200 #else//非VC //ANSIC++标准库头文件 #include #include #include #include #include #include #include #include #include #include #include #include usingnamespacestd;//标准库包含在命名空间std中 #endif//_MSC_VER //自定义类型 enumStatusCode{SUCCESS,FAIL,UNDER_FLOW,OVER_FLOW,RANGE_ERROR,DUPLICATE_ERROR, NOT_PRESENT,ENTRY_INSERTED,ENTRY_FOUND,VISITED,UNVISITED}; //宏定义 #defineDEFAULT_SIZE1000//缺省元素个数 #defineDEFAULT_INFINITY1000000//缺省无穷大 //实用函数(模板)声明 staticcharGetChar(istream&inStream=cin);//从输入流inStream中跳过空格及制表符获取一字符 staticboolUserSaysYes();//当用户肯定回答(yes)时,返回true,用户否定回答(no)时,返回false staticvoidSetRandSeed();//设置当前时间为随机数种子 staticintGetRand(intn);//生成0~n-1之间的随机数 staticintGetRand();//生成随机数 staticintGetPoissionRand(doubleexpectValue);//生成期望值为expectValue泊松随机数 template voidSwap(ElemType&e1,ElemType&e2);//交换e1,e2之值 template voidDisplay(ElemTypeelem[],intn);//显示数组elem的各数据元素值 template voidWrite(constElemType&e);//显示数据元素 //实用类 classTimer;//定时器类Timer classError;//通用异常类 staticcharGetChar(istream&inStream) //操作结果: 从输入流inStream中跳过空格及制表符获取一字符 { charch;//临时变量 while((ch=(inStream).peek())! =EOF//文件结束符(peek()函数从输入流中接受1 //字符,流的当前位置不变) &&((ch=(inStream).get())==''//空格(get()函数从输入流中接受1字符,流 //的当前位置向后移1个位置) ||ch=='\t'));//制表符 returnch;//返回字符 } staticboolUserSaysYes() //操作结果: 当用户肯定回答(yes)时,返回true,用户否定回答(no)时,返回false { charch;//用户回答字符 boolinitialResponse=true;//初始回答 do {//循环直到用户输入恰当的回答为止 if(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');//跳过当前行后面的字符 if(ch=='y'||ch=='Y')returntrue; elsereturnfalse; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 病人 就医 管理 代码