C语言实现病例管理系统
本文实例为大家分享了C语言实现病例管理系统的具体代码,供大家参考,具体内容如下
通过十字交叉链表实现一个病例管理系统,可以查找、删除、更新信息。
#include"stdio.h" #include"stdlib.h" #include"string.h" typedefstructhospital_info{ chardise_num[10];/*病历编号*/ charke[10];/*门诊科别*/ chardate[11];/*门诊时间*/ charsymptom[60];/*症状*/ chardiagnosis[60];/*诊断*/ chartreatment[60];/*治疗意见*/ chardoctor[10];/*医师姓名*/ structhospital_info*next; }hospitals; typedefstructdisease_info{ chardise_num[10];/*病历编号*/ charemployee[10];/*姓名*/ charsex;/*性别*/ charunit[30];/*工作单位*/ chardate[11];/*出生日期*/ chardrug_allergy[30];/*药物过敏史*/ charphone[12];/*联系电话*/ charaddr[30];/*住址*/ hospitals*head_hosp; structdisease_info*next; }diseases; typedefstructunit_info{ charunit_num[10];/*单位编号*/ charunit[30];/*单位名称*/ charmanager[20];/*负责人*/ charphone[12];/*联系电话*/ inttotal; diseases*head_disease; structunit_info*next; }units; voidcreate_cross_list(units**head); voidsave_cross_list(units*head); voidtraverse_cross_list(units*head); voidload_cross_list(units**head); voidRevise_unit(units*head); voidRevise_dise(units*head); voidRevise_hosp(units*head); voidInsert_unit(units*head); voidInsert_dise(units*head); voidInsert_hosp(units*head); voidDelete_unit(units*head); voidDelete_dise(units*head); voidDelete_hosp(units*head); voidSearch_unit(units*head); voidSearch_dise(units*head); voidSearch_hosp(units*head); voidDisplay_no_hosp(units*head); voidSortmonth(units*head); voidSortTotal(units*head); voidSortpeople(units*head); voidmain(void) { units*head=NULL; shortchoice; printf("-----theunitinformationmanagesystem!------\n"); printf("<1----------createthecrosslist>\n"); printf("<2----------savethecrosslist>\n"); printf("<3----------traversethecrosslist>\n"); printf("<4----------loadthecrosslist>\n"); printf("<5-----------Reviseinformation>\n"); printf("<6-----------Insertinformation>\n"); printf("<7-----------Deleteinformation>\n"); printf("<8-----------Searchinformation>\n"); printf("<9---------------tongji>\n"); printf("<10---------------退出>\n"); printf("--------------------------------------------->\n"); f:while(1){ printf("请选择要进行的操作:(1-10)"); scanf("%hd",&choice); getchar();/*用于吸收换行符*/ switch(choice) { case1:create_cross_list(&head); break; case2:save_cross_list(head);break; case3:traverse_cross_list(head); break; case4:load_cross_list(&head);break; case5: { printf("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n"); printf("---------修改函数菜单-----------\n"); printf("1----------------Revise_unit\n"); printf("2----------------Revise_dise\n"); printf("3----------------Revise_hosp\n"); printf("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n"); while(1){ printf("**请选择子菜单操作:(1-4)"); scanf("%hd",&choice); getchar();/*用于吸收换行符*/ switch(choice) { case1:Revise_unit(head);break; case2:Revise_dise(head);break; case3:Revise_hosp(head);break; case4:gotof; } } } case6: { printf("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n"); printf("---------插入函数菜单-----------\n"); printf("1----------------Insert_unit\n"); printf("2----------------Insert_dise\n"); printf("3----------------Insert_hosp\n"); printf("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n"); while(1){ printf("**请选择子菜单操作:(1-4)"); scanf("%hd",&choice); getchar();/*用于吸收换行符*/ switch(choice) { case1:Insert_unit(head);break; case2:Insert_dise(head);break; case3:Insert_hosp(head);break; case4:gotof; } } } case7: { printf("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n"); printf("---------删除函数菜单-----------\n"); printf("1---------------Delete_unit\n"); printf("2---------------Delete_dise\n"); printf("3---------------Delete_hosp\n"); printf("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n"); while(1){ printf("**请选择子菜单操作(1-4):"); scanf("%hd",&choice); getchar();/*用于吸收换行符*/ switch(choice) { case1:Delete_unit(head);break; case2:Delete_dise(head);break; case3:Delete_hosp(head);break; case4:gotof; } } } case8: { printf("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n"); printf("---------查询函数菜单-----------\n"); printf("1---------------Search_unit\n"); printf("2---------------Search_dise\n"); printf("3---------------Search_hosp\n"); printf("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n"); while(1){ printf("**请选择子菜单操作(1-4):"); scanf("%hd",&choice); getchar();/*用于吸收换行符*/ switch(choice) { case1:Search_unit(head);break; case2:Search_dise(head);break; case3:Search_hosp(head);break; case4:gotof; } } } case9: { printf("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n"); printf("---------统计函数菜单-----------\n"); printf("1---------------Display_no_hosp\n"); printf("2---------------Sortmonth\n"); printf("3---------------SortTotal\n"); printf("4---------------Sortpeople\n"); printf("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n"); while(1){ printf("**请选择子菜单操作(1-5):"); scanf("%hd",&choice); getchar();/*用于吸收换行符*/ switch(choice) { case1:Display_no_hosp(head);break; case2:Sortmonth(head);break; case3:SortTotal(head);break; case4:Sortpeople(head);break; case5:gotof; } } } case10:gotodown; } } down:; } /*创建十字交叉链表,并录入信息*/ voidcreate_cross_list(units**head) { units*hp=NULL,*p; diseases*pcrs; hospitals*phs; charch; loop: p=(units*)malloc(sizeof(units));/*创建单位信息结点*/ printf("请输入单位的编号:"); scanf("%s",p->unit_num); printf("请输入单位名称:"); scanf("%s",p->unit); printf("请输入负责人:"); scanf("%s",p->manager); printf("请输入联系电话:"); scanf("%s",p->phone);/*输入各项数据*/ getchar();/*用于读scanf输入中的换行符*/ p->head_disease=NULL; p->next=hp; hp=p; printf("继续输入%s下单位的病例基本信息(Y/N)?\n",p->unit); scanf("%c",&ch); getchar(); while(ch=='y'||ch=='Y') { pcrs=(diseases*)malloc(sizeof(diseases)); printf("请输入病例编号:"); gets(pcrs->dise_num); printf("请输入病人姓名:"); gets(pcrs->employee); printf("请输入性别:"); scanf("%s",&pcrs->sex); getchar(); printf("请输入出生日期:"); gets(pcrs->date); printf("请输入药物过敏史:"); gets(pcrs->drug_allergy); printf("请输入联系电话:"); gets(pcrs->phone); printf("请输入住址:"); gets(pcrs->addr); /*输入各项数据*/ strcpy(pcrs->unit,p->unit); pcrs->head_hosp=NULL; pcrs->next=p->head_disease;/*头指针值赋给新结点的指针域*/ p->head_disease=pcrs;/*头指针指向新结点*/ printf("继续输入%s的门诊信息(Y/N)?\n",pcrs->employee); ch=getchar(); getchar(); while(ch=='y'||ch=='Y') {/*是,循环创建信息链*/ phs=(hospitals*)malloc(sizeof(hospitals)); printf("请输入门诊科别:"); scanf("%s",phs->ke); printf("请输入门诊时间:"); scanf("%s",phs->date); printf("请输入症状:"); scanf("%s",phs->symptom); printf("请输入诊断:"); scanf("%s",phs->diagnosis); printf("请输入治疗意见:"); scanf("%s",phs->treatment); printf("请输入医师姓名:"); scanf("%s",phs->doctor); /*输入各项数据*/ getchar(); strcpy(phs->dise_num,pcrs->dise_num); phs->next=pcrs->head_hosp;/*头指针值赋给新结点的指针域*/ pcrs->head_hosp=phs;/*头指针指向新结点*/ printf("继续输入%s的下一条病例信息(Y/N)?\n",pcrs->employee); ch=getchar(); getchar();/*是否继续创建下一个基本信息结点*/ } printf("继续输入下一个病例的基本信息(Y/N)?\n"); ch=getchar(); getchar();/*是否继续创建下一个基本信息结点*/ } printf("继续输入下一个单位的信息(Y/N)?\n"); ch=getchar(); getchar(); if(ch=='y'||ch=='Y') gotoloop; (*head)=hp; p=(*head); } /*保存十字交叉链表数据到磁盘文件*/ voidsave_cross_list(units*head) { FILE*out1,*out2,*out3; units*p=head; diseases*pcrs; hospitals*phs; if((out1=fopen("c:\\unit.dat","wb+"))==NULL) /*以只写方式将单位基本信息文件创建在c盘下的unit.text文本文件,并使out1指向它*/ exit(-1); if((out2=fopen("c:\\disease.dat","wb+"))==NULL)/*打开病历信息文件*/ exit(-1); if((out3=fopen("c:\\hospital.dat","wb+"))==NULL)/*打开门诊信息文件*/ exit(-1); while(p!=NULL) { fwrite(p,sizeof(units),1,out1);/*写单位基本信息记录*/ pcrs=p->head_disease;/*病历遍历指针指向病历链链头*/ while(pcrs!=NULL) {/*遍历病历信息链*/ fwrite(pcrs,sizeof(diseases),1,out2);/*写病历记录*/ phs=pcrs->head_hosp;/*门诊遍历指针指向门诊链链头*/ while(phs!=NULL) { fwrite(phs,sizeof(hospitals),1,out3);/*写门诊链*/ phs=phs->next; } pcrs=pcrs->next;/*指向下一个病历链*/ } p=p->next;/*指向下一个单位基本信息结点*/ } fclose(out1);/*关闭基本信息文件*/ fclose(out2);/*关闭病历信息文件*/ fclose(out3);/*关闭门诊信息文件*/ printf("记录已被保存.\n"); } /*遍历十字交叉链表,输出各项基本信息*/ voidtraverse_cross_list(units*head) { units*p=head; diseases*pcrs; hospitals*phs; printf("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n"); while(p!=NULL) {/*遍历单位基本信息链*/ printf("%s\t%s\t%s\t%s\n",p->unit_num,p->unit,p->manager,p->phone); pcrs=p->head_disease; while(pcrs!=NULL) {/*遍历病历基本信息链与门诊信息链*/ printf("%s\t%s\t%c\t%s\t%s\t%s\t%s\t%s\n",pcrs->dise_num,pcrs->employee,\ pcrs->sex,pcrs->unit,pcrs->date,pcrs->drug_allergy,pcrs->phone,pcrs->addr); phs=pcrs->head_hosp; while(phs!=NULL) { printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\n",phs->dise_num,phs->ke,phs->date,\ phs->symptom,phs->diagnosis,phs->treatment,phs->doctor); phs=phs->next; } pcrs=pcrs->next; } p=p->next; } printf("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n"); } /*从磁盘文件中读取*/ voidload_cross_list(units**head) { FILE*in1,*in2,*in3; units*hp=NULL,*p; diseases*pcrs; hospitals*phs; if((in1=fopen("c:\\unit.dat","rb"))==NULL) exit(-1); if((in2=fopen("c:\\disease.dat","rb"))==NULL) exit(-1); if((in3=fopen("c:\\hospital.dat","rb"))==NULL) exit(-1); while(!feof(in1)) { p=(units*)malloc(sizeof(units)); fread(p,sizeof(units),1,in1); if(!feof(in1)) { p->head_disease=NULL; p->next=hp; hp=p; } } (*head)=hp; while(!feof(in2)) { pcrs=(diseases*)malloc(sizeof(diseases)); fread(pcrs,sizeof(diseases),1,in2); if(!feof(in2)) { p=(*head); pcrs->head_hosp=NULL; while(p!=NULL) { if(!strcmp(p->unit,pcrs->unit)) { pcrs->next=p->head_disease; p->head_disease=pcrs; break; } elsep=p->next; } } } (*head)=hp; while(!feof(in3)) { phs=(hospitals*)malloc(sizeof(hospitals)); fread(phs,sizeof(hospitals),1,in3); if(!feof(in3)) { p=(*head); while(p!=NULL) { pcrs=p->head_disease; while(pcrs!=NULL) { if(!strcmp(phs->dise_num,pcrs->dise_num)) { phs->next=pcrs->head_hosp; pcrs->head_hosp=phs; break; } elsepcrs=pcrs->next; } p=p->next; } } } fclose(in1); fclose(in2); fclose(in3); } //修改一个单位基本信息 voidRevise_unit(units*head) { units*p,*q; charnum[10]; charchoice; charupdate[30]; p=q=head; printf("pleaseinput要修改的单位编号:"); scanf("%s",num); getchar(); while(strcmp(num,p->unit_num)!=0&&p->next!=0)/*查找需要修改信息的单位编号*/ { q=p; p=p->next; } if(strcmp(num,p->unit_num)==0) { printf("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n"); printf("***a---------toreviseunit_num\n"); printf("***b---------toreviseunit_name\n"); printf("***c---------toreviseunit_manager\n"); printf("***d---------toreviseunit_phone\n"); printf("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n"); loop: printf("pleaseinput要选择的操作:(a-d)"); choice=getchar(); getchar(); printf("pleaseinput更新后的信息:"); switch(choice) { case'a': scanf("%s",update); strncpy(p->unit_num,update,strlen(update)+1); gotoloop; case'b': scanf("%s",update); strncpy(p->unit,update,strlen(update)+1); gotoloop; case'c': scanf("%s",update); strncpy(p->manager,update,strlen(update)+1); gotoloop; case'd': scanf("%s",update); strncpy(p->phone,update,strlen(update)+1); gotoloop; default:break; } printf("修改成功!\n"); } elseprintf("notfind!\n"); } //修改一个病历基本信息 voidRevise_dise(units*head) { units*p; diseases*pcrs; charnum[10]; charupdate[30]; charchoice; p=head; printf("pleaseinput要修改信息的员工编号:"); scanf("%s",num); getchar(); pcrs=p->head_disease; while(p!=NULL) { while(pcrs!=NULL) { if(strcmp(pcrs->dise_num,num)==0) gotoloop1; pcrs=pcrs->next; } p=p->next; pcrs=p->head_disease->next; } if(p==NULL) { printf("notfindtheunit"); gotoend; } loop1: printf("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n"); printf("***a--------torevisethedisenum\n"); printf("***b--------torevisetheemployee\n"); printf("***c--------torevisethesex\n"); printf("***d--------torevisetheunit\n"); printf("***e--------torevisethedate\n"); printf("***f---------torevisethedrug_allergy\n"); printf("***g---------torevisethephone\n"); printf("***h---------torevisetheaddr\n"); printf("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n"); loop2: printf("pleaseinput要选择的操作:(a-h)"); choice=getchar(); getchar(); printf("请输入修改后的信息:"); switch(choice) { case'a': scanf("%s",update); strncpy(pcrs->dise_num,update,sizeof(update)+1); gotoloop2; case'b': scanf("%s",update); strncpy(pcrs->employee,update,sizeof(update)+1); gotoloop2; case'c': scanf("%c",&pcrs->sex); gotoloop2; case'd': scanf("%s",update); strncpy(pcrs->unit,update,strlen(update)+1); gotoloop2; case'e': scanf("%s",update); strncpy(pcrs->date,update,strlen(update)+1); gotoloop2; case'f': scanf("%s",update); strncpy(pcrs->drug_allergy,update,strlen(update)+1); gotoloop2; case'g': scanf("%s",update); strncpy(pcrs->phone,update,strlen(update)+1); gotoloop2; case'h': scanf("%s",update); strncpy(pcrs->addr,update,strlen(update)+1); gotoloop2; default:break; } printf("修改成功!\n"); end:; } /*修改一个门诊基本信息*/ voidRevise_hosp(units*head) { units*p; diseases*pcrs; hospitals*phs; charnum[10],date[11]; charchoice; charupdate[30]; p=head; printf("pleaseinput要修改信息的病历编号:"); scanf("%s",num); pcrs=p->head_disease; while(p!=NULL) { while(pcrs!=NULL) { if(strcmp(pcrs->dise_num,num)==0) gotoloop1; pcrs=pcrs->next; } p=p->next; pcrs=p->head_disease->next; } if(p==NULL) { printf("notfindtheunit"); gotoend; } loop1: printf("pleaseinput要修改信息的门诊时间:"); scanf("%s",date); phs=pcrs->head_hosp; while(phs!=NULL) { if(strcmp(phs->date,date)==0) gotoloop2; phs=phs->next; } if(phs==NULL) { printf("notfind"); gotoend; } loop2: printf("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n"); printf("***a---------revisethedise_num\n"); printf("***b--------revisetheke\n"); printf("***c--------revisethedate\n"); printf("***d--------revisethesymptom\n"); printf("***e--------revisethediagnosis\n"); printf("***f--------revisethetreatment\n"); printf("***g--------revisethedoctor\n"); printf("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n"); loop3: printf("pleaseinput要进行的操作:"); choice=getchar(); getchar(); printf("pleaseinputtheupdateinformation:"); scanf("%s",update); switch(choice) { case'a': strncpy(phs->dise_num,update,strlen(update)+1); gotoloop3; case'b': strncpy(phs->ke,update,strlen(update)+1); gotoloop3; case'c': strncpy(phs->date,update,strlen(update)+1); gotoloop3; case'd': strncpy(phs->symptom,update,strlen(update)+1); gotoloop3; case'e': strncpy(phs->diagnosis,update,strlen(update)+1); gotoloop3; case'f': strncpy(phs->treatment,update,strlen(update)+1); gotoloop3; case'g': strncpy(phs->doctor,update,strlen(update)+1); gotoloop3; default:break; } printf("修改成功!\n"); end:; } //按单位编号由小到大在链表中插入一个单位新结点 voidInsert_unit(units*head) { units*p1,*p2; intstate; loop: p1=head; p2=malloc(sizeof(units)); p2->next=NULL; p2->head_disease=malloc(sizeof(diseases)); p2->head_disease->next=NULL; printf("请输入单位编号:"); scanf("%s",p2->unit_num); a:while(p1->next!=NULL) { p1=p1->next; if(strcmp(p1->unit_num,p2->unit_num)==0) { state=1; break; } else { state=0; break; } } switch(state) { case0:if(strcmp(p1->unit_num,p2->unit_num)>0) { if(p1==head->next) { head->next=p2; p2->next=p1; } else { p1->next=p2; p2->next=p1->next; } break; } else gotoa; case1:printf("theunitnumalreadyexit,pleaeinputanotherone\n"); gotoloop; } printf("请输入单位名称:"); scanf("%s",p2->unit); printf("请输入负责人:"); scanf("%s",p2->manager); printf("请输入联系电话:"); scanf("%s",p2->phone); printf("插入成功!\n"); } //按病历编号由小到大插入一个员工病历信息结点 voidInsert_dise(units*head) { units*p; diseases*pcrs1,*pcrs2; intstate; charname[30]; printf("请输入单位名称:"); scanf("%s",name); p=head; while(p->next!=NULL) { p=p->next; if(strcmp(p->unit,name)==0) break; } if(p==NULL) { printf("notfindtheunit!"); gotoend; } pcrs1=p->head_disease; pcrs2=malloc(sizeof(diseases)); pcrs2->next=NULL; pcrs2->head_hosp=malloc(sizeof(hospitals)); pcrs2->head_hosp->next=NULL; strcpy(pcrs2->unit,name); loop: printf("请输入病例编号:"); scanf("%s",pcrs2->dise_num); if(pcrs1==NULL) p->head_disease->next=pcrs2; else { a:while(pcrs1->next!=NULL) { pcrs1=pcrs1->next; if(strcmp(pcrs1->dise_num,pcrs2->dise_num)==0) { state=1; break; } else { state=0; break; } } switch(state) { case0:if(strcmp(pcrs1->dise_num,pcrs2->dise_num)>0) { if(pcrs1=p->head_disease->next) { p->head_disease->next=pcrs2; pcrs2->next=pcrs1; } else { pcrs1->next=pcrs2; pcrs2->next=pcrs1->next; } break; } else gotoa; case1:printf("thediseasenumberalreadyexit,pleaseinputanotherone\n"); gotoloop; } } printf("请输入姓名:"); scanf("%s",pcrs2->employee); printf("请输入性别:"); scanf("%c",pcrs2->sex); printf("请输入出生日期"); scanf("%s",pcrs2->date); printf("请输入药物过敏史:"); scanf("%s",pcrs2->drug_allergy); printf("请输入联系电话:"); scanf("%s",pcrs2->phone); printf("请输入住址:"); scanf("%s",pcrs2->addr); printf("插入成功!\n"); end:; } //按门诊时间由小到大插入一个员工门诊信息结点 voidInsert_hosp(units*head) { units*p; diseases*pcrs; hospitals*phs1,*phs2; charnumber[10]; printf("请输入单位编号:"); scanf("%s",number); p=head; while(p->next!=NULL) { p=p->next; if(strcmp(p->unit_num,number)==0) break; } if(p==NULL) { printf("notfindtheunit\n"); gotoend; } pcrs=p->head_disease; printf("请输入病例编号:"); scanf("%s",number); while(pcrs->next!=NULL) { pcrs=pcrs->next; if(strcmp(pcrs->dise_num,number)==0) break; } if(pcrs==NULL) { printf("notfindthequestion\n"); gotoend; } phs1=pcrs->head_hosp->next; phs2=malloc(sizeof(hospitals)); phs2->next=NULL; if(phs1==NULL) pcrs->head_hosp->next=phs2; else { while(phs1->next!=NULL) phs1=phs1->next; phs1->next=phs2; } strncpy(phs2->dise_num,number,strlen(number)+1); printf("请输入科别:"); scanf("%s",phs2->ke); printf("请输入诊断时间:"); scanf("%s",phs2->date); printf("请输入主诉:"); scanf("%s",phs2->symptom); printf("请输入初步诊断:"); scanf("%s",phs2->diagnosis); printf("请输入治疗意见:"); scanf("%s",phs2->treatment); printf("请输入医师姓名:"); scanf("%s",phs2->doctor); printf("插入成功!\n"); end:; } /*删除一条单位信息记录*/ voidDelete_unit(units*head) { units*p,*q; charname[30]; printf("pleaseinput要删除的单位名称:"); scanf("%s",name);getchar(); p=q=head; while(strcmp(name,p->unit)!=0&&p->next!=0)/*p指的不是要找的结点,并且后面还有结点*/ { q=p; p=p->next; }/*p后移一个结点*/ if(strcmp(name,p->unit)==0) {/*找要删除位置*/ if(p==head)head=p->next;/*若p指向的是首结点,把第二个结点地址赋予head*/ elseq->next=p->next;/*否则将下一个结点地址赋给前一结点地址*/ free(p); printf("删除成功!\n"); } elseprintf("%snotbeenfound!\n",name);/*找不到该结点*/ } /*删除一条病历信息记录*/ voidDelete_dise(units*head) { units*p,*q; diseases*pcrs,*t; charname[10],employee[30]; printf("pleaseinput要删除信息的单位名称:"); scanf("%s",name); getchar(); p=q=head; while(strcmp(name,p->unit)!=0&&p->next!=0)/*p指的不是要找的结点,并且后面还有结点*/ { q=p; p=p->next; }/*p后移一个结点*/ if(strcmp(name,p->unit)==0) { printf("pleaseinput要删除信息的员工姓名:"); scanf("%s",employee); getchar(); pcrs=t=p->head_disease; while(strcmp(employee,pcrs->employee)!=0&&pcrs->next!=0) { t=pcrs; pcrs=pcrs->next; }/*pcrs后移一个结点*/ if(strcmp(employee,pcrs->employee)==0) { if(pcrs==p->head_disease)p->head_disease=pcrs->next;/*若pcrs指向的是首结点,把第二个结点地址赋予head*/ elset->next=pcrs->next;/*否则将下一个结点地址赋给前一结点地址*/ free(pcrs); printf("删除成功!\n"); } } elseprintf("%snotbeenfound!\n",employee); } //删除一条门诊信息记录 voidDelete_hosp(units*head) { units*p,*q; diseases*pcrs,*t1; hospitals*phs,*t2; charname[30],employee[10],date[11]; printf("pleaseinput要删除信息的单位名称:"); scanf("%s",name); getchar(); p=q=head; while(strcmp(name,p->unit)!=0&&p->next!=0)/*p指的不是要找的结点,并且后面还有结点*/ { q=p; p=p->next; }/*p后移一个结点*/ if(strcmp(name,p->unit)==0) { printf("pleaseinput要删除信息的员工姓名:"); scanf("%s",employee); getchar(); pcrs=t1=p->head_disease; while(strcmp(employee,pcrs->employee)!=0&&pcrs->next!=0) { t1=pcrs; pcrs=pcrs->next; }/*pcrs后移一个结点*/ if(strcmp(employee,pcrs->employee)==0) { printf("pleaseinput要删除信息的病历时间:"); scanf("%s",date); getchar(); phs=t2=pcrs->head_hosp; while(strcmp(date,phs->date)!=0&&phs->next!=0) { t2=phs; phs=phs->next; } if(strcmp(date,phs->date)==0) { if(phs==pcrs->head_hosp)pcrs->head_hosp=phs->next; elset2->next=phs->next; free(phs); printf("删除成功!\n"); } } } elseprintf("%snotbeenfound!\n",date); } /*查询一条单位信息记录并输出信息*/ voidSearch_unit(units*head) { units*p,*q; charnum[10]; p=q=head; printf("pleaseinput要查询的单位编号:"); scanf("%s",num); getchar(); while(strcmp(num,p->unit_num)!=0&&p->next!=0)/*p指的不是要查询的结点并且后面还有结点*/ { q=p; p=p->next; }/*p后移一个结点*/ if(strcmp(num,p->unit_num)==0) {/*找要查询的结点,输出各项基本信息*/ printf("单位编号:%s\n",p->unit_num); printf("单位名称:%s\n",p->unit); printf("负责人:%s\n",p->manager); printf("联系电话:%s\n",p->phone); } elseprintf("%snotbeenfound!\n",num);/*找不到要查询的结点*/ } //查询一条病历信息链并输出信息 voidSearch_dise(units*head) { units*p,*q; diseases*pcrs,*t; charname[10],num[10]; p=q=head; printf("pleaseinput要查询的单位名称:"); scanf("%s",name); getchar(); while(strcmp(name,p->unit)!=0&&p->next!=0) { q=p; p=p->next; }/*p后移一个结点*/ if(strcmp(name,p->unit)==0)/*找要查询的结点*/ { pcrs=t=p->head_disease; printf("pleaseinput要查询的病历编号:"); scanf("%s",num); getchar(); while(strcmp(num,pcrs->dise_num)!=0&&pcrs->next!=0) { t=pcrs; pcrs=pcrs->next; }/*p后移一个结点*/ if(strcmp(num,pcrs->dise_num)==0) {/*找要查询的结点*/ printf("病历编号:%s\n",pcrs->dise_num); printf("姓名:%s\n",pcrs->employee); printf("性别:%c\n",pcrs->sex); printf("工作单位:%s\n",pcrs->unit); printf("出生日期:%s\n",pcrs->date); printf("药物过敏史:%s\n",pcrs->drug_allergy); printf("联系电话:%s\n",pcrs->phone); printf("住址:%s\n",pcrs->addr); } } elseprintf("notbeenfound!\n");/*找不到要查询的结点*/ } //查询一条门诊信息链并输出信息 voidSearch_hosp(units*head) { units*p,*q; diseases*pcrs,*t1; hospitals*phs,*t2; charname[10],num[10],date[11]; p=q=head; printf("pleaseinput要查询的单位名称:"); scanf("%s",name); getchar(); while(strcmp(name,p->unit)!=0&&p->next!=0) { q=p; p=p->next; }/*p后移一个结点*/ if(strcmp(name,p->unit)==0)/*找要查询的结点*/ { pcrs=t1=p->head_disease; printf("pleaseinput要查询的病历编号:"); scanf("%s",num); getchar(); while(strcmp(num,pcrs->dise_num)!=0&&pcrs->next!=0) { t1=pcrs; pcrs=pcrs->next; }/*p后移一个结点*/ if(strcmp(num,pcrs->dise_num)==0)/*找要查询的结点*/ { phs=t2=pcrs->head_hosp; printf("pleaseinput要查询的门诊时间:"); scanf("%s",date); getchar(); while(strcmp(date,phs->date)!=0&&phs->next!=0) { t2=phs; phs=phs->next; }/*p后移一个结点*/ if(strcmp(date,phs->date)==0) { printf("病历编号:%s\n",phs->dise_num); printf("诊断科别:%s\n",phs->ke); printf("门诊时间:%s\n",phs->date); printf("主诉:%s\n",phs->symptom); printf("初步诊断:%s\n",phs->diagnosis); printf("治疗意见:%s\n",phs->treatment); printf("医师姓名:%s\n",phs->doctor); } } } elseprintf("notbeenfound!\n");/*找不到要查询的结点*/ } /*列出从未门诊的员工信息(单位.姓名.住址.电话)*/ voidDisplay_no_hosp(units*head) { units*p=head; diseases*pcrs; hospitals*phs; while(p!=NULL) { printf("%s\n",p->unit);//输出各个单位名称 printf("员工姓名\t电话\t住址\n"); pcrs=p->head_disease; while(pcrs!=NULL) { phs=pcrs->head_hosp; //如果phs是空链,则该员工从未门诊过 if(phs==NULL) printf("%s\t%s\t%s\n",pcrs->employee,pcrs->phone,pcrs->addr); else;//否则门诊过,执行空语句 pcrs=pcrs->next; } p=p->next; } } /*统计一年中各月的门诊量并按降序排列后输出*/ voidSortmonth(units*head) { units*p=head; diseases*pcrs; hospitals*phs; ints[12],i,j,t,count; charyear[10],month[10]; for(i=0;i<12;i++)s[i]=0; printf("--请输入要统计的年份:");//手动输入要统计的年份 scanf("%s",year); getchar(); printf("--请输入要统计的月份:"); for(i=0;i<12;i++) { count=0;//统计一年中各月的门诊量 scanf("%s",month); while(p!=NULL) { pcrs=p->head_disease; while(pcrs!=NULL) { phs=pcrs->head_hosp; while(phs!=NULL) { j=0; while(phs->date[j]==year[j]&&(j<4)) j++;//判断是否为要统计的年份 if(j==4)//是,比较是否为在该月的门诊 if(phs->date[j+1]==month[0]&&phs->date[j+2]==month[1]) count++; else;//不是,执行空语句 phs=phs->next; } pcrs=pcrs->next; } p=p->next; } s[i]=count; } for(i=0;i<12;i++)//输出各月的总门诊量 printf("%d\t",s[i]); printf("\n"); for(i=0;i<11;i++)//降序排序 for(j=0;j<11-i;j++) if(s[j]total=0; count=0; pcrs=p->head_disease; while(pcrs!=NULL) { phs=pcrs->head_hosp; while(phs!=NULL) { count++; phs=phs->next; } pcrs=pcrs->next; } p->total=count; printf("%s\t",p->unit);//输出各个单位名称 p=p->next; } printf("\n"); p=head;//遍历指针p指向头指针 while(p!=NULL) {//输出统计数 printf("%d\t",p->total); p=p->next; } printf("\n"); p=head; while(p!=NULL) {//计算单位信息链表长度 len++; p=p->next; } for(i=0,p=head;inext)//对统计量降序排序 for(j=i+1,q=p->next;j next) if(p->total total) { t=p->total; p->total=q->total; q->total=t; } p=head; printf("请输出按降序排列后的统计量:\n"); while(p!=NULL) {//输出排序后的统计量 printf("%d\t",p->total); p=p->next; } printf("\n"); } //统计各单位员工总人数并输出 voidSortpeople(units*head) { units*p=head; diseases*pcrs; intcount; while(p!=NULL) { p->total=0; count=0; pcrs=p->head_disease; while(pcrs!=NULL) { count++; pcrs=pcrs->next; } p->total=count; p=p->next; } p=head; while(p!=NULL) { printf("输出单位名称:%s",p->unit); printf("统计单位总人数:%d\n",p->total); p=p->next; } }
更多学习资料请关注专题《管理系统开发》。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。