诊所信息管理系统C++课程设计报告.docx
《诊所信息管理系统C++课程设计报告.docx》由会员分享,可在线阅读,更多相关《诊所信息管理系统C++课程设计报告.docx(46页珍藏版)》请在冰豆网上搜索。
![诊所信息管理系统C++课程设计报告.docx](https://file1.bdocx.com/fileroot1/2023-6/23/ba111859-aad0-4c0d-adb9-86800a0f7637/ba111859-aad0-4c0d-adb9-86800a0f76371.gif)
诊所信息管理系统C++课程设计报告
课程设计成果
学院:
计算机工程学院班级:
学生姓名:
学号:
设计地点(单位)B5-101ERP实验室
设计题目:
诊所信息管理系统设计
完成日期:
2016年6月25日
指导教师评语:
成绩(五级记分制):
教师签名:
1需求分析
随着经济的迅速发展,人们的生活水平得到显著提高。
医疗服务行业也在人们生活中占据了最重要的一环,随着医改的实施,看病难,看病贵的问题得到了解决,所以为了存储患者信息以及医生信息,为了小型诊所管理的正规化,方便化,诊所信息管理系统在此背景下诞生。
面对发展的需要通过专门的管理系统来系统化、规范化以及高效地实现小型诊所管理。
并且随着计算机技术的快速发展,计算机的应用逐渐普及和深入,同时计算机软件的需求特日益增长,C++语言是当前最流行的和实用的计算机程序语言。
模拟诊所信息管理系统就是对存储患者信息以及医生信息在个人PC上的编程实现。
本系统采用了用户身份的注册、登陆、增加信息、查询信息、帐单信息以及统计所有患者的总费用等功能。
并分析在现实生活中遇到的问题并得到解决。
1.1问题描述
完成小型诊所的简单信息管理程序,掌握类的设计以及继承和派生的应用。
1.2主体功能
设计人类(Person类)和医生类(Doctor类),在此基础上,通过增加患者和账单,使它们公用于表示一家诊所的信息管理。
(1)在一条医生记录中,包括医生的专业说明(specialty),如内科医生(surgeon)、儿科医生(pediatrician)、产科医生(obstetrician)及全科医生(generalpractitioner)。
(2)Doctor记录还含有诊费(office_vist_fee)。
(3)在一条患者记录中,包括该患者产生的药费(drug_fee),患者的诊费(即医生的诊费)。
(4)在一条账单记录中,包括一条患者对象、该患者对应得主治医生、该患者产生的诊费和药费。
(5)应用程序能够显示出诊所中每个患者的信息和对应主治医生的信息。
(6)能够统计出所有患者的总费用。
1.3问题的解决方案
根据系统功能要求,可以将问题解决分为以下步骤:
(1)应用系统分析,建立该系统的功能模块框图以及界面的组织和设计;
(2)分析系统中的各个实体及它们之间的关系;
(3)根据问题描述,设计系统的类层次;
(4)完成类层次中各个类的描述;
(5)完成类中各个成员函数的定义;
(6)完成系统的应用模块;
(7)功能调试;
(8)完成系统总结报告。
1.4开发环境
开发系统:
Windows系统,处理器要求最低奔腾处理器,内存32m,建议在i5处理器,128m内存配置下调试。
编译集成软件:
MicrosoftVisualC++6.0编译器。
MicrosoftVisualC++6.0编译器。
是一个强大的C/C++软件开发工具,操作简单,使用非常广泛,为很多程序员的首选开发工具。
2概要设计
2.1数据设计
2.1.1类设计
分别定义了person人类、doctor医生类、HuanZhe患者类以及帐单类;在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()用于把总费用从"D:
\\bb.txt"文件移到"D:
\\cc.txt",pay()统计该系统中所有患者的总费用,addzhangdan()增加账单信息,zhangdanKind()按姓名查询账单信息。
2.1.2类之间的关系
在该系统中医生与患者都有数据成员姓名(name)、性别(sex)、年龄(age)以及诊费(office_vist_fee);所以把这些数据成员定义在基类person人类中,doctor医生类与HuanZhe患者类公有继承于基类person人类。
2.1.3函数设计
在doctor医生类中,包含了成员函数input()增加医生信息,zhangdanKind()按姓名查询医生信息;在HuanZhe患者类中,包含了成员函数input()增加患者信息,zhangdanKind()按姓名查询患者信息;在zhangdan帐单类中,包含了成员函数totl_pay()用于把总费用从"D:
\\bb.txt"文件移到"D:
\\cc.txt",pay()统计该系统中所有患者的总费用,addzhangdan()增加账单信息,zhangdanKind()按姓名查询账单信息。
在该系统中,还包含了普通函数addinfor()增加信息界面实现,select()查询信息界面实现,zhangdanxinxi()账单信息界面实现,add_zhuce()实现注册用户,welcome()验证用户登陆,登陆成功显示欢迎信息,Please()诊所信息管理系统主界面的实现。
2.2结构设计
2.2.1系统流程图
图2.1系统流程图
2.2.2界面设计
addinfor()增加信息界面包括了1.增加医生信息2.增加患者信息0.退出;
select()查询信息界面包括了1.查询医生信息2.查询患者信息0.退出;
zhangdanxinxi()账单信息界面包括了1.增加账单信息2.查询账单信息0.退出;
Please()诊所信息管理系统主界面包括了1.查询信息2.账单信息3.增加信息4.统计总费用0.退出系统;
main()主函数界面包括了1.用户登录2.用户注册0.退出系统。
在这些界面的实现中用switch()语句做选择。
3详细设计
3.1类实现
classperson//人类
{
protected:
stringname;
charsex;
intage;
doubleoffice_vist_fee;
public:
person(){}
~person(){}
};
classdoctor:
publicperson//医生类
{
private:
charspeicialty[15];
public:
doctor(){}
voidinput();//增加医生信息
voidzhangdanKind();//按姓名查询医生信息
~doctor(){}
};
classHuanZhe:
publicperson//患者类
{
private:
doubledrug_fee;
public:
HuanZhe(){}
voidinput();//增加患者信息
voidzhangdanKind();//按姓名查询患者信息
~HuanZhe(){}
};
classzhangdan//帐单类
{
stringname;
doubledrug_fee;
doubleoffice_vist_fee;
doubletotl_fee;
public:
zhangdan(){}
voidtotl_pay();//用于把总费用从"D:
\\bb.txt"文件移到"D:
\\cc.txt"
voidpay();//实现统计所有患者总费用
voidzhangdanKind();//按姓名查询账单信息
~zhangdan(){}
};
3.2主函数实现
voidmain()//主函数
{
//system("color3F");
intw;
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)
{
case1:
Please();break;
case2:
add_zhuce();break;
case0:
exit(0);
default:
cout<<"输入数字错误!
"<}
}
}
3.3模块设计
增加医生信息如图3.1所示;
图3.1增加医生信息函数流程图图
按姓名查询医生信息如图3.2所示
3.2按姓名查询医生信息函数流程图
账单类如图3.3所示
图3.3账单函数
统计所有患者总费用如图3.4所示
图3.4统计所有患者总费用函数
增加账单信息如图3.5所示
图3.5增加账单信息函数
实现注册用户如图3.6所示
图3.6实现注册用户
按姓名查询账单如图3.7所示
图3.7按姓名查询账单函数
验证用户登陆,登陆成功显示欢迎信息如图3.8所示
图3.8登录成功显示欢迎函数
4系统测试
4.1测试数据
序号
输入内容
说明
截图
1
2,zhangsan,123456
输2注册,输入姓名及密码,显示成功
图4.1
2
1
输1进入登录界面
图4.2
3
1
登录后显示诊所信息管理系统主界面
图4.3
4
3
在总界面输3进增加信息界面
图4.4
5
1,lisi,f,32,4.5,erkeyisheng
输入要增加医生的相关信息
图4.5
6
2,wangfang,m,12,4.5,10
输入要增加患者的相关信息
图4.6
7
1
在总界面输1进入查询界面
图4.7
8
1,lisi
输1查询医生信息界面,输入姓名得相关信息
图4.8
9
2,wangfang
输2查询患者信息界面,输入姓名得相关信息
图4.9
10
2
主界面输2进入帐单信息界面
图4.10
11
1,wangfang,lisi,4.5,10,14.5
输1进入增加账单界面,输入相关信息
图4.11
12
2,wangfang
输2进入查询账单界面,输患者姓名得到查询结果
图4.12
13
4
在主界面输4进入统计总费用界面
图4.13
14
0
在主界面输0退出系统
图4.14
4.2测试结果
1.用户注册与登陆
(1)用户注册界面如图4.1所示。
图4.1
(2)用户登陆界面如图4.2所示。
图4.2
2.诊所信息管理系统主界面如图4.3所示。
图4.3
3.增加信息界面如图4.4所示。
图4.4
(1)增加医生信息如图4.5所示。
图4.5
(2)增加患者信息如图4.6所示。
图4.6
4.查询信息界面如图4.7所示。
图4.7
(1)查询医生信息如图4.8所示。
图4.8
(2)查询患者信息如图4.9所示。
图4.9
5.帐单信息界面如图4.10所示。
图4.10
(1)增加帐单信息如图4.11所示。
图4.11
(2)查询帐单信息如图4.12所示。
图4.12
6.统计功能实现如图4.13所示。
图4.13
(7)退出系统界面如图4.14所示。
图4.14
4.3课程设计过程中遇到的问题
(1)在switch语句中注意break和return的使用,用return会出现Pressanykeytoconinue导致没有执行完的程序结束。
(2)数据类型在类中设的与后来添加的类型不一致,导致错误。
(3)写入文件与输出时出现错误。
5总结
经过一个多星期的C++课程设计的训练,我学到了很多,最主要的一点是怎样去运用自己学过的知识,怎样去找到你所需要的资料,并在短时间把它运用到具体的实践中,运用到你所需要的方面。
这个过程是很艰难的,要花费很多的时间和精力,但是,在事情过后,自己就会发现自己已经在这个过程中学到了自己想要的东西,这种获得是更深刻的。
在做这个C++课程设计的时候,我原先也是学的不怎么好,什么是结构体数据,什么是定义类型,怎样在一个main函数中调用别的定义函数,等等,可以说是忘得差不多了。
然而,在这门课程设计中,这些方面却是特别重要的,可以说,掌握了这个,你就完全可以完成自己的任务。
这就要求我们要自己去学,自己去探索。
当然,看书、问同学是必不可少的,还有,身边有非常丰富的网络资源给我们好好利用,XX就是个很不错的地方。
这样就从另一方面锻炼了我们检索知识获取信息的能力,在这个过程中,可以学到的是一种提升自我的能力。
当然,由于个人能力所限,这份课程设计有一些别的方面还是要参考人家的的资料,在读懂别人材料的同时,自己取人所长,补己之短,经过多次的调试,总结,最后交出一份自己比较满意的答卷。
在本次课程设计中,我发现我对知识的运用不是那么准确,也就是说我对知识掌握的不够熟练。
课本上有的知识却不会运用,虽然在本次C++课程设计中,显示出一些我知识上的漏洞,经过这次编写诊所信息管理系统,我发现我熟练掌握了类的定义以及继承与派生,并对文件操作有了初步的掌握,课下还应该继续努力,争取熟练掌握一门编程设计语言,在次基础上,在学习多种编程语言,以便以后可以用到工作中去。
通过这次的课程设计,终于我的诊所信息管理系统完美告终,让我进一步的了解到C++在我们日常生活中的重要性,而且,也更进一步的激发了我学习这门语言的兴趣.经过这次的训练,我相信自己以后会用更多的时间来把这门语言学好,掌握好这门必修的基础语言。
参考文献
[1]李素若,杜华兵编,C++面向对象程序设计.中国水利水电出版社.2013年.
[2]谭浩强编,C++面向对象程序设计.北京:
清华大学出版社,2006年.
[3]安志远,贾振华主编,C++程序设计基础.北京:
高等教育出版社,2009.6
[4]王超,C++程序设计.北京:
地质出版社,2006.82
[5]王继明,C++程序设计与应用开发[M].北京:
清华出版社,2008.
附录源程序代码
#include
#include
#include
#include
#include
usingnamespacestd;
classperson//人类
{
protected:
stringname;
charsex;
intage;
doubleoffice_vist_fee;
public:
person(){}
~person(){}
};
classdoctor:
publicperson//医生类
{
private:
charspeicialty[15];
public:
doctor(){}
voidinput()//增加医生信息
{
chart;
cout<<"*****主治医生基本信息*****"<fstreamoutfile("D:
\\aa.txt",ios:
:
out|ios:
:
app);//以写方式打开文件
if(!
outfile)
cout<<"打开文件失败!
"<else
{
cout<<"姓名:
";
cin>>name;outfile<cout<<"性别:
";cin>>sex;
if(sex=='m'||sex=='M')
outfile<<"男"<<"";
elseif(sex=='f'||sex=='F')
outfile<<"女"<<"";
else
{
cout<<"请重新输入性别:
";
cin>>sex;
if(sex=='m'||sex=='M')
outfile<<"男"<<"";
elseif(sex=='f'||sex=='F')
outfile<<"女"<<"";
}
cout<<"年龄:
";
cin>>age;outfile<cout<<"诊费:
";
cin>>office_vist_fee;outfile<cout<<"专业说明:
";
cin>>speicialty;outfile<outfile.close();
}
cout<<"是否继续添加医生信息Y/N......:
"<cin>>t;
if(t=='y')
input();
else
return;
}
voidzhangdanKind()//按姓名查询医生信息
{
chart;
fstreaminfile2("D:
\\aa.txt",ios:
:
in);//以读方式打开文件
if(!
infile2)
{
cout<<"打开文件失败!
"<return;
}
intline=0;
stringarr[100][100];//定义一个string类型的二维数组,用来保存从文本内读取的信息
memset(arr,0,sizeof(arr));//将数组清空
while(!
infile2.eof())//文件不为空的条件设置
{
infile2>>arr[line][0]>>arr[line][1]>>arr[line][2]>>arr[line][3]>>arr[line][4];
line++;
}
stringna;
cout<<"请输入要查询的医生姓名:
";
cin>>na;
for(inti=0;i{
if(arr[i][0]==na)
{
cout<<"医生姓名:
"<"<"<<<"诊费:
"<"<return;
}
}
cout<<"记录中没有此医生信息!
"<cout<<"是否继续查询Y/N......:
"<cin>>t;
if(t=='y')
zhangdanKind();
else
return;
}
~doctor(){}
};
classHuanZhe:
publicperson//患者类
{
private:
doubledrug_fee;
public:
HuanZhe()
{}
voidinput()//增加患者信息
{
chart;
cout<<"*****患者基本信息*****"<fstreamoutfile("D:
\\ee.txt",ios:
:
out|ios:
:
app);//以写方式打开文件
if(!
outfile)
cout<<"打开文件失败!
"<else
{
cout<<"姓名:
";
cin>>name;outfile<cout<<"性别:
";cin>>sex;
if(sex=='m'||sex=='M')
outfile<<"男"<<"";
elseif(sex=='f'||sex=='F')
outfile<<"女"<<"";
else
{
cout<<"请重新输入性别:
";
cin>>sex;
if(sex=='m'||sex=='M')
outfile<<"男"<<"";
elseif(sex=='f'||sex=='F')
outfile<<"女"<<"";
}
cout<<"年龄:
";
cin>>age;outfile<cout<<"诊费:
";
cin>>office_vist_fee;outfile<cout<<"药费:
";
cin>>drug_fee;outfile<outfile.close();
}
cout<<"是否继续添加患者信息Y/N......:
"<cin>>t;
if(t=='y')
input();
else
return;
}
voidzhangdanKind()//按姓名查询患者信息
{
chart;
fstreaminfile2("D:
\\ee.txt",ios:
:
in);//以读方式打开文件
if(!
infile2)
{
cout<<"打开文件失败!
"<return;
}
stringarr[100][100];//定义一个string类型的二维数组,用来保存从文本内读取的信息
intline=0;
memset(arr,0,sizeof(arr));////将数组清空
while(!
infile2.eof())//文件不为空的条件设置
{
infile2>>arr[line][0]>>arr[line][1]>>arr[line][2]>>arr[line][3]>>arr[line][4];//文件流读取数据
line++;
}
stringna;
cout<<"请输入要查询的患者姓名:
";
cin>>na;
for(inti=0;i{
if(arr