资源描述
医院候诊管理系统C++
【附录一】源代码
HOSPITAL.CPP
#include"hospital.h"
#define Max 1000000 //最多支持的挂号的人数
long renshu[5]= {0,0,0,0,0}; //存放各科室人数
long I=0; //数组下标
long L=0;
long Ghsr=0; //用于存放挂号的收入!
using namespace std;
struct Patient //定义患者结构体
{
char num[6]; //患者编号
char time[8] = ""; //挂号日期,初始化0
int sex = 0; //性别 1为男,2为女
int age = 0; //年龄
char room = '0'; //所挂号的科室
char jz[4] = "否"; //是否是急诊,默认值否
char zp; //专家门诊还是普通门诊
} P[Max],Q[Max]; //最多存放1000000个
struct Age //年龄段结构体
{
int e = 0; //儿童 enfant 1-14
int y = 0; //青年 young people 15-25
int m = 0; //中年 wrinkly 26-55
int o = 0; //老年 old folks 55以上
};
struct ghfl
{
int drrs = 0; //当日号人数
int yyrs = 0; //预约人数
int jzrs = 0; //急诊人数
} G;
struct Paixu //定义各科室就诊人数排序结构体
{
char name[6]; //科室名称
int money; //本科收入
struct Age a ; //Age 结构体类型的成元
} J[5]; //一共5个科室
void clear()
{
system("cls"); //清屏
system("date/t"); //显示日期
}
//--------------分科室函数------------------
void hospital::room(char room)
{
clear();
switch(room)
{
case '1':
renshu[0]++;
cout<<'\t'<<"\n\t请到第5就诊室!\n\n\t您的前面还有 " << renshu[0]-1 << " 人\n\n\t";
break;
case '2':
renshu[1]++;
cout<<'\t'<<"\n\t请到第4就诊室!\n\n\t您的前面还有 " << renshu[1]-1<< " 人\n\n\t";
break;
case '3':
renshu[2]++;
cout<<'\t'<<"\n\t请到第3就诊室!\n\n\t您的前面还有 " << renshu[2]-1<< " 人\n\n\t";
break;
case '4':
renshu[3]++;
cout<<'\t'<<"\n\t请到第2就诊室!\n\n\t您的前面还有 " << renshu[3]-1<< " 人\n\n\t";
break;
case '5':
renshu[4]++;
cout<<'\t'<<"\n\t请到第1就诊室!\n\n\t您的前面还有 " << renshu[4]-1<< " 人\n\n\t";
break;
}
}
//--------------挂当日号函数------------------
int hospital::gdrh()
{
char temp[1000] = ""; //为了避免输入多个字符时会产生的错误
if(input() == -1)
{
return 1; //如果在input里面选择了返回则返回
}
//tj(); //调用统计计算前面有几人
room(P[I-1].room); //分科室
G.drrs++; //挂当日号人数+1
system("pause"); //暂停
return 1;
}
//--------------查看挂号人数函数------------------
int hospital::ghrs()
{
char temp[100]="";
clear();
cout<<"\n\n\n\t\t\t各类挂号情况一览表\n";
cout << "\t==================================================\n";
cout << "\n\n\t" << "\t挂当日号的人数为----" << G.drrs;
cout << "\n\n\t" << "\t挂预约号的人数为----" << G.yyrs;
cout << "\n\n\t" << "\t挂急诊号的人数为----" << G.jzrs;
cout << "\n\n\n\t==================================================\n\t";
system("pause");
return(1);
}
//--------------挂急诊号函数------------------
int hospital::gjzh()
{
if(-1 == input())
{
return 1; //返回
}
clear(); //清屏
switch(P[I-1].room)
{
case '1':
renshu[0]++;
cout<<'\t'<<"\n\t请到第1急诊室!\n\n\t";
break;
case '2':
renshu[1]++;
cout<<'\t'<<"\n\t请到第2急诊室!\n\n\t";
break;
case '3':
renshu[2]++;
cout<<'\t'<<"\n\t请到第3急诊室!\n\n\t";
break;
case '4':
renshu[3]++;
cout<<'\t'<<"\n\t请到第4急诊室!\n\n\t";
break;
case '5':
renshu[4]++;
cout<<'\t'<<"\n\t请到第5急诊室!\n\n\t";
break;
}
G.jzrs++; //急诊号人数+1
strcpy( P[I-1].jz,"是");
system("pause");
return 1;
}
//--------------查看挂号收入函数------------------
int hospital::ghsr()
{
int i=0;
char temp[100]="";
char temp1='/';
clear();
cout<<"\n\n\n\t\t\t挂号情况一览表\n";
cout << "\t==================================================\n";
cout<<"\t今天的挂号费收入为: "<<Ghsr<<" 元";
cout << "\n\t==================================================\n";
for(i=0; i<5; i++)
cout<<"\n\n\t"<<J[i].name<<"的收入为: "<<J[i].money ;
cout << "\n\t==================================================\n\t";
system("pause");
return(1);
}
//--------------查看年龄比函数------------------
int hospital::nlb()
{
long sum[5];
int i;
char temp[100]="";
clear();
cout<<"\n\n\t\t\t 各科室患者年龄层人数\n\n";
cout<<"\t\t儿 童\t 青 年\t 中 年\t 老 年\t 总 和\n\n";
cout<<"\t\t(1-14)\t(15-25)\t(26-55)\t(56以上)(1-100)\n";
cout<<" =============================================================\n\n";
for(i=0; i<5; i++) //求出各科室就诊的总人数
sum[i]=J[i].a.e+J[i].a.y+J[i].a.m+J[i].a.o ;
for(i=0; i<5; i++)
{
cout <<'\t'<<J[i].name<<'\t'<<J[i].a.e<<"\t "<<J[i].a.y<<"\t "<<J[i].a.m<<"\t "<<J[i].a.o<<"\t "<<sum[i];
cout<<"\n\n";
}
cout<<" =============================================================\n\t";
system("pause");
return(1);
}
//--------------查看各科就诊比例------------------
int hospital::jzrs()
{
int i=0;
char temp[100]="";
clear();
cout<<"\n\n\n\t\t\t各科就诊人数一览表\n";
cout << "\t==================================================";
for(i=0; i<5; i++)
cout<<"\n\n\t"<<i+1<<". "<<J[i].name<<"的就诊人数为: "<<renshu[i] ;
cout << "\n\t==================================================\n\t";
system("pause");
return(1);
}
//--------------挂号向导函数------------------
int hospital::ghxd()
{
clear(); //清屏
char gn, temp[1000]=""; //为了避免输入多个字符时会产生的错误
cout << "\n\n\t\t\t====挂号向导====\n\n";
cout << "\t\t以下仅供参考,如疑问请咨询医护人员!\n\n";
cout << "\t===科室============================包含内容===================\n\n" ;
cout << "\t 内科\t\t呼吸,消化,泌尿,心脏,免疫,血液,内分泌,神经,肾,等\n\n";
cout << "\t 外科\t\t感染,心胸,肝胆,外伤,微创,普外,肛肠,整形,等\n\n";
cout << "\t 骨科\t\t骨折,骨质增生,风湿,关节,四肢,骨神经,等\n\n";
cout << "\t 口腔科\t牙齿,牙龈,颌面,舌,淋巴,口腔溃疡,等\n\n";
cout << "\t 皮肤科\t癣类,疱疹,皮炎,皮肤瘙痒,癍类,痘类,等\n\n";
cout << "\t==============================================================\n\t";
system("pause");
return 1;
}
//--------------预约挂号功能函数------------------
int hospital::yygh()
{
char str_1[5],str_2[5],str[50],gn; //保存系统时间与预约不同天数及系统时间
int m=1,n=0;
if(-1==input())
return 1;
struct tm *mytime;
time_t LocalTime;
LocalTime=time(NULL);
mytime=localtime(&LocalTime);
strftime(str,sizeof(str),"%c",mytime); //接收系统当前时间,格式09/04/15
do
{
clear();
if(m-n==0)
{
cout << "\n\n\n请挂当天号......\n\n";
system("pause");
return 1;
}
else
{
char date[8];
int flag=1;
while(flag==1)
{
clear();
memset(str_1,'\0',sizeof(str_1));
memset(str_2,'\0',sizeof(str_2));
cout << "==================================================\n";
cout<< "\n\t注意:预约挂号只能预约七天以内\n\n"<<endl;
cout<< "\t请输入日期(格式:月(00)/日(00)/年(00):";
cin>>date;
strcpy(P[I].time, date);
for(int j=0,r=0; j<strlen(date); j++) //保存不同天数
{
if(str[j]!=date[j])
{
if((j==3||j==4)&&(date[j]-'0')>=0&&(date[j]-'0')<=9)
{
str_1[r]=str[j];
str_2[r]=date[j];
r++;
flag=0;
}
else
{
flag=1;
clear();
cout<<"\n\n\n请输入正确的日期格式......\n\n";
system("pause");
break;
}
}
}
}
sscanf(str_2,"%d",&m); //字符串转换为数字
sscanf(str_1,"%d",&n);
}
}
while(m-n>7||m-n<=0);
cout<< "\n\t请"<<m-n<<"天之后前来就诊,谢谢!\n\n\t"; //不同天数相减
G.yyrs++; //预约挂号人数+1
switch(P[I-1].room)
{
case '1':
renshu[0]++;
break;
case '2':
renshu[1]++;
break;
case '3':
renshu[2]++;
break;
case '4':
renshu[3]++;
break;
case '5':
renshu[4]++;
break;
}
Q[L].zp=P[I-1].zp;
Q[L].age=P[I-1].age;
strcpy(Q[L].jz,P[I-1].jz);
strcpy(Q[L].num,P[I-1].num);
Q[L].room=P[I-1].room;
Q[L].sex=P[I-1].sex;
strcpy(Q[L].time, P[I-1].time);
L++;
system("pause");
return 1;
}
//--------------统计功能函数------------------
void hospital::tj()
{
long i=0,m;
struct Paixu t;
m=I;
strcpy(J[0].name,"内科"); //J结构体数组赋初值
strcpy(J[1].name,"外科");
strcpy(J[2].name,"骨科");
strcpy(J[3].name,"皮肤科");
strcpy(J[4].name,"口腔科");
for(i=0; i<5; i++) //各科室各年龄段人数初值为0
{
J[i].a.e=0;
J[i].money = 0;
J[i].a.y=0;
J[i].a.m=0;
J[i].a.o=0;
}
Ghsr = 0;
for(i=0; i<m; i++)
{
if(P[i].zp=='Y')Ghsr+=10,J[P[i].room-'1'].money+=10; //统计挂号收入:专家
else if(P[i].zp == 'N') Ghsr+=5,J[P[i].room-'1'].money+=5; //统计挂号收入:普通
if (P[i].age<=14) //统计各科室各年龄段人数
J[P[i].room-'1'].a.e++;
else if (P[i].age <=25)
J[P[i].room-'1'].a.y++;
else if(P[i].age <=55)
J[P[i].room-'1'].a.m++;
else J[P[i].room-'1'].a.o++;
}
}
//--------------输入功能函数------------------
int hospital::input()
{
char room2='/',cls1='0',zp2,sex2,qr;
int age2=0,i=0;
char room1[1000]="";
char zp1[1000]="";
char sex1[1000]="";
char age1[1000]="";
char cls[1000]="";
char temp[6]="";
char temp1[6]="";
while(I<Max) //重复输入记录
{
strcpy(room1,"");
strcpy(zp1,"");
strcpy(sex1,"");
strcpy(age1,"");
strcpy(cls,"");
strcpy(temp,"");
strcpy(temp1,"");
room2='/';
sex2='/';
zp2='/';
cls1='0';
age2=0;
qr='/';
while((room2<'1' || room2 > '5') && room2!='r' )
{
clear();
cout<<"\n\n\t\t\t\t请选择科室\n\n";
cout << "\n\t=============================================================\n";
cout<<"\n\t\t1.内科";
cout<<"\t\t2.外科";
cout<<"\t\t3.骨科\n\n";
cout<<"\t\t4.皮肤科";
cout<<"\t5.口腔科";
cout<<"\tr.返回!";
cout << "\n\n\t=============================================================\n";
cout<< "\n\t请选择所要挂科室的编号:";
cin>>room1; //输入放在临时变量temp中
if (strlen(room1)==1) room2=tolower(room1[0]);
}
if (room2=='r') return(-1);
while(zp2!='Y'&&zp2!='N') //选择专家门诊吗
{
clear();
cout<<"\n\n\n普通门诊: 5元 \n专家门诊: 10元\n\n\n您是否要挂专家门诊(Y/N):";
cin>>zp1;
if (strlen(zp1)==1)
zp2=toupper(zp1[0]); //变成大写,以避免系统区分大小写
}
while(sex2!='1'&&sex2!='2') //选择性别1为男,2为女
{
clear();
cout<<"\n\n\n\t性 别 (1.男 2.女):";
cin>>sex1;
if (strlen(sex1)==1)
sex2=sex1[0];
}
while(age2<=0||age2>150) //输入的年龄在1--150之间
{
clear();
cout<<"\n\n\n\t年 龄:";
cin>>age1;
if (strlen(age1)<=3)
age2=atoi(age1); //将字符型的age1转换成整型赋给age2;
}
ltoa(I+1,temp,10); //计算当前患者编号
if(strlen(temp)<6)
for(i=0; i<6-strlen(temp); i++)
strcat(temp1,"0");
strcat(temp1,temp);
// 输出患者信息以确认输入是否正确
while(cls1!='1'&&cls1!='2'&&cls1!='r')
{
clear();
cout<<"\n\n\n\t\t\t您的输入的信息如下,请确认是否正确!\n\n\n\n";
cout<<"\t编 号\t 性 别\t年 龄\t所挂科室\t专家门诊\t挂号费\n\n";
cout<<'\t'<<temp1; //编号
if (sex2=='1')
cout<<'\t'<<" 男"; //性别
else if(sex2 =='2')
cout<<'\t'<<" 女";
cout<<'\t'<<age2; //年龄
switch(room2) //科室
{
case '1':
cout<<'\t'<<"内 科";
break;
case '2':
cout<<'\t'<<"外 科";
break;
case '3':
cout<<'\t'<<"骨 科";
break;
case '4':
cout<<'\t'<<"皮肤科";
break;
case '5':
cout<<'\t'<<"口腔科";
break;
}
if (zp2=='Y') //是否为专家门诊
cout<<"\t\t"<<" 是";
else cout<<"\t\t"<<"不 是";
if (zp2=='Y') //挂号费用
cout<<"\t\t"<<"10";
else cout<<"\t\t"<<"5";
cout<<"\n\n================================================================================";
cout<<"\n\n\t\t1.重新填写!\t\t2.信息正确!";
cout<<"\n\n\n请输入您要选择菜单项(1,2):";
cin>>cls;
if (strlen(cls)==1)
cls1=tolower(cls[0]); //变为小写字母
}
if (cls1=='2')
{
P[I].age =age2;
P[I].room=room2;
strcpy(P[I].num,temp1);
P[I].sex=sex2-'0';
P[I].zp=zp2;
I++;
return 0;
}
} //重复输入记录(完)
}
//--------------挂号功能菜单函数------------------
int hospital::gh_menu()
{
int qu[5],i,fh; //qu数组用于接收返回值 i数值下标 fh返回的开关
char gn, temp[1000]=""; //为了避免输入多个字符时会产生的错误,例:123,-2等等
//调用统计功能函数求出所需要的值
do //控制返回操作
{
for(i=0; i<5; i++) qu[i]=2; //返回时重新赋初值
fh=0;
i=0;
gn='0';
strcpy(temp,"");
clear();
while(gn!='1'&&gn!='2'&&gn!='3'&&gn!='4'&&gn!='q'&&gn!='r') //只能输入1、2或者3
{
clear();
cout<<"\n\n\n\t\t\t===请选择您需要的功能===\n";
cout << "\n\t=====
展开阅读全文