课程设计成果
学院: 计算机工程学院 班 级: 信息安全
学生姓名: 学 号:
设计地点(单位)
设计题目: 诊所信息管理系统设计
完成日期年 月 日
指导教师评语:
成绩(五级记分制):
教师签名:
目 录
1需求分析33
1.1 问题描述33
1.2 主体功能33
1.3 问题的解决方案33
1.4开发环境44
2 概要设计44
2.1 数据设计44
3
3.1测试结果44
4
总结………………………………………………………………………………….…7
附录 源程序代码88
1需求分析
随着经济的迅速发展,人们的生活水平得到显著提高。医疗服务行业也在人们生活中占据了最重要的一环,随着医改的实施,看病难,看病贵的问题得到了解决,所以为了存储患者信息以及医生信息,为了小型诊所管理的正规化,方便化,诊所信息管理系统在此背景下诞生。
面对发展的需要通过专门的管理系统来系统化、规范化以及高效地实现小型诊所管理。并且随着计算机技术的快速发展,计算机的应用逐渐普及和深入,同时计算机软件的需求特日益增长,C++语言是当前最流行的和实用的计算机程序语言。
模拟诊所信息管理系统就是对存储患者信息以及医生信息在个人PC上的编程实现。本系统采用了用户身份的注册、登陆、增加信息、查询信息、帐单信息以及统计所有患者的总费用等功能。并分析在现实生活中遇到的问题并得到解决。
1.1 问题描述
完成小型诊所的简单信息管理程序,掌握类的设计以及继承和派生的应用。
1.2 主体功能
1、问题描述
完成小型诊所的简单信息管理程序,掌握类的设计以及继承和派生的应用。
2.功能要求:
设计人类(Person类)和医生类(Doctor类),在此基础上,通过增加患者和账单,使它们公用于表示一家诊所的信息管理。
(1)在一条医生记录中,包括医生的专业说明(specialty),如内科医生(surgeon)、儿科医生(pediatrician) 、产科医生(obstetrician)及全科医生(general practitioner)。
(2)Doctor记录还含有诊费(office_vist_fee)。 (3)在一条患者记录中,包括该患者产生的药费(drug_fee) ,患者的诊费(即医生的诊费)。 (4)在一条账单记录中,包括一条患者对象、该患者对应得主治医生、该患者产生的诊费和药费。
(5)应用程序能够显示出诊所中每个患者的信息和对应主治医生的信息。
(6)能够统计出所有患者的总费用。能统计性别、订阅数、订阅期限信息等。
例如:统计本期杂志订户数并打印运算结果
本期订信息
订户名 订阅数 单价 全额
李平 2 5.5 11.0
黄海 1 5.5 5.5
合计 3 1.0 16.5
(7)保存功能:可将当前系统中各类记录存入文件中,存入方式任意。
(8)读取功能:可将保存在文件中的信息读入到当前系统中,供用户进行使用
1.3 问题的解决方案
根据系统功能要求,可以将问题解决分为以下步骤:
(1)应用系统分析,建立该系统的功能模块框图以及界面的组织和设计;
(2)分析系统中的各个实体及它们之间的关系;
(3)根据问题描述,设计系统的类层次;
(4)完成类层次中各个类的描述;
(5)完成类中各个成员函数的定义;
(6)完成系统的应用模块;
(7)功能调试;
(8)完成系统总结报告。
1.4开发环境
开发系统:Windows 系统,处理器要求最低奔腾处理器,内存32m,建议在i5处理器,128m内存配置下调试。
编译集成软件:Microsoft Visual C++ 6.0编译器。
Microsoft Visual C++ 6.0编译器。是一个强大的C/C++软件开发工具,操作简单,使用非常广泛,为很多程序员的首选开发工具。
2 概要设计
2.1 数据设计
2.1.1 类设计
分别定义了person人类、doctor医生类、患者类以及帐单类;在person人类中,包含了数据成员姓名(name)、性别(xingbie)、年龄(old)以及诊费(Dfee);在doctor医生类中,增加了数据成员医生的专业说明(dizhi1),包含了成员函数input()增加医生信息,zhangdanKind()按姓名查询医生信息;在patient患者类中,包含了数据成员姓名(name)、诊费(Dfee)、药费(drug_fee)、总费用(allfee)。
2.1.2 类之间的关系
在该系统中医生与患者都有数据成员姓名(name)、性别(xingbie)、年龄(age)以及诊费(office_vist_fee);所以把这些数据成员定义在基类person人类中,doctor医生类与HuanZhe患者类公有继承于基类person人类。
3 系统测试
3.1测试结果
1.诊所信息管理系统主界面如图4.3所示。
图 4.3
2.医生信息录入界面如图4.4所示。
图 4.4
3.病人信息录入如图4.5所示。
图4.5
4.查询信息界面如图4.7所示。
图 4.7
5.按病人查询病人信息如图4.8所示。
图 4.8
6.查询医生信息如图4.9所示。
图 4.9
7.载入所有病人信息如图4.10所示。
图 4.10
8.载入所有医生信息如图4.11所示。
图 4.11
5 总结
经过数个星期的C课程设计的训练,我学到了很多,最主要的一点是怎样去运用自己学过的知识,怎样去找到你所需要的资料,并在短时间把它运用到具体的实践中,运用到你所需要的方面。这个过程是很艰难的,要花费很多的时间和精力,但是,在事情过后,自己就会发现自己已经在这个过程中学到了自己想要的东西,这种获得是更深刻的。
在做这个C课程设计的时候,我原先也是学的不怎么好,什么是结构体数据,什么是定义类型,怎样在一个main函数中调用别的定义函数,等等,可以说是忘得差不多了。然而,在这门课程设计中,这些方面却是特别重要的,可以说,掌握了这个,你就完全可以完成自己的任务。这就要求我们要自己去学,自己去探索。当然,看书、问同学是必不可少的,还有,身边有非常丰富的网络资源给我们好好利用,百度就是个很不错的地方。这样就从另一方面锻炼了我们检索知识获取信息的能力,在这个过程中,可以学到的是一种提升自我的能力。
当然,由于个人能力所限,这份课程设计有一些别的方面还是要参考人家的的资料,在读懂别人材料的同时,自己取人所长,补己之短,经过多次的调试,总结,最后交出一份自己比较满意的答卷。
在本次课程设计中,我发现我对知识的运用不是那么准确,也就是说我对知识掌握的不够熟练。课本上有的知识却不会运用,虽然在本次C课程设计中,显示出一些我知识上的漏洞,经过这次编写诊所信息管理系统,我发现我熟练掌握了类的定义以及继承与派生,并对文件操作有了初步的掌握,课下还应该继续努力,争取熟练掌握一门编程设计语言,在次基础上,在学习多种编程语言,以便以后可以用到工作中去。
通过这次的课程设计,终于我的诊所信息管理系统完美告终,让我进一步的了解到C在我们日常生活中的重要性,而且,也更进一步的激发了我学习这门语言的兴趣.经过这次的训练,我相信自己以后会用更多的时间来把这门语言学好,掌握好这门必修的基础语言。
附录 源程序代码
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct patient {//病人结构体
char name[10];//病人名字
char num[10];//病人电话
char sex[10];//病人性别
int old;//病人年龄
int fee;//病人药费
struct patient* next1;//指向下一个病人
struct jilu* next3;//指向就诊记录
}node1;
struct doctor {//医生结构体
char name1[10];//医生名字
char num1[50];//医生联系电话
int Dfee;//医生诊费
char dizhi1[10];//医生专业
struct doctor* next2;//指向下一个医生
struct patient* next1;//指向医生
}node2;
struct jilu {//就诊记录结构体
char time[10];//就诊日期
char xinxi[10];//就诊信息
char name[10];//病人名字
struct jilu* next3;//指向下一个记录
}node3;
struct doctor* create1(struct doctor* p) {//1.医生信息录入
struct doctor* head = NULL, * tail;
struct patient* p1, * tail1;
char c;
int i = 0;
getchar();
printf("是否进行录入(输入F结束)\n");
while ((c = getchar()) != 'F') {
p = (struct doctor*)malloc(sizeof(struct doctor));
i++;
printf("请输入医生名称\n");
scanf("%s", p->name1);
printf("请输入医生费用\n");
scanf("%d", &p->Dfee);
printf("请输入医生电话\n");
scanf("%s", p->num1);
printf("请输入医生专业\n");
scanf("%s", p->dizhi1);
p->next2 = NULL;
if (head == NULL)
head = p;
else
tail->next2 = p;
tail = p;
getchar();
printf("是否进行录入(输入F结束)\n");
}
if (i != 0) {
printf("已注入医生信息\n");
return head;
}
else
return NULL;//返回医生首地址
}
void create2(struct doctor* head1) {//2.病人信息录入
struct doctor* p;
struct patient* p1, * head = NULL, * tail = NULL;
char name2[10];
int n, flag = 0, i, count = 0;
for (p = head1; p != NULL; p = p->next2) {
p->next1 = NULL;
}
printf("请输入要录入的病人的人数\n");
scanf("%d", &n);
for (i = 1; i <= n; i++) {
printf("请输入要输入的病人的主治医生\n");
scanf("%s", name2);
for (p = head1; p != NULL; p = p->next2) {
if (strcmp(p->name1, name2) == 0) {
p1 = (struct patient*)malloc(sizeof(struct patient));
printf("请输入病人的名字\n");
scanf("%s", p1->name);
printf("请输入病人的性别\n");
scanf("%s", p1->sex);
printf("请输入病人的联系电话\n");
scanf("%s", p1->num);
printf("请输入病人年龄\n");
scanf("%d", &p1->old);
printf("请输入病人药费\n");
scanf("%d", &p1->fee);
p1->next1 = p->next1;
p->next1 = p1;
flag = 1;
break;
}
}
}
if (flag == 0)
printf("输入了错误的信息\n");
else
printf("已成功录入信息\n");
}
void createjilu(struct doctor* head1) {//3.编写就诊记录
char name2[10];
struct doctor* p;
struct patient* p1;
int flag = 0, count = 0, n, i;
struct jilu* p2, * p3, * tail, * head = NULL;
printf("请输入要录入的记录的个数\n");
scanf("%d", &n);
for (p = head1; p != NULL; p = p->next2) {
for (p1 = p->next1; p1 != NULL; p1 = p1->next1) {
p1->next3 = NULL;
}
}
for (i = 1; i <= n; i++) {
printf("请输入要输入的病人的名字\n");
scanf("%s", name2);
for (p = head1; p != NULL; p = p->next2) {
for (p1 = p->next1; p1 != NULL; p1 = p1->next1) {
if (strcmp(p1->name, name2) == 0) {
p2 = (struct jilu*)malloc(sizeof(struct jilu));
printf("请输入就诊日期\n");
scanf("%s", p2->time);
printf("请输入就诊信息\n");
scanf("%s", p2->xinxi);
if (p1->next3 == NULL)
p1->next3 = p2;
else
tail->next3 = p2;
tail = p2;
flag = 1;
break;
}
}
if (flag != 0) {
break;
}
}
}
printf("已成功录入信息\n");
}
void searchpatient(struct doctor* head1) {//4.按病人查询病人信息
char name2[10];
struct doctor* p;
struct patient* p1, * head2;
int flag = 0;
printf("请输入病人名字\n");
scanf("%s", name2);
for (p = head1; p != NULL; p = p->next2) {
if (p->next1 != NULL) {
head2 = p->next1;
for (p1 = head2; p1 != NULL; p1 = p1->next1)
if (strcmp(p1->name, name2) == 0) {
printf("病人的主治医生:%s\n", p->name1);
printf("病人电话为:%s\n", p1->num);
printf("病人性别为:%s\n", p1->sex);
printf("病人年龄为:%d\n", p1->old);
printf("病人药费为:%d\n", p1->fee);
printf("病人诊费为:%d\n", p->Dfee);
printf("病人总费用为:%d\n", p->Dfee + p1->fee);
flag = 1;
break;
}
}
if (flag == 1)
break;
}
if (flag == 0)
printf("查无此人\n");
}
void searchroom(struct doctor* head1) {//5.查询医生信息
char name[10];
struct doctor* p;
int flag = 0;
printf("请输入要查询的医生姓名\n");
scanf("%s", name);
for (p = head1; p != NULL; p = p->next2) {
if (strcmp(p->name1, name) == 0) {
printf("医生诊费为:%d\n", p->Dfee);
printf("医生专业为:%s\n", p->dizhi1);
printf("医生联系电话为:%s\n", p->num1);
flag = 1;
break;
}
}
if (flag == 0) {
printf("无此医生\n");
}
}
void load(struct doctor* head1) {//6.载入所有病人信息
FILE* fp;
fp = fopen("d:\\Users\\16433\\Desktop\\诊所\\information1.txt", "r");
struct doctor* p;
struct patient* p1;
for (p = head1; p != NULL; p = p->next2) {
for (p1 = p->next1; p1 != NULL; p1 = p1->next1) {
fscanf(fp, "病人姓名:%s\n", p1->name);
printf("病人姓名:%s\n", p1->name);
fscanf(fp, "病人性别:%s\n", p1->sex);
printf("病人性别:%s\n", p1->sex);
fscanf(fp, "病人电话:%s\n", p1->num);
printf("病人电话:%s\n", p1->num);
fscanf(fp, "病人年龄:%d\n", p1->old);
printf("病人年龄:%d\n", p1->old);
fscanf(fp, "病人药费:%d\n", p1->fee);
printf("病人药费:%d\n", p1->fee);
fscanf(fp, "病人诊费:%d\n", p->Dfee);
printf("病人诊费:%d\n", p->Dfee);
fscanf(fp, "病人总费用:%d\n", p->Dfee + p1->fee);
printf("病人总费用为:%d\n", p->Dfee + p1->fee);
}
}
fclose(fp);
return;
}
void load1(struct doctor* head1) {//7.载入所有医生信息
FILE* fp1;
fp1 = fopen("d:\\Users\\16433\\Desktop\\诊所\\information2.txt", "r");
struct doctor* p;
for (p = head1; p != NULL; p = p->next2) {
fscanf(fp1, "医生名字:%s\n", p->name1);
printf("医生名字:%s\n", p->name1);
fscanf(fp1, "医生诊费:%d\n", p->Dfee);
printf("医生诊费:%d\n", p->Dfee);
fscanf(fp1, "医生专业:%s\n", p->dizhi1);
printf("医生专业:%s\n", p->dizhi1);
fscanf(fp1, "医生电话:%s\n", p->num1);
printf("医生电话:%s\n", p->num1);
}
fclose(fp1);
}
void save1(struct doctor* head1) {//8.保存病人信息
FILE* fp;
fp = fopen("d:\\Users\\16433\\Desktop\\诊所\\information1.txt", "w");
struct doctor* p;
struct patient* p1;
for (p = head1; p != NULL; p = p->next2) {
for (p1 = p->next1; p1 != NULL; p1 = p1->next1) {
fprintf(fp, "病人名字:%s\n", p1->name);
fprintf(fp, "病人性别:%s\n", p1->sex);
fprintf(fp, "病人电话:%s\n", p1->num);
fprintf(fp, "病人年龄:%d\n", p1->old);
fprintf(fp, "病人药费:%d\n", p1->fee);
fprintf(fp, "病人总费用为:%d\n", p->Dfee + p1->fee);
}
}
fclose(fp);
return;
}
void save2(struct doctor* head1) {//9.保存医生信息
FILE* fp1;
fp1 = fopen("d:\\Users\\16433\\Desktop\\诊所\\information2.txt", "w");
struct doctor* p;
for (p = head1; p != NULL; p = p->next2) {
fprintf(fp1, "医生名字:%s\n", p->name1);
fprintf(fp1, "医生专业:%s\n", p->dizhi1);
fprintf(fp1, "医生电话:%s\n", p->num1);
fprintf(fp1, "医生诊费:%d\n", p->Dfee);
}
fclose(fp1);
return;
}
void mainmenu() {//主菜单
printf("\n");
printf("********************************\n");
printf("1.医生信息录入\n");
printf("2.病人信息录入\n");
printf("3.编写就诊记录\n");
printf("4.按病人查询病人信息\n");
printf("5.查询医生信息\n");
printf("6.载入所有病人信息\n");
printf("7.载入所有医生信息\n");
printf("8.保存病人信息\n");
printf("9.保存医生信息\n");
printf("10.离开\n");
printf("*********************************\n");
}
int main() {
struct patient* head = NULL, * p1;
struct doctor* head1 = NULL, * p;
struct jilu* head2 = NULL;
while (1)
{
mainmenu();
int a;
printf("请输入选项:");
scanf("%d", &a);
switch (a)
{
case 1:
head1 = create1(head1);
break;
case 2:
create2(head1);
break;
case 3:
createjilu(head1);
break;
case 4:
searchpatient(head1);
break;
case 5:
searchroom(head1);
break;
case 6:
load(head1);
break;
case 7:
load1(head1);
break;
case 8:
save1(head1);
break;
case 9:
save2(head1);
break;
case 10:
printf("谢谢使用\n");
exit(0);
default:
printf("输入有误,重新输入\n");
break;
}
}
return 0;
}