C++实现病人就医管理系统

时间:2022-02-16 04:52:14

本文实例为大家分享了C++语言实现病人就医管理系统的具体代码,供大家参考,具体内容如下

函数可实现反应病人到医院看病,排队看医生的情况,有行医类模板的定义及所有类函数的编写代码

部分代码展示:

lk_queue.h

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
#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> &copy); // 复制构造函数模板
 LinkQueue<ElemType> &operator =(const LinkQueue<ElemType> &copy);// 重载赋值运算符
};
 
// 链队列类模板的实现部分
 
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)
// 操作结果:由队列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)
// 操作结果:将队列copy赋值给当前队列——重载赋值运算符
{
 if (&copy != this)
 {
 Clear();
 for (Node<ElemType> *tmpPtr = copy.front->next; tmpPtr != NULL;
 tmpPtr = tmpPtr->next)
 { // 对copy队列每个元素对当前队列作入队列操作
 InQueue(tmpPtr->data);
 }
 }
 return *this;
}
 
#endif

Hospitalize.h

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#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++语言实现病人就医管理系统

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。