病人就医管理系统.docx

上传人:b****4 文档编号:11345279 上传时间:2023-05-31 格式:DOCX 页数:18 大小:82.08KB
下载 相关 举报
病人就医管理系统.docx_第1页
第1页 / 共18页
病人就医管理系统.docx_第2页
第2页 / 共18页
病人就医管理系统.docx_第3页
第3页 / 共18页
病人就医管理系统.docx_第4页
第4页 / 共18页
病人就医管理系统.docx_第5页
第5页 / 共18页
病人就医管理系统.docx_第6页
第6页 / 共18页
病人就医管理系统.docx_第7页
第7页 / 共18页
病人就医管理系统.docx_第8页
第8页 / 共18页
病人就医管理系统.docx_第9页
第9页 / 共18页
病人就医管理系统.docx_第10页
第10页 / 共18页
病人就医管理系统.docx_第11页
第11页 / 共18页
病人就医管理系统.docx_第12页
第12页 / 共18页
病人就医管理系统.docx_第13页
第13页 / 共18页
病人就医管理系统.docx_第14页
第14页 / 共18页
病人就医管理系统.docx_第15页
第15页 / 共18页
病人就医管理系统.docx_第16页
第16页 / 共18页
病人就医管理系统.docx_第17页
第17页 / 共18页
病人就医管理系统.docx_第18页
第18页 / 共18页
亲,该文档总共18页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

病人就医管理系统.docx

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

病人就医管理系统.docx

病人就医管理系统

一、设计题目

编写一个程序定义行医类,反映病人到医院看病,排队看医生的情况,在病人排队过程中,主要发生两件事:

(1)病人到达诊室,将病历本交给护士,排到等待队列中候诊。

(2)护士从等待队列中取出一位病人的病历,该病人进入诊室就诊。

要求程序采用菜单方式,其选项及功能说明如下:

(1)排队------输入病人的病历号,加入到病人排队队列中

(2)就诊-------病人排队队列中最前面的病人就诊,并将其从队列中删除。

(3)查看排队------从队首到队尾列出所有的排队病人的病历号。

(4)下班---------退出运行。

二、需求分析

1)运行环境(软、硬件环境)

软件:

MicrosoftVisualStudio//MicrosoftVisualC++6.0;

硬件:

计算机硬件系统(包括键盘等)

2)输入的形式和输入值的范围

输入形式:

通过键盘键入测试数据

输入值范围:

①字符型(char)医生,护士

②字符数组病人病历号

3)输出的形式描述

输入通过显示计算机屏显示,医生选择相应功能之后,显示屏会显示出各种对应信息。

4)功能描述

病人到诊室,交给护士自己的病历表之后,护士登记病人的病历号,同时纳入队列中进行排队等待。

当等到该病历号的病人进入诊室进行就诊时,系统删除前一位病人的病历号,同时下一位病人进入等待就诊阶段。

如此反复,当时间到达下班时间之后,系统停止运行,医生操作退出系统!

此过程中,医生可以随时调动系统数据,查看需要就诊的病人病历号及病人人数,此过程使用队列的遍历函数予以实现。

5)测试数据

分别选择验证相应功能的数据进行实验数据测试。

测试排队功能数据:

(选择1)

病历号:

100,101,102,103

测试输入错误时,系统显示:

(选择12)

测试就诊功能数据:

(选择2)

测试查看队列功能数据:

(选择3)

测试下班功能数据:

(选择4)

三、概要设计

1)抽象数据类型定义描述

(对各类的成员及成员函数进行抽象描述,参见书或ppt及实验)

①template

classNode

{

public:

Tdata;//数据域

Node*next;//指针域

};

②template

classLinkQueue

{

public:

LinkQueue();//构造函数,初始化一个空的链队列

~LinkQueue(){};//析构函数,释放链队中各结点的存储空间

voidInQueue(Tx);//将元素x入队

TOutQueue();//将队头元素出队

TGetQueue();//取链队列的队头元素

intEmpty(){

if(front==NULL)

return1;

return0;};//判断链队列是否为空

voidTraverse();//遍历函数

private:

Node*front,*rear;//队头和队尾指针

};

2)功能模块设计(如主程序模块设计)

①头文件

②类:

第一,结点类;

第二,链队列类;

第三,行医类:

