C語(yǔ)言程序設(shè)計(jì)醫(yī)院信息標(biāo)準(zhǔn)管理系統(tǒng)附源代碼_第1頁(yè)
C語(yǔ)言程序設(shè)計(jì)醫(yī)院信息標(biāo)準(zhǔn)管理系統(tǒng)附源代碼_第2頁(yè)
C語(yǔ)言程序設(shè)計(jì)醫(yī)院信息標(biāo)準(zhǔn)管理系統(tǒng)附源代碼_第3頁(yè)
C語(yǔ)言程序設(shè)計(jì)醫(yī)院信息標(biāo)準(zhǔn)管理系統(tǒng)附源代碼_第4頁(yè)
C語(yǔ)言程序設(shè)計(jì)醫(yī)院信息標(biāo)準(zhǔn)管理系統(tǒng)附源代碼_第5頁(yè)
已閱讀5頁(yè),還剩19頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

專業(yè)設(shè)計(jì)匯報(bào)課程名稱:C語(yǔ)言程序設(shè)計(jì)課題名稱:醫(yī)院信息管理系統(tǒng)專業(yè)班別:12本計(jì)算機(jī)科學(xué)和技術(shù)二班姓名:學(xué)號(hào):指導(dǎo)老師:設(shè)計(jì)日期:-5-25老師評(píng)語(yǔ):等級(jí)項(xiàng)目?jī)?yōu)良中及格差專業(yè)設(shè)計(jì)目標(biāo)設(shè)計(jì)基礎(chǔ)要求算法分析源程序代碼源程序代碼測(cè)試設(shè)計(jì)總結(jié)成績(jī)?cè)u(píng)定:指導(dǎo)老師署名:日期:年月日課程設(shè)計(jì)題目醫(yī)院信息管理程序作者姓名:同組組員:摘要利用結(jié)構(gòu)體存放每個(gè)病人信息和每種藥品信息,并使用鏈表存放全部病人信息;能完成對(duì)醫(yī)院內(nèi)全部病人信息注冊(cè)、查詢、刪除和修改等操作,同時(shí)又能對(duì)藥房?jī)?nèi)庫(kù)存藥品進(jìn)行查詢;能夠?qū)㈡湵碇胁∪诵畔⒈A粼谖募校夷軌驅(qū)ξ募胁∪诵畔⑦M(jìn)行讀取和顯示1.專業(yè)設(shè)計(jì)目標(biāo)1、掌握鏈表操作,包含鏈表節(jié)點(diǎn)創(chuàng)建、釋放還有鏈表遍歷2、掌握對(duì)二進(jìn)制文件創(chuàng)建、增添等基礎(chǔ)操作。3、熟悉C語(yǔ)言函數(shù)使用方法,學(xué)會(huì)模塊化處理問(wèn)題和多個(gè)源文件處理方法2.設(shè)計(jì)基礎(chǔ)要求(1、使用結(jié)構(gòu)體來(lái)存放病人信息,結(jié)構(gòu)體中包含病id號(hào)碼、姓名、病歷和消費(fèi)信息,并用鏈表將全部病人信息整合。2、用文件來(lái)存放鏈表信息方便下次再使用該程序時(shí)載入病人信息3、能夠?qū)崿F(xiàn)病人信息注冊(cè)、病人信息查詢、病人消費(fèi)統(tǒng)計(jì)、保留鏈表信息、載入鏈表信息、查詢庫(kù)存等幾項(xiàng)功效。4、要求用四個(gè)源文件main.c、link.c、find.c、save_load.c5、系統(tǒng)完成后應(yīng)實(shí)現(xiàn)類似下面所表示界面3、算法分析1、數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)鏈表中一個(gè)節(jié)點(diǎn)存放一個(gè)病人信息,使用下面結(jié)構(gòu)體類型定義:structpatient{ charid[10]; charname[10]; charcasehist[200]; intcost[3]; inttransfusion; intsurgery; structpatient*next; };其中cost數(shù)組用來(lái)存放病人賣藥個(gè)數(shù)(總共三種藥),casehist存放病歷內(nèi)容,transfusion用來(lái)存放病人輸液花費(fèi),surgery存放手術(shù)花費(fèi)。Structpatient*next用來(lái)指向下一個(gè)病人結(jié)構(gòu)體起始地址從而形成一個(gè)鏈表。另外還要用到一個(gè)結(jié)構(gòu)體來(lái)存放庫(kù)存中目前藥品情況。structstorage{ intamount[3]; intprice[3];};2、函數(shù)定義程序代碼有main.c、link.c、find.c、save_load.c四個(gè)源文件組成,使用頭文件head.h把四個(gè)源文件連接起來(lái),四個(gè)文件中所包含函數(shù)說(shuō)明如表所表示。源文件函數(shù)原型功效說(shuō)明Main.cvoidtest()檢測(cè)有沒(méi)有存放病人二進(jìn)制文件voidinit(structstorage*temp)初始化庫(kù)存中藥品,參數(shù)為指向structstorage類型指針voidprintmenu()打印提醒菜單Voidliststock(structstoragetemp)列出庫(kù)存中藥品structpatient*enroll()注冊(cè)新病人信息voidfreeall(structpatient*temp)清除鏈表內(nèi)容,參數(shù)為指向structpatient類型指針Find.cvoidsearch(structpatient*temp)查詢單個(gè)病人信息,參數(shù)為指向structpatient類型指針voidlistall(structpatient*temp)列出全部病人信息,參數(shù)為指向structpatient類型指針Link.cstructpatient*insert(structpatient*head,structpatient*rea 加入新節(jié)點(diǎn),參數(shù)為指向structpatient類型指針voidmodify(structpatient*temp)修改病人病歷,參數(shù)為指向structpatient類型指針voidbuy(structpatient*temp,structstorage*s)/用于病人消費(fèi)處理,參數(shù)為指向structpatient類型指針和指向structstorage指針Save_load.cvoidsave(structpatient*head)將鏈表信息保留到文件中,參數(shù)為指向structpatient類型指針structpatient*load(structpatient*head)將文件信息寫入到鏈表中,參數(shù)為指向structpatient類型指針3、處理過(guò)程(1)檢驗(yàn)存放病人信息文件是否存在,若不存在則創(chuàng)建一個(gè)新文件并設(shè)置flag值為1,以標(biāo)識(shí)現(xiàn)在能夠?qū)︽湵磉M(jìn)行操作。(2)初始化庫(kù)存令巴米爾、感冒靈、病毒唑3種藥數(shù)量分別為20、20、10,價(jià)格分別為5、9、16。(3)輸出提醒菜單讓用戶懸著要操作項(xiàng)目.1)寫病歷前先檢驗(yàn)是否有可用鏈表(此標(biāo)識(shí)為flag值,若為1則代表能夠修改病歷,不然要求用戶重新做出選擇)。確定有可用鏈表以后進(jìn)入modify函數(shù)。要求用戶輸入病人id號(hào)碼,然后在鏈表中尋求該病所對(duì)應(yīng)節(jié)點(diǎn),若無(wú)此病人id則直接輸出提醒信息后返回:若找到后,先輸出原來(lái)病歷內(nèi)容,然后提醒用戶輸入目前日期和新添加病歷內(nèi)容,調(diào)用strcmp函數(shù)將新內(nèi)容追加到原來(lái)casehist字符串?dāng)?shù)組中。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("請(qǐng)輸入新病歷內(nèi)容\n"); gets(d); strcat(temp->casehist,d);········2)載入鏈表信息是首先定義一個(gè)文件指針,然后以只讀方法打開文件。若失敗則輸出提醒信息返回,成功后調(diào)用malloc函數(shù)來(lái)申請(qǐng)一塊內(nèi)存,用read函數(shù)將文件內(nèi)容寫入到節(jié)點(diǎn)中,隨即調(diào)用insert函數(shù)將節(jié)點(diǎn)加入鏈表,如此循環(huán)下去直到fread函數(shù)返回0值,即文件已經(jīng)讀到了末尾時(shí),再將鏈表頭指針?lè)祷亟o主函數(shù)即可。Flag值置為1,用來(lái)代表已經(jīng)有可用鏈表。if((fp=fopen("data","r"))==0){ printf("文件不存在!"); returnhead; } while(1){ rear=(structpatient*)malloc(sizeof(structpatient)); if(fread(rear,sizeof(structpatient),1,fp)) head=insert(head,rear); } else{ free(rear); flag=1; break; } }4、源程序代碼/*head.h*/#ifndefFIRST#include<stdlib.h>#include<stdio.h>#include<string.h>structpatient{ //存放一個(gè)病人信息charid[10]; //id數(shù)組存放病人號(hào)碼 charname[10]; //name數(shù)組存放病人姓名 charcasehist[200]; //casehist存放病歷內(nèi)容 intcost[3]; //cost數(shù)組存放病人買藥個(gè)數(shù)(總共三種) inttransfusion; //transfusion存放病人輸液花費(fèi) intsurgery; //surgery存放手術(shù)花費(fèi) structpatient*next; //structpatient*next用來(lái)指向下一個(gè)病人結(jié)構(gòu)體起始地址從而形成一個(gè)鏈表};structstorage{ //存放庫(kù)存中目前藥品情況intamount[3]; intprice[3];};intflag;voidsearch(structpatient*temp); //查詢單個(gè)病人信息,參數(shù)為指向structpatient類型指針voidlistall(structpatient*temp); //列出全部病人信息,參數(shù)為指向structpatient類型指針structpatient*insert(structpatient*head,structpatient*rear); //加入新節(jié)點(diǎn),參數(shù)為指向structpatient類型指針voidmodify(structpatient*temp); //修改病人病歷,參數(shù)為指向structpatient類型指針voidbuy(structpatient*temp,structstorage*s); //用于病人消費(fèi)處理,參數(shù)為指向structpatient類型指針和指向structstorage指針structpatient*load(structpatient*head);//將文件信息寫入到鏈表中,參數(shù)為指向structpatient類型指針voidsave(structpatient*head); //將鏈表信息保留到文件中,參數(shù)為指向structpatient類型指針#defineFIRST#endif/*find.c*/#include"head.h"voidsearch(structpatient*temp){ //定義search函數(shù),查詢單個(gè)病人信息 chart[10]; //定義字符數(shù)組 intsum; //定義整型變量sum printf("請(qǐng)輸入病人id\n"); gets(t); /輸入字符串 while(temp&&strcmp(temp->id,t)){ //比較字符串temp->id和t,其值和temp邏輯和運(yùn)算,結(jié)果為非0時(shí),實(shí)施循環(huán)體 temp=temp->next; } if(temp){ //temp值為非0時(shí),實(shí)施下列步驟 printf("id:%s\n",temp->id); printf("\n姓名:%s",temp->name); printf("\n病歷:\n%s",temp->casehist); printf("\n消費(fèi)統(tǒng)計(jì):\n"); if(temp->cost[0]){ printf("巴米爾 %d個(gè)\n",temp->cost[0]); } if(temp->cost[1]){ printf("感冒靈 %d個(gè)\n",temp->cost[1]); } if(temp->cost[2]){ printf("病毒唑 %d個(gè)\n",temp->cost[2]); } if(temp->transfusion){ printf("輸液費(fèi) %d\n",temp->transfusion); } if(temp->surgery){ printf("手術(shù)費(fèi) %d\n",temp->surgery); } sum=temp->cost[0]*5+temp->cost[1]*9+temp->cost[2]*16+temp->transfusion+temp->surgery; //計(jì)算sum值 printf("總費(fèi)用 %d元",sum); } else{ printf("無(wú)該病人信息!\n"); }}voidlistall(structpatient*temp){ //定義listall函數(shù),列出全部病人信息 printf("id 姓名\n"); while(temp){ printf("%s %s\n",temp->id,temp->name); temp=temp->next; }}/*link.c*/#include"head.h"structpatient*insert(structpatient*head,structpatient*rear){ /*!!!!!!能夠出現(xiàn)反復(fù)id*/ structpatient*temp; if(head){ temp=head; while(temp->next){ temp=temp->next; } temp->next=rear; rear->next=0; } else{ head=rear; rear->next=0; } returnhead;}voidmodify(structpatient*temp){ //修改病人病歷 chart[10],d[200]; //定義字符組 chara[4],b[2],c[2]; //定義字符組 printf("請(qǐng)輸入病人id\n"); gets(t); //輸入病人id while(temp&&strcmp(temp->id,t)){ //自動(dòng)查找病人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(chǎn)接到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("請(qǐng)輸入新病歷內(nèi)容\n"); gets(d); //輸入新病歷內(nèi)容 strcat(temp->casehist,d); //把字符串d接到temp->casehist后面 strcat(temp->casehist,"\n"); //把字符"\n"接到temp->casehist后面 } else{ printf("無(wú)此病人信息!\n"); }}voidbuy(structpatient*temp,structstorage*s){ //病人消費(fèi)處理 chart[10]; inta,b,c,d,e; intflag1; printf("請(qǐng)輸入病人id\n"); gets(t); //輸入病人id while(temp&&strcmp(temp->id,t)){ //自動(dòng)查找病人id temp=temp->next; } if(temp){ flag1=0; do{ printf("請(qǐng)輸入買入巴米爾個(gè)數(shù):\n"); scanf("%d",&a); flag1=0; if(a>s->amount[0]){ //若輸入值大于庫(kù)存值,則提醒"庫(kù)存不足" printf("庫(kù)存不足!\n"); flag1=1; } }while(flag1); //flag1=1時(shí),實(shí)施循環(huán)體 flag1=0; do{ printf("請(qǐng)輸入買入感冒靈個(gè)數(shù):\n"); scanf("%d",&b); flag1=0; if(b>s->amount[1]){ //若輸入值大于庫(kù)存值,則提醒"庫(kù)存不足" printf("庫(kù)存不足!\n"); flag1=1; } }while(flag1); //flag1=1時(shí),實(shí)施循環(huán)體 flag1=0; do{ printf("請(qǐng)輸入買入病毒唑個(gè)數(shù):\n"); scanf("%d",&c); flag1=0; if(c>s->amount[2]){ //若輸入值大于庫(kù)存值,則提醒"庫(kù)存不足" printf("庫(kù)存不足!\n"); flag1=1; } }while(flag1); //flag1=1時(shí),實(shí)施循環(huán)體 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("請(qǐng)輸入輸液費(fèi)\n"); scanf("%d",&d); temp->transfusion+=d; //temp->transfusion和d值相加后賦給temp->transfusion printf("請(qǐng)輸入手術(shù)費(fèi)\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購(gòu)置成功!\n"); } else{ printf("無(wú)此病人信息!\n"); }}/*main.h*/#include"head.h"voidtest(); //檢測(cè)有沒(méi)有存放病人二進(jìn)制文件voidinit(structstorage*temp); //初始化庫(kù)存中藥品,參數(shù)為指向structstorage類型指針voidprintmenu(); //打印提醒菜單voidliststock(structstoragetemp); //列出庫(kù)存中藥品structpatient*enroll(); //注冊(cè)新病人信息voidfreeall(structpatient*temp); //清除鏈表內(nèi)容,參數(shù)為指向structpatient類型指針voidmain(){ structpatient*head=0,*rear; structstoragestock; charch; printf("歡迎使用醫(yī)院管理系統(tǒng)\n"); test(); init(&stock); while(1){ printmenu(); fflush(stdin); ch=getchar(); fflush(stdin); switch(ch){ case'1': if(flag){ //檢驗(yàn)是否有可用鏈表 rear=enroll(); head=insert(head,rear); //調(diào)用insert函數(shù)將節(jié)點(diǎn)加入鏈表 printf("注冊(cè)成功!\n"); } else{ printf("您沒(méi)有載入信息不能注冊(cè)!\n"); } break; case'2': if(flag){ //檢驗(yàn)是否有可用鏈表 search(head); //查詢病人信息 } else{ printf("您沒(méi)有載入信息不能進(jìn)行查詢!\n"); } break; case'3': if(flag){ //檢驗(yàn)是否有可用鏈表 modify(head); //修改病人病歷 } else{ printf("您沒(méi)有載入信息不能修改病歷!\n"); } break; case'4': if(flag){ //檢驗(yàn)是否有可用鏈表 buy(head,&stock); //病人消費(fèi) } else{ printf("您沒(méi)有載入信息不能進(jìn)行消費(fèi)!\n"); } break;case'5': if(flag){ //檢驗(yàn)是否有可用鏈表 listall(head); //列出全部病人信息 } else{ printf("您沒(méi)有載入信息!\n"); } break; case'6': freeall(head); //清除鏈表內(nèi)容 head=0; head=load(head); //文件信息寫入到鏈表 break; case'7': if(flag){ //檢驗(yàn)是否有可用鏈表 save(head); //鏈表信息保留到病歷中 } else{ printf("您沒(méi)有載入信息!\n"); } break; case'8': liststock(stock); //庫(kù)存中藥品列表 break; case'9': printf("謝謝使用!\n"); exit(0); break; default: printf("輸入有誤!\n"); break; } }}voidprintmenu(){ //打印提醒菜單 printf("\n"); printf("******************************\n"); printf("1.注冊(cè)新病人信息\n"); printf("2.查詢單個(gè)病人信息\n"); printf("3.寫病歷\n"); printf("4.病人消費(fèi)\n"); printf("5.列出全部病人信息\n"); printf("6.載入全部病人信息\n"); printf("7.保留現(xiàn)有信息\n"); printf("8.查詢庫(kù)存\n"); printf("9.退出\n"); printf("******************************\n");}voidtest(){ //檢測(cè)病人有沒(méi)有存放病人二進(jìn)制文件 FILE*fp; if((fp=fopen("data","r"))==0){ printf("這是您第一次使用該系統(tǒng),在退出時(shí)不要忘了保留信息\n"); fp=fopen("data","w"); //打開外部文件 flag=1; fclose(fp); //文件實(shí)施后返回fp }}voidinit(structstorage*temp){ //初始化庫(kù)存中藥品,參數(shù)為指向structstorage類型指針 temp->amount[0]=20; //初始化庫(kù)存令巴米爾數(shù)量為20 temp->amount[1]=20; //初始化庫(kù)存令感冒靈數(shù)量為20 temp->amount[2]=10; //初始化庫(kù)存令病毒唑數(shù)量為10 temp->price[0]=5; //初始化庫(kù)存令巴米爾價(jià)格為5 temp->price[1]=9; //初始化庫(kù)存令感冒靈價(jià)格為9 temp->price[2]=16; //初始化庫(kù)存令感冒靈價(jià)格為16}voidliststock(structstoragetemp){ //列出庫(kù)存中藥品 inti; printf("藥品名數(shù)量單價(jià)\n"); //輸出庫(kù)存中各藥品數(shù)量、價(jià)格 for(i=0;i<3;i++){ switch(i){case0: printf("巴米爾%d%d\n",temp.amount[i],temp.price[i]); //輸出巴米爾數(shù)量、單價(jià) break; case1: printf("感冒靈%d%d\n",temp.amount[i],temp.price[i]); //輸出感冒靈數(shù)量、單價(jià) break; case2: printf("病毒唑%d%d\n",temp.amount[i],temp.price[i]); //輸出病毒唑數(shù)量、單價(jià) break;} }}structpatient*enroll(){ //注冊(cè)新病人信息 structpatient*rear; rear=(structpatient*)malloc(sizeof(structpatient)); printf("請(qǐng)輸入病人id:\n"); scanf("%s",rear->id); //取得病人id號(hào)碼 printf("請(qǐng)輸入病人姓名\n"); scanf("%s",rear->name); //取得病人姓名 strcpy(rear->casehist,""); //將注冊(cè)信息存放進(jìn)病歷 rear->cost[0]=0;

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論