C語言程序設(shè)計醫(yī)院信息管理系統(tǒng)附源代碼_第1頁
C語言程序設(shè)計醫(yī)院信息管理系統(tǒng)附源代碼_第2頁
C語言程序設(shè)計醫(yī)院信息管理系統(tǒng)附源代碼_第3頁
C語言程序設(shè)計醫(yī)院信息管理系統(tǒng)附源代碼_第4頁
C語言程序設(shè)計醫(yī)院信息管理系統(tǒng)附源代碼_第5頁
免費預(yù)覽已結(jié)束,剩余18頁可下載查看

下載本文檔

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

文檔簡介

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

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

3、5、系統(tǒng)完成后應(yīng)實現(xiàn)類似下面所示界面程序設(shè)計二醫(yī)院信息管理系統(tǒng)Debug醫(yī)院信息管理系統(tǒng).exe歐迎使用醫(yī)院I 息息 信息 息總 的住 信人 人入息 人病 .病 病個費有有有存 新單歷現(xiàn)庫 冊詢病人出入存詢出 在查寫病列投保查退 12314,15,678?3、算法分析1、數(shù)據(jù)結(jié)構(gòu)設(shè)計鏈表中的一個節(jié)點存儲一個病人的信息,使用下面的結(jié)構(gòu)體類型定義:struct patientchar id10;char name10;char casehist200;int cost3;int transfusion;int surgery;struct patient *next;);其中cost數(shù)組用來存儲病

4、人賣藥的的個數(shù)(總共三種藥),casehist存儲病歷內(nèi)容,transfusion用來存 儲病人輸液的花費,surgery存儲手術(shù)的花費。Struct patient *next用來指向下一個病人結(jié)構(gòu)體的起始地址 從而形成一個鏈表。此外還要用到一個結(jié)構(gòu)體來存儲庫存中當(dāng)前的藥品情況。struct storageint amount3;int price3;);2、函數(shù)定義程序代碼有main.c、Hnk.c、find.c、saveoad.c四個源文件組成,使用頭文件head.h把四個源文件連 接起來,四個文件中所包含的函數(shù)說明如表所示。源文件函數(shù)原型功能說明Main.cvoid test()檢測有

5、無存儲病人的一進(jìn)制文件void init(struct storage *temp)初始化庫存中的藥品,參數(shù)為指向struct storage類型的指針void printmenuO打印提示菜單Void liststock(struct storage temp)列出庫存中的藥品struct patient *enroll()注冊新病人信息void freeall(struct patient *temp)清除鏈表內(nèi)容,參數(shù)為指向struct patient類 型的指針Find.cvoid search(struct patient*temp)查詢單個病人的信息,參數(shù)為指向struct pat

6、ient類型的指針void listall(struct patient*temp)列出所有病人的信息,參數(shù)為指向struct patient類型的指針Link.cstruct patient *insert(struct patient *head,struct patient *rea加入新節(jié)點,參數(shù)為指向struct patient類型 的指針void modify(struct patient*temp)修改病人病歷,參數(shù)為指向struct patient類 型的指針void buy(struct patient*temp,struct storage *s)/用于病人的消費處理,參數(shù)

7、為指向struct patient類型的指針與指向struct storage的指 針Savejoad.cvoid save(struct patient*head)將鏈表信息保存到文件中,參數(shù)為指向struct patient類型的指針struct patient *load(struct patient *head)將文件信息寫入到鏈表中,參數(shù)為指向struct patient類型的指針3、處理過程(1)檢查存儲病人信息的文件是否存在,若不存在則創(chuàng)建一個新文件并設(shè)置flag值為1,以標(biāo)記現(xiàn)在 可以對鏈表進(jìn)行操作。(2)初始化庫存令巴米爾、感冒靈、病毒哩3種藥的數(shù)量分別為20、20、10,價

8、格分別為5、9、16。(3)輸出提示菜單讓用戶懸著要操作的項目.1)寫病歷前先檢查是否有可用的鏈表(此標(biāo)記為flag的值,若為1則代表可以修改病歷,否則要求 用戶重新做出選擇確認(rèn)有可用鏈表之后進(jìn)入modify函數(shù)。要求用戶輸入病人的id號碼,然后在鏈表中 尋找該病所對應(yīng)的節(jié)點,若無此病人的id則直接輸出提示信息后返回:若找到后,先輸出原來的病歷內(nèi)容, 然后提示用戶輸入當(dāng)前日期和新添加的病歷內(nèi)容,調(diào)用strcmp函數(shù)將新內(nèi)容追加到原來的casehist字符串 數(shù)組中。printf("原有病歷:%sn,temp->casehist);printf,輸入當(dāng)前日期年份”);gets(a

9、);printf,輸入當(dāng)前月份”);gets(b);print©”輸入當(dāng)前日子”);gets(c);strcat(temp->casehist,a);st rcat( temp->casehist,17H);st rcat( temp->casehist,b);st rcat( temp->casehist,17H);strcat(temp->casehist,c);st rcat( temp->casehist,M:11);print©”請輸入新病歷的內(nèi)容n”);gets(d);strcat(temp->casehist5d);2

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

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