③主函数

3)模块层次调用关系图

四、详细设计

实现概要设计中定义的所有的类的定义及类中成员函数,并对主要的模块写出伪码算法。

结点类:

template

classNode

{

public:

Tdata;//数据域

Node*next;//指针域

};

链队列类:

template

classLinkQueue

{

public:

LinkQueue();//构造函数,初始化一个空的链队列

~LinkQueue(){};//析构函数,释放链队中各结点的存储空间

voidInQueue(Tx);//将元素x入队

TOutQueue();//将队头元素出队

TGetQueue();//取链队列的队头元素

intEmpty()

{

if(front==NULL)

return1;

return0;

};//判断链队列是否为空

voidTraverse();//遍历函数

private:

Node*front,*rear;//队头和队尾指针

};

template

LinkQueue:

:

LinkQueue()

{

front=rear=NULL;

}

template

voidLinkQueue:

:

InQueue(Tx)

{

Node*s;

s=newNode;

s->data=x;//申请一个数据域为x的结点s

s->next=NULL;

if(front==NULL)//空队列,新结点既是队头,又是队尾

{front=rear=s;}

else

{rear->next=s;//将结点s插入到队尾

rear=s;

}

}

template

TLinkQueue:

:

OutQueue()

{

Node*p;Tx;

if(front==NULL)

{

cout<<"队空"<

exit(0);

}

p=front;

x=p->data;//暂存队头元素

front=front->next;//将队头元素所在结点摘链

if(front==NULL)

rear=front;

deletep;

returnx;

}

template

voidLinkQueue:

:

Traverse()

{

Node*p;

p=front;

cout<<"正在排队的病人显示:

"<

while(p!

=NULL)

{

cout<data<<"";

p=p->next;

}

cout<

}

行医类:

classHospitalize

{

private:

LinkQueuequeue;//病人队列

public:

Hospitalize(){};//无参数的构造函数

~Hospitalize(){};//析构函数

voidStandInALine();//排队

voidCure();//就诊

voidDisplay();//查看排队

};

voidHospitalize:

:

StandInALine()

{

intnum;//病历号

cout<<"请输入病历号:

";

cin>>num;//输入排队病人

queue.InQueue(num);//将病历号加入到病人排队队列中

}

voidHospitalize:

:

Cure()

{

if(queue.Empty())

{

cout<<"现已没有病人在排队了!

"<

}

else

{

inta;

a=queue.OutQueue();//病人排队队列中最前面的病人就诊,并将其从队列中删除

cout<

"<

}

}

voidHospitalize:

:

Display()

{

queue.Traverse();//从队首到队尾列出所有的排队病人的病历号

cout<

}

五、调试分析

包括调试过程中遇到的问题及解决的方法、算法的时间空间复杂性分析、经

验体会。

本实验中遇到问题:

Q1:

结点类中的成员设为私有导致后面的链队列类不可使用结点类的相关寒暑;

A1:

将结点类中的成员变量或成员函数全部设为公有;或者是将结点类设置为链队列的友元类。

本实验的时间复杂度为0(n),

空间复杂度为0

(1);

本实验经验体会:

一个良好的开端对于程序的成功运行具有至关重要的作用。

第一节课上,老师说,“有的同学如果想直接在VC上编写程序,而未经过之前的算法等相关准备的话是很难写成功的!

”的确,想想自己平时编写程序的时候,如果直接就在VC上编写的话,程序写得很慢,效率会很低!

所以,这个实验中,我尝试着按照老师讲的,首先分析了程序的相关要求,联系自己平时所学知识,很快把程序主体架构写出来了,这大大方便了后续的相关工作。

在第二节课上,按照要求把相关函数详细代码写出,所以程序第二节课就写好了。

所以,这个实验之后,我逐渐明白了在程序编写之前,做好适当的准备是至关重要的。

本实验中,通过上网查找和和同学讨论等方式,这个实验增强了自学能力,有助于提高自己的实践能力,运用知识的能力。

六、用户使用说明

详细列出每一步的操作说明。

第一,病人进入诊室,护士收集病历号并输入至本系统。

即选择菜单栏中的“1”,从而实现将病人纳入到队列中去。

第二,当轮到某病历号的病人就诊时,医生可以通过查看未就诊,依然在队列中的病人的病历号,然后选择“2”,实现对该病人的就诊。

