实验二 病人就医管理Word下载.docx

上传人:b****2 文档编号:4068515 上传时间:2023-05-02 格式:DOCX 页数:24 大小:22.17KB
下载 相关 举报
实验二 病人就医管理Word下载.docx_第1页
第1页 / 共24页
实验二 病人就医管理Word下载.docx_第2页
第2页 / 共24页
实验二 病人就医管理Word下载.docx_第3页
第3页 / 共24页
实验二 病人就医管理Word下载.docx_第4页
第4页 / 共24页
实验二 病人就医管理Word下载.docx_第5页
第5页 / 共24页
实验二 病人就医管理Word下载.docx_第6页
第6页 / 共24页
实验二 病人就医管理Word下载.docx_第7页
第7页 / 共24页
实验二 病人就医管理Word下载.docx_第8页
第8页 / 共24页
实验二 病人就医管理Word下载.docx_第9页
第9页 / 共24页
实验二 病人就医管理Word下载.docx_第10页
第10页 / 共24页
实验二 病人就医管理Word下载.docx_第11页
第11页 / 共24页
实验二 病人就医管理Word下载.docx_第12页
第12页 / 共24页
实验二 病人就医管理Word下载.docx_第13页
第13页 / 共24页
实验二 病人就医管理Word下载.docx_第14页
第14页 / 共24页
实验二 病人就医管理Word下载.docx_第15页
第15页 / 共24页
实验二 病人就医管理Word下载.docx_第16页
第16页 / 共24页
实验二 病人就医管理Word下载.docx_第17页
第17页 / 共24页
实验二 病人就医管理Word下载.docx_第18页
第18页 / 共24页
实验二 病人就医管理Word下载.docx_第19页
第19页 / 共24页
实验二 病人就医管理Word下载.docx_第20页
第20页 / 共24页
亲,该文档总共24页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

实验二 病人就医管理Word下载.docx

《实验二 病人就医管理Word下载.docx》由会员分享,可在线阅读,更多相关《实验二 病人就医管理Word下载.docx(24页珍藏版)》请在冰点文库上搜索。

实验二 病人就医管理Word下载.docx

1号病人现在就医.

4

请按任意键继续...

【思考与感悟】

思考:

上周学习的数据结构中关于栈,有下面几点,我感觉引起我的重视。

•栈的基本操作中,基本上都是在栈顶进行的。

比如在栈顶的插入,删除,栈的初始化,栈的判空(S.base==S.top),取栈顶元素等等。

所以关于top指针要引起足够的重视和理解。

•理解栈和基本线性表的之间的关系。

首先,栈就是线性表,栈是一种操作受限的线性表。

可以想想就是带着镣铐跳舞的感觉,所以实现的时候必须严格按照栈的定义来执行栈的操作。

•栈不存在的条件:

base=null;

•栈为空的条件:

base=top;

•栈满的条件:

top–base=stacksize;

感悟:

行医类是为了实现病人的排队及就诊,这就是类似个实现栈功能。

病人的排队相当于进栈,就诊相当于退栈。

在判断之前,也类似与链表类,要对其进栈进行栈是否为满的操作。

对退栈也要对其进行栈是否为空的操作。

在实现过程中,因为对软件包的lk_queue.h的实现不熟悉,导致其功能的实现出现差错,还因对字母大小写输写有差错。

在完成对实现一的实现后,发现实现实验二时难度有所减小,但是要写的准确,还是有些难度。

最终看到成果的刹那真的很开心,因为付出终得收获,还有在这期间的代码编写有些都似懂非懂,不太明白,要花好大心思才能完成,也多亏了老师的指导。

【源代码说明】

1.文件名:

utility.h,node.h,lk_queue.h,hpspitalize.h,main.cpp

2.操作说明:

一、行医类的建立

定义私有数据和公有成员

二、行医类的实现

1.排队实现。

输入病历号,将其加入到病人排队队列中。

2.就诊实现。

先判断队列中是否有病人排队,若无,则显示出来,若有,对其排在队列中最前面的病人就诊,并将其从队列中删除。