12、struct patientchar id10;char name10;char casehist200;int cost3;int transfusion;int surgery;struct patient *next;/struct patient *next用來指向下一個病人結(jié)構(gòu)體的起始地址從而形成一個鏈表struct storageint amount3;int price3;);int flag;void search(struct patient *temp);存儲庫存中當(dāng)前的藥品情況查詢單個病人的信息,參數(shù)為指向struct patient類型的指void listall(st

13、ruct patient *temp);列出所有病人的信息,參數(shù)為指向sWuct patient類型的指struct patient *insert(struct patient *head,struct patient *rear);加入新節(jié)點,參數(shù)為指向struct patient類型的指針void modify(struct patient *temp);修改病人病歷,參數(shù)為指向struct patient類型的指針 void buy(struct patient *temp,struct storage *s);用于病人的消費處理,參數(shù)為指向struct patient類型的指針與指向

14、struct storage的指針 struct patient *load(struct patient *head);將文件信息寫入到鏈表中,參數(shù)為指向struct patient類型的指針 void save(struct patient *head);將鏈表信息保存到文件中,參數(shù)為指向struct patient類型的指針#define FIRST#endif#include Mhead.hMvoid search(struct patient *temp)char t10;int sum;printf("請輸入病人的idnn);gets(t);while(temp&

15、&strcmp(temp->id9t)定義search函數(shù),查詢單個病人的信息定義字符數(shù)組定義整型變量sum瑜入字符串比較字符串temp->id和t,其值和temp邏輯與運算,結(jié)果為非。時,執(zhí)行循環(huán)體 temp=teinp->next;)if(temp)printf(Hid: %snftemp->id);printf(un 姓名:%sH,temp->name);printf(un 病歷:n % s*1 ,temp->casehist);printf(un 消費記錄/temp的值為非0時,執(zhí)行下列步驟if(temp->cost0)printf(“

16、巴米爾if(temp->cost2)printf("病毒嚏if(temp->transfusion)printf("輸液費%dnH4enip->transfusion);if(teinp->surgery)printf("手術(shù)費% (ln ,14emp->su rger y);suin=teinp->cost0*5+temp->costl*9+temp->cost2*16+tenip->transfusion+temp->surgery;計算sum的值printf("總費用%d元”弄um);el

17、seprintfC無該病人的信息! n');void listall(struct patient *temp)printfC'id姓名 n");while(temp)printf(u%s %snu,temp->id4einp->name);temp=temp>>next;定義Hstall函數(shù),列出所有病人的信息/*linkx*/#include Mhead.hMstruct patient *insert(struct patient *head,struct patient *rear) /*!可以出現(xiàn)重復(fù) id*/ struct pati

18、ent *temp;if(head)temp=head;while(temp->next)temp=temp->next;temp->next=rear;rear->next=O;)elseheadtrear;rear->next=O;)return head;void modify(struct patient *temp)char t10,(1(200;char a4,b2,c2;printf("請輸入病人的ldn”);gets(t);修改病人病歷定義字符組定義字符組輸入病人的idwhile(temp&&strcmp(temp->

19、;id4) temp=temp>>next;)if(temp)printf(“原有病歷:%snH>temp->casehist); printf,輸入當(dāng)前日期年份”); gets(a);自動查找病人的idprintfC輸入當(dāng)前月份”);gets(b);printf,輸入當(dāng)前日子”);gets(c);strcat(temp->casehist,a);st rcat( temp->casehist,17H);st rcat(temp->casehist,b);st rcat( temp->casehist,17H);strcat(temp->c

20、asehist,c);st rcat (temp->casehist,M:M);printf,請輸入新病歷的內(nèi)容n");gets(d);strcat(temp->casehist,d);strcat(temp->casehist/,n,1);)elseprintf("無此病人信息! n");輸入年份輸入月份/編入日期把字符串a(chǎn)接到temp->casehist后面 把字符接到temp->casehist后面 把字符串b接到temp->casehist后面 把字符接到temp->casehist后面 把字符串c接到temp-&

