诊所信息管理系统设计 -C语言案例课程设计大作业

课程设计成果

学院: 计算机工程学院 班 级: 信息安全

学生姓名: 学 号:

设计地点(单位)

设计题目: 诊所信息管理系统设计

完成日期年 月 日

指导教师评语:

成绩(五级记分制):

教师签名:

 

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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值