溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

使用C語(yǔ)言怎么實(shí)現(xiàn)一個(gè)病例管理系統(tǒng)

發(fā)布時(shí)間:2021-04-20 17:27:46 來(lái)源:億速云 閱讀:325 作者:Leah 欄目:編程語(yǔ)言

使用C語(yǔ)言怎么實(shí)現(xiàn)一個(gè)病例管理系統(tǒng)?針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。

C語(yǔ)言是什么

C語(yǔ)言是一門(mén)面向過(guò)程的、抽象化的通用程序設(shè)計(jì)語(yǔ)言,廣泛應(yīng)用于底層開(kāi)發(fā),使用C語(yǔ)言可以以簡(jiǎn)易的方式編譯、處理低級(jí)存儲(chǔ)器。

具體內(nèi)容如下

通過(guò)十字交叉鏈表實(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];    /*門(mén)診科別*/
 char date[11];   /*門(mén)診時(shí)間*/
 char symptom[60];  /*癥狀*/
 char diagnosis[60];  /*診斷*/
 char treatment[60];  /*治療意見(jiàn)*/
 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];  /*藥物過(guò)敏史*/ 
 char phone[12];    /*聯(lián)系電話(huà)*/
 char addr[30];    /*住址*/
 hospitals *head_hosp;
 struct disease_info *next;
}diseases;
typedef struct unit_info{ 
 char unit_num[10];    /*單位編號(hào)*/
 char unit[30];     /*單位名稱(chēng)*/
 char manager[20];    /*負(fù)責(zé)人*/
 char phone[12];    /*聯(lián)系電話(huà)*/
 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("  ---------查詢(xún)函數(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)輸入單位名稱(chēng):");
 scanf("%s",p->unit);
 printf("請(qǐng)輸入負(fù)責(zé)人:");
 scanf("%s",p->manager);
 printf("請(qǐng)輸入聯(lián)系電話(huà):");
 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)輸入藥物過(guò)敏史:");
 gets(pcrs->drug_allergy); 
  printf("請(qǐng)輸入聯(lián)系電話(huà):");
 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的門(mén)診信息(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)輸入門(mén)診科別:");
  scanf("%s",phs->ke);
 printf("請(qǐng)輸入門(mén)診時(shí)間:");
 scanf("%s",phs->date);
 printf("請(qǐng)輸入癥狀:");
 scanf("%s",phs->symptom);
   printf("請(qǐng)輸入診斷:");
 scanf("%s",phs->diagnosis);
   printf("請(qǐng)輸入治療意見(jiàn):");
 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ù)到磁盤(pán)文件*/
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)  
 /*以只寫(xiě)方式將單位基本信息文件創(chuàng)建在c盤(pán)下的unit.text文本文件,并使out1指向它*/
 exit(-1);
 if((out2=fopen("c:\\disease.dat","wb+"))==NULL) /*打開(kāi)病歷信息文件*/
 exit(-1);
 if((out3=fopen("c:\\hospital.dat","wb+"))==NULL) /*打開(kāi)門(mén)診信息文件*/
 exit(-1);
 while(p!=NULL)
 {
 fwrite(p,sizeof(units),1,out1);/*寫(xiě)單位基本信息記錄*/
 pcrs=p->head_disease;     /*病歷遍歷指針指向病歷鏈鏈頭*/
 while(pcrs!=NULL)
 {      /*遍歷病歷信息鏈*/
 fwrite(pcrs,sizeof(diseases),1,out2); /*寫(xiě)病歷記錄*/
 phs=pcrs->head_hosp;      /*門(mén)診遍歷指針指向門(mén)診鏈鏈頭*/
 while(phs!=NULL)
 {
 fwrite(phs,sizeof(hospitals),1,out3);  /*寫(xiě)門(mén)診鏈*/
 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)閉門(mé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)
 {   /*遍歷病歷基本信息鏈與門(mén)診信息鏈*/
  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");
}
/*從磁盤(pá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è)門(mén)診基本信息*/
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 要修改信息的門(mén)診時(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)輸入單位名稱(chēng):");
  scanf("%s",p2->unit);
  printf("請(qǐng)輸入負(fù)責(zé)人:");
  scanf("%s",p2->manager);
  printf("請(qǐng)輸入聯(lián)系電話(huà):");
  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)輸入單位名稱(chē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)輸入藥物過(guò)敏史:");
 scanf("%s",pcrs2->drug_allergy);
 printf("請(qǐng)輸入聯(lián)系電話(huà):");
  scanf("%s",pcrs2->phone);
  printf("請(qǐng)輸入住址:");
  scanf("%s",pcrs2->addr);
 printf("插入成功!\n");
end: ;
} 
                  
//按門(mén)診時(shí)間由小到大插入一個(gè)員工門(mén)診信息結(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)輸入治療意見(jiàn):");
  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除的單位名稱(chēng):");
 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除信息的單位名稱(chēng):");
 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);
}

//刪除一條門(mén)診信息記錄
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除信息的單位名稱(chēng):");
 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);
}

