C语言程序设计医院信息标准管理系统附源代码.doc
《C语言程序设计医院信息标准管理系统附源代码.doc》由会员分享,可在线阅读,更多相关《C语言程序设计医院信息标准管理系统附源代码.doc(23页珍藏版)》请在咨信网上搜索。
专业设计汇报 课程名称: C 语 言 程 序 设 计 课题名称: 医院信息管理系统 专业班别: 12本计算机科学和技术二班 姓 名: 学 号: 指导老师: 设计日期: -5-25 老师评语: 等级 项目 优 良 中 及格 差 专业设计目标 设计基础要求 算法分析 源程序代码 源程序代码测试 设计总结 成绩评定: 指导老师署名: 日期: 年 月 日 课程设计题目 医院信息管理程序 作者姓名: 同组组员: 摘要 利用结构体存放每个病人信息和每种药品信息,并使用链表存放全部病人信息;能完成对医院内全部病人信息注册、查询、删除和修改等操作,同时又能对药房内库存药品进行查询;能够将链表中病人信息保留在文件中,而且能够对文件中病人信息进行读取和显示 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 id[10]; char name[10]; char casehist[200]; int cost[3]; int transfusion; int surgery; struct patient *next; }; 其中cost数组用来存放病人卖药个数(总共三种药),casehist存放病历内容,transfusion用来存放病人输液花费,surgery存放手术花费。Struct patient *next用来指向下一个病人结构体起始地址从而形成一个链表。 另外还要用到一个结构体来存放库存中目前药品情况。 struct storage{ int amount[3]; int price[3]; }; 2、函数定义 程序代码有main.c、link.c、find.c、save_load.c四个源文件组成,使用头文件head.h把四个源文件连接起来,四个文件中所包含函数说明如表所表示。 源文件 函数原型 功效说明 Main.c 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类型指针 Find.c void search(struct patient *temp) 查询单个病人信息,参数为指向struct patient类型指针 void listall(struct patient *temp) 列出全部病人信息,参数为指向struct patient类型指针 Link.c struct 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.c void 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("原有病历: %s\n",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); } else{ free(rear); flag=1; break; } } 4、源程序代码 /*head.h*/ #ifndef FIRST #include<stdlib.h> #include<stdio.h> #include<string.h> struct patient{ //存放一个病人信息 char id[10]; //id数组存放病人号码 char name[10]; //name数组存放病人姓名 char casehist[200]; //casehist存放病历内容 int cost[3]; //cost数组存放病人买药个数(总共三种) int transfusion; //transfusion存放病人输液花费 int surgery; //surgery存放手术花费 struct patient *next; //struct patient *next用来指向下一个病人结构体起始地址从而形成一个链表 }; struct storage{ //存放库存中目前药品情况 int amount[3]; int price[3]; }; 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 t[10]; //定义字符数组 int sum; //定义整型变量sum printf("请输入病人id\n"); gets(t); /输入字符串 while(temp&&strcmp(temp->id,t)){ //比较字符串temp->id和t,其值和temp逻辑和运算,结果为非0时,实施循环体 temp=temp->next; } if(temp){ //temp值为非0时,实施下列步骤 printf("id: %s\n",temp->id); printf("\n姓名: %s",temp->name); printf("\n病历: \n%s",temp->casehist); printf("\n消费统计:\n"); if(temp->cost[0]){ printf("巴米尔 %d个\n",temp->cost[0]); } if(temp->cost[1]){ printf("感冒灵 %d个\n",temp->cost[1]); } if(temp->cost[2]){ printf("病毒唑 %d个\n",temp->cost[2]); } if(temp->transfusion){ printf("输液费 %d\n",temp->transfusion); } if(temp->surgery){ printf("手术费 %d\n",temp->surgery); } sum=temp->cost[0]*5+temp->cost[1]*9+temp->cost[2]*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 %s\n",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; } else{ head=rear; rear->next=0; } return head; } void modify(struct patient *temp){ //修改病人病历 char t[10],d[200]; //定义字符组 char a[4],b[2],c[2]; //定义字符组 printf("请输入病人id\n"); gets(t); //输入病人id while(temp&&strcmp(temp->id,t)){ //自动查找病人id temp=temp->next; } if(temp){ printf("原有病历: %s\n",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后面 } else{ printf("无此病人信息!\n"); } } void buy(struct patient *temp,struct storage *s){ //病人消费处理 char t[10]; int a,b,c,d,e; int flag1; printf("请输入病人id\n"); gets(t); //输入病人id while(temp&&strcmp(temp->id,t)){ //自动查找病人id temp=temp->next; } if(temp){ flag1=0; do{ printf("请输入买入巴米尔个数:\n"); scanf("%d",&a); flag1=0; if(a>s->amount[0]){ //若输入值大于库存值,则提醒"库存不足" printf("库存不足!\n"); flag1=1; } }while(flag1); //flag1=1时,实施循环体 flag1=0; do{ printf("请输入买入感冒灵个数:\n"); scanf("%d",&b); flag1=0; if(b>s->amount[1]){ //若输入值大于库存值,则提醒"库存不足" printf("库存不足!\n"); flag1=1; } }while(flag1); //flag1=1时,实施循环体 flag1=0; do{ printf("请输入买入病毒唑个数:\n"); scanf("%d",&c); flag1=0; if(c>s->amount[2]){ //若输入值大于库存值,则提醒"库存不足" printf("库存不足!\n"); flag1=1; } }while(flag1); //flag1=1时,实施循环体 temp->cost[0]+=a; //temp->cost[0]和a值相加后赋给temp->cost[0] temp->cost[1]+=b; //temp->cost[1]和b值相加后赋给temp->cost[1] temp->cost[2]+=c; //temp->cost[2]和c值相加后赋给temp->cost[2] 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->amount[0]-=a; //s->amount[0]减去a值后赋给s->amount[0] s->amount[1]-=b; //s->amount[1]减去b值后赋给s->amount[1] s->amount[2]-=c; //s->amount[2]减去c值后赋给s->amount[2] printf("\n购置成功!\n"); } else{ printf("无此病人信息!\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); //文件实施后返回fp } } void init(struct storage *temp){ //初始化库存中药品,参数为指向struct storage类型指针 temp->amount[0]=20; //初始化库存令巴米尔数量为20 temp->amount[1]=20; //初始化库存令感冒灵数量为20 temp->amount[2]=10; //初始化库存令病毒唑数量为10 temp->price[0]=5; //初始化库存令巴米尔价格为5 temp->price[1]=9; //初始化库存令感冒灵价格为9 temp->price[2]=16; //初始化库存令感冒灵价格为16 } void liststock(struct storage temp){ //列出库存中药品 int i; printf("药品名 数量 单价\n"); //输出库存中各药品数量、价格 for(i=0;i<3;i++){ switch(i) { case 0: printf("巴米尔 %d %d\n",temp.amount[i],temp.price[i]); //输出巴米尔数量、单价 break; case 1: printf("感冒灵 %d %d\n",temp.amount[i],temp.price[i]); //输出感冒灵数量、单价 break; case 2: printf("病毒唑 %d %d\n",temp.amount[i],temp.price[i]); //输出病毒唑数量、单价 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->cost[0]=0; //初始化令购置巴米尔花费为0 rear->cost[1]=0; //初始化令购置感冒灵花费为0 rear->cost[2]=0; //初始化令购置病毒唑花费为0 rear->surgery=0; //初始化令手术花费为0 rear->transfusion=0; //初始化令病人输液花费为0 return 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; //定义一个指向文件指针变量fp struct patient *rear; if((fp=fopen("data","r"))==0){ //以r指定方法打开输入文件datd printf("文件不存在!"); return head; } while(1){ rear=(struct patient *)malloc(sizeof(struct patient)); if(fread(rear,sizeof(struct patient),1,fp)){ //从datd文件中读数据 head=insert(head,rear); } else{ free(rear); flag=1; break; } } fclose(fp); return head; } void save(struct patient *head){ //将链表信息保留到文件中 FILE *fp; //定义一个指向文件指针变量fp struct patient *temp; temp=head; if((fp=fopen("data","w"))==0){ //以w指定方法打开输入文件datd printf("文件已损坏!\n"); } else{ while(temp){ fwrite(temp,sizeof(struct patient),1,fp); //把数据写进datd文件中 temp=temp->next; } } fclose(fp); } 5、源程序代码测试 输入1,界面以下: 输入4,界面以下: 输入3,界面以下: 输入2,界面以下: 6、结束语 7、参考文件: 谭浩强.C程序设计(第四版).北京:清华大学出版社, 谭浩强.C程序设计(第四版)学习教导.北京:清华大学出版社, 李丹程.C语言程序设计案例实践. 北京:清华大学出版社, …… ……- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 医院 信息 标准 管理 系统 源代码
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【精****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【精****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【精****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【精****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文