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 )及全科医生(general practitioner)。

(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.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 input(); //增加患者信息

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_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增加医生信息

void doctor::input()

{

cout>name;outdoctor>sex;outdoctor

cout

} } cin>>age;outdoctoroffice_vist_fee;outdoctor>speicialty;outdoctor

2.2按姓名查询医生信息

void doctor::zhangdanKind()

{

fstream indoctor("医生.txt",ios::in); //以读方式打开文件

if(!indoctor) { cout

return;

}

int line=0;

string arr[100][5]; //定义一个string 类型的二维数组, 用来保存从文本内读取的信息 memset(arr,0,sizeof(arr)); //将数组清空

while(!indoctor.eof()) //文件不为空的条件设置 { cout>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龄:"

} cout

char t;

cin>>t;

if(t=='y')

} zhangdanKind(); else return;

2.3 增加患者信息

void HuanZhe::input()

{

cout>name; outH>sex;outH

cout

cin>>age; outHoffice_vist_fee; outH>drug_fee; outH>t; if(t=='y')

} input(); else return;

2.4 按姓名查询患者信息

void HuanZhe::zhangdanKind()

{

fstream inH("患者.txt",ios::in); //以读方式打开文件 if(!inH) { cout

memset(arr,0,sizeof(arr)); ////将数组清空 while(!inH.eof()) //文件不为空的条件设置 { inH>>arr[line][0]>>arr[line][1]>>arr[line][2]>>arr[line][3]>>arr[line][4]; //文件流读取数据

} string mz; cout>mz; for(int i=0;i龄:"return;

}

}

cout

cout

char t;

cin>>t;

if(t=='y')

zhangdanKind();

else

return;

}

2.5 增加账单信息

void zhangdan::addzhangdan()

{

fstream outfile1("账单.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

outfile1.close();

}

char t;

cout

cin>>t;

if(t=='y')

addzhangdan();

else

return;

}

2.6 查询账单信息

void zhangdan::zhangdanKind()

{

fstream infile1("账单.txt",ios::in); //以读方式打开文件

if(!infile1)

{

cout

return ;

}

string arr[100][5]; //定义一个string 类型的二维数组, 用来保存从文本内读取的信息 int line=0;

memset(arr,0,sizeof(arr)); //将数组清空

while(!infile1.eof()) //文件不为空的条件设置

{

infile1>>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

文件流读

{ if(arr[i][0]==mz) { string xm; xm=arr[i][1]; coutarr[l][0]>>arr[l][1]>>arr[l][2]>>arr[l][3]>>arr[l][4]; //文件流读取数据 memset(arr,0,sizeof(arr)); //将数组清空 l++; for(int j=0;jarr[lin][0]>>arr[lin][1]>>arr[lin][2]>>arr[lin][3]>>arr[lin][4]; //文件流读取lin++; 数据 } { if(arr[i][0]==mz) {

for(int z=0;z

cout}

}

return;

}

}

cout

cout

char t;

cin>>t;

if(t=='y')

zhangdanKind();

else

return;

}

2.7 统计总费用

void zhangdan::totl_pay()

{

fstream infile1("账单.txt",ios::in); //以读方式打开文件

if(!infile1)

{

cout

return ;

}

double arr[100][3]; //定义一个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++;

}

double a;

double z=0.0;

for(int i=0;i

{

a=arr[i][2];;

z=z+a;

}

cout

infile1.close();

}

文件流

2.8 登陆

void landing()

{

} string name,code; cout>name; if(name!="yangqing") { } else { } cout>code; if("123456789"==code) { } else { } cout>code; cout

2.9 增加信息界面

void adding()

{

int a; doctor d; HuanZhe w; cout

cout

} cin>>a; { case 1: d.input(); break; case 2: w.input(); break; case 0: break; } default: cout

2.10 查询信息界面

void search()

{

} int b; doctor d; HuanZhe w; cout>b; switch(b) { case 1:d.zhangdanKind();break; case 2:w.zhangdanKind();break; case 0:break; } default:cout:";

2.11 账单信息界面

void zhangdanxinxi()

