欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    C语言程序设计(医院信息管理系统)附源代码(13页).doc

    • 资源ID:37063006       资源大小:207.50KB        全文页数:13页
    • 资源格式: DOC        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    C语言程序设计(医院信息管理系统)附源代码(13页).doc

    -C语言程序设计(医院信息管理系统)附源代码-第 13 页专业设计报告课程名称: C 语 言 程 序 设 计 课题名称: 医院信息管理系统 专业班别: 12本计算机科学与技术二班 姓 名: 学 号: 指导教师: 设计日期: 2012-5-25 教师评语:等级项目优良中及格差专业设计目的设计基本要求算法分析源程序代码源程序代码测试设计总结 成绩评定: 指导教师签名: 日期: 2012 年 月 日课程设计题目 医院信息管理程序作者姓名:同组成员:摘要 利用结构体存储每个病人的信息和每种药品的信息,并使用链表存储全部病人的信息;能完成对医院内所有病人信息的注册、查询、删除和修改等操作,同时又能对药房内库存的药品进行查询;可以将链表中的病人信息保存在文件中,并且可以对文件中的病人信息进行读取与显示1专业设计目的 1、掌握链表的操作,包括链表节点的创建、释放还有链表的遍历 2、掌握对二进制文件的创建、增添等基本操作。 3、熟悉C语言函数的使用方法,学会模块化处理问题以及多个源文件的处理方式2设计基本要求( 1、使用结构体来存储病人的信息,结构体中包括病的id号码、姓名、病历以及消费信息,并用链表将所有病人信息整合。 2、用文件来存储链表的信息以便下次再使用该程序时载入病人信息 3、能够实现病人信息的注册、病人信息的查询、病人消费统计、保存链表信息、载入链表信息、查询库存等几项功能。 4、要求用四个源文件main.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存储手术的花费。Struct 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类型的指针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 patient类型的指针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 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则代表可以修改病历,否则要求用户重新做出选择)。确认有可用链表之后进入modify函数。要求用户输入病人的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);strcat(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(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);elsefree(rear);flag=1;break;4、源程序代码/*head.h*/#ifndef FIRST#include<stdlib.h>#include<stdio.h>#include<string.h>struct 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用来指向下一个病人结构体的起始地址从而形成一个链表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 patient类型的指针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);/将链表信息保存到文件中,参数为指向struct patient类型的指针#define FIRST#endif/*find.c*/#include "head.h"void search(struct patient *temp)/定义search函数,查询单个病人的信息char t10;/定义字符数组int sum;/定义整型变量sumprintf("请输入病人的idn");gets(t);/输入字符串while(temp&&strcmp(temp->id,t)/比较字符串temp->id和t,其值和temp逻辑与运算,结果为非0时,执行循环体temp=temp->next;if(temp)/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->transfusion);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);elseprintf("无该病人的信息!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.h"struct 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;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)/自动查找病人的idtemp=temp->next;if(temp)printf("原有病历:%sn",temp->casehist);printf("输入当前日期 年份");gets(a);/输入年份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,"/");/把字符“/”接到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");/把字符"n"接到temp->casehist后面elseprintf("无此病人信息!n");void buy(struct patient *temp,struct storage *s)/病人消费处理char t10;int a,b,c,d,e;int flag1;printf("请输入病人的idn");gets(t);/输入病人的idwhile(temp&&strcmp(temp->id,t)/自动查找病人的idtemp=temp->next;if(temp)flag1=0;doprintf("请输入买入巴米尔的个数: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)/若输入的值大于库存的值,则提示"库存不足"printf("库存不足!n");flag1=1;while(flag1);/flag1=1时,执行循环体flag1=0;doprintf("请输入买入病毒唑的个数:n");scanf("%d",&c);flag1=0;if(c>s->amount2)/若输入的值大于库存的值,则提示"库存不足"printf("库存不足!n");flag1=1;while(flag1);/flag1=1时,执行循环体temp->cost0+=a;/temp->cost0和a的值相加后赋给temp->cost0temp->cost1+=b;/temp->cost1和b的值相加后赋给temp->cost1temp->cost2+=c;/temp->cost2和c的值相加后赋给temp->cost2printf("请输入输液费n");scanf("%d",&d);temp->transfusion+=d;/temp->transfusion和d的值相加后赋给temp->transfusionprintf("请输入手术费n");scanf("%d",&e);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");/*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);/清除链表内容,参数为指向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=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("您没有载入信息不能进行消费!n");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;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");printf("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;/初始化库存令巴米尔数量为20temp->amount1=20;/初始化库存令感冒灵数量为20temp->amount2=10;/初始化库存令病毒唑数量为10temp->price0=5;/初始化库存令巴米尔价格为5temp->price1=9;/初始化库存令感冒灵价格为9temp->price2=16;/初始化库存令感冒灵价格为16void liststock(struct storage temp)/列出库存中的药品int i;printf("药品名 数量 单价n");/输出库存中各药品的数量、价格for(i=0;i<3;i+)switch(i) case 0:printf("巴米尔 %d %dn",temp.amounti,temp.pricei);/输出巴米尔的数量、单价break;case 1:printf("感冒灵 %d %dn",temp.amounti,temp.pricei);/输出感冒灵的数量、单价break;case 2:printf("病毒唑 %d %dn",temp.amounti,temp.pricei);/输出病毒唑的数量、单价break;struct patient *enroll()/注册新病人信息struct patient *rear;rear=(struct patient *)malloc(sizeof(struct patient);printf("请输入病人id:n");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;/初始化令病人输液的花费为0return rear;void freeall(struct patient *temp)/清除链表内容,参数为指向struct patient类型的指针struct patient *t;while(temp) t=temp;temp=temp->next;free(t);/*save_load.c*/#include "head.h"struct patient *load(struct patient *head)/将文件信息写入到链表中FILE *fp;/定义一个指向文件的指针变量fpstruct patient *rear;if(fp=fopen("data","r")=0)/以r指定的方式打开输入文件datdprintf("文件不存在!");return head;while(1)rear=(struct patient *)malloc(sizeof(struct patient);if(fread(rear,sizeof(struct patient),1,fp) /从datd文件中读数据head=insert(head,rear);elsefree(rear);flag=1;break;fclose(fp);return head;void save(struct patient *head)/将链表信息保存到文件中FILE *fp;/定义一个指向文件的指针变量fpstruct patient *temp;temp=head;if(fp=fopen("data","w")=0)/以w指定的方式打开输入文件datdprintf("文件已损坏!n");elsewhile(temp)fwrite(temp,sizeof(struct patient),1,fp);/把数据写进datd文件中temp=temp->next;fclose(fp);5、源程序代码测试输入1,界面如下:输入4,界面如下:输入3,界面如下:输入2,界面如下:6、结束语7、参考文献:谭浩强.C程序设计(第四版).北京:清华大学出版社,2010谭浩强.C程序设计(第四版)学习辅导.北京:清华大学出版社,2010李丹程.C语言程序设计案例实践. 北京:清华大学出版社,2009

    注意事项

    本文(C语言程序设计(医院信息管理系统)附源代码(13页).doc)为本站会员(1595****071)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开