#include<iostream>#include<fstream> //输入输出文件流类#include<string>using namespace std;class person //人类{public:person() {}~person() {} //析构函数,释放资源protected:string name;char sex;int age;double office_vist_fee; //诊费};class doctor:public person //医生类{private:char speicialty[15]; //专业说明public:doctor() {}void input() //增加医生信息{char t;cout<<"*****主治医生基本信息*****"<<endl;//fstream outfile() 打开文件aa.txt,并建立链接,aa.txt是一个输出文件,接收从内存输出数据//ios::out 以输出的方式打开文件//ios::app 以输出的方式打开文件,写入的数据添加在文件末尾fstream outfile("D:\\aa.txt",ios::out|ios::app);if(!outfile)cout<<"打开文件失败!"<<endl;else{cout<<"姓名";cin>>name;outfile<<name<<" ";cout<<"性别:";cin>>sex;if(sex=='m'||sex=='M')outfile<<"男"<<" ";else if(sex=='f'||sex=='F')outfile<<"女"<<" ";else{cout<<"请重新输入性别:";cin>>sex;if(sex=='m'||sex=='M')outfile<<"男"<<" ";else if(sex=='f'||sex=='F')outfile<<"女"<<" ";}cout<<"年龄:";cin>>age;outfile<<age<<" ";cout<<"诊费:";cin>>office_vist_fee; //向磁盘文件aa.txt输入数据outfile<<office_vist_fee<<" ";cout<<"专业说明:";cin>>speicialty;outfile<<speicialty<<endl;out(); //关闭文件}cout<<"是否继续添加医生信息Y/N......:"<<endl; cin>>t;if(t=='y')input(); //返回继续添加elsereturn ;}void zhangdanKind() //按姓名查询医生信息{char t;//定义输入输出文件流,以输入的方式打开磁盘文件aa.txt fstream infile2("D:\\aa.txt",ios::in); //以读方式打开文件if(!infile2){cout<<"打开文件失败!"<<endl;return;}int line=0;string arr[100][100]; //定义一个string类型的二维数组,用来保存文本内读取的信息//char型初始化函数memset(arr,0,sizeof(arr)); //将数组清空//eof()函数到文件结尾可以返回true,而之前返回的均为false,while(true)->while(false),循环结束while(!in()) //文件不为空的条件设置{infile2>>arr[line][0]>>arr[line][1]>>arr[line][2]>>arr[line][3]>>arr[lin e][4];line++;}string na;cout<<"请输入要查询的医生姓名:";cin>>na;for(int i=0;i<line;i++){if(arr[i][0]==na){cout<<"医生姓名:"<<arr[i][0]<<" "<<"性别:"<<arr[i][1]<<" "<<"年龄:"<<arr[i][2]<<" "<<"诊费:"<<arr[i][3]<<"元"<<" "<<"专业:"<<arr[i][4]<<endl;return;}}cout<<"记录中没有此医生信息!"<<endl;cout<<"是否继续查询Y/N.....:"<<endl;cin>>t;if(t=='y')zhangdanKind();elsereturn;}~doctor() {}};class HuanZhe:public person //患者类{private:double drug_fee; //药费public:HuanZhe() {}void input() //增加患者信息{char t;cout<<"*****患者基本信息*****"<<endl;fstream outfile("D:\\ee.txt",ios::out|ios::app); //以写方式打开文件if(!outfile)cout<<"打开文件失败!"<<endl;else{cout<<"姓名";cin>>name;outfile<<name<<" ";cout<<"性别:";cin>>sex;if(sex=='m'||sex=='M')outfile<<"男"<<" ";else if(sex=='f'||sex=='F')outfile<<"女"<<" ";else{cout<<"请重新输入性别:";cin>>sex;if(sex=='m'||sex=='M')outfile<<"男"<<" ";else if(sex=='f'||sex=='F')outfile<<"女"<<" ";}cout<<"年龄:";cin>>age;outfile<<age<<" ";cout<<"诊费:";cin>>office_vist_fee;outfile<<office_vist_fee<<" ";cout<<"药费:";cin>>drug_fee;outfile<<drug_fee<<endl;out();}cout<<"是否继续添加患者信息Y/N......:"<<endl; cin>>t;if(t=='y')input();elsereturn ;}void zhangdanKind() //按姓名查询患者信息{char t;fstream infile2("D:\\ee.txt",ios::in); //以读方式打开文件if(!infile2){cout<<"打开文件失败!"<<endl;return;}string arr[100][100];int line=0;memset(arr,0,sizeof(arr)); //将数组清空while(!in()) //文件不为空的条件设置{ //文件流读取数据infile2>>arr[line][0]>>arr[line][1]>>arr[line][2]>>arr[line][3]>>arr[lin e][4];//文件流读取数据line++;}string na;cout<<"请输入要查询的患者姓名:";cin>>na;for(int i=0;i<line;i++){if(arr[i][0]==na){cout<<"患者姓名:"<<arr[i][0]<<" "<<"性别:"<<arr[i][1]<<" "<<"年龄:"<<arr[i][2]<<" "<<"诊费:"<<arr[i][3]<<"元"<<" "<<"药费:"<<arr[i][4]<<"元"<<endl;return;}}cout<<"记录中没有此患者信息!"<<endl;cout<<"是否继续查询Y/N.....:"<<endl;cin>>t;if(t=='y')zhangdanKind();elsereturn;}~HuanZhe() {}};class zhangdan //账单类{private:string name;double drug_fee;double office_vist_fee;double totl_fee;public:zhangdan() {}void totl_pay() //用于把总费用从“D;\\bb.txt”文件转移到"D:\\cc.txt"{string a;fstream infile1("D:\\bb.txt",ios::in); //以读方式打开文件if(!infile1){cout<<"打开文件失败!"<<endl;return;}string arr[100][100];int line=0;memset(arr,0,sizeof(arr)); //将数组清空while(!in()) //文件不为空的条件设置{infile1>>arr[line][0]>>arr[line][1]>>arr[line][2]>>arr[line][3]>>arr[lin e][4];//文件流读取数据line++;}for(int i=0;i<line;i++){fstream outfile4("D:\\cc.txt",ios::out|ios::app); //以写的方式打开文件if(! outfile4)cout<<"打开文件失败!"<<endl;elsea=arr[i][4];outfile4<<a<<endl;out();}in();}void pay() //实现统计所有患者总费用{double a;double z=0.0;fstream infile4("D:\\cc.txt",ios::in); //以读方式打开文件if(! infile4){cout<<"打开文件失败!"<<endl;return;}double s[100];int line=0;while(!in()) //文件不为空的条件设置{infile4>>s[line]; //文件流读取数据line++;}for(int i=0;i<line-1;i++){a=s[i];z=z+a;}cout<<"所有患者的总费用为:"<<z<<"元"<<endl;in();}void addzhangdan() //增加账单信息{fstream outfile3("D:\\bb.txt",ios::out|ios::app); //以写方式打开文件if(!outfile3)cout<<"打开文件失败!"<<endl;else{cout<<"患者姓名:";cin>>name;outfile3<<name<<" ";cout<<"主治医生:";cin>>name;outfile3<<name<<" ";cout<<"诊费:";cin>>office_vist_fee;outfile3<<office_vist_fee<<" ";cout<<"药费:";cin>>drug_fee;outfile3<<drug_fee<<" ";cout<<"总费用:";cin>>totl_fee;outfile3<<totl_fee<<endl;out();}char t;cout<<"是否继续添加账单信息Y/N.....:"<<endl; cin>>t;if(t=='y')addzhangdan();elsereturn;}void zhangdanKind() //按姓名查询账单信息{char t;fstream infile1("D:\\bb.txt",ios::in); //以读方式打开文件if(!infile1){cout<<"打开文件失败!"<<endl;return;}string arr[100][100]; //定义一个string类型的二维数组,用来保存从文本内读取信息int line=0;memset(arr,0,sizeof(arr)); //将数组清空while(!in()) //文件不为空的条件设置{infile1>>arr[line][0]>>arr[line][1]>>arr[line][2]>>arr[line][3]>>arr[lin e][4];//文件流读取数据line++;}string na;cout<<"请输入要查询的患者姓名:";cin>>na;for(int i=0;i<line;i++){if(arr[i][0]==na){string xm;xm=arr[i][1];cout<<"患者姓名:"<<arr[i][0]<<" "<<"医生姓名:"<<arr[i][1]<<" "<<"诊费:"<<arr[i][2]<<"元"<<" "<<"药费:"<<arr[i][3]<<"元"<<" "<<"总费用:"<<arr[i][4]<<"元"<<endl;fstream infile2("D:\\aa.txt",ios::in); //以读方式打开文件if(!infile2){cout<<"打开文件失败!"<<endl;return;}int l=0;memset(arr,0,sizeof(arr)); //将数组清空while(!in()) //文件不为空的条件设置{infile2>>arr[l][0]>>arr[l][1]>>arr[l][2]>>arr[l][3]>>arr[l][4];//文件流读取数据l++;}for(int j=0;j<1;j++){if(arr[j][0]==xm){cout<<"医生姓名:"<<arr[i][0]<<" "<<"性别:"<<arr[i][1]<<" "<<"年龄:"<<arr[i][2]<<" "<<"诊费:"<<arr[i][3]<<"元"<<" "<<"专业:"<<arr[i][4]<<endl;}}fstream infile3("D:\\ee.txt",ios::in); //以读方式打开文件if(!infile3){cout<<"打开文件失败!"<<endl;return;}int lin=0;memset(arr,0,sizeof(arr)); //将数组清空while(!in()) //文件不为空的条件设置{infile3>>arr[lin][0]>>arr[lin][1]>>arr[lin][2]>>arr[lin][3]>>arr[lin][4];/ /文件流读取数据lin++;}for(int z=0;z<lin-1;z++){if(arr[i][0]==na){cout<<"患者姓名:"<<arr[z][0]<<" "<<"性别:"<<arr[z][1]<<" "<<"年龄:"<<arr[z][2]<<" "<<"诊费:"<<arr[z][3]<<"元"<<" "<<"药费:"<<arr[z][4]<<"元"<<endl;}}return;}}cout<<"记录中没有此患者的账单信息!"<<endl;cout<<"是否继续查询Y/N......:"<<endl;cin>>t;if(t=='y')zhangdanKind();elsereturn;}~zhangdan() {}};void add_zhuce() //实现注册用户{string name,code,code1;fstream outfile5("D:\\dd.txt",ios::out|ios::app); //以写方式打开文件if(!outfile5)cout<<"打开文件失败!"<<endl;else{cout<<"※*********※请注册用户※*********※"<<endl;cout<<"请输入您的用户名:";cin>>name;fstream infile6("D:\\dd.txt",ios::in); //以读方式打开文件if(!infile6){cout<<"打开文件失败!"<<endl;return;}string a[100][2]; //定义一个string类型的二维数组,用来保存从文本内读取的信息int line=0;memset(a,0,sizeof(a)); //将数组清空while(!in()) //文件不为空的条件设置{infile6>>a[line][0]>>a[line][1]; //文件流读取数据line++;}for(int i=0;i<line;i++){if(a[i][0]==name){cout<<"此用户已存在!谢谢使用本系统注册用户界面!欢迎下次使用!";exit(0);}}outfile5<<name<<" ";cout<<"请输入您的密码:";cin>>code;cout<<"请再次输入您的密码:";cin>>code1;if(code!=code1){cout<<"您两次输入的密码不一致!谢谢使用本系统注册用户界面!欢迎下次使用!"<<endl;exit(0);}elseoutfile5<<code1<<endl;}cout<<"谢谢使用本系统注册用户界面!您已注册成功!"<<endl;out();}void welcome() //验证用户登陆,登陆成功显示欢迎信息{string name,code;int mark=0;fstream infile("D:\\dd.txt",ios::in);if(!infile){cerr<<"打开文件错误"<<endl;return;}int line=0;string a[100][100];memset(a,0,sizeof(a)); //将数组清空while(!in()) //文件不为空的条件设置{infile>>a[line][0]>>a[line][1]; //文件流读取数据line++;}cout<<"\t\t※*********※用户名※*********※:"; cin>>name;int m=1;for(int i=0;i<line;i++){if(a[i][0]==name)m=i;mark=i;break;}}if(m==0){cout<<"\t\t※*********※该用户不存在,请注册用户※*********※:";add_zhuce();}cout<<"\t\t※*********※密码※*********※:";cin>>code;for(int j=0;j<2;j++){if(a[mark][1]==code){cout<<"成功登入※*********※"<<endl;break;}elsecout<<"密码错误,请重新输入※*********※"<<endl;cout<<"\t\t※*********※密码※*********※:";cin>>code;}}}void addinfor() //增加信息界面实现{int a;doctor d;HuanZhe w;cout<<endl;cout<<endl;cout<<"\t\t ※*********增加信息界面*********※"<<endl;cout<<"\n";cout<<"\t\t ※********※********※**********※\n";cout<<"\t\t ※※\n";cout<<"\t\t ※ 1.增加医生信息※\n";cout<<"\t\t ※ 2.增加患者信息※\n"; cout<<"\t\t ※0.退出※\n";cout<<"\t\t ※※\n";cout<<"\t\t ※********※********※**********※\n";cout<<"请输入您选择的数字<0-2>:";cin>>a;switch(a){case 1:d.input();break; //医生信息case 2:w.input();break; //患者信息case 0:break;default:cout<<"输入数字错误!"<<endl;}}void select() //查询信息界面实现{int b;doctor d;HuanZhe w;cout<<endl;cout<<endl;cout<<"\t\t ※*********查询信息界面*********※"<<endl;cout<<"\n";cout<<"\t\t ※********※********※**********※\n";cout<<"\t\t ※※\n";cout<<"\t\t ※ 1.查询医生信息※\n"; cout<<"\t\t ※ 2.查询患者信息※\n"; cout<<"\t\t ※0.退出※\n";cout<<"\t\t ※※\n";cout<<"\t\t ※********※********※**********※\n";cout<<"请输入您选择的数字<0-2>:";cin>>b;switch(b){case 1:d.zhangdanKind();break;case 2:w.zhangdanKind();break;case 0:break;default:cout<<"输入数字错误!"<<endl;}}void zhangdanxinxi() //账单信息界面实现{int c;zhangdan z;cout<<endl;cout<<endl;cout<<"\t\t ※*********账单信息*********※"<<endl;cout<<"\n";cout<<"\t\t ※********※********※**********※\n";cout<<"\t\t ※※\n";cout<<"\t\t ※ 1.增加账单信息※\n";cout<<"\t\t ※ 2.查询账单信息※\n";cout<<"\t\t ※0.退出※\n";cout<<"\t\t ※※\n";cout<<"\t\t ※********※********※**********※\n";cout<<"请输入您选择的数字<0-2>:";cin>>c;switch(c){case 1:z.addzhangdan();break;case 2:z.zhangdanKind();break;case 0:break;default:cout<<"输入数字错误!"<<endl;}}void Please() //诊所信息管理系统主界面的实现{welcome(); //验证用户登陆,登陆成功显示欢迎信息int chiose;cout<<"\n\n";while(1){cout<<"\t\t ※**※**※欢迎使用诊所信息管理系统※**※**※"<<endl;cout<<"\n";cout<<"\t\t※********※*********※*********※*********※\n";cout<<"\t\t※※\n";cout<<"\t\t※※\n";cout<<"\t\t※ 1.查询信息 2.账单信息※\n";cout<<"\t\t※ 3.增加信息 4.统计总费用※\n";cout<<"\t\t※0.退出系统※\n";cout<<"\t\t※※\n";cout<<"\t\t※※\n";cout<<"\t\t※********※*********※*********※*********※\n";zhangdan a;cout<<"请输入您选择的数字<0-4>:";cin>>chiose;switch(chiose){case 1:select();break;case 2:zhangdanxinxi();break;case 3:addinfor();break;case 4:a.totl_pay();a.pay();break;case 0:cout<<"\t\t ※※※※※※※欢迎下次使用本系统※※※※※※※"<<endl;exit(0);default:cout<<"输入数字错误!"<<endl;}}}void main() //主函数{int w;cout<<"\t\t※********※*********※*********※*********※\n";cout<<"\t\t※※\n";cout<<"\t\t※※\n";cout<<"\t\t※ 1.用户登录※\n";cout<<"\t\t※ 2.用户注册※\n";cout<<"\t\t※0.退出系统※\n";cout<<"\t\t※※\n";cout<<"\t\t※※\n";cout<<"\t\t※********※*********※*********※*********※\n";while(1){cout<<"请输入数字<0-2>:";cin>>w;switch(w){case 1:Please();break;case 2:add_zhuce();break;case 0:exit(0);default:cout<<"输入数字错误!"<<endl;} } }。