病人就医管理代码.docx

上传人:b****7 文档编号:23717310 上传时间:2023-05-20 格式:DOCX 页数:21 大小:20.71KB
下载 相关 举报
病人就医管理代码.docx_第1页
第1页 / 共21页
病人就医管理代码.docx_第2页
第2页 / 共21页
病人就医管理代码.docx_第3页
第3页 / 共21页
病人就医管理代码.docx_第4页
第4页 / 共21页
病人就医管理代码.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

病人就医管理代码.docx

《病人就医管理代码.docx》由会员分享,可在线阅读,更多相关《病人就医管理代码.docx(21页珍藏版)》请在冰豆网上搜索。

病人就医管理代码.docx

病人就医管理代码

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:

//行医类的数据成员:

LinkQueuequeue;//病人队列

//辅助函数

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*front,*rear;//队头队尾指指

//辅助函数模板:

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&operator=(constLinkQueue©);//重载赋值运算符

};

//链队列类模板的实现部分

template

voidLinkQueue:

:

Init()

//操作结果:

初始化队列

{

rear=front=newNode;//生成头结点

}

template

LinkQueue:

:

LinkQueue()

//操作结果:

构造一个空队列

{

Init();

}

template

LinkQueue:

:

~LinkQueue()

//操作结果:

销毁队列

{

Clear();

}

template

intLinkQueue:

:

Length()const

//操作结果:

返回队列长度

{

intcount=0;//计数器

for(Node*tmpPtr=front->next;tmpPtr!

=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*tmpPtr=front->next;tmpPtr!

=NULL;

tmpPtr=tmpPtr->next)

{//对队列每个元素调用函数(*visit)

(*visit)(tmpPtr->data);

}

}

template

StatusCodeLinkQueue:

:

OutQueue(ElemType&e)

//操作结果:

如果队列非空,那么删除队头元素,并用e返回其值,返回SUCCESS,

//否则返回UNDER_FLOW,

{

if(!

Empty())

{//队列非空

Node*tmpPtr=front->next;//指向队列头素

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*tmpPtr=front->next;//指向队列头素

e=tmpPtr->data;//用e返回队头元素

returnSUCCESS;

}

else

{//队列为空

returnUNDER_FLOW;

}

}

template

StatusCodeLinkQueue:

:

InQueue(constElemType&e)

//操作结果:

插入元素e为新的队尾,返回SUCCESS

{

Node*tmpPtr=newNode(e);//生成新结点

rear->next=tmpPtr;//新结点追加在队尾

rear=tmpPtr;//rear指向新队尾

returnSUCCESS;

}

template

LinkQueue:

:

LinkQueue(constLinkQueue©)

//操作结果:

由队列copy构造新队列——复制构造函数模板

{

Init();

for(Node*tmpPtr=copy.front->next;tmpPtr!

=NULL;

tmpPtr=tmpPtr->next)

{//对copy队列每个元素对当前队列作入队列操作

InQueue(tmpPtr->data);

}

}

template

LinkQueue&LinkQueue:

:

operator=(constLinkQueue©)

//操作结果:

将队列copy赋值给当前队列——重载赋值运算符

{

if(©!

=this)

{

Clear();

for(Node*tmpPtr=copy.front->next;tmpPtr!

=NULL;

tmpPtr=tmpPtr->next)

{//对copy队列每个元素对当前队列作入队列操作

InQueue(tmpPtr->data);

}

}

return*this;

}

#endif

//头文件:

node.h

#ifndef__NODE_H__

#define__NODE_H__

//结点类模板

template

structNode

{

//数据成员:

ElemTypedata;//数据域

Node*next;//指针域

//构造函数模板:

Node();//无参数的构造函数模板

Node(ElemTypeitem,Node*link=NULL);//已知数据元素值和指针建立结构

};

//结点类模板的实现部分

template

Node:

:

Node()

//操作结果:

构造指针域为空的结点

{

next=NULL;

}

template

Node:

:

Node(ElemTypeitem,Node*link)

//操作结果:

构造一个数据域为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模板 > 自然景观

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1