版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、专业设计报告课程名称:C语言程序设计课题名称:医院信息管理系统专业班别:12本计算机科学与技术二班姓名:学号:指导教师:设计日期:2012-5-25教师评语:等级项目jfj优良中及格差专业设计目的设计基本要求算法分析源程序代码源程序代码测试设计总结成绩评定:指导教师签名:日期:2012年月课程设计题目医院信息管理程序作者姓名:同组成员:摘要利用结构体存储每个病人的信息和每种药品的信息,并使用链表存储全部病人的信息;能完成对医院内所有病人信息的注册、查询、删除和修改等操作,同时又能对药房内库存的药品进行查询;可以将链表中的病人信息保存在文件中,并且可以对文件中的病人信息进行读取与显示1.专业设计
2、目的1 、掌握链表的操作,包括链表节点的创建、释放还有链表的遍历2、掌握对二进制文件的创建、增添等基本操作。3、熟悉C语言函数的使用方法,学会模块化处理问题以及多个源文件的处理方式2 .设计基本要求(1、使用结构体来存储病人的信息,结构体中包括病的id号码、姓名、病历以及消费信息,并用链表将所有病人信息整合。2、用文件来存储链表的信息以便下次再使用该程序时载入病人信息3、能够实现病人信息的注册、病人信息的查询、病人消费统计、保存链表信息、载入链表信息、查询库存等几项功能。find.c 、save_load.c4、要求用四个源文件main.c、link.c5、系统完成后应实现类似下面所示界面G:
3、程序设计'医院信息管理系统D6bU八医院信息管理系蛛8I6回回臼最迎使用医院管理系统刍3息 信息 自1.的代 信人 人入息 人病 后 圾费有有有存 量历现库 册询病人出入存询出 自写病列载保查退 !3、算法分析1、数据结构设计链表中的一个节点存储一个病人的信息,使用下面的结构体类型定义:structpatientcharid10;charname10;charcasehist200;intcost3;inttransfusion;intsurgery;structpatient*next;;其中cost数组用来存储病人卖药的的个数(总共三种药),casehist存储病历内容,trans
4、fusion用来存储病人输液的花费,surgery存储手术的花费。Structpatient*next用来指向下一个病人结构体的起始地址从而形成一个链表。此外还要用到一个结构体来存储库存中当前的药品情况。structstorageintamount3;intprice3;2、函数定义程序代码有main.c、link.c、find.c、save_load.c四个源文件组成,使用头文件head.h把四个源文件连接起来,四个文件中所包含的函数说明如表所示。源文件函数原型功能说明voidtest()检测有无存储病人的二进制文件voidinit(struct*temp)storage初始化库存中的药品,
5、参数为指向storage类型的指针structvoidprintmenu()打印提示菜单Main.cVoidliststock(structstoragetemp)列出库存中的药品structpatient*enroll()注册新病人信息voidfreeall(struct*temp)patient清除链表内谷,参数为指向structpatient类型的指针Find.cvoidsearch(structpatient*temp)查询单个病人的信息,参数为指向patient典型的指针structvoidlistall(struct*temp)patient列出所有病人的信息,参数为指向patie
6、nt典型的指针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)/用于病人的消费处理,参数为指向structpatient 类型的指针与指向struct storage的指针Save_load.cvoid save(s
7、tructpatient*head)将链表信息保存到文件中,参娄struct patient类型的指针k为指向struct patient *load(struct patient *head)将文件信息写入到链表中,参娄struct patient类型的指针k为指向3、处理过程(1)检查存储病人信息的文件是否存在,若不存在则创建一个新文件并设置flag值为1,以标记现在可以对链表进行操作。(2)初始化库存令巴米尔、感冒灵、病毒陛3种药的数量分别为20、20、10,价格分别为5、9、16。(3)输出提示菜单让用户悬着要操作的项目.1)写病历前先检查是否有可用的链表(此标记为flag的值,若为1
8、则代表可以修改病历,否则要求用户重新做出选择)。确认有可用链表之后进入modify函数。要求用户输入病人的id号码,然后在链表中寻找该病所对应的节点,若无此病人的id则直接输出提示信息后返回:若找到后,先输出原来的病历内容,然后提示用户输入当前日期和新添加的病历内容,调用strcmp函数将新内容追加到原来的casehist字符串数组中。printf("原有病历:sn",temp->casehist);printf("输入当前日期年份)gets(a);printf("输入当前月份");gets(b);printf("输入当前日子&
9、quot;);gets(c);strcat(temp->casehist,a);strcat(temp->casehist,"/");strcat(temp->casehist,b);strcat(temp->casehist,"/");strcat(temp->casehist,c);strcat(temp->casehist,":");printf("请输入新病历的内容n");gets(d);strcat(temp->casehist,d);2)载入链表信息是首先定义一
10、个文件指针,然后以只读方式打开文件。若失败则输出提示信息返回,成功后调用malloc函数来申请一块内存,用read函数将文件内容写入到节点中,随后调用insert函数将节点加入链表,如此循环下去直到fread函数返回0值,即文件已经读到了末尾时,再将链表的头指针返回给主函数即可。Flag值置为1,用来代表已有可用链表。if(fp=fopen("data","r")=0)printf("文件不存在!");returnhead;while(1)rear=(structpatient*)malloc(sizeof(structpatient
11、);if(fread(rear,sizeof(structpatient),1,fp)head=insert(head,rear);elsefree(rear);flag=1;break;4、源程序代码/*head.h*/#ifndefFIRST#include<stdlib.h>#include<stdio.h>#include<string.h>/ 存储一个病人的信息/id 数组存储病人号码/name 数组存储病人姓名/casehist 存储病历内容/cost 数组存储病人买药的个数(总共三种)/transfusion 存储病人输液的花费/surgery
12、 存储手术的花费用来指向下一个病人结构体的起始地址从而形成一个链表/ 存储库存中当前的药品情况structpatientcharid10;charname10;charcasehist200;intcost3;inttransfusion;intsurgery;structpatient*next;/structpatient*next;structstorageintamount3;intprice3;intflag;voidsearch(structpatient*temp);/查询单个病人的信息,参数为指向structpatient类型的指针voidlistall(structpatie
13、nt*temp);/列出所有病人的信息,参数为指向structpatient类型的指针structpatient*insert(structpatient*head,structpatient*rear);/加入新节点,参数为指向structpatient类型的指针voidmodify(structpatient*temp);/修改病人病历,参数为指向structpatient类型的指针voidbuy(structpatient*temp,structstorage*s);/用于病人的消费处理,参数为指向structpatient类型的指针与指向structstorage的指针structpa
14、tient*load(structpatient*head);/将文件信息写入到链表中,参数为指向structpatient类型的指针voidsave(structpatient*head);/将链表信息保存到文件中,参数为指向structpatient类型的指针#defineFIRST#endif/*find.c*/#include"head.h"voidsearch(structpatient*temp)chart10;intsum;printf("请输入病人的idn");gets(t);while(temp&&strcmp(temp
15、->id,t)/ 定义 search 函数 , 查询单个病人的信息/ 定义字符数组/ 定义整型变量sum/ 输入字符串/比较字符串temp->id和t,其值和temp逻辑与运算,结果为非0时,执行循环体temp=temp->next;/temp 的值为非 0 时,执行下列步骤if(temp)printf("id:%sn",temp->id);printf("n printf("n printf("n姓名:%s",temp->name);病历:n%s",temp->casehist);if(
16、temp->cost0)printf(" 巴米尔if(temp->cost1)printf(" 感冒灵if(temp->cost2)printf(" 病毒唑%公 n",temp->cost0);%公 n",temp->cost1);%公 n",temp->cost2);消费记录:n");if(temp->transfusion)printf("输液费%dn",temp->transfusion);if(temp->surgery)printf(&quo
17、t;手术费%dn",temp->surgery);sum=temp->cost0*5+temp->cost1*9+temp->cost2*16+temp->transfusion+temp->surgery;/计算sum的值printf("总费用d元",sum);elseprintf("无该病人的信息!n");voidlistall(structpatient*temp)/定义listall函数,列出所有病人的信息printf("id姓名n");while(temp)printf(&quo
18、t;%s%sn",temp->id,temp->name);temp=temp->next;/*link.c*/#include"head.h"structpatient*insert(structpatient*head,structpatient*rear)/*!可以出现重复id*/structpatient*temp;if(head)temp=head;while(temp->next)temp=temp->next;temp->next=rear;rear->next=0;elsehead=rear;rear-&g
19、t;next=0;returnhead;voidmodify(structpatient*temp)chart10,d200;chara4,b2,c2;printf("请输入病人的idn");gets(t);while(temp&&strcmp(temp->id,t)/修改病人病历/定义字符组/定义字符组/输入病人的id/自动查找病人的idtemp=temp->next;if(temp)printf("原有病历:%sn",temp->casehist);printf("gets(a);输入当前日期年份"
20、;);/输入年份printf("输入当前月份");gets(b);printf("输入当前日子");/输入月份gets(c);/输入日期strcat(temp->casehist,a);/把字符串a接到temp->casehist后面strcat(temp->casehist,"/");/把字符“/”接到temp->casehist后面strcat(temp->casehist,b);/把字符串b接到temp->casehist后面strcat(temp->casehist,"/&q
21、uot;);/把字符“/”接到temp->casehist后面strcat(temp->casehist,c);/把字符串c接到temp->casehist后面strcat(temp->casehist,":");/把字符“:”接到temp->casehist后面printf("请输入新病历的内容n");gets(d);/输入新病历内容strcat(temp->casehist,d);/把字符串d接到temp->casehist后面strcat(temp->casehist,"n");/
22、把字符"n"接到temp->casehist后面elseprintf("无此病人信息!n");voidbuy(structpatient*temp,structstorage*s)chart10;inta,b,c,d,e;intflag1;printf("请输入病人的idn");gets(t);while(temp&&strcmp(temp->id,t)temp=temp->next;/病人消费处理/输入病人的id/自动查找病人的idif(temp)flag1=0;doprintf("请输入
23、买入巴米尔的个数:n");scanf("%d",&a);flag1=0;if(a>s->amount0)/若输入的值大于库存的值,则提示"库存不足"printf("库存不足!n");flag1=1;while(flag1);/flag1=1时,执行循环体flag1=0;doprintf("请输入买入感冒灵的个数:n");scanf("%d",&b);flag1=0;if(b>s->amount1)/若输入的值大于库存的值,则提示"库存不
24、足"printf("库存不足!n");flag1=1;while(flag1);/flag1=1时,执行循环体flag1=0;doprintf("请输入买入病毒唑的个数:n");scanf("%d",&c);flag1=0;if(c>s->amount2)printf("库存不足!flag1=1;/若输入的值大于库存的值,则提示n");"库存不足"while(flag1);/flag1=1时,执行循环体执行循环体temp->cost0temp->cost
25、0+=a;/temp->cost0和a的值相加后赋给temp->cost1temp->cost1+=b;/temp->cost1和b的值相加后赋给temp->cost2temp->cost2+=c;printf("请输入输液费n");scanf("%d",&d);/temp->cost2和c的值相加后赋给temp->transfusion+=d;temp->transfusionprintf("请输入手术费n");scanf("%d",&e);/
26、temp->transfusion和d的值相加后赋给temp->surgery+=e;/temp->surgery和e的值相加后赋给temp->surgerys->amount0-=a;/s->amount0减去a的值后赋给s->amount0s->amount1-=b;/s->amount1减去b的值后赋给s->amount1s->amount2-=c;/s->amount2减去c的值后赋给s->amount2printf("n购买成功!n");elseprintf("无此病人信息!n
27、");/*main.h*/#include"head.h"void test();void init(struct storage *temp);/ 初始化库存中的药品,参数为指向/检测有无存储病人的二进制文件struct storage 类型的指针void printmenu();void liststock(struct storage temp);struct patient *enroll();void freeall(struct patient *temp);patient 类型的指针void main()struct patient *head=0,
28、*rear;struct storage stock;char ch;printf(" 欢迎使用医院管理系统n");test();init(&stock);while(1) printmenu();fflush(stdin);ch=getchar();fflush(stdin);switch(ch)case '1':if(flag)rear=enroll();head=insert(head,rear);printf(" 注册成功 !n");/ 检查是否有可用的链表打印提示菜单列出库存中的药品注册新病人信息清除链表内容,参数为指向
29、 struct/ 调用 insert 函数将节点加入链表elseprintf("您没有载入信息不能注册!n");break;case'2':if(flag)search(head);elseprintf("您没有载入信息不能进行查询break;case'3':if(flag)modify(head);elseprintf("您没有载入信息不能修改病历break;case'4':if(flag)buy(head,&stock);elseprintf("您没有载入信息不能进行消费break;c
30、ase'5':if(flag)listall(head);elseprintf("您没有载入信息!n");break;case'6':freeall(head);head=0;head=load(head);break;case'7':if(flag)save(head);elseprintf("您没有载入信息!n");/检查是否有可用的链表/查询病人信息!n");/检查是否有可用的链表/修改病人病历!n");/检查是否有可用的链表/病人的消费!n");/检查是否有可用的链表/
31、列出所有病人信息/清除链表内容/文件信息写入到链表/检查是否有可用的链表/链表信息保存到病历中break;case'8':liststock(stock);break;case'9':printf("谢谢使用!n");exit(0);break;default:printf("输入有误!n");break;/库存中药品列表voidprintmenu()printf("n");printf("*n");/打印提示菜单printf("1.printf("2.print
32、f("3.printf("4.printf("5.printf("6.printf("7.printf("8.printf("9.注册新病人信息n");查询单个病人信息n");写病历n");病人消费n");列出所有病人的信息n");载入所有病人信息n");保存现有信息n");查询库存n");退出n");printf("*n");voidtest()/检测病人有无存储病人的二进制文件FILE*fp;if(fp=fope
33、n("data","r")=0)printf("这是您第一次使用该系统,在退出时不要忘了保存信息n");fp=fopen("data","w");/打开外部文件flag=1;fclose(fp);/文件执行后返回fpvoidinit(structstorage*temp)/初始化库存中的药品,参数为指向structstorage类型的指针temp->amount0=20;/初始化库存令巴米尔数量为20temp->amount1=20;temp->amount2=10;temp-
34、>price0=5;temp->price1=9;temp->price2=16;/ 列出库存中的药品/ 输出库存中各药品的数量、价格/初始化库存令感冒灵数量为20/初始化库存令病毒唑数量为10/初始化库存令巴米尔价格为5/初始化库存令感冒灵价格为9/初始化库存令感冒灵价格为16voidliststock(structstoragetemp)inti;printf("药品名数量单价n");for(i=0;i<3;i+)switch(i)case0:printf("巴米尔break;case 1:printf("感冒灵break;c
35、ase 2:printf("病毒唑%d%dn",temp.amounti,temp.pricei);/输出巴米尔的数量、单价%d%dn",temp.amounti,temp.pricei);/输出感冒灵的数量、单价%d%dn",temp.amounti,temp.pricei);/输出病毒唑的数量、单价break;structpatient*enroll()/注册新病人信息structpatient*rear;rear=(structpatient*)malloc(sizeof(structpatient);printf("请输入病人id:n&
36、quot;);scanf("%s",rear->id);/获得病人id号码printf("请输入病人姓名n");scanf("%s",rear->name);/获得病人姓名strcpy(rear->casehist,"");/将注册信息存储进病历rear->cost0=0;/初始化令购买巴米尔的花费为0rear->cost1=0;/初始化令购买感冒灵的花费为0rear->cost2=0;/初始化令购买病毒唑的花费为0rear->surgery=0;/初始化令手术的花费为0rear->transfusion=0;/初始化令病人输液的花费为0returnrear;/ 清 除 链 表 内 容 , 参 数 为 指 向 structvoidfreeall(structpatient*temp)patient类型的指针structpatient*t;while(temp)t=temp;temp=temp->next;fr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年物流运输合同范本
- 2025版高考数学一轮总复习专题检测11.4抽样方法与总体分布的估计
- 2024版二手房买卖合同范本与交易合同法律效力3篇
- 六盘水师范学院《SAP企业培训》2023-2024学年第一学期期末试卷
- 2024年度煤炭供应及运输服务合同2篇
- 2024年度加工承揽合同的加工物描述与质量要求3篇
- 2023二年级语文上册 第八单元 23 纸船和风筝教学实录 新人教版
- 6 花儿草儿真美丽2023-2024学年一年级下册道德与法治同步教学实录(统编版)
- 2024至2030年中国全羊毛汽车座垫行业投资前景及策略咨询研究报告
- 2024年样本版:zfcxjs.tj.gov.cnsylmRSS服务提供协议2篇
- 语文修改语病-三年(2022-2024)高考病句试题真题分析及 备考建议(课件)
- 中国抗癌协会胰腺癌患者科普指南2024(完整版)
- 齐鲁名家谈方论药 知到智慧树网课答案
- 2023人工智能基础知识考试题库(含答案)
- 小学语文跨学科学习任务群的设计
- 《敬廉崇洁》的主题班会
- 国家开放大学电大《计算机应用基础(本)》终结性考试试题答案(格式已排好)任务一
- 增值税预缴税款表电子版
- 职业生涯规划档案建立过程
- 学生学习评价量表模板
- 小型步进电机控制系统设计
评论
0/150
提交评论