}
五、调试分析
包括调试过程中遇到的问题及解决的方法、算法的时间空间复杂性分析、经
验体会。
本实验中遇到问题:
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");
}