3.查看队列实现。

从队首到队尾列出所有的排队病人的病历号。

4.实现行医工作。

创建个选择键,从1到4中选择,分别对应不同的功能。

医生通过这可实现对病人的治疗。

源代码:

文件名:

utility.h

#ifndef__UTILITY_H__//如果没有定义__UTILITY_H__

#define__UTILITY_H__//那么定义__UTILITY_H__

//实用程序软件包

#ifdef_MSC_VER//表示是VC

#if_MSC_VER==1200//表示VC6.0

//标准库头文件

#include<

string.h>

//标准串和操作

iostream.h>

//标准流操作

limits.h>

//极限

math.h>

//数学函数

fstream.h>

//文件输入输出

ctype.h>

//字符处理

time.h>

//日期和时间函数

stdlib.h>

//标准库

stdio.h>

//标准输入输出

iomanip.h>

//输入输出流格式设置

stdarg.h>

//支持变长函数参数

assert.h>

//支持断言

#else//其它版本的VC++

//ANSIC++标准库头文件

string>

iostream>

//标准流操作

limits>

cmath>

fstream>

//文件输入输出

cctype>

ctime>

cstdlib>

cstdio>

//标准输入输出

iomanip>

//输入输出流格式设置

cstdarg>

//支持变长函数参数

cassert>

usingnamespacestd;

//标准库包含在命名空间std中

#endif//_MSC_VER==1200

#else//非VC

//标准串操作

//数据函数

#endif//_MSC_VER

 

//自定义类型

enumStatusCode{SUCCESS,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中跳过空格及制表符获取一字符

staticboolUserSaysYes();

//当用户肯定回答(yes)时,返回true,用户否定回答(no)时,返回false

staticvoidSetRandSeed();

//设置当前时间为随机数种子

staticintGetRand(intn);

//生成0~n-1之间的随机数

staticintGetRand();

//生成随机数

staticintGetPoissionRand(doubleexpectValue);

//生成期望值为expectValue泊松随机数

template<

classElemType>

voidSwap(ElemType&

e1,ElemType&

e2);

//交换e1,e2之值

template<

classElemType>

voidDisplay(ElemTypeelem[],intn);

//显示数组elem的各数据元素值

voidWrite(constElemType&

e);

//显示数据元素

//实用类

classTimer;

//定时器类Timer

classError;

//通用异常类

inStream)

//操作结果:

从输入流inStream中跳过空格及制表符获取一字符

{

charch;

//临时变量

while((ch=(inStream).peek())!

=EOF//文件结束符(peek()函数从输入流中接受1

//字符,流的当前位置不变)

&

&

((ch=(inStream).get())=='

'

//空格(get()函数从输入流中接受1字符,流

//的当前位置向后移1个位置)

||ch=='

\t'

));

//制表符

returnch;

//返回字符

}

staticboolUserSaysYes()

//操作结果:

当用户肯定回答(yes)时,返回true,用户否定回答(no)时,返回false

//用户回答字符

boolinitialResponse=true;

//初始回答

do

