版权声明:AlanLee版权所有 https://blog.csdn.net/qq1445654576/article/details/83510898
编制一个病人看病模拟程序。
在病人排队过程中,主要重复两件事:
1.病人到达诊室,将病历本交给护士,排到等待队列中候诊。
2.护士从等待队列中取出下一位病人的病历,该病人进入诊室就诊。
//main.cpp
#include <iostream>
#include <Windows.h>
#include "SqQueue.h"
using namespace std;
int main()
{
/*
//测试队列是否可用
void testSqQueue();
testSqQueue();
*/
//护士给病人看病
void nurse();
nurse();
cout << endl;
system("pause");
return 0;
}
//护士给病人看病
void nurse() {
SqQueue *Sq;
InitSqQueue(Sq);
SqElemType ElemToSq = 0; //存放进队时的元素
SqElemType saveOutElem = 0; //存放出队时的元素
int arr[] = { 1,2,3,4,5 };
int arrLength = sizeof(arr) / sizeof(int);
int menuNum = 0; //存放菜单编号的变量
int patientNum = 0; //存放病历号的变量
cout << "编制一个护士看病模拟程序。\n";
while (menuNum != 4) {
cout << "\n\n\n==========菜单==========\n";
cout << "\t1.排队"
<< "\n\t2.就诊"
<< "\n\t3.查看排队"
<< "\n\t4.下班(退出程序)"
<< "\n========================\n";
cout << "\n选择菜单,请输入菜单编号:";
cin >> menuNum;
switch (menuNum)
{
case 1:
//进队
cout << "\n请输入病历号:";
cin >> patientNum;
enSqQueue(Sq, patientNum); //将病历号放入队列中
cout << "\n进队成功。\n"; //提示语句
arrLength = SqQueueLength(Sq); //获取当前队列的长度
cout << "\n当前排队情况为:";
DisplaySqQueue(Sq, arrLength); //显示当前队列中的元素
break;
case 2:
//出队
if (SqQueueEmpty(Sq)) { //如果队空,则无法出队
cout << "当前没有人在排队!";
continue; //结束当前循环
}
cout << "当前出队就诊的号数为:";
deSqQueue(Sq, saveOutElem);
cout << saveOutElem << "号 ";
cout << "\n出队成功。";
break;
case 3:
//查看队列
if (SqQueueEmpty(Sq)) { //如果队空,则无法出队
cout << "当前没有人在排队!";
continue; //结束当前循环
}
cout << "\n查看队列:";
DisplaySqQueue(Sq, arrLength); //查看队列元素
break;
case 4:
cout << "\n护士姐姐要下班咯~ (O▽O)~\n";
Sleep(2000); //控制下一条语句的时间,2s后执行下一条语句
exit(0); //2s后退出程序
break;
default:
cout << "输入的菜单编号错误,请重新输入!";
break;
}
}
DestorySqQueue(Sq);
}
//测试队列是否可用
void testSqQueue() {
SqQueue *Sq;
int arrTest[5] = { 1,2,3,4,5 };
int arrLength = sizeof(arrTest) / sizeof(int);
InitSqQueue(Sq);
cout << "开始入队:";
for (int i = 0; i < arrLength; i++) {
enSqQueue(Sq, arrTest[i]); //将数组中的元素全部入队
cout << arrTest[i] << " "; //显示入队的元素
}
cout << "\n出队后的数字:";
DisplaySqQueue(Sq, arrLength);
cout << "\n当前队列的长度为:" << SqQueueLength(Sq);
DestorySqQueue(Sq);
}
//SqQueue.h
#include <iostream>
#include <malloc.h>
#define Maxsize 50
using namespace std;
typedef int SqElemType;
typedef struct {
SqElemType data[Maxsize];
int front;
int rear;
}SqQueue;
void InitSqQueue(SqQueue *&Sq) {
Sq = (SqQueue *)malloc(sizeof(SqQueue));
Sq->front = Sq->rear = -1; //初始时将队头队尾都置为 -1
}
void DestorySqQueue(SqQueue *&Sq) {
free(Sq);
}
bool SqQueueEmpty(SqQueue *&Sq) {
return Sq->front == Sq->rear; //队头等于队尾时,队列为空
}
bool SqQueueFull(SqQueue *Sq) {
return Sq->rear == Maxsize - 1; //队尾等于数组最大下标时,队列为满
}
bool enSqQueue(SqQueue *Sq,SqElemType e) {
if (SqQueueFull(Sq)) return false;
Sq->rear++; //元素进队,先将尾指针rear+1
//然后把要进队的元素e赋值给队列的data数组中的Sq->rear的位置中
Sq->data[Sq->rear] = e;
return true;
}
bool deSqQueue(SqQueue *Sq, SqElemType &e) {
if (SqQueueEmpty(Sq)) return false;
Sq->front++; //元素出队,将队头指针front+1
e = Sq->data[Sq->front]; //将出队元素放在e中,以备用
return true;
}
//参数arrLen,是为了控制下面这个循环的长度
void DisplaySqQueue(SqQueue *Sq, int arrLen) {
for (int i = 0; i < arrLen; i++) { //遍历队列,将队列的元素输出
cout << Sq->data[i] << " ";
}
}
int SqQueueLength(SqQueue *Sq) {
return Sq->rear + 1; //队列的长度等于队尾指针rear+1
}
运行截图