第三,该病人就诊完毕,系统删除该病人的信息,即病人出队,下一位病人可以进入就诊阶段。

同时,医生可以通过功能键“3”,选择查看病人队列。

第四,当病人队列已无元素,医生下班了,就可以通过选择功能键“4”,从而实现对系统的关闭,系统停止运行。

七、测试结果

菜单显示:

①排队:

②就诊:

③查看队列:

④下班退出系统:

八、附录:

程序设计源代码

#include

#include

#include

usingnamespacestd;

template

classNode

{

public:

Tdata;//数据域

Node*next;//指针域

};

template

classLinkQueue

{

public:

LinkQueue();//构造函数,初始化一个空的链队列

~LinkQueue(){};//析构函数,释放链队中各结点的存储空间

voidInQueue(Tx);//将元素x入队

TOutQueue();//将队头元素出队

TGetQueue();//取链队列的队头元素

intEmpty()

{

if(front==NULL)

return1;

return0;

};//判断链队列是否为空

voidTraverse();//遍历函数

private:

Node*front,*rear;//队列头指针,尾指针

};

template

LinkQueue:

:

LinkQueue()

{

front=rear=NULL;//初始化为空

}

template

voidLinkQueue:

:

InQueue(Tx)

{

Node*s;

s=newNode;

s->data=x;//申请一个数据域为x的结点s

s->next=NULL;

if(front==NULL)//空队列,新结点既是队头,又是队尾

{front=rear=s;}

else

{rear->next=s;//将结点s插入到队尾

rear=s;

}

}

template

TLinkQueue:

:

OutQueue()

{

Node*p;Tx;

if(front==NULL)

{

cout<<"队空"<

exit(0);

}

p=front;

x=p->data;//暂存队头元素

front=front->next;//将队头元素所在结点摘链

if(front==NULL)

rear=front;

deletep;

returnx;

}

template

voidLinkQueue:

:

Traverse()

{

Node*p;

p=front;

cout<<"**正在排队的病人显示(按照病历号):

"<

while(p!

=NULL)

{

cout<data<<"";

p=p->next;

}

cout<

}

//医生工作

classHospitalize

{

private:

LinkQueuequeue;//病人队列

public:

Hospitalize(){};//无参数的构造函数

~Hospitalize(){};//析构函数

voidStandInALine();//排队

voidCure();//就诊

voidDisplay();//查看排队

};

voidHospitalize:

:

StandInALine()

{

intnum;//病历号

cout<<"请输入病历号:

";

cin>>num;//输入排队病人

queue.InQueue(num);//将病历号加入到病人排队队列中

}

voidHospitalize:

:

Cure()

{

if(queue.Empty())

{

cout<<"现已没有病人在排队了!

"<

}

else

{

inta;

a=queue.OutQueue();//病人排队队列中最前面的病人就诊,并将其从队列中删除

cout<

"<

}

}

voidHospitalize:

:

Display()

{

queue.Traverse();//从队首到队尾列出所有的排队病人的病历号

cout<

}

//主函数

voidmain()

{

Hospitalizea;

intn;

while(n!

=4)

{

cout<<"*****************************************************************"<

cout<<"**你好!

欢迎进入病人就医管理系统!

"<

cout<<"1.排队--输入病人的病历号,加入到病人队列中!

"<

cout<<"2.就诊--病人排队队列中最前面的病人就诊,并将其从队列中删除!

"<

cout<<"3.查看排队--从队首到队尾列出所有的排队病人的病历号!

"<

cout<<"4.下班--退出运行!

"<

cout<<"*****************************************************************"<

cout<<"--请选择:

";

cin>>n;

if(n<1||n>4)

cout<<"**输入错误!

请重新选择--"<

cout<

switch(n)

{

case1:

a.StandInALine();//排队--输入病人的病历号,加入到病人队列中

break;

case2:

a.Cure();//就诊--病人排队队列中最前面的病人就诊,并将其从队列中删除

break;

case3:

a.Display();//查看排队--从队首到队尾列出所有的排队病人的病历号

break;

}

}

system("pause");

}

 

WelcomeTo

Download!

!

!

 

欢迎您的下载,资料仅供参考!

 

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

当前位置:首页 > 自然科学 > 物理

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

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