资源预览内容
第1页 / 共37页
第2页 / 共37页
第3页 / 共37页
第4页 / 共37页
第5页 / 共37页
第6页 / 共37页
第7页 / 共37页
第8页 / 共37页
第9页 / 共37页
第10页 / 共37页
亲,该文档总共37页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
精品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_#includelk_queue.h/链队列感谢下载载/行医类classHospitalizeprivate:/行医类的数据成员:LinkQueuequeue;/病人队列/辅助函数voidStandInALine();voidCure();/排队/就诊voidDisplay();/查看排队public:/方法声明及重载编译系统默认方法声明Hospitalize();Hospitalize();voidWork();/无参数的构造函数/析构函数/医生工作/行医类的实现部分voidHospitalize:StandInALine()/操作结果:输入排队病人的病历号,加入到病人排队队列中unsignedintnum;/病历号/ 输入排队病人/ 将病历号加入到病人排coutnum;queue.InQueue(num);队队列中voidHospitalize:Cure()/操作结果:病人排队队列中最前面的病人就诊,并将其从队列中删除if(queue.Empty()/无病人cout现已没有病人在排队了!endl;elseunsignedintnum;/病历号queue.OutQueue(num);/病人排队队列中最前面的病人就诊,并将其从队列中删除coutnum号病人现在就医.endl;voidHospitalize:Display()/操作结果:从队首到队尾列出所有的排队病人的病历号queue.Traverse(Write);/从队首到队尾列出所有的排队病人的病历号coutendl;voidHospitalize:Work()/操作结果:医生工作intselect=0;while(select!=4)cout1.排队-输入病人的病历号,加入到病人队列中endl;cout2.就诊-病人排队队列中最前面的病人就诊,并将其从队列中删除endl;cout3.查看排队-从队首到队尾列出所有的排队病人的病历号endl;cout4.下班-退出运行endl;coutselect;/选择功能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_#includeutility.h/实用程序软件包#includenode.h/结点类模板/链队列类模板templateclassLinkQueueprotected:/链队列实现的数据成员:Node*front,*rear;/辅助函数模板:voidInit();/public:/抽象数据类型方法声明及重载编译系统默认方法声明/ 队头队尾指指初始化队列/ 无参数的构造函数模板LinkQueue();virtualLinkQueue();/析构函数模板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©);/重载赋值运算符;/链队列类模板的实现部分templatevoidLinkQueue:Init()/操作结果:初始化队列rear=front=newNode;/生成头结点templateLinkQueue:LinkQueue()/操作结果:构造一个空队列Init();templateLinkQueue:LinkQueue()/操作结果:销毁队列Clear();templateintLinkQueue:Length()const/操作结果:返回队列长度tmpPtr =intcount=0;/计数器for(Node*tmpPtr=front-next;tmpPtr!=NULL;tmpPtr-next)/用tmpPtr依次指向每个元素count+;/对栈每个元素进行计数returncount;templateboolLinkQueue:Empty()constfalse/操作结果:如队列为空,则返回true,否则返回returnrear=front;templatevoidLinkQueue:Clear()/操作结果:清空队列ElemTypetmpElem;/临时元素值while(Length()0)/队列非空,则出列OutQueue(tmpElem);templatevoidLinkQueue:Traverse(void(*visit)(constElemType&)const/操作结果:依次对队列的每个元素调用函数(*visit)for(Node*tmpPtr=front-next;tmpPtr!=NULL;tmpPtr=tmpPtr-next)/对队列每个元素调用函数(*visit)(*visit)(tmpPtr-data);templateStatusCodeLinkQueue:OutQueue(ElemType&e)/操作结果:如果队列非空,那么删除队头元素,并用e返回其值,返回SUCCESS,/否则返回UNDER_FLOW,if(!Empty()/指向队列头素/用e 返回队头元素/队列非空Node*tmpPtr=front-next;e=tmpPtr-data;front-next=tmpPtr-next;/front指向下一元素if(rear=tmpPtr)/表示出队前队列中只有一个元素,出队后为空队列rear=front;deletetmpPtr;/释放出队的结点returnSUCCESS;else/队列为空returnUNDER_FLOW;templateStatusCodeLinkQueue:GetHead(ElemType&e)const/操作结果:如果队列非空,那么用e返回队头元素,返回SUCCESS,/否则返回UNDER_FLOW,if(!Empty()/队列非空Node*tmpPtr=front-next;/指向队列头素e=tmpPtr-data;/用e返回队头元素returnSUCCESS;else/队列为空returnUNDER_FLOW;templateStatusCodeLinkQueue:InQueue(constElemType&e)/操作结果:插入元素e为新的队尾,返回SUCCESSNode*tmpPtr=newNode(e);/生成新结点rear-next=tmpPtr;/新结点追加在队尾rear=tmpPtr;/rear指向新队尾returnSUCCESS;templateLinkQueue:LinkQueue(constLinkQueue©)/操作结果:由队列copy构造新队列复制构造函数模板Init();for(Node*
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号