{

int c; zhangdan z; cout

} cout>c; switch(c) { } case 1:z.addzhangdan();break; case 3:z.totl_pay();break; case 0:break; default: cout:";

2.12 主界面

void surface()

{

landing(); //登陆 int choice; cout:"; cin>>choice; switch(choice) { case 1:search(); break;

} case 0:cout

2.13 主函数

void main()

{

int w; cout:"; cin>>w; switch(w) { case 1:surface();break;

case 0:exit(0);

}

} } default: cout

四、程序运行演示

1、登陆

2.1查询医生信息

2.2 查询患者信息

3.1 查询账单信息

3.2 统计总费用

4.1 增加医生信息

4.2 增加患者信息

五、总结反思

经过几个星期的C++课程设计的训练,我学到了很多,最主要的一点是怎样去运用自己学过的知识,怎样去找到你所需要的资料,并在短时间把它运用到具体的实践中, 运用到你所需要的方面。这个过程是很艰难的,要花费很多的时间和精力,但是,在事情过后,自己就会发现自己已经在这个过程中学到了自己想要的东西,这种获得是更深刻的。

在做这个C++课程设计的时候,我原先也是学的不怎么好,什么是输入输出流, 如何对文件进行操作,什么是继承与派生,等等,可以说是忘得差不多了。然而,在这门课程设计中, 这些方面却是特别重要的,可以说,掌握了这个, 你就完全可以完成自己的任务。这就要求我们要自己去学,自己去探索。当然, 看书、问同学是必不可少的,还有, 身边有非常丰富的网络资源给我们好好利用, 百度就是个很不错的地方。这样就从另一方面锻炼了我们检索知识获取信息的能力,在这个过程中, 可以学到的是一种提升自我的能力。

在本次课程设计中,我发现我对知识的运用不是那么准确,也就是说我对知识掌握的不够熟练。课本上有的知识却不会运用,虽然在本次C++课程设计中,显示出一些我知识上的漏洞,经过这次编写诊所信息管理系统,我发现我熟练掌握了类的定义以及继承与派生,并对文件操作有了初步的掌握,课下还应该继续努力,争取熟练掌握一门编程设计语言,在次基础上,在学习多种编程语言,以便以后可以用到工作中去。当然,期间我也遇到了一些棘手的问题,在“账单.txt ”中,我希望能读取它每个患者账单的总费用并把它们求和,但是尝试了多次,检查了多次,读取文件内容的while 循环一直是死循环,无法读取,终于,我发现了问题所在,并把代码修改了一下,完美解决了问题。

通过这次的课程设计,我的诊所信息管理系统完美告终,让我进一步的了解到C++在我们日常生活中的重要性,而且,也更进一步的激发了我学习这门语言的兴趣。经过这次的训练,我相信自己以后会用更多的时间来把这门语言学好,掌握好这门必修的基础语言。

六、源代码

#include

#include

#include

using namespace std;

class person //人类

{protected:

string name;

string sex;

int age;

double office_vist_fee;};

class doctor:public person //医生类

{public:

void input(); //增加医生信息

void zhangdanKind() ; //按姓名查询医生信息

private:

string speicialty;

};

void doctor::input() //增加医生信息

{

cout

fstream outdoctor("医生.txt",ios::out|ios::app); //以写方式打开文件

if(!outdoctor)

cout

else

{

cout

cin>>name;outdoctor

cout

cin>>sex;outdoctor

cout

cin>>age;outdoctorcout

cin>>office_vist_fee;outdoctor

cout

cin>>speicialty;outdoctor

outdoctor.close();

}

}

void doctor::zhangdanKind() //按姓名查询医生信息