21、gt;casehist后面 把字符接到tempocasehist后面輸入新病歷內(nèi)容把字符串d接到temp>casehist后面 把字符“Vi”接到temp->casehist后面void buy(struct patient *temp,struct storage *s)病人消費處理char t10;int a,b,c,d,e;int flagl;printf(“請輸入病人的idii");gets(t);/輸入病人的idwhile(teinp&&strcinp(temp->id9t)自動查找病人的 idteinp=temp->next; )

22、if(temp) flagl=0; do printf(”請輸入買入巴米爾的個數(shù):n"); scanf(tt%d,&a);flagl=0;if(a>s->amount0)(若輸入的值大于庫存的值,貝U提示“庫存不足”printfC庫存不足! n");flagl=l;)while(Hagl);時,執(zhí)行循環(huán)體flagl=O; do printf(”請輸入買入感冒靈的個數(shù): 3canf("%d'',&b);flagl=O;if(b>s->amountl)若輸入的值大于庫存的值,則提示“庫存不足”print©

23、;”庫存不足! n"); flagl=l; ) while(flagl);/flagl=l 時,執(zhí)行循環(huán)體flagl=O; do printf(”請輸入買入病毒哩的個數(shù):!f); scanf(H%(lf&c);flagl=O;若輸入的值大于庫存的值,則提示“庫存不足”時,執(zhí)行循環(huán)體/temp->cost0和a的值相加后賦給/temp->costl和b的值相加后賦給/temp->cost2和c的值相加后賦給if(c>s->amount2)print©”庫存不足! nu); flagl=l;)while(flagl);temp->co

24、st0+=a;temp->cost0temp->costl+=b;temp->costltemp->cost2+=c;temp->cost2printf,請輸入輸液費n”);scanf(H%dH,&d);/teinp->transfusion 和 d 的值相加后賦給 temp->transfusion/temp->surgery 和 e 的值相加后賦給 temp->surgerys>an】ount0減去a的值后賦給s->amount0s>aniountl減去 b 的值后賦給 s->amountl/s>a

25、n】ount2減去 c 的 賦給 s->amount2temp->transfusion+=d;printf,請輸入手術(shù)費n”);scanf(n%df&e);temp->surgery+=e;s->aniount0-=a;s->aniountl-=b;s->ainount2-=c;printf(nn 購買成功! n");)elseprintfC無此病人信息! nM);檢測有無存儲病人的二進(jìn)制文件參數(shù)為指向struct storage類型的指針打印提示菜單列出庫存中的藥品注冊新病人信息清除鏈表內(nèi)容,參數(shù)為指向struct patient檢查是

26、否有可用的鏈表調(diào)用insert函數(shù)將節(jié)點加入鏈表/*main.h*/#include Mhead.hMvoid test();void init(struct storage *temp);初始化庫存中的藥品,void printnienuO;void liststock(struct storage temp);struct patient *enroll。;void freeall(struct patient *temp);類型的指針void inain()struct patient *head=O,*rear;struct storage stock;char ch;printf(&

27、quot;歡迎使用醫(yī)院管理系統(tǒng)n”);test();init(&stock);while(l) printmenuO;fflush(stdin);ch=getchar();fflush(stdiii);switch(ch)case T:if(flag)rear=enroll。;head=insert(head,rear);printfC 注冊成功!n”);)else (printfC您沒有載入信息不能注冊!n”);)break;case '2':檢查是否有可用的鏈表search(head);查詢病人信息)else print©”您沒有載入信息不能進(jìn)行查詢!n“

