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

下載本文檔

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

文檔簡介

1、專業(yè)設(shè)計(jì)報(bào)告課程名稱:C語言程序設(shè)計(jì)課題名稱:醫(yī)院信息管理系統(tǒng)專業(yè)班別:12本計(jì)算機(jī)科學(xué)與技術(shù)二班姓名:學(xué)號:指導(dǎo)教師:設(shè)計(jì)日期:2012-5-25教師評語:等級項(xiàng)目jfj優(yōu)良中及格差專業(yè)設(shè)計(jì)目的設(shè)計(jì)基本要求算法分析源程序代碼源程序代碼測試設(shè)計(jì)總結(jié)成績評定:指導(dǎo)教師簽名:日期:2012年月課程設(shè)計(jì)題目醫(yī)院信息管理程序作者姓名:同組成員:摘要利用結(jié)構(gòu)體存儲每個病人的信息和每種藥品的信息,并使用鏈表存儲全部病人的信息;能完成對醫(yī)院內(nèi)所有病人信息的注冊、查詢、刪除和修改等操作,同時又能對藥房內(nèi)庫存的藥品進(jìn)行查詢;可以將鏈表中的病人信息保存在文件中,并且可以對文件中的病人信息進(jìn)行讀取與顯示1.專業(yè)設(shè)計(jì)

2、目的1 、掌握鏈表的操作,包括鏈表節(jié)點(diǎn)的創(chuàng)建、釋放還有鏈表的遍歷2、掌握對二進(jìn)制文件的創(chuàng)建、增添等基本操作。3、熟悉C語言函數(shù)的使用方法,學(xué)會模塊化處理問題以及多個源文件的處理方式2 .設(shè)計(jì)基本要求(1、使用結(jié)構(gòu)體來存儲病人的信息,結(jié)構(gòu)體中包括病的id號碼、姓名、病歷以及消費(fèi)信息,并用鏈表將所有病人信息整合。2、用文件來存儲鏈表的信息以便下次再使用該程序時載入病人信息3、能夠?qū)崿F(xiàn)病人信息的注冊、病人信息的查詢、病人消費(fèi)統(tǒng)計(jì)、保存鏈表信息、載入鏈表信息、查詢庫存等幾項(xiàng)功能。find.c 、save_load.c4、要求用四個源文件main.c、link.c5、系統(tǒng)完成后應(yīng)實(shí)現(xiàn)類似下面所示界面G:

3、程序設(shè)計(jì)'醫(yī)院信息管理系統(tǒng)D6bU八醫(yī)院信息管理系蛛8I6回回臼最迎使用醫(yī)院管理系統(tǒng)芻3息 信息 自1.的代 信人 人入息 人病 后 圾費(fèi)有有有存 量歷現(xiàn)庫 冊詢病人出入存詢出 自寫病列載保查退 !3、算法分析1、數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)鏈表中的一個節(jié)點(diǎn)存儲一個病人的信息,使用下面的結(jié)構(gòu)體類型定義:structpatientcharid10;charname10;charcasehist200;intcost3;inttransfusion;intsurgery;structpatient*next;;其中cost數(shù)組用來存儲病人賣藥的的個數(shù)(總共三種藥),casehist存儲病歷內(nèi)容,trans

4、fusion用來存儲病人輸液的花費(fèi),surgery存儲手術(shù)的花費(fèi)。Structpatient*next用來指向下一個病人結(jié)構(gòu)體的起始地址從而形成一個鏈表。此外還要用到一個結(jié)構(gòu)體來存儲庫存中當(dāng)前的藥品情況。structstorageintamount3;intprice3;2、函數(shù)定義程序代碼有main.c、link.c、find.c、save_load.c四個源文件組成,使用頭文件head.h把四個源文件連接起來,四個文件中所包含的函數(shù)說明如表所示。源文件函數(shù)原型功能說明voidtest()檢測有無存儲病人的二進(jìn)制文件voidinit(struct*temp)storage初始化庫存中的藥品,

5、參數(shù)為指向storage類型的指針structvoidprintmenu()打印提示菜單Main.cVoidliststock(structstoragetemp)列出庫存中的藥品structpatient*enroll()注冊新病人信息voidfreeall(struct*temp)patient清除鏈表內(nèi)谷,參數(shù)為指向structpatient類型的指針Find.cvoidsearch(structpatient*temp)查詢單個病人的信息,參數(shù)為指向patient典型的指針structvoidlistall(struct*temp)patient列出所有病人的信息,參數(shù)為指向patie

