




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实用标准专业设计报告课程名称:C 语言程序设计课题名称:医院信息管理系统专业班别:11 本计算机科学与技术二班姓 名:学 号:指导教师:设计日期:2012-5-25文案大全教师评语:等级项目jfj优良中及格差专业设计目的设计基本要求算法分析源程序代码源程序代码测试设计总结成绩评定:指导教师签名:日期:2012 年 月 日课程设计题目医院信息管理程序作者姓名:同组成员:摘要 利用结构体存储每个病人的信息和每种药品的信息,并使用链表存储全部病人的信息;能完成 对医院内所有病人信息的注册、查询、删除和修改等操作,同时又能对药房内库存的药品进行查询;可以 将链表中的病人信息保存在文件中,并且可以对文件
2、中的病人信息进行读取与显示1.专业设计目的1 、掌握链表的操作,包括链表节点的创建、释放还有链表的遍历2、掌握对二进制文件的创建、增添等基本操作。3、熟悉C语言函数的使用方法,学会模块化处理问题以及多个源文件的处理方式2.设计基本要求(1、使用结构体来存储病人的信息,结构体中包括病的id号码、姓名、病历以及消费信息,并用链表将所有病人信息整合。2、用文件来存储链表的信息以便下次再使用该程序时载入病人信息3、能够实现病人信息的注册、病人信息的查询、病人消费统计、保存链表信息、载入链表信息、 查询库存等几项功能。4、要求用四个源文件 main.c、link.c 、find.c 、save_load
3、.c5、系统完成后应实现类似下面所示界面3、算法分析1、数据结构设计链表中的一个节点存储一个病人的信息,使用下面的结构体类型定义:struct patientchar id10;char name10;char casehist200;int cost3;int transfusion;int surgery;struct patient *next;;其中cost数组用来存储病人卖药的的个数(总共三种药),casehist存储病历内容,transfusion 用来存储病人输液的花费,surgery存储手术的花费。Struct patient *next用来指向下一个病人结构体的起始地址从而形
4、成一个链表。此外还要用到一个结构体来存储库存中当前的药品情况。struct storageint amount3;int price3;2、函数定义程序代码有 main.c、link.c 、find.c、save_load.c四个源文件组成,使用头文件head.h把四个源文件连接起来,四个文件中所包含的函数说明如表所示。源文件函数原型功能说明void test()检测有无存储病人的二进制文件void init(struct*temp)storage初始化库存中的药品,参数为指向storage类型的指针structvoid printmenu()打印提示菜单Main.cVoidliststock
5、(structstorage temp)列出库存中的药品struct patient *enroll()注册新病人信息void freeall(struct*temp)patient清除链表内谷,参数为指向struct patient类型的指针Find.cvoid search(struct patient*temp)查询单个病人的信息,参数为指向patient 类型的指针structvoid listall(struct*temp)patient列出所有病人的信息,参数为指向patient 类型的指针structLink.cstruct patient*insert(struct patie
6、nt*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(structpatient*head)将链表信息保存到文件中,参struct patient类型的指针数为指
7、向struct patient *load(struct patient *head)将文件信息写入到链表中,参struct patient类型的指针数为指向3、处理过程(1)检查存储病人信息的文件是否存在,若不存在则创建一个新文件并设置flag值为1,以标记现在可以对链表进行操作。(2)初始化库存令巴米尔、感冒灵、病毒陛 3种药的数量分别为20、20、10,价格分别为5、9、16。(3)输出提示菜单让用户悬着要操作的项目.1)写病历前先检查是否有可用的链表(此标记为 flag的值,若为1则代表可以修改病历,否则要 求用户重新做出选择)。确认有可用链表之后进入modify函数。要求用户输入病人
8、的id号码,然后在链表中寻找该病所对应的节点,若无此病人的id则直接输出提示信息后返回:若找到后,先输出原来的病历内容,然后提示用户输入当前日期和新添加的病历内容,调用 strcmp函数将新内容追加到原来的casehist字符串数组中。printf(原有病历: sn,temp-casehist);printf( 输入当前日期年份) gets(a);printf( 输入当前月份);gets(b);printf( 输入当前日子);gets(c);strcat(temp-casehist,a);strcat(temp-casehist,/);strcat(temp-casehist,b);strca
9、t(temp-casehist,/);strcat(temp-casehist,c);strcat(temp-casehist,:);printf(请输入新病历的内容n);gets(d);strcat(temp-casehist,d);2 )载入链表信息是首先定义一个文件指针,然后以只读方式打开文件。若失败则输出提示信息返回,成功后调用 malloc函数来申请一块内存,用 read函数将文件内容写入到节点中,随后调用 insert 函数将节点加入链表,如此循环下去直到fread函数返回0值,即文件已经读到了末尾时,再将链表的头指针返回给主函数即可。Flag值置为1,用来代表已有可用链表。if(
10、fp=fopen(data,r)=0)printf(文件不存在!);return head;while(1)rear=(struct patient *)malloc(sizeof(struct patient);if(fread(rear,sizeof(struct patient),1,fp) head=insert(head,rear);else free(rear); flag=1; break; 4、源程序代码/*head.h*/#ifndef FIRST#include#include#includestruct patientchar id10;char name10;char
11、casehist200;int cost3;int transfusion;int surgery;struct patient *next;/struct patient *next;struct storageint amount3;int price3;int flag;void search(struct patient *temp);/存储一个病人的信息/id数组存储病人号码/name数组存储病人姓名/casehist存储病历内容/cost数组存储病人买药的个数(总共三种)/transfusion存储病人输液的花费/surgery存储手术的花费用来指向下一个病人结构体的起始地址从而形
12、成一个链表/存储库存中当前的药品情况/查询单个病人的信息,参数为指向struct patient 类型的指针void listall(struct patient *temp);/ 列出所有病人的信息,参数为指向struct patient 类型的指针struct patient *insert(struct patient *head,struct patient *rear); /加入新节点,参数为指向 struct patient 类型的指针void modify(struct patient *temp);修改病人病历,参数为指向struct patient类型的指void buy(s
13、truct 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#endif/*find.c*/#include head.hvoid search(s
14、truct patient *temp)char t10;int sum;printf(请输入病人的idn);gets(t);/定义search函数,查询单个病人的信息/定义字符数组/定义整型变量sum/输入字符串while(temp&strcmp(temp-id,t)比较字符串temp-id和t,其值和temp逻辑与运算,结果为非 0时,执行循环体temp=temp-next;if(temp)printf(id: %sn,temp-id);printf(n姓名:s,temp-name);printf(n病历:n%s,temp-casehist);/temp的值为非0时,执行下列步骤print
15、f(n 消费记录 if(temp-cost0)printf( 巴米尔 if(temp-cost1)printf( 感冒灵 if(temp-cost2)printf(病毒口坐 if(temp-transfusion)printf( 输液费:n);%d4V n,temp-cost0);%d4V n,temp-cost1);%d4V n,temp-cost2);%dn,temp-transfusion)if(temp-surgery) printf(手术费 dn,temp-surgery);sum=temp-cost0*5+temp-cost1*9+temp-cost2*16+temp-transf
16、usion+temp-surgery;/计算sum的值 printf(总费用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*/#include head.hstruct patient *insert(struct patient *head,struct patient *rear)/*!
17、可以出现重复id*/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;void modify(struct patient *temp)/ 修改病人病历char t10,d200;/定义字符组char a4,b2,c2;/定义字符组printf(请输入病人的idn);gets(t);/输入病人的idwhile(temp&strcmp(temp-id,t)/自动查找病人
18、的 idtemp=temp-next;if(temp)printf(原有病历:sn,temp-casehist);printf(输入当前日期年份)gets(a);/输入年份printf(输入当前月份);gets(b);/输入月份printf(输入当前日子);gets(c);/输入日期strcat(temp-casehist,a);/ 把字符串 a 接至U temp-casehist 后面strcat(temp-casehist,/);/ 把字符/接至U temp-casehist 后面strcat(temp-casehist,b);/ 把字符串 b 接至U temp-casehist 后面st
19、rcat(temp-casehist,/);/ 把字符/接至U temp-casehist 后面strcat(temp-casehist,c);/ 把字符串 c 接至U temp-casehist 后面strcat(temp-casehist,:);/ 把字符:接至U temp-casehist 后面printf(请输入新病历的内容n);gets(d);/输入新病历内容strcat(temp-casehist,d);/ 把字符串 d 接至U temp-casehist 后面strcat(temp-casehist,n);/ 把字符n接至U temp-casehist 后面elseprintf(
20、无此病人信息!n);/病人消费处理/输入病人的id/自动查找病人的idvoid buy(struct patient *temp,struct storage *s) char t10;int a,b,c,d,e;int flag1;printf(请输入病人的idn);gets(t);while(temp&strcmp(temp-id,t) temp=temp-next; if(temp)flag1=0;doprintf(请输入买入巴米尔的个数:n);scanf(%d,&a);flag1=0;if(as-amount0)printf(库存不足!n);flag1=1;/若输入的值大于库存的值,则
21、提示库存不足while(flag1);flag1=0;doprintf(请输入买入感冒灵的个数:n);scanf(%d,&b);/flag1=1 时,执行循环体flag1=0;if(bs-amount1)printf(库存不足! n);flag1=1;/若输入的值大于库存的值,则提示库存不足while(flag1);/flag1=1 时,执行循环体flag1=0;doprintf(请输入买入病毒口坐的个数:n);scanf(%d,&c);flag1=0;if(cs-amount2) printf(库存不足!flag1=1; while(flag1); temp-cost0+=a;temp-co
22、st0temp-cost1+=b;temp-cost1temp-cost2+=c;temp-cost2 printf(请输入输液费n);scanf(%d,&d);temp-transfusion+=d;temp-transfusion printf(请输入手术费n);scanf(%d,&e); temp-surgery+=e; s-amount0-=a; s-amount1-=b; s-amount2-=c; printf(n购买成功! n);/若输入的值大于库存的值,则提示库存不足”n);/flag1=1 时,执行循环体/temp-cost0和a的值相加后赋给/temp-cost1和b的值相
23、加后赋给/temp-cost2和c的值相加后赋给/temp-transfusion和 d 的值相加后赋给temp-surgery和 e 的值相加后赋给 temp-surgery/s-amount0减去a 的值后赋给s-amount0/s-amount1减去b 的值后赋给s-amount1/s-amount2减去c 的值后赋给s-amount2elseprintf(无此病人信息!n);/*main.h*/#include head.hstruct storage 类型的指针/打印提示菜单/列出库存中的药品/注册新病人信息清除链表内容,参数为指向 struct/检查是否有可用的链表调用insert
24、函数将节点加入链表void test();/检测有无存储病人的二进制文件void init(struct storage *temp);/初始化库存中的药品,参数为指向void printmenu();void liststock(struct storage temp);struct patient *enroll();void freeall(struct patient *temp);patient 类型的指针void main()struct patient *head=0,*rear;struct storage stock;char ch;printf(欢迎使用医院管理系统n);t
25、est();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);else printf(您没有载入信息不能注册!n); break;case 2:if(flag)search(head);/检查是否有可用的链表/查询病人信息else printf(您没有载入信息不能进行查询break;case 3:if(flag)modify(head);els
26、e printf(您没有载入信息不能修改病历break;case 4:if(flag)buy(head,&stock);else printf(您没有载入信息不能进行消费break;case 5: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;!n);/检查是否有可用的链表修
27、改病人病历!n);/检查是否有可用的链表/病人的消费!n);/检查是否有可用的链表/列出所有病人信息/清除链表内容/文件信息写入到链表/检查是否有可用的链表/链表信息保存到病历中/库存中药品列表case 9:printf(谢谢使用!n);exit(0);break;default:printf(输入有误!n);break;打印提示菜单void printmenu()printf(n);printf(*n);printf(1.注册新病人信息n);printf(2.查询单个病人信息n);printf(3.写病历n);printf(4.病人消费n);printf(5.列出所有病人的信息n);prin
28、tf(6.载入所有病人信息n);printf(7.保存现有信息n);printf(8.查询库存n);printf(9.退出n);printf(*n);void test()/检测病人有无存储病人的二进制文件FILE *fp;if(fp=fopen(data,r)=0)printf(这是您第一次使用该系统,在退出时不要忘了保存信息n);fp=fopen(data,w);/ 打开外部文件flag=1;fclose(fp);/文件执行后返回fpvoid init(struct storage *temp) struct storage 类型的指针temp-amount0=20;temp-amount
29、1=20;temp-amount2=10;temp-price0=5;temp-price1=9;初始化库存中的药品,参数为指向/初始化库存令巴米尔数量为20/初始化库存令感冒灵数量为20/初始化库存令病毒陛数量为10/初始化库存令巴米尔价格为5/初始化库存令感冒灵价格为9temp-price2=16; /初始化库存令感冒灵价格为16void liststock(struct storage temp)/列出库存中的药品int i;printf( 药品名 数量 单价n); for(i=0;iid);printf(请输入病人姓名n);scanf(%s,rear-name);strcpy(rear
30、-casehist,);rear-cost0=0;rear-cost1=0;rear-cost2=0;rear-surgery=0;rear-transfusion=0;return rear;/注册新病人信息/获得病人id号码/获得病人姓名/将注册信息存储进病历/初始化令购买巴米尔的花费为0/初始化令购买感冒灵的花费为0/初始化令购买病毒陛的花费为0/初始化令手术的花费为0/初始化令病人输液的花费为0/清除链表内容,参数为指向structvoid freeall(struct patient *temp) patient 类型的指针struct patient *t;while(temp) t=temp;temp=temp-next;free(t);/*save_load.c*/da
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 46277-2025经营主体信用承诺实施指南
- 2025内蒙古赤峰市元宝山区事业单位通过“绿色通道”引进高层次人才10人模拟试卷及答案详解1套
- 业务活动文档管理与存档方案
- 2025年宁波前湾新区卫生系统公开招聘事业单位工作人员18人考前自测高频考点模拟试题及答案详解(历年真题)
- 2025年变频装置项目提案报告模范
- 2025广东广州市越秀区农林街道办事处招聘辅助人员1人模拟试卷完整答案详解
- 培训需求分析与课程设置工具
- 员工绩效考核方案人力资源管理工具
- 2025北京大兴区兴丰街道招聘临时辅助用工人员4人考前自测高频考点模拟试题附答案详解
- 金融服务行业守秘承诺书5篇
- 学习弘扬枫桥精神与枫桥经验PPT枫桥经验蕴含的精神和内涵PPT课件(带内容)
- 内科学-中毒总论
- 测量员岗前培训试题
- GB/T 7562-2018商品煤质量发电煤粉锅炉用煤
- T∕IAC CAMRA 20.3-2022 事故汽车维修工时测定及应用规范 第3部分:拆装工时
- DB31T 680.8-2019 城市公共用水定额及其计算方法 第8部分:公共管理和社会组织(机关单位)
- 智能制造 增材制造技术课件
- 中国古代数学中的数学文化课件
- 锚的作用与锚泊解析课件
- FHLG20型高频高压发生器说明书
- 国家自然科学基金资助项目结题报告模板(可编辑版)
评论
0/150
提交评论