ImageVerifierCode 换一换
格式:DOCX , 页数:21 ,大小:74.51KB ,
资源ID:11663462      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11663462.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(C语言程序设计医院信息管理系统附源代码.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

C语言程序设计医院信息管理系统附源代码.docx

1、C语言程序设计医院信息管理系统附源代码专业设计报告课程名称: C 语 言 程 序 设 计 课题名称: 医院信息管理系统 专业班别: 12本计算机科学与技术二班 姓 名: 学 号: 指导教师: 设计日期: 2012-5-25 教师评语:等级项目优良中及格差专业设计目的设计基本要求算法分析源程序代码源程序代码测试设计总结 成绩评定: 指导教师签名: 日期: 2012 年 月 日课程设计题目 医院信息管理程序作者姓名:同组成员:摘要 利用结构体存储每个病人的信息和每种药品的信息,并使用链表存储全部病人的信息;能完成对医院内所有病人信息的注册、查询、删除和修改等操作,同时又能对药房内库存的药品进行查询

2、;可以将链表中的病人信息保存在文件中,并且可以对文件中的病人信息进行读取与显示1专业设计目的 1、掌握链表的操作,包括链表节点的创建、释放还有链表的遍历 2、掌握对二进制文件的创建、增添等基本操作。 3、熟悉C语言函数的使用方法,学会模块化处理问题以及多个源文件的处理方式2设计基本要求( 1、使用结构体来存储病人的信息,结构体中包括病的id号码、姓名、病历以及消费信息,并用链表将所有病人信息整合。 2、用文件来存储链表的信息以便下次再使用该程序时载入病人信息 3、能够实现病人信息的注册、病人信息的查询、病人消费统计、保存链表信息、载入链表信息、查询库存等几项功能。 4、要求用四个源文件main

3、.c、link.c、find.c、save_load.c 5、系统完成后应实现类似下面所示界面3、算法分析 1、数据结构设计链表中的一个节点存储一个病人的信息,使用下面的结构体类型定义:struct patient char id10; char name10; char casehist200; int cost3; int transfusion; int surgery; struct patient *next; ;其中cost数组用来存储病人卖药的的个数(总共三种药),casehist存储病历内容,transfusion用来存储病人输液的花费,surgery存储手术的花费。Struc

4、t patient *next用来指向下一个病人结构体的起始地址从而形成一个链表。此外还要用到一个结构体来存储库存中当前的药品情况。struct storage int amount3; int price3; 2、函数定义程序代码有main.c、link.c、find.c、save_load.c四个源文件组成,使用头文件head.h把四个源文件连接起来,四个文件中所包含的函数说明如表所示。源文件函数原型功能说明Main.cvoid test()检测有无存储病人的二进制文件void init(struct storage *temp)初始化库存中的药品,参数为指向struct storage类

5、型的指针void printmenu()打印提示菜单Void liststock(struct storage temp)列出库存中的药品struct patient *enroll()注册新病人信息void freeall(struct patient *temp)清除链表内容,参数为指向struct patient类型的指针Find.cvoid search(struct patient *temp)查询单个病人的信息,参数为指向struct patient类型的指针void listall(struct patient *temp)列出所有病人的信息,参数为指向struct patien

6、t类型的指针Link.cstruct patient *insert(struct patient *head,struct patient *rea 加入新节点,参数为指向struct patient类型的指针void modify(struct patient *temp)修改病人病历,参数为指向struct patient类型的指针void buy(struct patient *temp,struct storage *s)/用于病人的消费处理,参数为指向struct patient类型的指针与指向struct storage的指针Save_load.cvoid save(struct

7、 patient *head)将链表信息保存到文件中,参数为指向struct patient类型的指针struct patient *load(struct patient *head)将文件信息写入到链表中,参数为指向struct patient类型的指针 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(输入当前日子); gets(c); strcat(temp-casehist,a

9、); 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)载入链表信息是首先定义一个文件指针,然后以只读方式打开文件。若失败则输出提示信息返回,成功后调用malloc函数来申请一块内存,用read函数将文件内容写入到节点中,随后调用insert函数将节点加入链表,如此循环下去直到fread

10、函数返回0值,即文件已经读到了末尾时,再将链表的头指针返回给主函数即可。Flag值置为1,用来代表已有可用链表。 if(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 FIRS

11、T#include#include#includestruct patient /存储一个病人的信息 char id10; /id数组存储病人号码 char name10; /name数组存储病人姓名 char casehist200; /casehist存储病历内容 int cost3; /cost数组存储病人买药的个数(总共三种) int transfusion; /transfusion存储病人输液的花费 int surgery; /surgery存储手术的花费 struct patient *next; /struct patient *next用来指向下一个病人结构体的起始地址从而形

12、成一个链表;struct storage /存储库存中当前的药品情况 int amount3; int price3;int flag;void search(struct patient *temp); /查询单个病人的信息,参数为指向struct patient类型的指针void listall(struct patient *temp); /列出所有病人的信息,参数为指向struct patient类型的指针struct patient *insert(struct patient *head,struct patient *rear); /加入新节点,参数为指向struct patie

13、nt类型的指针void modify(struct patient *temp); /修改病人病历,参数为指向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); /将链表信息保

14、存到文件中,参数为指向struct patient类型的指针#define FIRST#endif/*find.c*/#include head.hvoid search(struct patient *temp) /定义search函数,查询单个病人的信息 char t10; /定义字符数组 int sum; /定义整型变量sum printf(请输入病人的idn); gets(t); /输入字符串 while(temp&strcmp(temp-id,t) /比较字符串temp-id和t,其值和temp逻辑与运算,结果为非0时,执行循环体 temp=temp-next; if(temp) /

15、temp的值为非0时,执行下列步骤 printf(id: %sn,temp-id); printf(n姓名: %s,temp-name); printf(n病历: n%s,temp-casehist); printf(n消费记录:n); if(temp-cost0) printf(巴米尔 %d个n,temp-cost0); if(temp-cost1) printf(感冒灵 %d个n,temp-cost1); if(temp-cost2) printf(病毒唑 %d个n,temp-cost2); if(temp-transfusion) printf(输液费 %dn,temp-transfus

16、ion); if(temp-surgery) printf(手术费 %dn,temp-surgery); sum=temp-cost0*5+temp-cost1*9+temp-cost2*16+temp-transfusion+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)

17、; temp=temp-next; /*link.c*/#include head.hstruct patient *insert(struct patient *head,struct patient *rear) /*!可以出现重复id*/ struct patient *temp; if(head) temp=head; while(temp-next) temp=temp-next; temp-next=rear; rear-next=0; else head=rear; rear-next=0; return head;void modify(struct patient *temp

18、) /修改病人病历 char t10,d200; /定义字符组 char a4,b2,c2; /定义字符组 printf(请输入病人的idn); gets(t); /输入病人的id while(temp&strcmp(temp-id,t) /自动查找病人的id temp=temp-next; if(temp) printf(原有病历: %sn,temp-casehist); printf(输入当前日期 年份); gets(a); /输入年份 printf(输入当前月份); gets(b); /输入月份 printf(输入当前日子); gets(c); /输入日期 strcat(temp-cas

19、ehist,a); /把字符串a接到temp-casehist后面 strcat(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,:); /把字符“:”接到temp-casehist后面 printf(请输入新病历的内容n)

20、; gets(d); /输入新病历内容 strcat(temp-casehist,d); /把字符串d接到temp-casehist后面 strcat(temp-casehist,n); /把字符n接到temp-casehist后面 else printf(无此病人信息!n); void buy(struct patient *temp,struct storage *s) /病人消费处理 char t10; int a,b,c,d,e; int flag1; printf(请输入病人的idn); gets(t); /输入病人的id while(temp&strcmp(temp-id,t) /

21、自动查找病人的id temp=temp-next; if(temp) flag1=0; do printf(请输入买入巴米尔的个数:n); scanf(%d,&a); flag1=0; if(as-amount0) /若输入的值大于库存的值,则提示库存不足 printf(库存不足!n); flag1=1; while(flag1); /flag1=1时,执行循环体 flag1=0; do printf(请输入买入感冒灵的个数:n); scanf(%d,&b); flag1=0; if(bs-amount1) /若输入的值大于库存的值,则提示库存不足 printf(库存不足!n); flag1=

22、1; while(flag1); /flag1=1时,执行循环体 flag1=0; do printf(请输入买入病毒唑的个数:n); scanf(%d,&c); flag1=0; if(cs-amount2) /若输入的值大于库存的值,则提示库存不足 printf(库存不足!n); flag1=1; while(flag1); /flag1=1时,执行循环体 temp-cost0+=a; /temp-cost0和a的值相加后赋给temp-cost0 temp-cost1+=b; /temp-cost1和b的值相加后赋给temp-cost1 temp-cost2+=c; /temp-cost2

23、和c的值相加后赋给temp-cost2 printf(请输入输液费n); scanf(%d,&d); temp-transfusion+=d; /temp-transfusion和d的值相加后赋给temp-transfusion printf(请输入手术费n); scanf(%d,&e); temp-surgery+=e; /temp-surgery和e的值相加后赋给temp-surgery s-amount0-=a; /s-amount0减去a的值后赋给s-amount0 s-amount1-=b; /s-amount1减去b的值后赋给s-amount1 s-amount2-=c; /s-a

24、mount2减去c的值后赋给s-amount2 printf(n购买成功!n); else printf(无此病人信息!n); /*main.h*/#include head.hvoid test(); /检测有无存储病人的二进制文件void init(struct storage *temp); /初始化库存中的药品,参数为指向struct storage类型的指针void printmenu(); /打印提示菜单void liststock(struct storage temp); /列出库存中的药品struct patient *enroll(); /注册新病人信息void freea

25、ll(struct patient *temp); /清除链表内容,参数为指向struct patient类型的指针void main() struct patient *head=0,*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=

26、insert(head,rear); /调用insert函数将节点加入链表 printf(注册成功!n); else printf(您没有载入信息不能注册!n); break; case 2: if(flag) /检查是否有可用的链表 search(head); /查询病人信息 else printf(您没有载入信息不能进行查询!n); break; case 3: if(flag) /检查是否有可用的链表 modify(head); /修改病人病历 else printf(您没有载入信息不能修改病历!n); break; case 4: if(flag) /检查是否有可用的链表 buy(head,&stock); /病人的消费 else printf(您没

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1