6、nt典型的指針structLink.cstruct patient*insert(struct patient*head,struct patient *rea加入新ij點(diǎn),參數(shù)為指向 struct patient 類型的指針void modify(struct patient*temp)修改病人病歷,參數(shù)為指向struct patient類型的指針void buy(struct patient*temp,struct storage *s)/用于病人的消費(fèi)處理,參數(shù)為指向structpatient 類型的指針與指向struct storage的指針Save_load.cvoid save(s

7、tructpatient*head)將鏈表信息保存到文件中,參婁struct patient類型的指針k為指向struct patient *load(struct patient *head)將文件信息寫入到鏈表中,參婁struct patient類型的指針k為指向3、處理過程(1)檢查存儲病人信息的文件是否存在,若不存在則創(chuàng)建一個新文件并設(shè)置flag值為1,以標(biāo)記現(xiàn)在可以對鏈表進(jìn)行操作。(2)初始化庫存令巴米爾、感冒靈、病毒陛3種藥的數(shù)量分別為20、20、10,價(jià)格分別為5、9、16。(3)輸出提示菜單讓用戶懸著要操作的項(xiàng)目.1)寫病歷前先檢查是否有可用的鏈表(此標(biāo)記為flag的值,若為1

8、則代表可以修改病歷,否則要求用戶重新做出選擇)。確認(rèn)有可用鏈表之后進(jìn)入modify函數(shù)。要求用戶輸入病人的id號碼,然后在鏈表中尋找該病所對應(yīng)的節(jié)點(diǎn),若無此病人的id則直接輸出提示信息后返回:若找到后,先輸出原來的病歷內(nèi)容,然后提示用戶輸入當(dāng)前日期和新添加的病歷內(nèi)容,調(diào)用strcmp函數(shù)將新內(nèi)容追加到原來的casehist字符串?dāng)?shù)組中。printf("原有病歷:sn",temp->casehist);printf("輸入當(dāng)前日期年份)gets(a);printf("輸入當(dāng)前月份");gets(b);printf("輸入當(dāng)前日子&

9、quot;);gets(c);strcat(temp->casehist,a);strcat(temp->casehist,"/");strcat(temp->casehist,b);strcat(temp->casehist,"/");strcat(temp->casehist,c);strcat(temp->casehist,":");printf("請輸入新病歷的內(nèi)容n");gets(d);strcat(temp->casehist,d);2)載入鏈表信息是首先定義一

