使用C語言怎么實(shí)現(xiàn)一個(gè)病例管理系統(tǒng)?針對(duì)這個(gè)問題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡(jiǎn)單易行的方法。
創(chuàng)新互聯(lián)從2013年創(chuàng)立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目網(wǎng)站制作、網(wǎng)站設(shè)計(jì)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元惠民做網(wǎng)站,已為上家服務(wù),為惠民各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18982081108
C語言是一門面向過程的、抽象化的通用程序設(shè)計(jì)語言,廣泛應(yīng)用于底層開發(fā),使用C語言可以以簡(jiǎn)易的方式編譯、處理低級(jí)存儲(chǔ)器。
具體內(nèi)容如下
通過十字交叉鏈表實(shí)現(xiàn)一個(gè)病例管理系統(tǒng),可以查找、刪除、更新信息。
#include"stdio.h" #include"stdlib.h" #include"string.h" typedef struct hospital_info{ char dise_num[10]; /*病歷編號(hào)*/ char ke[10]; /*門診科別*/ char date[11]; /*門診時(shí)間*/ char symptom[60]; /*癥狀*/ char diagnosis[60]; /*診斷*/ char treatment[60]; /*治療意見*/ char doctor[10]; /*醫(yī)師姓名*/ struct hospital_info *next; }hospitals; typedef struct disease_info{ char dise_num[10]; /*病歷編號(hào)*/ char employee[10]; /*姓名*/ char sex; /*性別*/ char unit[30]; /*工作單位*/ char date[11]; /*出生日期*/ char drug_allergy[30]; /*藥物過敏史*/ char phone[12]; /*聯(lián)系電話*/ char addr[30]; /*住址*/ hospitals *head_hosp; struct disease_info *next; }diseases; typedef struct unit_info{ char unit_num[10]; /*單位編號(hào)*/ char unit[30]; /*單位名稱*/ char manager[20]; /*負(fù)責(zé)人*/ char phone[12]; /*聯(lián)系電話*/ int total; diseases *head_disease; struct unit_info *next; }units; void create_cross_list(units**head); void save_cross_list(units*head); void traverse_cross_list(units*head); void load_cross_list(units **head); void Revise_unit(units *head); void Revise_dise(units *head); void Revise_hosp(units *head); void Insert_unit(units *head); void Insert_dise(units *head); void Insert_hosp(units *head); void Delete_unit(units *head); void Delete_dise(units *head); void Delete_hosp(units *head); void Search_unit(units *head); void Search_dise(units *head); void Search_hosp(units *head); void Display_no_hosp(units *head); void Sortmonth(units *head); void SortTotal(units *head); void Sortpeople(units *head); void main(void) { units *head=NULL; short choice; printf("-----the unit information manage system!------\n"); printf("< 1----------create the cross list >\n"); printf("< 2----------save the cross list >\n"); printf("< 3----------traverse the cross list >\n"); printf("< 4----------load the cross list >\n"); printf("< 5-----------Revise information >\n"); printf("< 6-----------Insert information >\n"); printf("< 7-----------Delete information >\n"); printf("< 8-----------Search information >\n"); printf("< 9--------------- tong ji >\n"); printf("< 10---------------退出 >\n"); printf("--------------------------------------------->\n"); f: while(1){ printf("請(qǐng)選擇要進(jìn)行的操作:(1-10)"); scanf("%hd",&choice); getchar(); /*用于吸收換行符*/ switch(choice) { case 1:create_cross_list(&head); break; case 2:save_cross_list(head);break; case 3:traverse_cross_list(head); break; case 4:load_cross_list(&head);break; case 5: { printf(" <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n"); printf(" ---------修改函數(shù)菜單-----------\n"); printf(" 1----------------Revise_unit\n"); printf(" 2----------------Revise_dise\n"); printf(" 3----------------Revise_hosp\n"); printf(" <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n"); while(1){ printf("**請(qǐng)選擇子菜單操作:(1-4)"); scanf("%hd",&choice); getchar(); /*用于吸收換行符*/ switch(choice) { case 1:Revise_unit(head);break; case 2:Revise_dise(head);break; case 3:Revise_hosp(head);break; case 4:goto f; } } } case 6: { printf(" <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n"); printf(" ---------插入函數(shù)菜單-----------\n"); printf(" 1----------------Insert_unit\n"); printf(" 2----------------Insert_dise\n"); printf(" 3----------------Insert_hosp\n"); printf(" <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n"); while(1){ printf("**請(qǐng)選擇子菜單操作:(1-4)"); scanf("%hd",&choice); getchar(); /*用于吸收換行符*/ switch(choice) { case 1:Insert_unit(head);break; case 2:Insert_dise(head);break; case 3:Insert_hosp(head);break; case 4:goto f; } } } case 7: { printf(" <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n"); printf(" ---------刪除函數(shù)菜單-----------\n"); printf(" 1---------------Delete_unit\n"); printf(" 2---------------Delete_dise\n"); printf(" 3---------------Delete_hosp\n"); printf(" <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n"); while(1){ printf("**請(qǐng)選擇子菜單操作(1-4):"); scanf("%hd",&choice); getchar(); /*用于吸收換行符*/ switch(choice) { case 1:Delete_unit(head);break; case 2:Delete_dise(head);break; case 3:Delete_hosp(head);break; case 4:goto f; } } } case 8: { printf(" <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n"); printf(" ---------查詢函數(shù)菜單-----------\n"); printf(" 1---------------Search_unit\n"); printf(" 2---------------Search_dise\n"); printf(" 3---------------Search_hosp\n"); printf(" <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n"); while(1){ printf("**請(qǐng)選擇子菜單操作(1-4):"); scanf("%hd",&choice); getchar(); /*用于吸收換行符*/ switch(choice) { case 1:Search_unit(head);break; case 2:Search_dise(head);break; case 3:Search_hosp(head);break; case 4:goto f; } } } case 9: { printf(" <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n"); printf(" ---------統(tǒng)計(jì)函數(shù)菜單-----------\n"); printf(" 1---------------Display_no_hosp\n"); printf(" 2---------------Sortmonth\n"); printf(" 3---------------SortTotal\n"); printf(" 4---------------Sortpeople\n"); printf(" <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n"); while(1){ printf("**請(qǐng)選擇子菜單操作(1-5):"); scanf("%hd",&choice); getchar(); /*用于吸收換行符*/ switch(choice) { case 1:Display_no_hosp(head);break; case 2:Sortmonth(head);break; case 3:SortTotal(head);break; case 4:Sortpeople(head);break; case 5:goto f; } } } case 10:goto down; } } down: ; } /*創(chuàng)建十字交叉鏈表,并錄入信息*/ void create_cross_list(units **head) { units *hp=NULL,*p; diseases *pcrs; hospitals *phs; char ch; loop: p=(units *)malloc(sizeof(units)); /*創(chuàng)建單位信息結(jié)點(diǎn)*/ printf("請(qǐng)輸入單位的編號(hào):"); scanf("%s",p->unit_num); printf("請(qǐng)輸入單位名稱:"); scanf("%s",p->unit); printf("請(qǐng)輸入負(fù)責(zé)人:"); scanf("%s",p->manager); printf("請(qǐng)輸入聯(lián)系電話:"); scanf("%s",p->phone);/*輸入各項(xiàng)數(shù)據(jù)*/ getchar(); /*用于讀scanf輸入中的換行符*/ p->head_disease=NULL; p->next=hp; hp=p; printf("繼續(xù)輸入%s下單位的病例基本信息(Y/N)?\n",p->unit); scanf("%c",&ch); getchar(); while(ch=='y'||ch=='Y') { pcrs=(diseases *)malloc(sizeof(diseases)); printf("請(qǐng)輸入病例編號(hào):"); gets(pcrs->dise_num); printf("請(qǐng)輸入病人姓名:"); gets(pcrs->employee); printf("請(qǐng)輸入性別:"); scanf("%s",&pcrs->sex); getchar(); printf("請(qǐng)輸入出生日期:"); gets(pcrs->date); printf("請(qǐng)輸入藥物過敏史:"); gets(pcrs->drug_allergy); printf("請(qǐng)輸入聯(lián)系電話:"); gets(pcrs->phone); printf("請(qǐng)輸入住址:"); gets(pcrs->addr); /*輸入各項(xiàng)數(shù)據(jù)*/ strcpy(pcrs->unit,p->unit); pcrs->head_hosp=NULL; pcrs->next=p->head_disease; /*頭指針值賦給新結(jié)點(diǎn)的指針域*/ p->head_disease=pcrs; /*頭指針指向新結(jié)點(diǎn)*/ printf("繼續(xù)輸入%s的門診信息(Y/N)?\n",pcrs->employee); ch=getchar(); getchar(); while(ch=='y'||ch=='Y') { /*是,循環(huán)創(chuàng)建信息鏈*/ phs=(hospitals *)malloc(sizeof(hospitals)); printf("請(qǐng)輸入門診科別:"); scanf("%s",phs->ke); printf("請(qǐng)輸入門診時(shí)間:"); scanf("%s",phs->date); printf("請(qǐng)輸入癥狀:"); scanf("%s",phs->symptom); printf("請(qǐng)輸入診斷:"); scanf("%s",phs->diagnosis); printf("請(qǐng)輸入治療意見:"); scanf("%s",phs->treatment); printf("請(qǐng)輸入醫(yī)師姓名:"); scanf("%s",phs->doctor); /*輸入各項(xiàng)數(shù)據(jù)*/ getchar(); strcpy(phs->dise_num,pcrs->dise_num); phs->next=pcrs->head_hosp; /*頭指針值賦給新結(jié)點(diǎn)的指針域*/ pcrs->head_hosp=phs; /*頭指針指向新結(jié)點(diǎn)*/ printf("繼續(xù)輸入%s的下一條病例信息(Y/N)?\n",pcrs->employee); ch=getchar(); getchar(); /*是否繼續(xù)創(chuàng)建下一個(gè)基本信息結(jié)點(diǎn)*/ } printf("繼續(xù)輸入下一個(gè)病例的基本信息(Y/N)?\n"); ch=getchar(); getchar(); /*是否繼續(xù)創(chuàng)建下一個(gè)基本信息結(jié)點(diǎn)*/ } printf("繼續(xù)輸入下一個(gè)單位的信息(Y/N)?\n"); ch=getchar(); getchar(); if(ch=='y'||ch=='Y') goto loop; (*head)=hp; p=(*head); } /*保存十字交叉鏈表數(shù)據(jù)到磁盤文件*/ void save_cross_list(units *head) { FILE *out1,*out2,*out3; units *p=head; diseases *pcrs; hospitals *phs; if((out1=fopen("c:\\unit.dat","wb+"))==NULL) /*以只寫方式將單位基本信息文件創(chuàng)建在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; /*指向下一個(gè)病歷鏈*/ } p=p->next; /*指向下一個(gè)單位基本信息結(jié)點(diǎn)*/ } fclose(out1); /*關(guān)閉基本信息文件*/ fclose(out2); /*關(guān)閉病歷信息文件*/ fclose(out3); /*關(guān)閉門診信息文件*/ printf("記錄已被保存.\n"); } /*遍歷十字交叉鏈表,輸出各項(xiàng)基本信息*/ void traverse_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"); } /*從磁盤文件中讀取*/ void load_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; } else p=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; } else pcrs=pcrs->next; } p=p->next; } } } fclose(in1); fclose(in2); fclose(in3); } //修改一個(gè)單位基本信息 void Revise_unit(units *head) { units *p,*q; char num[10]; char choice; char update[30]; p=q=head; printf("please input 要修改的單位編號(hào):"); scanf("%s",num); getchar(); while(strcmp(num,p->unit_num)!=0&&p->next!=0) /*查找需要修改信息的單位編號(hào)*/ { q=p; p=p->next; } if(strcmp(num,p->unit_num)==0) { printf(" <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n"); printf(" ***a---------to revise unit_num\n"); printf(" ***b---------to revise unit_name\n"); printf(" ***c---------to revise unit_manager\n"); printf(" ***d---------to revise unit_phone\n"); printf(" <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n"); loop: printf("please input要選擇的操作:(a-d)"); choice=getchar(); getchar(); printf("please input更新后的信息:"); switch(choice) { case 'a': scanf("%s",update); strncpy(p->unit_num,update,strlen(update)+1); goto loop; case 'b': scanf("%s",update); strncpy(p->unit,update,strlen(update)+1); goto loop; case 'c': scanf("%s",update); strncpy(p->manager,update,strlen(update)+1); goto loop; case 'd': scanf("%s",update); strncpy(p->phone,update,strlen(update)+1); goto loop; default:break; } printf("修改成功!\n"); } else printf("not find!\n"); } //修改一個(gè)病歷基本信息 void Revise_dise(units *head) { units *p; diseases *pcrs; char num[10]; char update[30]; char choice; p=head; printf("please input 要修改信息的員工編號(hào):"); scanf("%s",num); getchar(); pcrs=p->head_disease; while(p!=NULL) { while(pcrs!=NULL) { if(strcmp(pcrs->dise_num,num)==0) goto loop1; pcrs=pcrs->next; } p=p->next; pcrs=p->head_disease->next; } if(p==NULL) { printf("not find the unit"); goto end; } loop1: printf(" <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n"); printf(" ***a--------to revise the dise num\n"); printf(" ***b--------to revise the employee\n"); printf(" ***c--------to revise the sex\n"); printf(" ***d--------to revise the unit\n"); printf(" ***e--------to revise the date\n"); printf(" ***f---------to revise the drug_allergy\n"); printf(" ***g---------to revise the phone\n"); printf(" ***h---------to revise the addr\n"); printf(" <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n"); loop2: printf("please input要選擇的操作:(a-h)"); choice=getchar(); getchar(); printf("請(qǐng)輸入修改后的信息:"); switch (choice) { case 'a': scanf("%s",update); strncpy(pcrs->dise_num,update,sizeof(update)+1); goto loop2; case 'b': scanf("%s",update); strncpy(pcrs->employee,update,sizeof(update)+1); goto loop2; case 'c': scanf("%c",&pcrs->sex); goto loop2; case 'd': scanf("%s",update); strncpy(pcrs->unit,update,strlen(update)+1); goto loop2; case 'e': scanf("%s",update); strncpy(pcrs->date,update,strlen(update)+1); goto loop2; case 'f': scanf("%s",update); strncpy(pcrs->drug_allergy,update,strlen(update)+1); goto loop2; case 'g': scanf("%s",update); strncpy(pcrs->phone,update,strlen(update)+1); goto loop2; case 'h': scanf("%s",update); strncpy(pcrs->addr,update,strlen(update)+1); goto loop2; default:break; } printf("修改成功!\n"); end: ; } /*修改一個(gè)門診基本信息*/ void Revise_hosp(units *head) { units *p; diseases *pcrs; hospitals *phs; char num[10],date[11]; char choice; char update[30]; p=head; printf("please input 要修改信息的病歷編號(hào):"); scanf("%s",num); pcrs=p->head_disease; while(p!= NULL) { while(pcrs!= NULL) { if(strcmp(pcrs->dise_num,num)==0) goto loop1; pcrs=pcrs->next; } p=p->next; pcrs=p->head_disease->next; } if(p==NULL) { printf("not find the unit"); goto end; } loop1: printf("please input 要修改信息的門診時(shí)間:"); scanf("%s",date); phs=pcrs->head_hosp; while(phs!= NULL) { if(strcmp(phs->date,date)==0) goto loop2; phs=phs->next; } if(phs==NULL) { printf("not find "); goto end; } loop2: printf(" <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n"); printf(" ***a---------revise the dise_num\n"); printf(" ***b--------revise the ke\n"); printf(" ***c--------revise the date\n"); printf(" ***d--------revise the symptom\n"); printf(" ***e--------revise the diagnosis\n"); printf(" ***f--------revise the treatment\n"); printf(" ***g--------revise the doctor\n"); printf(" <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n"); loop3: printf("please input要進(jìn)行的操作:"); choice=getchar(); getchar(); printf("please input the update information:"); scanf("%s",update); switch(choice) { case 'a': strncpy(phs->dise_num,update,strlen(update)+1); goto loop3; case 'b': strncpy(phs->ke,update,strlen(update)+1); goto loop3; case 'c': strncpy(phs->date,update,strlen(update)+1); goto loop3; case 'd': strncpy(phs->symptom,update,strlen(update)+1); goto loop3; case 'e': strncpy(phs->diagnosis,update,strlen(update)+1); goto loop3; case 'f': strncpy(phs->treatment,update,strlen(update)+1); goto loop3; case 'g': strncpy(phs->doctor,update,strlen(update)+1); goto loop3; default:break; } printf("修改成功!\n"); end: ; } //按單位編號(hào)由小到大在鏈表中插入一個(gè)單位新結(jié)點(diǎn) void Insert_unit(units *head) { units *p1,*p2; int state; loop: p1=head; p2=malloc(sizeof(units)); p2->next=NULL; p2->head_disease=malloc(sizeof(diseases)); p2->head_disease->next=NULL; printf("請(qǐng)輸入單位編號(hào):"); 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) { case 0: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 goto a; case 1:printf("the unit num already exit,pleae input another one\n"); goto loop; } printf("請(qǐng)輸入單位名稱:"); scanf("%s",p2->unit); printf("請(qǐng)輸入負(fù)責(zé)人:"); scanf("%s",p2->manager); printf("請(qǐng)輸入聯(lián)系電話:"); scanf("%s",p2->phone); printf("插入成功!\n"); } //按病歷編號(hào)由小到大插入一個(gè)員工病歷信息結(jié)點(diǎn) void Insert_dise(units *head) { units *p; diseases *pcrs1,*pcrs2; int state; char name[30]; printf("請(qǐng)輸入單位名稱:"); scanf("%s",name); p=head; while(p->next!= NULL) { p=p->next; if (strcmp(p->unit,name)==0) break; } if(p==NULL) { printf("not find the unit!"); goto end; } 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("請(qǐng)輸入病例編號(hào):"); 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) { case 0: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 goto a; case 1:printf("the disease number already exit,please input another one\n"); goto loop; } } printf("請(qǐng)輸入姓名:"); scanf("%s",pcrs2->employee); printf("請(qǐng)輸入性別:"); scanf("%c",pcrs2->sex); printf("請(qǐng)輸入出生日期"); scanf("%s",pcrs2->date); printf("請(qǐng)輸入藥物過敏史:"); scanf("%s",pcrs2->drug_allergy); printf("請(qǐng)輸入聯(lián)系電話:"); scanf("%s",pcrs2->phone); printf("請(qǐng)輸入住址:"); scanf("%s",pcrs2->addr); printf("插入成功!\n"); end: ; } //按門診時(shí)間由小到大插入一個(gè)員工門診信息結(jié)點(diǎn) void Insert_hosp(units *head) { units *p; diseases *pcrs; hospitals *phs1,*phs2; char number[10]; printf("請(qǐng)輸入單位編號(hào):"); scanf("%s",number); p=head; while(p->next!= NULL) { p=p->next; if(strcmp(p->unit_num,number)==0) break; } if(p==NULL) { printf("not find the unit\n"); goto end; } pcrs=p->head_disease; printf("請(qǐng)輸入病例編號(hào):"); scanf("%s",number); while(pcrs->next!=NULL) { pcrs=pcrs->next; if (strcmp(pcrs->dise_num,number)==0) break; } if (pcrs==NULL) { printf("not find the question \n"); goto end; } 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("請(qǐng)輸入科別:"); scanf("%s",phs2->ke); printf("請(qǐng)輸入診斷時(shí)間:"); scanf("%s",phs2->date); printf("請(qǐng)輸入主訴:"); scanf("%s",phs2->symptom); printf("請(qǐng)輸入初步診斷:"); scanf("%s",phs2->diagnosis); printf("請(qǐng)輸入治療意見:"); scanf("%s",phs2->treatment); printf("請(qǐng)輸入醫(yī)師姓名:"); scanf("%s",phs2->doctor); printf("插入成功!\n"); end: ; } /*刪除一條單位信息記錄*/ void Delete_unit(units *head) { units *p,*q; char name[30]; printf("please input 要?jiǎng)h除的單位名稱:"); scanf("%s",name);getchar(); p=q=head; while(strcmp(name,p->unit)!=0&&p->next!=0)/*p指的不是要找的結(jié)點(diǎn),并且后面還有結(jié)點(diǎn)*/ { q=p; p=p->next; } /*p后移一個(gè)結(jié)點(diǎn)*/ if(strcmp(name,p->unit)==0) { /*找要?jiǎng)h除位置*/ if(p==head) head=p->next; /*若p指向的是首結(jié)點(diǎn),把第二個(gè)結(jié)點(diǎn)地址賦予head*/ else q->next=p->next; /*否則將下一個(gè)結(jié)點(diǎn)地址賦給前一結(jié)點(diǎn)地址*/ free(p); printf("刪除成功!\n"); } else printf("%s not been found!\n",name); /*找不到該結(jié)點(diǎn)*/ } /*刪除一條病歷信息記錄*/ void Delete_dise(units *head) { units *p,*q; diseases *pcrs,*t; char name[10],employee[30]; printf("please input 要?jiǎng)h除信息的單位名稱:"); scanf("%s",name); getchar(); p=q=head; while(strcmp(name,p->unit)!=0&&p->next!=0) /*p指的不是要找的結(jié)點(diǎn),并且后面還有結(jié)點(diǎn)*/ { q=p; p=p->next; } /*p后移一個(gè)結(jié)點(diǎn)*/ if(strcmp(name,p->unit)==0) { printf("please input 要?jiǎng)h除信息的員工姓名:"); scanf("%s",employee); getchar(); pcrs=t=p->head_disease; while(strcmp(employee,pcrs->employee)!=0&&pcrs->next!=0) { t=pcrs; pcrs=pcrs->next; } /*pcrs后移一個(gè)結(jié)點(diǎn)*/ if(strcmp(employee,pcrs->employee)==0) { if(pcrs==p->head_disease) p->head_disease=pcrs->next; /*若pcrs指向的是首結(jié)點(diǎn),把第二個(gè)結(jié)點(diǎn)地址賦予head*/ else t->next=pcrs->next; /*否則將下一個(gè)結(jié)點(diǎn)地址賦給前一結(jié)點(diǎn)地址*/ free(pcrs); printf("刪除成功!\n"); } } else printf("%s not been found!\n",employee); } //刪除一條門診信息記錄 void Delete_hosp(units *head) { units *p,*q; diseases *pcrs,*t1; hospitals *phs,*t2; char name[30],employee[10],date[11]; printf("please input 要?jiǎng)h除信息的單位名稱:"); scanf("%s",name); getchar(); p=q=head; while(strcmp(name,p->unit)!=0&&p->next!=0)/*p指的不是要找的結(jié)點(diǎn),并且后面還有結(jié)點(diǎn)*/ { q=p; p=p->next; } /*p后移一個(gè)結(jié)點(diǎn)*/ if(strcmp(name,p->unit)==0) { printf("please input 要?jiǎng)h除信息的員工姓名:"); scanf("%s",employee); getchar(); pcrs=t1=p->head_disease; while(strcmp(employee,pcrs->employee)!=0&&pcrs->next!=0) { t1=pcrs; pcrs=pcrs->next; } /*pcrs后移一個(gè)結(jié)點(diǎn)*/ if(strcmp(employee,pcrs->employee)==0) { printf("please input 要?jiǎng)h除信息的病歷時(shí)間:"); 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; else t2->next=phs->next; free(phs); printf("刪除成功!\n"); } } } else printf("%s not been found!\n",date); } /*查詢一條單位信息記錄并輸出信息*/ void Search_unit(units *head) { units *p,*q; char num[10]; p=q=head; printf("please input 要查詢的單位編號(hào):"); scanf("%s",num); getchar(); while(strcmp(num,p->unit_num)!=0&&p->next!=0)/*p指的不是要查詢的結(jié)點(diǎn)并且后面還有結(jié)點(diǎn)*/ { q=p; p=p->next; } /*p后移一個(gè)結(jié)點(diǎn)*/ if(strcmp(num,p->unit_num)==0) {/*找要查詢的結(jié)點(diǎn),輸出各項(xiàng)基本信息*/ printf("單位編號(hào):%s\n",p->unit_num); printf("單位名稱:%s\n",p->unit); printf("負(fù)責(zé)人:%s\n",p->manager); printf("聯(lián)系電話:%s\n",p->phone); } else printf("%s not been found!\n",num); /*找不到要查詢的結(jié)點(diǎn)*/ } //查詢一條病歷信息鏈并輸出信息 void Search_dise(units *head) { units *p,*q; diseases *pcrs,*t; char name[10],num[10]; p=q=head; printf("please input 要查詢的單位名稱:"); scanf("%s",name); getchar(); while(strcmp(name,p->unit)!=0&&p->next!=0) { q=p; p=p->next; } /*p后移一個(gè)結(jié)點(diǎn)*/ if(strcmp(name,p->unit)==0) /*找要查詢的結(jié)點(diǎn)*/ { pcrs=t=p->head_disease; printf("please input 要查詢的病歷編號(hào):"); scanf("%s",num); getchar(); while(strcmp(num,pcrs->dise_num)!=0&&pcrs->next!=0) { t=pcrs; pcrs=pcrs->next; } /*p后移一個(gè)結(jié)點(diǎn)*/ if(strcmp(num,pcrs->dise_num)==0) {/*找要查詢的結(jié)點(diǎn)*/ printf("病歷編號(hào):%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("聯(lián)系電話:%s\n",pcrs->phone); printf("住址:%s\n",pcrs->addr); } } else printf("not been found!\n"); /*找不到要查詢的結(jié)點(diǎn)*/ } //查詢一條門診信息鏈并輸出信息 void Search_hosp(units *head) { units *p,*q; diseases *pcrs,*t1; hospitals *phs,*t2; char name[10],num[10],date[11]; p=q=head; printf("please input 要查詢的單位名稱:"); scanf("%s",name); getchar(); while(strcmp(name,p->unit)!=0&&p->next!=0) { q=p; p=p->next; } /*p后移一個(gè)結(jié)點(diǎn)*/ if(strcmp(name,p->unit)==0) /*找要查詢的結(jié)點(diǎn)*/ { pcrs=t1=p->head_disease; printf("please input 要查詢的病歷編號(hào):"); scanf("%s",num); getchar(); while(strcmp(num,pcrs->dise_num)!=0&&pcrs->next!=0) { t1=pcrs; pcrs=pcrs->next; } /*p后移一個(gè)結(jié)點(diǎn)*/ if(strcmp(num,pcrs->dise_num)==0) /*找要查詢的結(jié)點(diǎn)*/ { phs=t2=pcrs->head_hosp; printf("please input 要查詢的門診時(shí)間:"); scanf("%s",date); getchar(); while(strcmp(date,phs->date)!=0&&phs->next!=0) { t2=phs; phs=phs->next; } /*p后移一個(gè)結(jié)點(diǎn)*/ if(strcmp(date,phs->date)==0) { printf("病歷編號(hào):%s\n",phs->dise_num); printf("診斷科別:%s\n",phs->ke); printf("門診時(shí)間:%s\n",phs->date); printf("主訴:%s\n",phs->symptom); printf("初步診斷:%s\n",phs->diagnosis); printf("治療意見:%s\n",phs->treatment); printf("醫(yī)師姓名:%s\n",phs->doctor); } } } else printf("not been found!\n"); /*找不到要查詢的結(jié)點(diǎn)*/ } /*列出從未門診的員工信息(單位.姓名.住址.電話)*/ void Display_no_hosp(units *head) { units *p=head; diseases *pcrs; hospitals *phs; while(p!=NULL) { printf("%s\n",p->unit); //輸出各個(gè)單位名稱 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 ; //否則門診過,執(zhí)行空語句 pcrs=pcrs->next; } p=p->next; } } /*統(tǒng)計(jì)一年中各月的門診量并按降序排列后輸出*/ void Sortmonth(units *head) { units *p=head; diseases *pcrs; hospitals *phs; int s[12],i,j,t,count; char year[10],month[10]; for(i=0;i<12;i++) s[i]=0; printf("--請(qǐng)輸入要統(tǒng)計(jì)的年份:"); //手動(dòng)輸入要統(tǒng)計(jì)的年份 scanf("%s",year); getchar(); printf("--請(qǐng)輸入要統(tǒng)計(jì)的月份:"); for(i=0;i<12;i++) { count=0; //統(tǒng)計(jì)一年中各月的門診量 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++;//判斷是否為要統(tǒng)計(jì)的年份 if(j==4) //是,比較是否為在該月的門診 if(phs->date[j+1]==month[0]&&phs->date[j+2]==month[1]) count++; else ; //不是,執(zhí)行空語句 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]<s[j+1]) t=s[j],s[j]=s[j+1];s[j+1]=t; printf("請(qǐng)輸出按降序排列后的統(tǒng)計(jì)量:\n"); for(i=0;i<12;i++) //輸出排列后的各月總門診量 printf("%d\t",s[i]); printf("\n"); } /*統(tǒng)計(jì)各單位員工的總門診量并按降序排列后輸出*/ void SortTotal(units *head) { units *p=head,*q; diseases *pcrs; hospitals *phs; int count,i,j,t,len=0; while(p!=NULL) { //計(jì)算各單位員工的總門診量 p->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); //輸出各個(gè)單位名稱 p=p->next; } printf("\n"); p=head; //遍歷指針p指向頭指針 while(p!=NULL) { //輸出統(tǒng)計(jì)數(shù) printf("%d\t",p->total); p=p->next; } printf("\n"); p=head; while(p!=NULL) { //計(jì)算單位信息鏈表長(zhǎng)度 len++; p=p->next; } for(i=0,p=head;i<len-1;i++,p=p->next) //對(duì)統(tǒng)計(jì)量降序排序 for(j=i+1,q=p->next;j<len;j++,q=q->next) if(p->total<q->total) { t=p->total; p->total=q->total; q->total=t; } p=head; printf("請(qǐng)輸出按降序排列后的統(tǒng)計(jì)量:\n"); while(p!=NULL) { //輸出排序后的統(tǒng)計(jì)量 printf("%d\t",p->total); p=p->next; } printf("\n"); } //統(tǒng)計(jì)各單位員工總?cè)藬?shù)并輸出 void Sortpeople(units *head) { units *p=head; diseases *pcrs; int count; 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("統(tǒng)計(jì)單位總?cè)藬?shù):%d\n",p->total); p=p->next; } }
關(guān)于使用C語言怎么實(shí)現(xiàn)一個(gè)病例管理系統(tǒng)問題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識(shí)。
分享標(biāo)題:使用C語言怎么實(shí)現(xiàn)一個(gè)病例管理系統(tǒng)
路徑分享:http://muchs.cn/article14/ishjge.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航、服務(wù)器托管、小程序開發(fā)、做網(wǎng)站、企業(yè)建站、網(wǎng)站內(nèi)鏈
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)