{

fstream indoctor("医生.txt",ios::in); //以读方式打开文件

if(!indoctor)

{

cout

return;

}

int line=0;

string arr[100][5]; //定义一个string 类型的二维数组, 用来保存从文本内读取的信息 memset(arr,0,sizeof(arr)); //将数组清空

while(!indoctor.eof()) //文件不为空的条件设置

{

indoctor>>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

{

if(arr[i][0]==mz)

{

cout}

}

cout

cout

char t;

cin>>t;

if(t=='y')

zhangdanKind();

else

return;

}

class HuanZhe:public person //患者类

{public:

void zhangdanKind(); //按姓名查询患者信息

void input(); //增加患者信息

private:

double drug_fee;

};

void HuanZhe::input()

{

cout

fstream outH("患者.txt",ios::out|ios::app); //以写方式打开文件

if(!outH)

cout

else

{

cout

cin>>name; outH

cout

cin>>sex;outH

}

cout

cin>>age; outHcout

cin>>office_vist_fee; outH

cout

cin>>drug_fee; outH

outH.close();

cout

char t;

cin>>t;

if(t=='y')

input();

else

return;

}

void HuanZhe::zhangdanKind()

{

fstream inH("患者.txt",ios::in); //以读方式打开文件

if(!inH)

{

cout

return;

}

string arr[100][5]; //定义一个string 类型的二维数组, 用来保存从文本内读取的信息 int line=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++;

}

string mz;

cout

cin>>mz;

for(int i=0;i

{

if(arr[i][0]==mz)

{

cout}

}

cout

cout

char t;

cin>>t;

if(t=='y')

zhangdanKind();

else

return;}

class zhangdan //帐单类

{public:

void totl_pay();

void addzhangdan(); // 增加账单信息

void zhangdanKind(); //按姓名查询账单信息

private:

string name;

double drug_fee;

double office_vist_fee;

double totl_fee;

};

void zhangdan::totl_pay()

{

fstream infile1("账单.txt",ios::in); //以读方式打开文件

if(!infile1)

{

cout

return ;

}

double arr[100][3]; //定义一个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++;

}

double a;

double z=0.0;

for(int i=0;i

{

a=arr[i][2];;

z=z+a;

}

cout

infile1.close();

}

void zhangdan::addzhangdan()

{

fstream outfile1("账单.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

outfile1.close();

}

char t;

cout

cin>>t;

if(t=='y')

addzhangdan();

else

return;

}

void zhangdan::zhangdanKind()

{

fstream infile1("账单.txt",ios::in); //以读方式打开文件

if(!infile1)

{

cout

return ;

}

string arr[100][5]; //定义一个string 类型的二维数组, 用来保存从文本内读取的信息 int line=0;

memset(arr,0,sizeof(arr)); //将数组清空

while(!infile1.eof()) //文件不为空的条件设置

{

infile1>>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

//

{

if(arr[i][0]==mz)

{

string xm;

xm=arr[i][1];

coutfstream indoctor("医生.txt",ios::in); //以读方式打开文件

if(!indoctor)

{

cout

return ;

}

int l=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(int j=0;j

{

if(arr[j][0]==xm)

{

cout}

}

fstream inH("患者.txt",ios::in); //以读方式打开文件

if(!inH)

{

cout

return ;

}

int lin=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(int z=0;z

{

if(arr[i][0]==mz)

{

cout}

}

return;

}

}

cout

cout

char t;

cin>>t;

if(t=='y')

zhangdanKind();

else

return;

}

void landing() //登陆

{

string name,code;

cout

cin>>name;

if(name!="yangqing")

{

cout

landing();

}

else

{

cout

cin>>code;

if("123456789"==code)

{

cout

}

else

{

cout

cout

cin>>code;

}

}

}

void adding() //增加信息界面

{

int a;

doctor d;

HuanZhe w;

cout

cout

cout

cout

cout

cout

cout

cout

cout

cout

cout

cout

cin>>a;

switch(a)

{

case 1: d.input(); break;

case 2: w.input(); break;

case 0: break;

default: cout

}

}

void search() //查询信息界面

{

int b;

doctor d;

HuanZhe w;

cout

cout

cout

cout

cout

cout

cout

cout

cout

cout

cout

cout:";

cin>>b;

switch(b)

{

case 1:d.zhangdanKind();break;

case 2:w.zhangdanKind();break;

case 0:break;

default:cout

}

}

void zhangdanxinxi() //账单信息界面

{

int c;

zhangdan z;

cout

cout

cout

cout

cout

cout

cout

cout

cout

cout

cout

cout

cout:";

cin>>c;

switch(c)

{

case 1:z.addzhangdan();break;

case 2:z.zhangdanKind();break;

case 3:z.totl_pay();break;

case 0:break;

default: cout

}

}

void surface() //主界面

{

landing(); //登陆

int choice;

cout

while(1)

{

cout

cout

cout

cout

zhangdan a;

cout:";

cin>>choice;

switch(choice)

{

case 1:search(); break;

case 2:zhangdanxinxi(); break;

case 3:adding(); break;

case 0:cout

}

}

}

void main()

{

int w;

cout

cout

cout

cout

cout

cout

cout

cout

while(1)

{

cout:";

cin>>w;

switch(w)

{

case 1:surface();break;

case 0:exit(0);

default: cout

}

}

}

- 30 -


相关文章

  • 保安值班安排系统
  • 第一章 课程设计的目的和要求 1.1课程设计的目的 C++课程设计的主要目的是根据课堂讲授内容,学生做相应的自主练习,在进行课程设计的过程中,消化自己所学的内容,使得课堂教学与实验实践之间关系更为密切, 同时也培养综合运用C++程序设计课程所学到的知识和编写C++程序解决实际问题的能力,以及良好的程 ...

  • 小学期c++实验报告
  • 山西大学管理学院 本科生课程设计论文 (2010 ---- 2011 学年 第 1 学期) 学 院:专 业 名 称:课 程 名 称: 面向对象程序设计 论 文 题 目: <模拟网上购书的结账功能> 授课 教师(职称):学 生 姓 名: 年 级: 成 绩: 山西大学管理学院 2011年 9 ...

  • 文本编辑器设计
  • 四川师范大学成都学院高级语言程序课程设计 文本编辑器设计 学生姓名 学 号 所在学院 专业名称 班 级 指导教师 成 绩 xxx x x x x级x班 x x学院 二○一四年十二月 课程设计任务书 文本编辑器设计 内容摘要:当今,计算机以及网络技术的飞速发展,社会正快速向信息化社会 前进,我们需要更 ...

  • 铁路售票管理系统项目计划书
  • 软件工程课程设计报告 项目名称: 铁路售票管理系统 项目组长: 成 员: 2012.1.5 铁路售票管理系统项目计划书 1引言 ...................................................................................... ...

  • 中南大学C++课程设计报告-职工工资信息管理系统
  • 中南大学课程设计报告 课程名称:高级程序设计实践(C++) 指导老师: 李刚 专 业: 班 级: 学 号: 姓 名: 2015年6月27日 目录 第一章 总体设计································ 1 1.1 C++课程设计要求及题目·················· ...

  • 面向对象基本特性的C语言实现
  • 第23卷第6期 2.02年11月微计算机应用MICROCOMPUTERAPI'LICATIONSV01.23,N..6NoV・,2002 l 面向对象基本特性的C语言实现 张泰乐肖孙圣倪宏丌5)^ 100080)(中国科学院研究生院,中国科学院声学所DSP中心北京 捕要:继承和多态性是面向对象程序语 ...

  • 课程设计报告书
  • 1需求分析 1.1功能需求分析 随着科学技术的不断提高,计算机科学日渐成熟,传统的图书管理方式必然被计算机为基础的信息管理系统所取代.因为作为计算机应用的一部分,使用计算机对图书信息进行管理,具有着手工管理所无法比拟的优点:检索迅速.查找方便.可靠性高.存储量大.保密性好.寿命长.成本低等.因此,如 ...

  • C++经典书籍推荐
  • 推荐一些C++的好书: 1.<The C Programming language> (Keinighan & Dennis Ritchie 1988) 2.<The C++ Programming Languague>特别版(Bjarne Stroustrup) 3 ...

  • 编译原理的发展史
  • 编译器与编译工具概述 摘要: 编译器是将便于人编写,阅读,维护的高级计算机语言翻译为计算机能解读.运行的低阶机器语言的程序.编译是从源代码(通常为高阶语言)到能直接被计算机或虚拟机执行的目标代码(通常为低阶语言或机器语言)的翻译过程. 一.编译器的概述 1. 编译器的概念 编译器是将便于人编写,阅读 ...

© 2024 范文中心 | 联系我们 webmaster# onjobs.com.cn