/*查詢(xún)一條單位信息記錄并輸出信息*/              
void Search_unit(units *head)
{
 units *p,*q;
 char num[10];
 p=q=head;
 printf("please input 要查詢(xún)的單位編號(hào):");
 scanf("%s",num);
 getchar();
 while(strcmp(num,p->unit_num)!=0&&p->next!=0)/*p指的不是要查詢(xún)的結(jié)點(diǎn)并且后面還有結(jié)點(diǎn)*/
 {
 q=p;
 p=p->next;
 } /*p后移一個(gè)結(jié)點(diǎn)*/
 if(strcmp(num,p->unit_num)==0)
 {/*找要查詢(xún)的結(jié)點(diǎn),輸出各項(xiàng)基本信息*/
 printf("單位編號(hào):%s\n",p->unit_num);
 printf("單位名稱(chēng):%s\n",p->unit);
 printf("負(fù)責(zé)人:%s\n",p->manager);
 printf("聯(lián)系電話(huà):%s\n",p->phone);
 }
 else printf("%s not been found!\n",num); /*找不到要查詢(xún)的結(jié)點(diǎn)*/
}

//查詢(xún)一條病歷信息鏈并輸出信息
void Search_dise(units *head)
{
 units *p,*q;
 diseases *pcrs,*t;
 char name[10],num[10];
 p=q=head;
 printf("please input 要查詢(xún)的單位名稱(chēng):");
 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) /*找要查詢(xún)的結(jié)點(diǎn)*/
 {  
  pcrs=t=p->head_disease;
  printf("please input 要查詢(xún)的病歷編號(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) 
 {/*找要查詢(xún)的結(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("藥物過(guò)敏史:%s\n",pcrs->drug_allergy);
 printf("聯(lián)系電話(huà):%s\n",pcrs->phone);
 printf("住址:%s\n",pcrs->addr);
 }
 }
 else printf("not been found!\n"); /*找不到要查詢(xún)的結(jié)點(diǎn)*/
}                     

//查詢(xún)一條門(mé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 要查詢(xún)的單位名稱(chēng):");
 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) /*找要查詢(xún)的結(jié)點(diǎn)*/
 {  
  pcrs=t1=p->head_disease;
  printf("please input 要查詢(xún)的病歷編號(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) /*找要查詢(xún)的結(jié)點(diǎn)*/
  {
   phs=t2=pcrs->head_hosp;
   printf("please input 要查詢(xún)的門(mén)診時(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("門(mén)診時(shí)間:%s\n",phs->date);
 printf("主訴:%s\n",phs->symptom);
 printf("初步診斷:%s\n",phs->diagnosis);
    printf("治療意見(jiàn):%s\n",phs->treatment);
 printf("醫(yī)師姓名:%s\n",phs->doctor);
 }
 }
 }
 else printf("not been found!\n"); /*找不到要查詢(xún)的結(jié)點(diǎn)*/
}

/*列出從未門(mén)診的員工信息(單位.姓名.住址.電話(huà))*/
void Display_no_hosp(units *head)            
{
 units *p=head;
 diseases *pcrs;
 hospitals *phs;
 while(p!=NULL)
 {
 printf("%s\n",p->unit);  //輸出各個(gè)單位名稱(chēng)
  printf("員工姓名\t電話(huà)\t住址\n"); 
 pcrs=p->head_disease;
 while(pcrs!=NULL)
 {
 phs=pcrs->head_hosp;
 //如果phs是空鏈,則該員工從未門(mén)診過(guò)
 if(phs==NULL)
 printf("%s\t%s\t%s\n",pcrs->employee,pcrs->phone,pcrs->addr);
 else ; //否則門(mén)診過(guò),執(zhí)行空語(yǔ)句
 pcrs=pcrs->next;
 }
 p=p->next;
 }
}

/*統(tǒng)計(jì)一年中各月的門(mén)診量并按降序排列后輸出*/        
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ì)一年中各月的門(mén)診量 
  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)   //是,比較是否為在該月的門(mén)診
     if(phs->date[j+1]==month[0]&&phs->date[j+2]==month[1]) 
   count++;
    else ; //不是,執(zhí)行空語(yǔ)句
    phs=phs->next;
 }
    pcrs=pcrs->next;
 }
   p=p->next;
 }
  s[i]=count;
 }
 for(i=0;i<12;i++)   //輸出各月的總門(mén)診量
 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++)   //輸出排列后的各月總門(mén)診量
 printf("%d\t",s[i]);
 printf("\n");
}

/*統(tǒng)計(jì)各單位員工的總門(mén)診量并按降序排列后輸出*/        
void SortTotal(units *head)
{
 units *p=head,*q;
 diseases *pcrs;
 hospitals *phs;
 int count,i,j,t,len=0;
 while(p!=NULL)
 {  //計(jì)算各單位員工的總門(mén)診量
 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è)單位名稱(chēng)
 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("輸出單位名稱(chēng):%s",p->unit);
 printf("統(tǒng)計(jì)單位總?cè)藬?shù):%d\n",p->total);
 p=p->next;
 }
}

關(guān)于使用C語(yǔ)言怎么實(shí)現(xiàn)一個(gè)病例管理系統(tǒng)問(wèn)題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒(méi)有解開(kāi),可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識(shí)。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI