下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、声育#育育卞台*才育知识就是力量曲雷 曹育者 常青青 *西上专业设计报告课程名称:C语言程序设计课题名称:医院信息管理系统专业班别:12本计算机科学与技术二班姓 名:学 号:指导教师:设计日期:2012-5-25教师评语:等级项目jfj优良中及格差专业设计目的设计基本要求算法分析源程序代码源程序代码测试设计总结成绩评定:指导教师签名:日期:2012 年 月课程设计题目医院信息管理程序作者姓名:同组成员:摘要 利用结构体存储每个病人的信息和每种药品的信息,并使用链表存储全部病人的信息;能完成 对医院内所有病人信息的注册、查询、删除和修改等操作,同时又能对药房内库存的药品进行查询;可以 将链表中的
2、病人信息保存在文件中,并且可以对文件中的病人信息进行读取与显示1.专业设计目的1、掌握链表的操作,包括链表节点的创建、释放还有链表的遍历2、掌握对二进制文件的创建、增添等基本操作。3、熟悉C语言函数的使用方法,学会模块化处理问题以及多个源文件的处理方式2.设计基本要求(1、使用结构体来存储病人的信息,结构体中包括病的id号码、姓名、病历以及消费信息,并用链表将所有病人信息整合。2、用文件来存储链表的信息以便下次再使用该程序时载入病人信息3、能够实现病人信息的注册、病人信息的查询、病人消费统计、保存链表信息、载入链表信息、 查询库存等几项功能。4、要求用四个源文件main.c、link.c、fi
3、nd.c、save_load.c 5、系统完成后应实现类似下面所示界面G: 程序设计'医院信息管理系统D6bU八医院信息管理系疑.8I6回日臼夕迎使用医院管理系统刍3息 信息 自1.的代 信人 人入息 人病 后 圾费有有有存 量历现库 册询病人出入存询出 自写病列载保查退 !3、算法分析1、数据结构设计链表中的一个节点存储一个病人的信息,使用下面的结构体类型定义:struct patientchar id10;char name10;char casehist200;int cost3;int transfusion;int surgery;struct patient *next;;
4、其中cost数组用来存储病人卖药的的个数(总共三种药),casehist存储病历内容,transfusion用来存储病人输液的花费,surgery存储手术的花费。Struct patient *next用来指向下一个病人结构体的起始地址 从而形成一个链表。此外还要用到一个结构体来存储库存中当前的药品情况。struct storageint amount3;int price3;2、函数定义程序代码有 main.c、link.c、find.c、save_load.c四个源文件组成,使用头文件 head.h把四个源文件连 接起来,四个文件中所包含的函数说明如表所示。源文件函数原型功能说明void
5、test()检测有无存储病人的二进制文件void init(struct storage *temp)初始化库存中的药品,storage类型的指针参数为指向structvoid printmenu()打印提示菜单Main.cVoid liststock(struct storage temp)列出库存中的药品struct patient *enroll()注册新病人信息void freeall(struct patient*temp)清除链表内谷,参数为指向struct patient类型的指针Find.cvoid search(struct patient*temp)查询单个病人的信息,pa
6、tient类型的指针参数为指向structvoid listall(struct patient*temp)列出所有病人的信息,patient类型的指针参数为指向structLink.cstruct patient *insert(struct patient *head,struct patient *rea加入新ij点,参数为指向 struct patient类型 的指针void modify(struct patient*temp)修改病人病历,参数为指向struct patient类型的指针void buy(struct patient*temp,struct storage *s)/
7、用于病人的消费处理,参数为指向 struct patient类型的指针与指向struct storage 的指针Save_load.cvoidsave(structpatient*head)将链表/息保存到文件中,参数为指向structpatient类型的指针struct patient *load(struct patient *head)将文件信息写入到链表中,参数为指向structpatient类型的指针3、处理过程(1)检查存储病人信息的文件是否存在,若不存在则创建一个新文件并设置flag值为1,以标记现在可以对链表进行操作。(2)初始化库存令巴米尔、感冒灵、病毒陛3种药的数量分别为2
8、0、20、10,价格分别为5、9、16。(3)输出提示菜单让用户悬着要操作的项目.1)写病历前先检查是否有可用的链表(此标记为flag的值,若为1则代表可以修改病历,否则要求用户重新做出选择)。确认有可用链表之后进入modify函数。要求用户输入病人的id号码,然后在链表中寻找该病所对应的节点,若无此病人的id则直接输出提示信息后返回:若找到后,先输出原来的病历内容, 然后提示用户输入当前日期和新添加的病历内容,调用strcmp函数将新内容追加到原来的casehist字符串数组中。printf("原有病历:%sn",temp->casehist);printf(&qu
9、ot;输入当前日期年份) gets(a);printf("输入当前月份");gets(b);printf("输入当前日子");gets(c);strcat(temp->casehist,a);strcat(temp->casehist,"/");strcat(temp->casehist,b);strcat(temp->casehist,"/");strcat(temp->casehist,c);strcat(temp->casehist,":");print
10、f("请输入新病历的内容 n");gets(d);strcat(temp->casehist,d);2)载入链表信息是首先定义一个文件指针,然后以只读方式打开文件。若失败则输出提示信息返回,成功后调用malloc函数来申请一块内存,用 read函数将文件内容写入到节点中,随后调用insert函数将节点加入链表,如此循环下去直到fread函数返回0值,即文件已经读到了末尾时,再将链表的头指针返回给主函数即可。Flag值置为1,用来代表已有可用链表。if(fp=fopen("data","r")=0) printf("文件
11、不存在!"); return head; while(1) rear=(struct patient *)malloc(sizeof(struct patient); if(fread(rear,sizeof(struct patient),1,fp) head=insert(head,rear);elsefree(rear);flag=1; break; 4、源程序代码/*head.h*/#ifndef FIRST#include<stdlib.h>#include<stdio.h>存储一个病人的信息/id数组存储病人号码/name数组存储病人姓名/case
12、hist存储病历内容/cost数组存储病人买药的个数(总共三种)/transfusion存储病人输液的花费/surgery存储手术的花费用来指向下一个病人结构体的起始地址从而形成一个链表#include<string.h>struct patientchar id10;char name10;char casehist200;int cost3;int transfusion;int surgery;struct patient *next;/struct patient *next;struct storageint amount3;int price3;int flag;voi
13、d search(struct patient *temp);针存储库存中当前的药品情况查询单个病人的信息,参数为指向struct patient 类型的指void listall(struct patient *temp);列出所有病人的信息,参数为指向struct patient类型的指声育#育育卞台*才育知识就是力量育曲舌禽R直离离离直言struct patient *insert(struct patient *head,struct patient *rear);加入新节点,参数为指向struct patient类型的指针void modify(struct patient *tem
14、p);修改病人病历,参数为指向struct patient 类型的指针void buy(struct patient *temp,struct storage *s);用于病人的消费处理,参数为指向struct patient类型的指针与指向struct storage的指针struct patient *load(struct patient *head);将文件信息写入到链表中,参数为指向struct patient类型的指针void save(struct patient *head);将链表信息保存到文件中,参数为指向struct patient类型的指针#define FIRST#e
15、ndif/*find.c*/#include "head.h"void search(struct patient *temp)char t10;int sum;printf("请输入病人的id'n");gets(t);while(temp&&strcmp(temp->id,t) 比较字符串temp->id和t,temp=temp->next;if(temp)printf("id: %sn",temp->id);定义search函数,查询单个病人的信息定义字符数组定义整型变量sum/输入
16、字符串其值和temp逻辑与运算,结果为非 0时,执行循环体/temp的值为非0时,执行下列步骤printf("n printf("n printf("n姓名:s",temp->name);病历:n%s",temp->casehist);消费记录:n");if(temp->cost0)printf("巴米尔if(temp->cost1)printf("感冒灵if(temp->cost2)printf("病毒|坐if(temp->transfusion)printf(&qu
17、ot;输液费if(temp->surgery)printf("手术费%d%d%d个 n",temp->cost0);个 n",temp->cost1);个 n",temp->cost2);%dn",temp->transfusion);%dn",temp->surgery);sum=temp->cost0*5+temp->cost1*9+temp->cost2*16+temp->transfusion+temp->surgery;计算sum的值 printf("
18、;总费用 d 元",sum);else printf("无该病人的信息! n");void listall(struct patient *temp)定义 listall 函数,列出所有病人的信息printf("id 姓名 n");while(temp)printf("%s %sn",temp->id,temp->name);temp=temp->next;/*link.c*/*!可以出现重复id*/#include "head.h"struct patient *insert(stru
19、ct patient *head,struct patient *rear)struct patient *temp;if(head)temp=head;while(temp->next)temp=temp->next;temp->next=rear;rear->next=0;elsehead=rear;rear->next=0;return head;修改病人病历定义字符组定义字符组输入病人的idvoid modify(struct patient *temp)char t10,d200;char a4,b2,c2;printf("请输入病人的id
20、39;n"); gets(t);自动查找病人的idwhile(temp&&strcmp(temp->id,t) temp=temp->next;if(temp)printf("原有病历:%sn",temp->casehist);printf("输入当前日期年份)gets(a);输入年份printf("输入当前月份");gets(b);输入月份printf("输入当前日子");gets(c);输入日期strcat(temp->casehist,a);strcat(temp-&g
21、t;casehist,"/");把字符串a接到temp->casehist后面把字符"/"接到temp->casehist后面strcat(temp->casehist,b);把字符串b接到temp->casehist后面strcat(temp->casehist,"/");把字符"/"接到temp->casehist后面strcat(temp->casehist,c);把字符串c接到temp->casehist后面strcat(temp->casehist,&
22、quot;:");把字符":"接到temp->casehist后面printf("请输入新病历的内容n");gets(d);输入新病历内容strcat(temp->casehist,d);把字符串d接到temp->casehist后面strcat(temp->casehist,"n");把字符"n"接到temp->casehist后面elseprintf("无此病人信息!n");void buy(struct patient *temp,struct st
23、orage *s)char t10;int a,b,c,d,e;int flag1;printf("请输入病人的id'n");gets(t);while(temp&&strcmp(temp->id,t) temp=temp->next;if(temp)flag1=0;doprintf("请输入买入巴米尔的个数:病人消费处理输入病人的id自动查找病人的idn");scanf("%d",&a);若输入的值大于库存的值,则提示"库存不足"flag1=0;if(a>s-&g
24、t;amount0)printf("库存不足!n");声育#育育卞台*才育女口 04郑尢二E"禽曲意育曲直大离离直离flag1=1;while(flag1);flag1=0;doprintf("请输入买入感冒灵的个数:scanf("%d",&b);flag1=0;if(b>s->amount1)printf("库存不足! n");flag1=1;while(flag1);flag1=0;doprintf("请输入买入病毒口坐的个数:scanf("%d",&c
25、);flag1=0;if(c>s->amount2)printf("库存不足! n");flag1=1;while(flag1);temp->cost0+=a;temp->cost0temp->cost1+=b;temp->cost1temp->cost2+=c;temp->cost2/flag1=1时,执行循环体n");若输入的值大于库存的值,则提示/flag1=1时,执行循环体n");若输入的值大于库存的值,则提示/flag1=1时,执行循环体/temp->cost0/temp->cost1
26、/temp->cost2"库存不足""库存不足"printf("请输入输液费 scanf("%d",&d);temp->transfusion+=d; printf("请输入手术费 scanf("%d",&e);n");n");/temp->transfusion 和d的值相加后赋给temp->transfusiontemp->surgery+=e;s->amount0-=a;temp->surgery 和 e 的值相
27、加后赋给 temp->surgery /s->amount0减去 a 的值后赋给 s->amount0s->amount1-=b;/s->amount1减去 b 的值后赋给 s->amount1s->amount2-=c;/s->amount2减去 c 的值后赋给 s->amount2n");printf("n 购买成功! elseprintf("无此病人信息!n");#include "head.h"void test();void init(struct storage *te
28、mp);初始化库存中的药品,参数为指向检测有无存储病人的二进制文件struct storage类型的指针打印提示菜单列出库存中的药品注册新病人信息清除链表内容,参数为指向struct patient/*main.h*/void printmenu();void liststock(struct storage temp);struct patient *enroll();void freeall(struct patient *temp);类型的指针void main()struct patient *head=0,*rear;struct storage stock;char ch;prin
29、tf("欢迎使用医院管理系统n");test();init(&stock);while(1) printmenu();fflush(stdin);ch=getchar();fflush(stdin);switch(ch)case '1':/检查是否有可用的链表调用insert函数将节点加入链表!n");/检查是否有可用的链表查询病人信息if(flag)rear=enroll();head=insert(head,rear); printf("注册成功!n");else printf("您没有载入信息不能注册 b
30、reak;case '2':if(flag)search(head);else printf("您没有载入信息不能进行查询!n");break;case '3':*#*#*女口 0工郑尢二E"禽曲意育曲直大离离直离if(flag)modify(head);else printf("您没有载入信息不能修改病历break;case '4':if(flag)buy(head,&stock);else printf("您没有载入信息不能进行消费break;case '5':/检查是
31、否有可用的链表修改病人病历!n");/检查是否有可用的链表病人的消费!n");if(flag)listall(head);else printf("您没有载入信息!n");break;case '6':freeall(head);head=0;head=load(head);break;case '7':if(flag)save(head);else printf("您没有载入信息!n");break;case '8':liststock(stock);break;case '9
32、':printf("谢谢使用!n");exit(0);break;/检查是否有可用的链表列出所有病人信息清除链表内容文件信息写入到链表/检查是否有可用的链表链表信息保存到病历中库存中药品列表default:声育#育育卞台*才育知识就是力量曲雷 曹育者 常青青 *西上printf("输入有误!n"); break;打印提示菜单void printmenu()printf("n");printf(,*n,);printf("1.printf("2.printf("3.printf("4.pr
33、intf("5.printf("6.printf("7.printf("8.printf("9.注册新病人信息n");查询单个病人信息n");写病历n");病人消费n");列出所有病人的信息n");载入所有病人信息n");保存现有信息n");查询库存n");退出n");printf(,*n,);void test()/检测病人有无存储病人的二进制文件FILE *fp;if(fp=fopen("data","r")=0
34、)printf("这是您第一次使用该系统,在退出时不要忘了保存信息n");fp=fopen("data","w");打开外部文件flag=1;fclose(fp);文件执行后返回fp初始化库存中的药品,参数为指向 struct storagevoid init(struct storage *temp)类型的指针temp->amount0=20; temp->amount1=20; temp->amount2=10; temp->price0=5;temp->price1=9; temp->pric
35、e2=16;初始化库存令巴米尔数量为 20初始化库存令感冒灵数量为 20初始化库存令病毒陛数量为 10初始化库存令巴米尔价格为5初始化库存令感冒灵价格为9初始化库存令感冒灵价格为 16列出库存中的药品void liststock(struct storage temp) int i;printf("药品名 数量 单价n"); for(i=0;i<3;i+)switch(i) case 0:printf("巴米尔 dbreak;case 1: printf("感冒灵 %dbreak;case 2: printf("病毒陛 %dbreak;输
36、出库存中各药品的数量、价格%dn",temp.amounti,temp.pricei);/输出巴米尔的数量、单价%dn",temp.amounti,temp.pricei);/输出感冒灵的数量、单价%dn",temp.amounti,temp.pricei);/输出病毒嚏的数量、单价struct patient *enroll()注册新病人信息struct patient *rear;rear=(struct patient *)malloc(sizeof(struct patient);printf("请输入病人 id:n");scanf(&
37、quot;%s",rear->id);printf("请输入病人姓名n"); scanf("%s",rear->name);strcpy(rear->casehist,"");rear->cost0=0;rear->cost1=0;rear->cost2=0;rear->surgery=0;rear->transfusion=0;/获得病人id号码获得病人姓名将注册信息存储进病历初始化令购买巴米尔的花费为0初始化令购买感冒灵的花费为0初始化令购买病毒陛的花费为0初始化令手术的花费为0初始化令病人输液的花费为0return rear;清除链表内容,参数为指向structpatient 类void freeall(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 贵州航天职业技术学院《数据挖掘与R语》2023-2024学年第一学期期末试卷
- 专题06:写作指导(考题练习)(解析版)
- 2025年护士个人工作计划范文
- 2025年年度健康教育工作计划
- 2025护士个人年度工作计划例文
- 2025年大学生学习计划
- Unit 8 Talent show Lesson 1 I'm from china(说课稿)-2023-2024学年北师大版(三起)英语四年级下册
- 2025年变电站工作计划
- 2025年电力工作计划
- 2025年度室内设计师工作计划书
- 对外投资合作国别(地区)指南 -泰国
- 2023年-2024年岗位安全教育培训试题及答案通用
- 口腔修复学(全套课件290p)课件
- 小学生心理问题的表现及应对措施【全国一等奖】
- 小学生科普人工智能
- 初中学段劳动任务清单(七到九年级)
- 退耕还林监理规划
- GB/T 1335.2-2008服装号型女子
- GB 31247-2014电缆及光缆燃烧性能分级
- DCC20网络型监视与报警
- 项目实施路径课件
评论
0/150
提交评论