#include <iostream.h>
#include<iomanip.h>
#include<stdexcept>
#include<dos.h>
#include<cstring>
#include<cctype>
#include<cstdlib>
#include<stdio.h>
#define Max 1000000 //最多支持患者挂号的个数
long Ghsr=0; //统计挂号收入总值*****************************不用可以吗?
long Ghrs[5]={0,0,0,0,0}; //存放各科室挂号人数的数组
long I=0; //数组下标
struct Patient //定义患者结构体
{
char num[6]; //患者编号
int sex; //性别 1为男,2为女
int age; //年龄
char ks; //所挂号的科室
char zp; //专家门诊还是普通门诊
}P[Max]; //最多存放1000000个
struct Age //年龄断结构体
{long e; //儿童 enfant 1-14
long y; //青年 young people 15-30
long m; //中年 wrinkly 31-55
long o; //老年 old folks 55以上
};
struct Jzrs //定义各科室就诊人数排序结构体
{ char name[6]; //科室名称
long number; //本科室的就诊人数
struct Age a ; //Age 结构体类型的成元a
}J[5]; //人数排序
void clear()
{ system("cls"); //清屏
system("date/t"); //显示日期
}
class hospital{ //定义医院类
public:
int sr();
void tj();
int gh();
int rs();
int nlb();
int zc();
int tjjm();
void gnxz();
};
int hospital::sr() //输入函数
//int sr()
{char ks2='/',cls1='0',zp2,sex2,qr;
int age2=0,i=0; // '/'的ASCII码为47,'0'的ASCII为48;
char ks1[1000]="";
char zp1[1000]="";
char sex1[1000]="";
char age1[1000]="";
char cls[1000]="";
char temp[6]="";
char temp1[6]="";
while(I<Max) //重复输入记录
{
strcpy(ks1,""); strcpy(zp1,"");strcpy(sex1,"");strcpy(age1,"");strcpy(cls,"");
strcpy(temp,"");strcpy(temp1,"");
ks2='/';sex2='/';zp2='/';cls1='0';age2=0;qr='/';
while((ks2<'1' || ks2 > '5') && ks2!='r' )
{
clear();
cout<<"\n\n\t\t\t\t挂号单输入界面\n";
cout<<"\n\n\n\t\t1.内科";
cout<<"\t\t2.外科";
cout<<"\t\t3.骨科\n\n";
cout<<"\t\t4.皮肤科";
cout<<"\t5.口腔科";
cout<<"\tr.返回!";
cout<<"\n\n\n\n\n请选择所要挂号的科室:";
cin>>ks1; //输入放在临时变量temp中
if (strlen(ks1)==1) ks2=tolower(ks1[0]);
}
if (ks2=='r') return(1);
while(zp2!='Y'&&zp2!='N') //选择专家门诊吗
{clear();
cout<<"\n\n\n普通门诊5元 专家门诊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是否为专家门诊\n\n";
cout<<'\t'<<temp1; //编号
if (sex2=='1')
cout<<'\t'<<" 男"; //性别
else
if(sex2 =='2')
cout<<'\t'<<" 女";
cout<<'\t'<<age2; //年龄
switch(ks2) //科室
{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 (ks2=='1')
if (age2<=14) cout<<"\n\n\t请您到第一诊室,谢谢!";
else if(sex2=='2') cout<<"\n\n\t请您到第三诊室,谢谢!";
else if(age2<=25) cout<<"\n\n\t请您到第二诊室,谢谢!";
else cout<<"\n\n\t请您到第四诊室,谢谢!";
cout<<"\n\n================================================================================";
cout<<"\n\n\t\t1.重新填写!\t\t2.下一位!";
cout<<"\n\n\t\t\t\t\tr.返回功能选择菜单!";
cout<<"\n\n\n请输入您要选择菜单项(1,2,r):";
cin>>cls;
if (strlen(cls)==1)
cls1=tolower(cls[0]); //变为小写字母
}
if (cls1=='2'||cls1=='r')
{P[I].age =age2;
P[I].ks=ks2;
strcpy(P[I].num,temp1);
P[I].sex=sex2-'0';
P[I].zp=zp2;
I++;
}
if (cls1=='r')return(1);
} //重复输入记录(完)
return(-1);
}
void hospital::tj() //统计功能函数************************************
//void tj()
{long i=0,j=0,m;
struct Jzrs 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].a.y=0;
J[i].a.m=0;
J[i].a.o=0;
}
for(i=0;i<m;i++)
{if(P[i].zp=='Y')Ghsr+=10; //统计挂号收入:专家
else Ghsr+=5; //统计挂号收入:普通
Ghrs[P[i].ks-'1']++; //统计各科室挂号人数,P[i].ks-'1'是为了使其变为数值型
if (P[i].age<=14) //统计各科室各年龄段人数
J[P[i].ks-'1'].a.e++;
else
if (P[i].age <=30)
J[P[i].ks-'1'].a.y++;
else if(P[i].age <=55)
J[P[i].ks-'1'].a.m++;
else J[P[i].ks-'1'].a.o++;
}
for(i=0;i<5;i++) //把各科室的挂号人数赋给J结构体
J[i].number =Ghrs[i];
for(i=0;i<4;i++) //按就诊人数排序
for(j=i+1;j<5;j++)
{
if (J[i].number <J[j].number )
{t=J[i];
J[i]=J[j];
J[j]=t;
}
}
} //**********************************//
int hospital::gh() //查看挂号情况函数
//int gh()
{int i=0;
char temp[100]="";
char temp1='/';
clear();
cout<<"\n\n\n\t\t\t挂号情况一览表\n\n\n\n\n";
cout<<"\t今天的挂号费收入为: "<<Ghsr<<" 元";
for(i=0;i<5;i++)
cout<<"\n\n\t"<<J[i].name<<"的挂号人数为: "<<J[i].number ;
cout<<"\n\n\n\n\n按\"r\"键返回!"; //除了回车,tab等键都好用
cin>>temp;
strcpy(temp,"");
return(1);
}
int hospital::rs() //就诊人数函数
//int rs()
{int i=0;
char temp[100]="";
clear();
cout<<"\n\n\n\t\t\t各科就诊人数一览表\n\n\n\n\n";
for(i=0;i<5;i++)
cout<<"\n\n\t"<<i+1<<". "<<J[i].name<<"的就诊人数为: "<<J[i].number ;
cout<<"\n\n\n\n\n按\"r\"键返回!";
cin>>temp;
strcpy(temp,"");
return(1);
}
int hospital::nlb() //各科就诊年龄比函数
//int nlb()
{ long sum[5];
int i;
int e1,m1,y1,o1;
char temp[100]="";
clear();
cout<<"\n\n\t\t\t 各科室患者年龄层比例\n\n\n\n";
cout<<"\t\t儿 童\t\t青 年\t\t中 年\t\t老 年\n\n";
cout<<"\t\t(1-14)\t\t(15-30)\t\t(31-55)\t\t(56以上)\n";
cout<<" ====================================================================\n\n";
for(i=0;i<5;i++) //求出各科室就诊的总人数
sum[i]=J[i].a.e+J[i].a.m+J[i].a.o+J[i].a.y ;
for(i=0;i<5;i++)
{e1=(int)((J[i].a.e/(double)sum[i]+0.005)*100); //加0.005为了四舍五入 百分比
m1=(int)((J[i].a.m/(double)sum[i]+0.005)*100);
y1=(int)((J[i].a.y/(double)sum[i]+0.005)*100);
o1=(int)((J[i].a.o/(double)sum[i]+0.005)*100);
cout<<'\t'<<J[i].name<<'\t'<<e1<<"\t\t"<<y1<<"\t\t"<<m1<<"\t\t"<<o1;
cout<<"\n\n";
}
cout<<" ================