




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精品2. 病人就医管理1. 目标与要求编写一个程序,反应病人到医院看病,排队看医生的情况。在病人排队的过程中,主要发生两件事。( 1)病人到达诊室,将病历本交给护士,拍到等待队列中候诊。( 2)护士从等待队列中取出以为病人的病历,该病人进入诊室就诊。要求程序采用菜单方式,其选项及功能说明如下。( 1)排队输入病人的病历号,加入到病人排队队列中。( 2)就诊病人排列队列中最前面的病人就诊,并将其从队列中删除。( 3)查看排队从队首到队尾列出所有的排队病人的病历号。( 4)下班退出运行。2. 工具、准备工作在实验开始前,应回顾或复习相关内容。需要一台计算机,其中安装有VisualC+6.0、Vis
2、ualc+2005、VisualC+2005ExpressDev-c+或MinGWDeveloperStudio等集成开发环境软件3. 实验分析4. 代码如下:/头文件:hospitalize.h#ifndef_HOSPITALIZE_H_#define_HOSPITALIZE_H_#include"lk_queue.h"/链队列感谢下载载/行医类classHospitalizeprivate:/行医类的数据成员:LinkQueue<unsignedint>queue;/病人队列/辅助函数voidStandInALine();voidCure();/排队/就诊v
3、oidDisplay();/查看排队public:/方法声明及重载编译系统默认方法声明Hospitalize();Hospitalize();voidWork();/无参数的构造函数/析构函数/医生工作/行医类的实现部分voidHospitalize:StandInALine()/操作结果:输入排队病人的病历号,加入到病人排队队列中unsignedintnum;/病历号/ 输入排队病人/ 将病历号加入到病人排cout<<"请输入病历号:"cin>>num;queue.InQueue(num);队队列中voidHospitalize:Cure()/操作
4、结果:病人排队队列中最前面的病人就诊,并将其从队列中删除if(queue.Empty()/无病人cout<<"现已没有病人在排队了!"<<endl;elseunsignedintnum;/病历号queue.OutQueue(num);/病人排队队列中最前面的病人就诊,并将其从队列中删除cout<<num<<"号病人现在就医."<<endl;voidHospitalize:Display()/操作结果:从队首到队尾列出所有的排队病人的病历号queue.Traverse(Write);/从队首到队尾
5、列出所有的排队病人的病历号cout<<endl;voidHospitalize:Work()/操作结果:医生工作intselect=0;while(select!=4)cout<<"1.排队-输入病人的病历号,加入到病人队列中"<<endl;cout<<"2.就诊-病人排队队列中最前面的病人就诊,并将其从队列中删除"<<endl;cout<<"3.查看排队-从队首到队尾列出所有的排队病人的病历号"<<endl;cout<<"4.下
6、班-退出运行"<<endl;cout<<"请选择:"cin>>select;/选择功能switch(select)case 1:StandInALine();/排队-输入病人的病历号,加入到病人队列中break;case 2:Cure();/就诊-病人排队队列中最前面的病人就诊,并将其从队列中删除break;case 3:Display();/查看排队-从队首到队尾列出所有的排队病人的病历号break;#endif/头文件:lk_queue.h#ifndef_LK_QUEUE_H_#define_LK_QUEUE_H_#incl
7、ude"utility.h"/实用程序软件包#include"node.h"/结点类模板/链队列类模板template<classElemType>classLinkQueueprotected:/链队列实现的数据成员:Node<ElemType>*front,*rear;/辅助函数模板:voidInit();/public:/抽象数据类型方法声明及重载编译系统默认方法声明/ 队头队尾指指初始化队列/ 无参数的构造函数模板LinkQueue();virtualLinkQueue();/析构函数模板intLength()const;
8、/求队列长度boolEmpty()const;/判断队列是否为空voidClear();/将队列清空voidTraverse(void(*visit)(constElemType&)const;/遍历队列StatusCodeOutQueue(ElemType&e);/出队操作StatusCodeGetHead(ElemType&e)const;/取队头操作StatusCodeInQueue(constElemType&e);/入队操作LinkQueue(constLinkQueue<ElemType>©);/复制构造函数模板LinkQ
9、ueue<ElemType>&operator=(constLinkQueue<ElemType>©);/重载赋值运算符;/链队列类模板的实现部分template<classElemType>voidLinkQueue<ElemType>:Init()/操作结果:初始化队列rear=front=newNode<ElemType>/生成头结点template<classElemType>LinkQueue<ElemType>:LinkQueue()/操作结果:构造一个空队列Init();t
10、emplate<classElemType>LinkQueue<ElemType>:LinkQueue()/操作结果:销毁队列Clear();template<classElemType>intLinkQueue<ElemType>:Length()const/操作结果:返回队列长度tmpPtr =intcount=0;/计数器for(Node<ElemType>*tmpPtr=front->next;tmpPtr!=NULL;tmpPtr->next)/用tmpPtr依次指向每个元素count+;/对栈每个元素进行计数r
11、eturncount;template<classElemType>boolLinkQueue<ElemType>:Empty()constfalse/操作结果:如队列为空,则返回true,否则返回returnrear=front;template<classElemType>voidLinkQueue<ElemType>:Clear()/操作结果:清空队列ElemTypetmpElem;/临时元素值while(Length()>0)/队列非空,则出列OutQueue(tmpElem);template<classElemType&g
12、t;voidLinkQueue<ElemType>:Traverse(void(*visit)(constElemType&)const/操作结果:依次对队列的每个元素调用函数(*visit)for(Node<ElemType>*tmpPtr=front->next;tmpPtr!=NULL;tmpPtr=tmpPtr->next)/对队列每个元素调用函数(*visit)(*visit)(tmpPtr->data);template<classElemType>StatusCodeLinkQueue<ElemType>:
13、OutQueue(ElemType&e)/操作结果:如果队列非空,那么删除队头元素,并用e返回其值,返回SUCCESS,/否则返回UNDER_FLOW,if(!Empty()/指向队列头素/用e 返回队头元素/队列非空Node<ElemType>*tmpPtr=front->next;e=tmpPtr->data;front->next=tmpPtr->next;/front指向下一元素if(rear=tmpPtr)/表示出队前队列中只有一个元素,出队后为空队列rear=front;deletetmpPtr;/释放出队的结点returnSUCCESS
14、;else/队列为空returnUNDER_FLOW;template<classElemType>StatusCodeLinkQueue<ElemType>:GetHead(ElemType&e)const/操作结果:如果队列非空,那么用e返回队头元素,返回SUCCESS,/否则返回UNDER_FLOW,if(!Empty()/队列非空Node<ElemType>*tmpPtr=front->next;/指向队列头素e=tmpPtr->data;/用e返回队头元素returnSUCCESS;else/队列为空returnUNDER_FL
15、OW;template<classElemType>StatusCodeLinkQueue<ElemType>:InQueue(constElemType&e)/操作结果:插入元素e为新的队尾,返回SUCCESSNode<ElemType>*tmpPtr=newNode<ElemType>(e);/生成新结点rear->next=tmpPtr;/新结点追加在队尾rear=tmpPtr;/rear指向新队尾returnSUCCESS;template<classElemType>LinkQueue<ElemType&
16、gt;:LinkQueue(constLinkQueue<ElemType>©)/操作结果:由队列copy构造新队列复制构造函数模板Init();for(Node<ElemType>*tmpPtr=copy.front->next;tmpPtr!=NULL;tmpPtr=tmpPtr->next)/对copy队列每个元素对当前队列作入队列操作InQueue(tmpPtr->data);template<classElemType>=(constLinkQueue<ElemType>&LinkQueue&l
17、t;ElemType>:operatorLinkQueue<ElemType>©)/操作结果:将队列copy赋值给当前队列重载赋值运算符if(©!=this)Clear();for(Node<ElemType>*tmpPtr=copy.front->next;tmpPtr!=NULL;tmpPtr=tmpPtr->next)/对copy队列每个元素对当前队列作入队列操作InQueue(tmpPtr->data);return*this;#endif/头文件:node.h#ifndef_NODE_H#define_N
18、ODE_H/结点类模板template<classElemType>structNode/数据成员:ElemTypedata;/数据域/指针建立结构;Node<ElemType>*next;构造函数模板:Node();/指针域无参数的构造函数模板Node(ElemTypeitem,Node<ElemType>*link=NULL);/已知数据元素值和/结点类模板的实现部分template<classElemType>Node<ElemType>:Node()/操作结果:构造指针域为空的结点next=NULL;template<c
19、lassElemType>Node<ElemType>:Node(ElemTypeitem,Node<ElemType>*link)/操作结果:构造一个数据域为item和指针域为link的结点data=item;next=link;#endif/ 如果没有定义_UTILITY_H/ 那么定义_UTILITY_H_/头文件:utility.h#ifndef_UTILITY_H_#define_UTILITY_H/实用程序软件包#ifdef_MSC_VER#if_MSC_VER=1200/标准库头文件#include<string.h>#include&l
20、t;iostream.h>#include<limits.h>#include<math.h>#include<fstream.h>#include<ctype.h>#include<time.h>#include<stdlib.h>#include<stdio.h>#include<iomanip.h>#include<stdarg.h>/ 表示是 VC/ 表示 VC6.0/ 标准串和操作/ 标准流操作/ 极限/ 数学函数/ 文件输入输出/ 字符处理/ 日期和时间函数/ 标准库/
21、 标准输入输出/ 输入输出流格式设置/ 支持变长函数参数/ 支持断言#include<assert.h>#else/其它版本的VC+/ANSIC+标准库头文件using namespace std;/ 标准库包含在命名空间 std 中#include<string>/标准串和操作#include<iostream>/标准流操作#include<limits>/极限#include<cmath>/数学函数#include<fstream>/文件输入输出#include<cctype>/字符处理#include&l
22、t;ctime>/日期和时间函数#include<cstdlib>/标准库#include<cstdio>/标准输入输出#include<iomanip>/输入输出流格式设置#include<cstdarg>/支持变长函数参数#include<cassert>/支持断言#endif/_MSC_VER=1200#else/非VC/ 标准串操作/ 标准流操作/ 极限/ 数据函数/ANSIC+标准库头文件#include<string>#include<iostream>#include<limits&g
23、t;#include<cmath>#include<fstream>/文件输入输出#include<cctype>/字符处理#include<ctime>/日期和时间函数#include<cstdlib>/标准库#include<cstdio>/标准输入输出#include<iomanip>#include<cstdarg>#include<cassert>/输入输出流格式设置/支持变长函数参数/支持断言usingnamespacestd;/标准库包含在命名空间std中#endif/_M
24、SC_VER/自定义类型enumStatusCodeSUCCESS,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中跳过空格及制表符获取一字符sta
25、ticboolUserSaysYes();(no)时,返回falsestaticvoidSetRandSeed();/当用户肯定回答(yes)时,返回true,用户否定回答/设置当前时间为随机数种子staticintGetRand(intn);/生成0n-1之间的随机数生成期望值为 expectValue 泊松随/ 交换 e1, e2 之值staticintGetRand();/生成随机数staticintGetPoissionRand(doubleexpectValue);/机数template<classElemType>voidSwap(ElemType&e1,Ele
26、mType&e2);template<classElemType>voidDisplay(ElemTypeelem,intn);/显示数组elem的各数据元素值template<classElemType>voidWrite(constElemType&e);/显示数据元素/实用类classTimer;/定时器类TimerclassError;/通用异常类staticcharGetChar(istream&inStream)/操作结果:从输入流inStream中跳过空格及制表符获取一字符charch;/临时变量while(ch=(inStream
27、).peek()!=EOF/文件结束符(peek()函数从输入流中接受1/字符,流的当前位置不变)&& (ch = (inStream).get() = ' ' /空格(get()函数从输入流中接受1字符,流/的当前位置向后移1个位置)|ch='t');/制表符returnch;/返回字符staticboolUserSaysYes()/操作结果:当用户肯定回答(yes)时,返回true,用户否定回答(no)时,返回falsecharch;/用户回答字符boolinitialResponse=true;/初始回答do/循环直到用户输入恰当的回答为止
28、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');/跳过当前
29、行后面的字符if(ch='y'|ch='Y')returntrue;elsereturnfalse;/定时器类TimerclassTimerprivate:/数据成员clock_tstartTime;public:/方法声明Timer()startTime=clock();Timer();doubleElapsedTime()/构造函数/析构函数/返回已过的时间;clock_tendTime=clock();/结束时间return(double)(endTime-startTime)/(double)CLK_TCK;/返回从Timer对象启动或最后一次调用res
30、et()后所使用的CPU时间voidReset()startTime=clock();/重置开始时间#defineMAX_ERROR_MESSAGE_LEN100/通用异常类classErrorprivate:/数据成员charmessageMAX_ERROR_MESSAGE_LEN;/异常信息public:/方法声明Error(charmes="一般性异常!")/构造函数/ 复制异常信息/ 析构函数/ 显示异常信息/ 显示异常信息strcpy(message,mes);Error(void);voidShow()constcout<<message<<endl;staticvoidSetRandSeed()/操作结果:设置当前时间为随机数种子srand(unsigned)time(NULL);staticintGetRand(intn)/操作结
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025【国际服务贸易合同】国际服务贸易合同的标准
- 2025简易技术委托开发合同范本
- 2025茶叶委托加工合同范本
- 2025租赁合同解除协议模板
- 幼儿园蔬菜化妆舞会
- 二零二五房屋居间合同书范例
- 库房出租简单合同书范例二零二五年
- 房屋出租合同书水电费规定
- 二零二五养殖劳动聘用合同
- 授权经销合同书协议书范例二零二五年
- 销售部长助理岗位职责
- ISOTS 22163专题培训考试
- 六年级下册数学课件-第4单元 比例 整理和复习 人教版(共21张PPT)
- JJF(鲁) 142-2022 称重式雨量计校准规范
- Adobe-Illustrator-(Ai)基础教程
- 程序的运行结果PPT学习教案
- 圆柱钢模计算书
- 合成宝石特征x
- 查摆问题及整改措施
- 年度研发费用专项审计报告模板(共22页)
- 隧道工程隧道支护结构设计实用教案
评论
0/150
提交评论