这篇文章给大家分享的是有关C++如何实现病人就医管理系统的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
具体内容如下
函数可实现反应病人到医院看病,排队看医生的情况,有行医类模板的定义及所有类函数的编写代码
部分代码展示:
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; // 队头队尾指指
// 辅助函数模板:
void 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 GetHead(ElemType &e) const; // 取队头操作
StatusCode InQueue(const ElemType &e); // 入队操作
LinkQueue(const LinkQueue<ElemType> ©); // 复制构造函数模板
LinkQueue<ElemType> &operator =(const LinkQueue<ElemType> ©);// 重载赋值运算符
};
// 链队列类模板的实现部分
template <class ElemType>
void LinkQueue<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<ElemType>::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,否则返回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
// 操作结果:依次对队列的每个元素调用函数(*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,
// 否则返回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 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 ElemType>
StatusCode LinkQueue<ElemType>::InQueue(const ElemType &e)
// 操作结果:插入元素e为新的队尾,返回SUCCESS
{
Node<ElemType> *tmpPtr = new Node<ElemType>(e); // 生成新结点
rear->next = tmpPtr; // 新结点追加在队尾
rear = tmpPtr; // rear指向新队尾
return SUCCESS;
}
template<class ElemType>
LinkQueue<ElemType>::LinkQueue(const LinkQueue<ElemType> ©)
// 操作结果:由队列copy构造新队列——复制构造函数模板
{
Init();
for (Node<ElemType> *tmpPtr = copy.front->next; tmpPtr != NULL;
tmpPtr = tmpPtr->next)
{ // 对copy队列每个元素对当前队列作入队列操作
InQueue(tmpPtr->data);
}
}
template<class ElemType>
LinkQueue<ElemType> &LinkQueue<ElemType>::operator =(const LinkQueue<ElemType> ©)
// 操作结果:将队列copy赋值给当前队列——重载赋值运算符
{
if (© != this)
{
Clear();
for (Node<ElemType> *tmpPtr = copy.front->next; tmpPtr != NULL;
tmpPtr = tmpPtr->next)
{ // 对copy队列每个元素对当前队列作入队列操作
InQueue(tmpPtr->data);
}
}
return *this;
}
#endif
Hospitalize.h
#ifndef __HOSPITALIZE_H__
#define __HOSPITALIZE_H__
#include"lk_queue.h" //链队列
//行医类
class HospitalListWLY
{
private:
//行医类数据成员
LinkQueue<unsigned int>queue; //病人队列
//辅助函数
void StandInALine(); //排队
void Cure(); //就诊
void Display(); //查看排队
public:
//方法声明及重载编译系统默认方法声明
HospitalListWLY(){}; //无参数的构造函数
~HospitalListWLY(){}; //析构函数
void Work(); //医生行医工作
};
//行医类的实现部分
void HospitalListWLY::StandInALine()
//操作结果:输入病人的病历号,加入到病人排队队列中
{
unsigned int num; //病历号
cout<<"请输入病历号:";
cin>>num; //输入病人的病历号
queue.InQueue(num); //将病历号加入到病人排队队列中
}
void HospitalListWLY::Cure()
//操作结果:病人排队队列中最前面的病人就诊,将其从队列中删除
{
if (queue.Empty())
{ //无病人
cout<<"现已没有病人在排队了!"<<endl;
}
else
{
unsigned int num; //病历号
queue.OutQueue(num); //病人排队队列中最前面的病人就诊,并将其从队列中删除
cout<<num<<"号病人现在就医."<<endl;
}
}
void HospitalListWLY::Display()
//操作结果:从队首到队尾列出所有的排队病人的病历号
{
queue.Traverse(Write); //从队首到队尾列出所有的排队病人的病历号
cout<<endl;
}
void HospitalListWLY::Work()
//操作结果:医生行医工作
{
int select=0;
while(select!=4)
{
cout<<"1。排队—输入排队病人的病历号,加入到病人队列中."<<endl;
cout<<"2.就诊—病人排队队列中最前面的病人就诊,并将其从队列中删除"<<endl;
cout<<"3.查看排队—从队首到队尾列出所有的排队病人的病历号"<<endl;
cout<<"4.下班—退出运行"<<endl;
cout<<"请选择:";
cin>>select; //选择功能
switch(select)
{
case 1:
StandInALine(); //排队——输入病人的病历号,加入到病人队列中
break;
case 2:
Cure(); //就诊——病人排队队列中最前面的病人就诊,并将其从队列中删除
break;
case 3:
Display(); //查看队列——从队首到队尾列出所有的排队病人的病历号
break;
}
}
}
#endif
感谢各位的阅读!关于“C++如何实现病人就医管理系统”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。