28、);)break;case 3:if(flag)檢查是否有可用的鏈表modify(head);修改病人病歷)else ( prints”您沒有載入信息不能修改病歷!n”);)break;case '4':檢查是否有可用的鏈表buy(head,&stock);病人的消費)else printfC您沒有載入信息不能進(jìn)行消費!n");)break;case 5:listall(head);)else print©”您沒有載入信息!n");)break;case '6':freeall(head);head=0;head=load(

29、head);break;case 7:tf(flag)save(head);)else print©”您沒有載入信息!n");)break;case '8':liststock(stock);break;case '9':printf("謝謝使用!n");exit(O);break;檢查是否有可用的鏈表列出所有病人信息清除鏈表內(nèi)容文件信息寫入到鏈表檢查是否有可用的鏈表鏈表信息保存到病歷中庫存中藥品列表default:printfC 輸入有誤!n”); break;void printnienu()printfCXn0);p

30、rintf(M*nH);printf("l.注冊新病人信息n");printf(”2.查詢單個病人信息n”);printf("3.寫病歷 n”);printf("4.病人消費 n”);printf("5.列出所有病人的信息n”);printf("6.載入所有病人信息n");printf("7.保存現(xiàn)有信息n");printf(”8.查詢庫存n”);printf("9.退出 n”);printf(M*nH);打印提示菜單void test()FILE *fp;if(fp=fopen(u(lataM

31、,nru)=0) print©”這是您第一次使用該系統(tǒng),fp=fopen(Hdata,MwM);flag=l; fclose(fp);檢測病人有無存儲病人的二進(jìn)制文件在退出時不要忘了保存信息!】");打開外部文件文件執(zhí)行后返回fpvoid init(struct storage *temp)類型的指針temp->amount0=20;temp->amount 1 =20;temp->amount2=10;temp->price0=5;temp->pricel=9;temp->price2=16;void liststock(struct

32、storage temp) int i;初始化庫存中的藥品,參數(shù)為指向struct storage初始化庫存令巴米爾數(shù)量為20初始化庫存令感冒靈數(shù)量為20初始化庫存令病毒理數(shù)量為10初始化庫存令巴米爾價格為5初始化庫存令感冒靈價格為9/創(chuàng)始化庫存令感胃靈價格為16列出庫存中的藥品printf("藥品名數(shù)量單價n");輸出庫存中各藥品的數(shù)量、價格for(i=0;l<3;i+)switch(i) case 0:printf("巴米爾dbreak;case 1:printf感冒靈 dbreak;case 2:printfC病毒哩 d%dn”,tempamoiint

33、i,teinp.pricei);輸出巴米爾的數(shù)量、單價%dn”,tempan】ounti,temppricei);輸出感冒靈的數(shù)量、單價% dn”,teinpamoiinti,temp, price");輸出病毒嗖的數(shù)量、單價break;struct patient *enroll()注冊新病人信息struct patient *rear;rear=(struct patient * )nialloc(sizeof(struct patient);printfj請輸入病人id:nH);scanf(H %sH,rear->id);printf("請輸入病人姓名n”);s

34、canf(H %sH,rear->naine);strcpy(rear->casehist,M,t);rear->cost0=0;rear->costl=0;rear->cost2=0;rear->surgery=0;rear->transfusion=0;return rear;獲得病人id號碼獲得病人姓名將注冊信息存儲進(jìn)病歷初始化令購買巴米爾的花費為0初始化令購買感冒靈的花費為0初始化令購買病毒哩的花費為0初始化令手術(shù)的花費為0初始化令病人輸液的花費為0清除鏈表內(nèi)容,參數(shù)為指向struct patient類void freeall(struct patient *temp)型的指針struct patient *t;while(temp) t=temp;temp=temp>>next;free(t);C語言程序設(shè)計醫(yī)院信息管理系統(tǒng)附源代碼/*save_load.c*/#include Mhead.hM將文件信息寫入

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論