10、個文件指針,然后以只讀方式打開文件。若失敗則輸出提示信息返回,成功后調(diào)用malloc函數(shù)來申請一塊內(nèi)存,用read函數(shù)將文件內(nèi)容寫入到節(jié)點(diǎn)中,隨后調(diào)用insert函數(shù)將節(jié)點(diǎn)加入鏈表,如此循環(huán)下去直到fread函數(shù)返回0值,即文件已經(jīng)讀到了末尾時,再將鏈表的頭指針返回給主函數(shù)即可。Flag值置為1,用來代表已有可用鏈表。if(fp=fopen("data","r")=0)printf("文件不存在!");returnhead;while(1)rear=(structpatient*)malloc(sizeof(structpatient

11、);if(fread(rear,sizeof(structpatient),1,fp)head=insert(head,rear);elsefree(rear);flag=1;break;4、源程序代碼/*head.h*/#ifndefFIRST#include<stdlib.h>#include<stdio.h>#include<string.h>/ 存儲一個病人的信息/id 數(shù)組存儲病人號碼/name 數(shù)組存儲病人姓名/casehist 存儲病歷內(nèi)容/cost 數(shù)組存儲病人買藥的個數(shù)(總共三種)/transfusion 存儲病人輸液的花費(fèi)/surgery

12、 存儲手術(shù)的花費(fèi)用來指向下一個病人結(jié)構(gòu)體的起始地址從而形成一個鏈表/ 存儲庫存中當(dāng)前的藥品情況structpatientcharid10;charname10;charcasehist200;intcost3;inttransfusion;intsurgery;structpatient*next;/structpatient*next;structstorageintamount3;intprice3;intflag;voidsearch(structpatient*temp);/查詢單個病人的信息,參數(shù)為指向structpatient類型的指針voidlistall(structpatie

13、nt*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的指針structpa

14、tient*load(structpatient*head);/將文件信息寫入到鏈表中,參數(shù)為指向structpatient類型的指針voidsave(structpatient*head);/將鏈表信息保存到文件中,參數(shù)為指向structpatient類型的指針#defineFIRST#endif/*find.c*/#include"head.h"voidsearch(structpatient*temp)chart10;intsum;printf("請輸入病人的idn");gets(t);while(temp&&strcmp(temp

15、->id,t)/ 定義 search 函數(shù) , 查詢單個病人的信息/ 定義字符數(shù)組/ 定義整型變量sum/ 輸入字符串/比較字符串temp->id和t,其值和temp邏輯與運(yùn)算,結(jié)果為非0時,執(zhí)行循環(huán)體temp=temp->next;/temp 的值為非 0 時,執(zhí)行下列步驟if(temp)printf("id:%sn",temp->id);printf("n printf("n printf("n姓名:%s",temp->name);病歷:n%s",temp->casehist);if(

16、temp->cost0)printf(" 巴米爾if(temp->cost1)printf(" 感冒靈if(temp->cost2)printf(" 病毒唑%公 n",temp->cost0);%公 n",temp->cost1);%公 n",temp->cost2);消費(fèi)記錄:n");if(temp->transfusion)printf("輸液費(fèi)%dn",temp->transfusion);if(temp->surgery)printf(&quo

17、t;手術(shù)費(fèi)%dn",temp->surgery);sum=temp->cost0*5+temp->cost1*9+temp->cost2*16+temp->transfusion+temp->surgery;/計(jì)算sum的值printf("總費(fèi)用d元",sum);elseprintf("無該病人的信息!n");voidlistall(structpatient*temp)/定義listall函數(shù),列出所有病人的信息printf("id姓名n");while(temp)printf(&quo

18、t;%s%sn",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;elsehead=rear;rear-&g

19、t;next=0;returnhead;voidmodify(structpatient*temp)chart10,d200;chara4,b2,c2;printf("請輸入病人的idn");gets(t);while(temp&&strcmp(temp->id,t)/修改病人病歷/定義字符組/定義字符組/輸入病人的id/自動查找病人的idtemp=temp->next;if(temp)printf("原有病歷:%sn",temp->casehist);printf("gets(a);輸入當(dāng)前日期年份"

20、;);/輸入年份printf("輸入當(dāng)前月份");gets(b);printf("輸入當(dāng)前日子");/輸入月份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,"/&q

21、uot;);/把字符“/”接到temp->casehist后面strcat(temp->casehist,c);/把字符串c接到temp->casehist后面strcat(temp->casehist,":");/把字符“:”接到temp->casehist后面printf("請輸入新病歷的內(nèi)容n");gets(d);/輸入新病歷內(nèi)容strcat(temp->casehist,d);/把字符串d接到temp->casehist后面strcat(temp->casehist,"n");/

22、把字符"n"接到temp->casehist后面elseprintf("無此病人信息!n");voidbuy(structpatient*temp,structstorage*s)chart10;inta,b,c,d,e;intflag1;printf("請輸入病人的idn");gets(t);while(temp&&strcmp(temp->id,t)temp=temp->next;/病人消費(fèi)處理/輸入病人的id/自動查找病人的idif(temp)flag1=0;doprintf("請輸入

23、買入巴米爾的個數(shù):n");scanf("%d",&a);flag1=0;if(a>s->amount0)/若輸入的值大于庫存的值,則提示"庫存不足"printf("庫存不足!n");flag1=1;while(flag1);/flag1=1時,執(zhí)行循環(huán)體flag1=0;doprintf("請輸入買入感冒靈的個數(shù):n");scanf("%d",&b);flag1=0;if(b>s->amount1)/若輸入的值大于庫存的值,則提示"庫存不

24、足"printf("庫存不足!n");flag1=1;while(flag1);/flag1=1時,執(zhí)行循環(huán)體flag1=0;doprintf("請輸入買入病毒唑的個數(shù):n");scanf("%d",&c);flag1=0;if(c>s->amount2)printf("庫存不足!flag1=1;/若輸入的值大于庫存的值,則提示n");"庫存不足"while(flag1);/flag1=1時,執(zhí)行循環(huán)體執(zhí)行循環(huán)體temp->cost0temp->cost

25、0+=a;/temp->cost0和a的值相加后賦給temp->cost1temp->cost1+=b;/temp->cost1和b的值相加后賦給temp->cost2temp->cost2+=c;printf("請輸入輸液費(fèi)n");scanf("%d",&d);/temp->cost2和c的值相加后賦給temp->transfusion+=d;temp->transfusionprintf("請輸入手術(shù)費(fèi)n");scanf("%d",&e);/

26、temp->transfusion和d的值相加后賦給temp->surgery+=e;/temp->surgery和e的值相加后賦給temp->surgerys->amount0-=a;/s->amount0減去a的值后賦給s->amount0s->amount1-=b;/s->amount1減去b的值后賦給s->amount1s->amount2-=c;/s->amount2減去c的值后賦給s->amount2printf("n購買成功!n");elseprintf("無此病人信息!n

27、");/*main.h*/#include"head.h"void test();void init(struct storage *temp);/ 初始化庫存中的藥品,參數(shù)為指向/檢測有無存儲病人的二進(jìn)制文件struct storage 類型的指針void printmenu();void liststock(struct storage temp);struct patient *enroll();void freeall(struct patient *temp);patient 類型的指針void main()struct patient *head=0,

28、*rear;struct storage stock;char ch;printf(" 歡迎使用醫(yī)院管理系統(tǒng)n");test();init(&stock);while(1) printmenu();fflush(stdin);ch=getchar();fflush(stdin);switch(ch)case '1':if(flag)rear=enroll();head=insert(head,rear);printf(" 注冊成功 !n");/ 檢查是否有可用的鏈表打印提示菜單列出庫存中的藥品注冊新病人信息清除鏈表內(nèi)容,參數(shù)為指向

29、 struct/ 調(diào)用 insert 函數(shù)將節(jié)點(diǎn)加入鏈表elseprintf("您沒有載入信息不能注冊!n");break;case'2':if(flag)search(head);elseprintf("您沒有載入信息不能進(jìn)行查詢break;case'3':if(flag)modify(head);elseprintf("您沒有載入信息不能修改病歷break;case'4':if(flag)buy(head,&stock);elseprintf("您沒有載入信息不能進(jìn)行消費(fèi)break;c

30、ase'5':if(flag)listall(head);elseprintf("您沒有載入信息!n");break;case'6':freeall(head);head=0;head=load(head);break;case'7':if(flag)save(head);elseprintf("您沒有載入信息!n");/檢查是否有可用的鏈表/查詢病人信息!n");/檢查是否有可用的鏈表/修改病人病歷!n");/檢查是否有可用的鏈表/病人的消費(fèi)!n");/檢查是否有可用的鏈表/

31、列出所有病人信息/清除鏈表內(nèi)容/文件信息寫入到鏈表/檢查是否有可用的鏈表/鏈表信息保存到病歷中break;case'8':liststock(stock);break;case'9':printf("謝謝使用!n");exit(0);break;default:printf("輸入有誤!n");break;/庫存中藥品列表voidprintmenu()printf("n");printf("*n");/打印提示菜單printf("1.printf("2.print

32、f("3.printf("4.printf("5.printf("6.printf("7.printf("8.printf("9.注冊新病人信息n");查詢單個病人信息n");寫病歷n");病人消費(fèi)n");列出所有病人的信息n");載入所有病人信息n");保存現(xiàn)有信息n");查詢庫存n");退出n");printf("*n");voidtest()/檢測病人有無存儲病人的二進(jìn)制文件FILE*fp;if(fp=fope

33、n("data","r")=0)printf("這是您第一次使用該系統(tǒng),在退出時不要忘了保存信息n");fp=fopen("data","w");/打開外部文件flag=1;fclose(fp);/文件執(zhí)行后返回fpvoidinit(structstorage*temp)/初始化庫存中的藥品,參數(shù)為指向structstorage類型的指針temp->amount0=20;/初始化庫存令巴米爾數(shù)量為20temp->amount1=20;temp->amount2=10;temp-

34、>price0=5;temp->price1=9;temp->price2=16;/ 列出庫存中的藥品/ 輸出庫存中各藥品的數(shù)量、價(jià)格/初始化庫存令感冒靈數(shù)量為20/初始化庫存令病毒唑數(shù)量為10/初始化庫存令巴米爾價(jià)格為5/初始化庫存令感冒靈價(jià)格為9/初始化庫存令感冒靈價(jià)格為16voidliststock(structstoragetemp)inti;printf("藥品名數(shù)量單價(jià)n");for(i=0;i<3;i+)switch(i)case0:printf("巴米爾break;case 1:printf("感冒靈break;c

35、ase 2:printf("病毒唑%d%dn",temp.amounti,temp.pricei);/輸出巴米爾的數(shù)量、單價(jià)%d%dn",temp.amounti,temp.pricei);/輸出感冒靈的數(shù)量、單價(jià)%d%dn",temp.amounti,temp.pricei);/輸出病毒唑的數(shù)量、單價(jià)break;structpatient*enroll()/注冊新病人信息structpatient*rear;rear=(structpatient*)malloc(sizeof(structpatient);printf("請輸入病人id:n&

36、quot;);scanf("%s",rear->id);/獲得病人id號碼printf("請輸入病人姓名n");scanf("%s",rear->name);/獲得病人姓名strcpy(rear->casehist,"");/將注冊信息存儲進(jìn)病歷rear->cost0=0;/初始化令購買巴米爾的花費(fèi)為0rear->cost1=0;/初始化令購買感冒靈的花費(fèi)為0rear->cost2=0;/初始化令購買病毒唑的花費(fèi)為0rear->surgery=0;/初始化令手術(shù)的花費(fèi)為0rear->transfusion=0;/初始化令病人輸液的花費(fèi)為0returnrear;/ 清 除 鏈 表 內(nèi) 容 , 參 數(shù) 為 指 向 structvoidfreeall(structpatient*temp)patient類型的指針structpatient*t;while(temp)t=temp;temp=temp->next;fr

溫馨提示

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

評論

0/150

提交評論