{//循环直到用户输入恰当的回答为止

if(initialResponse)

{//初始回答

cout<

<

"

(y,n)?

"

;

}

else

{//非初始回答

用y或n回答:

while((ch=GetChar())=='

\n'

);

//跳过空格,制表符及换行符获取一字符

initialResponse=false;

}while(ch!

='

y'

&

ch!

Y'

n'

N'

while(GetChar()!

//跳过当前行后面的字符

if(ch=='

||ch=='

)returntrue;

elsereturnfalse;

//定时器类Timer

classTimer

private:

//数据成员

clock_tstartTime;

public:

//方法声明

Timer(){startTime=clock();

}//构造函数

~Timer(){};

//析构函数

doubleElapsedTime()//返回已过的时间

{

clock_tendTime=clock();

//结束时间

return(double)(endTime-startTime)/(double)CLK_TCK;

//返回从Timer对象启动或最后一次调用reset()后所使用的CPU时间

}

voidReset(){startTime=clock();

}//重置开始时间

};

#defineMAX_ERROR_MESSAGE_LEN100

//通用异常类

classError

charmessage[MAX_ERROR_MESSAGE_LEN];

//异常信息

Error(charmes[]="

一般性异常!

)//构造函数

strcpy(message,mes);

//复制异常信息

~Error(void){};

//析构函数

voidShow()const//显示异常信息

cout<

message<

endl;

//显示异常信息

staticvoidSetRandSeed()

设置当前时间为随机数种子

{

srand((unsigned)time(NULL));

staticintGetRand(intn)

生成0~n-1之间的随机数

returnrand()%(n);

staticintGetRand()

生成随机数

returnrand();

staticintGetPoissionRand(doubleexpectValue)

生成期望值为expectValue泊松随机数

doublex=rand()/(double)(RAND_MAX+1);

//x均匀分布于[0,1)

intk=0;

doublep=exp(-expectValue);

//pk为泊松分布值

doubles=0;

//sk用于求和p0+p1+...+pk-1

while(s<

=x)

{//当sk<

=x时循环,循环结束后sk-1<

=x<

sk

s+=p;

//求和

k++;

p=p*expectValue/k;

//求下一项pk

returnk-1;

//k-1的值服从期希值为expectValue的泊松分布

e2)

交换e1,e2之值

ElemTypetemp;

//临时变量

//循环赋值实现交换e1,e2

temp=e1;

e1=e2;

e2=temp;

voidDisplay(ElemTypeelem[],intn)

显示数组elem的各数据元素值

for(inti=0;

i<

n;

i++)

{//显示数组elem

elem[i]<

cout<

e)

显示数据元素

e<

#endif

node.h,

#ifndef__NODE_H__

#define__NODE_H__

//结点类模板

structNode

//数据成员:

ElemTypedata;

//数据域

Node<

ElemType>

*next;

//指针域

//构造函数模板:

Node();

//无参数的构造函数模板

Node(ElemTypeitem,Node<

*link=NULL);

//已知数据元素值和指针建立结构

//结点类模板的实现部分

Node<

:

Node()

构造指针域为空的结点

next=NULL;

Node(ElemTypeitem,Node<

*link)

构造一个数据域为item和指针域为link的结点

data=item;

next=link;

lk_queue.h

#ifndef__LK_QUEUE_H__

#define__LK_QUEUE_H__

#include"

utility.h"

//实用程序软件包

node.h"

//结点类模板

//链队列类模板

classLinkQueue

protected:

//链队列实现的数据成员:

*front,*rear;

//队头队尾指指

//辅助函数模板:

voidInit();

//初始化队列

//抽象数据类型方法声明及重载编译系统默认方法声明:

LinkQueue();

//无参数的构造函数模板

virtual~LinkQueue();

//析构函数模板

intLength()const;

//求队列长度

boolEmpty()const;

//判断队列是否为空

voidClear();

//将队列清空

voidTraverse(void(*visit)(constElemType&

))const;

//遍历队列

StatusCodeOutQueue(ElemType&

//出队操作

StatusCodeGetHead(ElemType&

e)const;

//取队头操作

StatusCodeInQueue(constElemType&

//入队操作

LinkQueue(constLinkQueue<

copy);

//复制构造函数模板

LinkQueue<

operator=(constLinkQueue<

//重载赋值运算符

//链队列类模板的实现部分

voidLinkQueue<

Init()

初始化队列

rear=front=newNode<

//生成头结点

LinkQueue<

LinkQueue()

构造一个空队列

Init();

~LinkQueue()

销毁队列

Clear();

intLinkQueue<

Length()const

返回队列长度

intcount=0;

//计数器

for(Node<

*tmpPtr=front->

next;

tmpPtr!

=NULL;

tmpPtr=tmpPtr->

next)

{//用tmpPtr依次指向每个元素

count++;

//对栈每个元素进行计数

returncount;

boolLinkQueue<

Empty()const

如队列为空,则返回true,否则返回false

returnrear==front;

Clear()

清空队列

ElemTypetmpElem;

//临时元素值

while

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2