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






