C++诊所信息管理系统设计课设报告.docx
《C++诊所信息管理系统设计课设报告.docx》由会员分享,可在线阅读,更多相关《C++诊所信息管理系统设计课设报告.docx(39页珍藏版)》请在冰豆网上搜索。
C++诊所信息管理系统设计课设报告
一、题目和要求………………………………………………………1
二、系统总体设计……………………………………………………1
1、需求分析……………………………………………………………………1
2、系统功能模块划分…………………………………………………………1
三、详细设计…………………………………………………………2
1、数据结构设计………………………………………………………………2
2、函数规划设计………………………………………………………………3
四、程序运行演示……………………………………………………16
1、登陆………………………………………………………………………16
2、查询信息…………………………………………………………………17
3、账单信息…………………………………………………………………18
4、增加信息…………………………………………………………………19
五、总结反思…………………………………………………………20
六、源代码……………………………………………………………20
一、题目和要求
1、题目:
“诊所信息管理系统设计”
2、问题描述:
完成小型诊所的简单信息管理程序,掌握类的设计以及继承和派生的应用。
二、系统总体设计
1、需求分析
1.1功能要求
设计人类(Person类)和医生类(Doctor类),在此基础上,通过增加患者和账单,使它们公用于表示一家诊所的信息管理。
(1)在一条医生记录中,包括医生的专业说明(specialty),如内科医生(surgeon)、儿科医生(pediatrician)、产科医生(obstetrician)及全科医生(generalpractitioner)。
(2)Doctor记录还含有诊费(office_vist_fee)。
(3)在一条患者记录中,包括该患者产生的药费(drug_fee),患者的诊费(即医生的诊费)。
(4)在一条账单记录中,包括一条患者对象、该患者对应得主治医生、该患者产生的诊费和药费。
(5)应用程序能够显示出诊所中每个患者的信息和对应主治医生的信息。
(6)能够统计出所有患者的总费用。
1.2问题的解决方案
根据系统功能要求,可以将问题解决分为以下步骤:
(1)应用系统分析,建立该系统的功能模块框图以及界面的组织和设计;
(2)分析系统中的各个实体及它们之间的关系;
(3)根据问题描述,设计系统的类层次;
(4)完成类层次中各个类的描述;
(5)完成类中各个成员函数的定义;
(6)完成系统的应用模块;
(7)功能调试;
(8)完成系统总结报告。
2、系统功能模块划分
三、详细设计
1、数据结构设计
1.1类设计
分别定义了person人类、doctor医生类、HuanZhe患者类以及zhangdan帐单类;在person人类中,包含了数据成员姓名(name)、性别(sex)、年龄(age)以及诊费(office_vist_fee);在doctor医生类中,增加了数据成员医生的专业说明(drug_fee),包含了成员函数input()增加医生信息,zhangdanKind()按姓名查询医生信息;在HuanZhe患者类中,增加了数据成员患者的药费(drug_fee),包含了成员函数input()增加患者信息,zhangdanKind()按姓名查询患者信息;在zhangdan帐单类中,包含了数据成员姓名(name)、诊费(office_vist_fee)、药费(drug_fee)、总费用(totl_fee),包含了成员函数totl_pay()用于统计该系统中所有患者的总费用,addzhangdan()增加账单信息,zhangdanKind()按姓名查询账单信息。
1.1.1person人类
{protected:
stringname;
stringsex;
intage;
doubleoffice_vist_fee;
};
1.1.2doctor医生类
{public:
voidinput();//增加医生信息
voidzhangdanKind();//按姓名查询医生信息
private:
stringspeicialty;
};
1.1.3HuanZhe患者类
{public:
voidzhangdanKind();//按姓名查询患者信息
voidinput();//增加患者信息
private:
doubledrug_fee;
};
1.1.4zhangdan账单类
{public:
voidtotl_pay();
voidaddzhangdan();//增加账单信息
voidzhangdanKind();//按姓名查询账单信息
private:
stringname;
doubledrug_fee;
doubleoffice_vist_fee;
doubletotl_fee;
};
1.2类之间的关系
在该系统中医生与患者都有数据成员姓名(name)、性别(sex)、年龄(age)以及诊费(office_vist_fee);所以把这些数据成员定义在基类person人类中,doctor医生类与HuanZhe患者类公有继承于基类person人类。
2、函数规划设计
在doctor医生类中,包含了成员函数input()增加医生信息,zhangdanKind()按姓名查询医生信息;在HuanZhe患者类中,包含了成员函数input()增加患者信息,zhangdanKind()按姓名查询患者信息;在zhangdan帐单类中,包含了成员函数totl_pay()用于统计该系统中所有患者的总费用,addzhangdan()增加账单信息,zhangdanKind()按姓名查询账单信息。
在该系统中,还包含了普通函数adding()实现增加信息界面,search()实现查询信息界面,zhangdanxinxi()实现账单信息界面,landing()验证用户登陆,登陆成功显示欢迎信息,surface()实现诊所信息管理系统主界面。
其中adding()增加信息界面包括了1、增加医生信息2、增加患者信息0、返回上一页;select()查询信息界面包括了1、查询医生信息2、查询患者信息0、返回上一页;zhangdanxinxi()账单信息界面包括了1、增加账单信息2、查询账单信息3、统计总费用0、返回上一页;surface()诊所信息管理系统主界面包括了1、查询信息2、账单信息3、增加信息4、统计总费用0、退出系统;main()主函数界面包括了1、用户登录0、退出系统。
在这些界面的实现中用switch()语句做选择。
2.1增加医生信息
voiddoctor:
:
input()
{
cout<<"*****主治医生基本信息*****"<fstreamoutdoctor("医生.txt",ios:
:
out|ios:
:
app);//以写方式打开文件
if(!
outdoctor)
cout<<"打开文件失败!
"<else
{
cout<<"姓名:
";
cin>>name;outdoctor<cout<<"性别:
";
cin>>sex;outdoctor<cout<<"年龄:
";
cin>>age;outdoctor<cout<<"诊费:
";
cin>>office_vist_fee;outdoctor<cout<<"专业说明:
";
cin>>speicialty;outdoctor<outdoctor.close();
}
}
2.2按姓名查询医生信息
voiddoctor:
:
zhangdanKind()
{
fstreamindoctor("医生.txt",ios:
:
in);//以读方式打开文件
if(!
indoctor)
{
cout<<"打开文件失败!
"<return;
}
intline=0;
stringarr[100][5];//定义一个string类型的二维数组,用来保存从文本内读取的信息
memset(arr,0,sizeof(arr));//将数组清空
while(!
indoctor.eof())//文件不为空的条件设置
{
cout<<"2"<indoctor>>arr[line][0]>>arr[line][1]>>arr[line][2]>>arr[line][3]>>arr[line][4];
line++;
}
stringmz;
cout<<"请输入要查询的医生姓名:
";
cin>>mz;
for(inti=0;i{
if(arr[i][0]==mz)
{
cout<<"医生姓名:
"<"<"<"<"<return;
}
}
cout<<"记录中没有此医生信息!
"<cout<<"是否继续查询y/n:
"<chart;
cin>>t;
if(t=='y')
zhangdanKind();
else
return;
}
2.3增加患者信息
voidHuanZhe:
:
input()
{
cout<<"*****患者基本信息*****"<fstreamoutH("患者.txt",ios:
:
out|ios:
:
app);//以写方式打开文件
if(!
outH)
cout<<"打开文件失败!
"<else
{
cout<<"姓名:
";
cin>>name;outH<cout<<"性别:
";
cin>>sex;outH<}
cout<<"年龄:
";
cin>>age;outH<cout<<"诊费:
";
cin>>office_vist_fee;outH<cout<<"药费:
";
cin>>drug_fee;outH<outH.close();
cout<<"是否继续添加患者信息y/n:
"<chart;
cin>>t;
if(t=='y')
input();
else
return;
}
2.4按姓名查询患者信息
voidHuanZhe:
:
zhangdanKind()
{
fstreaminH("患者.txt",ios:
:
in);//以读方式打开文件
if(!
inH)
{
cout<<"打开文件失败!
"<return;
}
stringarr[100][5];//定义一个string类型的二维数组,用来保存从文本内读取的信息
intline=0;
memset(arr,0,sizeof(arr));////将数组清空
while(!
inH.eof())//文件不为空的条件设置
{inH>>arr[line][0]>>arr[line][1]>>arr[line][2]>>arr[line][3]>>arr[line][4];//文件流读取数据
line++;
}
stringmz;
cout<<"请输入要查询的患者姓名:
";
cin>>mz;
for(inti=0;i{
if(arr[i][0]==mz)
{
cout<<"患者姓名:
"<"<"<"<"<return;
}
}
cout<<"记录中没有此患者的信息!
"<cout<<"是否继续查询y/n:
"<chart;
cin>>t;
if(t=='y')
zhangdanKind();
else
return;
}
2.5增加账单信息
voidzhangdan:
:
addzhangdan()
{
fstreamoutfile1("账单.txt",ios:
:
out|ios:
:
app);//以写方式打开文件
if(!
outfile1)
cout<<"打开文件失败!
"<else
{
cout<<"患者姓名:
";
cin>>name;
outfile1<cout<<"主治医生:
";
cin>>name;
outfile1<cout<<"诊费:
";
cin>>office_vist_fee;
outfile1<cout<<"药费:
";
cin>>drug_fee;
outfile1<cout<<"总费用:
";
cin>>totl_fee;
outfile1<out();
}
chart;
cout<<"是否继续添加账单信息y/n:
"<cin>>t;
if(t=='y')
addzhangdan();
else
return;
}
2.6查询账单信息
voidzhangdan:
:
zhangdanKind()
{
fstreaminfile1("账单.txt",ios:
:
in);//以读方式打开文件
if(!
infile1)
{
cout<<"打开文件失败!
"<return;
}
stringarr[100][5];//定义一个string类型的二维数组,用来保存从文本内读取的信息
intline=0;
memset(arr,0,sizeof(arr));//将数组清空
while(!
in())//文件不为空的条件设置
{
infile1>>arr[line][0]>>arr[line][1]>>arr[line][2]>>arr[line][3]>>arr[line][4];//文件流读取数据
line++;
}
stringmz;
cout<<"请输入要查询的患者姓名:
";
cin>>mz;
for(inti=0;i{
if(arr[i][0]==mz)
{
stringxm;
xm=arr[i][1];
cout<<"患者姓名:
"<"<"<"<"<fstreamindoctor("医生.txt",ios:
:
in);//以读方式打开文件
if(!
indoctor)
{
cout<<"打开文件失败!
"<return;
}
intl=0;
memset(arr,0,sizeof(arr));//将数组清空
while(!
indoctor.eof())//文件不为空的条件设置
{
indoctor>>arr[l][0]>>arr[l][1]>>arr[l][2]>>arr[l][3]>>arr[l][4];//文件流读取数据
l++;
}
for(intj=0;j{
if(arr[j][0]==xm)
{
cout<<"医生姓名:
"<"<"<"<"<}
}
fstreaminH("患者.txt",ios:
:
in);//以读方式打开文件
if(!
inH)
{
cout<<"打开文件失败!
"<return;
}
intlin=0;
memset(arr,0,sizeof(arr));//将数组清空
while(!
inH.eof())//文件不为空的条件设置
{
inH>>arr[lin][0]>>arr[lin][1]>>arr[lin][2]>>arr[lin][3]>>arr[lin][4];//文件流读取数据
lin++;
}
for(intz=0;z{
if(arr[i][0]==mz)
{
cout<<"患者姓名:
"<"<"<"<"<}
}
return;
}
}
cout<<"记录中没有此患者的帐单信息!
"<cout<<"是否继续查询y/n:
"<chart;
cin>>t;
if(t=='y')
zhangdanKind();
else
return;
}
2.7统计总费用
voidzhangdan:
:
totl_pay()
{
fstreaminfile1("账单.txt",ios:
:
in);//以读方式打开文件
if(!
infile1)
{
cout<<"打开文件失败!
"<return;
}
doublearr[100][3];//定义一个double类型的二维数组,用来保存从文本内读取的信息
stringarrs[100][2];//定义一个string类型的二维数组,用来保存从文本内读取的信息
memset(arr,0,sizeof(arr));//将数组清空
intline=0;
while(!
in())//文件不为空的条件设置
{
infile1>>arrs[line][0]>>arrs[line][1]>>arr[line][0]>>arr[line][1]>>arr[line][2];//文件流读取数据
line++;
}
doublea;
doublez=0.0;
for(inti=0;i{
a=arr[i][2];;
z=z+a;
}
cout<<"所有患者的总费用为:
"<in();
}
2.8登陆
voidlanding()
{
stringname,code;
cout<<"\t\t用户名:
";
cin>>name;
if(name!
="yangqing")
{
cout<<"\t\t☆********★该管理员不存在☆********★"<landing();
}
else
{
cout<<"\t\t密码:
";
cin>>code;
if("123456789"==code)
{
cout<<"\t\t\t☆********★成功登入☆********★"<}
else
{
cout<<"\t\t☆********★密码错误,请重新输入☆********★"<cout<<"\t\t☆********★密码☆********★:
";
cin>>code;
}
}
}
2.9增加信息界面
voidadding()
{
inta;
doctord;
HuanZhew;
cout<cout<cout<<"\t\t$***********增加信息界面*********$"<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)
{
case1:
d.input();break;
case2:
w.input();break;
case0:
break;
default:
cout<<"输入数字错误!
"<}
}
2.10查询信息界面
voidsearch()
{
intb;
doctord;
HuanZhew;
cout<cout<cout<<"\t\t$***********查询信息界面*********$"<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$$