1、 C诊所信息管理系统设计课设报告 - 53 - 2020年4月19日 文档仅供参考 目录 一、题目和要求 ……………………………………………………… 1 二、系统总体设计 …………………………………………………… 1 1、需求分析 …………………………………………………………………… 1 2、系统功能模块划分 ………………………………………………………… 1 三、详细设计 ………………………………………………………… 2 1、数据结构设计 ……………………………………………………………… 2 2、函数规划设计 ……………………
2、………………………………………… 3 四、程序运行演示 …………………………………………………… 16 1、登陆 ……………………………………………………………………… 16 2、查询信息 ………………………………………………………………… 17 3、账单信息 ………………………………………………………………… 18 4、增加信息 ………………………………………………………………… 19 五、总结反思 ………………………………………………………… 20 六、源代码 …………………………………………………………… 20 一、题目和要求 1、题目:“诊所信息管理系统设计”
3、 2、问题描述: 完成小型诊所的简单信息管理程序,掌握类的设计以及继承和派生的应用。 二、系统总体设计 1、需求分析 1.1 功能要求 设计人类(Person类)和医生类(Doctor类),在此基础上,经过增加患者和账单,使它们公用于表示一家诊所的信息管理。 (1)在一条医生记录中,包括医生的专业说明(specialty),如内科医生(surgeon)、儿科医生(pediatrician) 、产科医生(obstetrician)及全科医生(general practitioner)。 (2)Doctor记录还含有诊费(office_vist_fee)。 (3)在一条患者记
4、录中,包括该患者产生的药费(drug_fee) ,患者的诊费(即医生的诊费)。 (4)在一条账单记录中,包括一条患者对象、该患者对应得主治医生、该患者产生的诊费和药费。 (5)应用程序能够显示出诊所中每个患者的信息和对应主治医生的信息。 (6)能够统计出所有患者的总费用。 1.2 问题的解决方案 根据系统功能要求,能够将问题解决分为以下步骤: (1)应用系统分析,建立该系统的功能模块框图以及界面的组织和设计; (2)分析系统中的各个实体及它们之间的关系; (3)根据问题描述,设计系统的类层次; (4)完成类层次中各个类的描述; (5)完成类中各个成员函数的定义;
5、 (6)完成系统的应用模块; (7)功能调试; (8)完成系统总结报告。 2、系统功能模块划分 诊所信息管理系统 登陆 退出系统 查询信息 账单信息 增加信息 增加账单信息 查询账单信息 统计总费用 查询医生信息 查询患者信息 增加医生信息 增加患者信息 退出系统 返回上一页 返回上一页 返回上一页 三、详细设计 1、数据结构设计 1.1 类设计 分别定义了person人类、doctor医生类、HuanZhe患者类以及zhangdan帐单类;在person人类中,包含了数据成员姓名(name)、性别(sex)、年龄(age)以及诊费(o
6、ffice_vist_fee);在doctor医生类中,增加了数据成员医生的专业说明(drug_fee),包含了成员函数input()增加医生信息,zhangdanKind()按姓名查询医生信息;在HuanZhe患者类中,增加了数据成员患者的药费(drug_fee),包含了成员函数input()增加患者信息,zhangdanKind()按姓名查询患者信息;在zhangdan帐单类中,包含了数据成员姓名(name)、诊费(office_vist_fee)、药费(drug_fee)、总费用(totl_fee),包含了成员函数totl_pay()用于统计该系统中所有患者的总费用,addzhangda
7、n()增加账单信息,zhangdanKind()按姓名查询账单信息。 1.1.1 person人类 {protected: string name; string sex; int age; double office_vist_fee; }; 1.1.2 doctor医生类 {public: void input(); //增加医生信息 void zhangdanKind() ; //按姓名查询医生信息 private: string speicialty; }; 1.1.3 HuanZhe患者类 {public: void
8、zhangdanKind(); //按姓名查询患者信息 void input(); //增加患者信息 private: double drug_fee; }; 1.1.4 zhangdan账单类 {public: void totl_pay(); void addzhangdan(); // 增加账单信息 void zhangdanKind(); //按姓名查询账单信息 private: string name; double drug_fee;
9、 double office_vist_fee; double totl_fee; }; 1.2 类之间的关系 在该系统中医生与患者都有数据成员姓名(name)、性别(sex)、年龄(age)以及诊费(office_vist_fee);因此把这些数据成员定义在基类person人类中,doctor医生类与HuanZhe患者类公有继承于基类person人类。 2、 函数规划设计 在doctor医生类中,包含了成员函数input()增加医生信息,zhangdanKind()按姓名查询医生信息;在HuanZhe患者类中,包含了成员函数input()增加患者信息,zhangdanKind
10、)按姓名查询患者信息;在zhangdan帐单类中,包含了成员函数totl_pay()用于统计该系统中所有患者的总费用,addzhangdan()增加账单信息,zhangdanKind()按姓名查询账单信息。在该系统中,还包含了普通函数adding()实现增加信息界面,search()实现查询信息界面,zhangdanxinxi()实现账单信息界面,landing()验证用户登陆,登陆成功显示欢迎信息,surface()实现诊所信息管理系统主界面。 其中adding()增加信息界面包括了1、增加医生信息2、增加患者信息0、返回上一页;select()查询信息界面包括了1、查询医生信息2、查询
11、患者信息0、返回上一页;zhangdanxinxi() 账单信息界面包括了1、增加账单信息2、查询账单信息3、统计总费用0、返回上一页;surface()诊所信息管理系统主界面包括了1、查询信息2、账单信息3、增加信息4、统计总费用0、退出系统;main()主函数界面包括了1、用户登录0、退出系统。在这些界面的实现中用switch()语句做选择。
2.1增加医生信息
void doctor::input()
{
cout<<"*****主治医生基本信息*****"< 12、写方式打开文件
if(!outdoctor)
cout<<"打开文件失败!"< 13、 cout<<"专业说明:";
cin>>speicialty;outdoctor< 14、/定义一个string类型的二维数组,用来保存从文本内读取的信息
memset(arr,0,sizeof(arr)); //将数组清空
while(!indoctor.eof()) //文件不为空的条件设置
{
cout<<"2"< 15、t i=0;i 16、y')
zhangdanKind();
else
return;
}
2.3 增加患者信息
void HuanZhe::input()
{
cout<<"*****患者基本信息*****"< 17、utH< 18、urn;
}
2.4 按姓名查询患者信息
void HuanZhe::zhangdanKind()
{
fstream inH("患者.txt",ios::in); //以读方式打开文件
if(!inH)
{
cout<<"打开文件失败!"< 19、不为空的条件设置
{ inH>>arr[line][0]>>arr[line][1]>>arr[line][2]>>arr[line][3]>>arr[line][4]; //文件流读取数据
line++;
}
string mz;
cout<<"请输入要查询的患者姓名:";
cin>>mz;
for(int i=0;i 20、"<<"诊费:"< 21、ios::app); //以写方式打开文件
if(!outfile1)
cout<<"打开文件失败!"< 22、g_fee;
outfile1< 23、t",ios::in); //以读方式打开文件
if(!infile1)
{
cout<<"打开文件失败!"< 24、ine][3]>>arr[line][4]; //文件流读取数据
line++;
}
string mz;
cout<<"请输入要查询的患者姓名:";
cin>>mz;
for(int i=0;i 25、<<" "<<"总费用:"< 26、 indoctor>>arr[l][0]>>arr[l][1]>>arr[l][2]>>arr[l][3]>>arr[l][4]; //文件流读取数据
l++;
}
for(int j=0;j 27、
}
}
fstream inH("患者.txt",ios::in); //以读方式打开文件
if(!inH)
{
cout<<"打开文件失败!"< 28、[lin][3]>>arr[lin][4]; //文件流读取数据
lin++;
}
for(int z=0;z 29、记录中没有此患者的帐单信息!"< 30、/定义一个double类型的二维数组,用来保存从文本内读取的信息
string arrs[100][2];//定义一个string类型的二维数组,用来保存从文本内读取的信息
memset(arr,0,sizeof(arr)); //将数组清空
int line=0;
while(!infile1.eof()) //文件不为空的条件设置
{
infile1>>arrs[line][0]>>arrs[line][1]>>arr[line][0]>>arr[line][1]>>arr[line][2]; //文件流读取数据
line++;
}
doub 31、le a;
double z=0.0;
for(int i=0;i 32、
landing();
}
else
{
cout<<"\t\t密码:";
cin>>code;
if(""==code)
{
cout<<"\t\t\t☆********★成功登入☆********★"< 33、)
{
int a;
doctor d;
HuanZhe w;
cout< 34、
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(); 35、 break;
case 2: w.input(); break;
case 0: break;
default: cout<<"输入数字错误!"< 36、\n";
cout<<"\t\t $ $\n";
cout<<"\t\t $ 1.查询医生信息 $\n";
cout<<"\t\t $ 2.查询患者信息 $\n";
cout<<"\t\t $ 0.返回上一页 $\n";
cout<<"\t\t $ $\n";
cou 37、t<<"\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<<"输入数字错误!"< 38、
cout< 39、息 $\n";
cout<<"\t\t $ 3.统计总费用 $\n";
cout<<"\t\t $ 0.返回上一页 $\n";
cout<<"\t\t $ $\n";
cout<<"\t\t $**********************************$\n";
cout<<"请输入您选择的数字<0-3>:";
cin>>c;
switch(c)
{
ca 40、se 1:z.addzhangdan();break;
case 2:z.zhangdanKind();break;
case 3:z.totl_pay();break;
case 0:break;
default: cout<<"输入数字错误!"< 41、
cout<<"\n";
cout<<"\t\t$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n";
cout<<"\t\t$ $\n";
cout<<"\t\t$ $\n";
cout<<"\t\t$ 1.查询信息 2.账单信息 $\n";
cout<<"\t\t 42、 3.增加信息 0.退出系统 $\n";
cout<<"\t\t$ $\n";
cout<<"\t\t$ $\n";
cout<<"\t\t$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n";
zhangdan a;
cout<<"请输入您选择的数字<0-4>:";
cin> 43、>choice;
switch(choice)
{
case 1:search(); break;
case 2:zhangdanxinxi(); break;
case 3:adding(); break;
case 0:cout<<"\t\t☆★☆★☆★☆欢迎下次使用本系统☆★☆★☆★☆"< 44、\n";
cout<<"\t\t$ $\n";
cout<<"\t\t$ $\n";
cout<<"\t\t$ 1.登录 $\n";
cout<<"\t\t$ 0.退出系统 $\n";
cout<<"\t\t$ 45、 $\n";
cout<<"\t\t$ $\n";
cout<<"\t\t$$$$$$$$$$$**********☆***********$$$$$$$$$$\n";
while(1)
{
cout<<"请输入数字<0/1>:";
cin>>w;
switch(w)
{
case 1:surface();break;
case 0:exit(0);
default 46、 cout<<"输入数字错误!"< 47、过后,自己就会发现自己已经在这个过程中学到了自己想要的东西,这种获得是更深刻的。
在做这个C++课程设计的时候,我原先也是学的不怎么好,什么是输入输出流,如何对文件进行操作,什么是继承与派生,等等,能够说是忘得差不多了。然而,在这门课程设计中,这些方面却是特别重要的,能够说,掌握了这个,你就完全能够完成自己的任务。这就要求我们要自己去学,自己去探索。当然,看书、问同学是必不可少的,还有,身边有非常丰富的网络资源给我们好好利用,百度就是个很不错的地方。这样就从另一方面锻炼了我们检索知识获取信息的能力,在这个过程中,能够学到的是一种提升自我的能力。
在本次课程设计中,我发现我对知识的运用不是那 48、么准确,也就是说我对知识掌握的不够熟练。课本上有的知识却不会运用,虽然在本次C++课程设计中,显示出一些我知识上的漏洞,经过这次编写诊所信息管理系统,我发现我熟练掌握了类的定义以及继承与派生,并对文件操作有了初步的掌握,课下还应该继续努力,争取熟练掌握一门编程设计语言,在次基础上,在学习多种编程语言,以便以后能够用到工作中去。当然,期间我也遇到了一些棘手的问题,在“账单.txt”中,我希望能读取它每个患者账单的总费用并把它们求和,可是尝试了多次,检查了多次,读取文件内容的while循环一直是死循环,无法读取,终于,我发现了问题所在,并把代码修改了一下,完美解决了问题。
经过这次的课程设计,我 49、的诊所信息管理系统完美告终,让我进一步的了解到C++在我们日常生活中的重要性,而且,也更进一步的激发了我学习这门语言的兴趣。经过这次的训练,我相信自己以后会用更多的时间来把这门语言学好,掌握好这门必修的基础语言。
六、源代码
#include 50、ss doctor:public person //医生类
{public:
void input(); //增加医生信息
void zhangdanKind() ; //按姓名查询医生信息
private:
string speicialty;
};
void doctor::input() //增加医生信息
{
cout<<"*****主治医生基本信息*****"<






