




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、專業(yè)設(shè)計(jì)報(bào)告課程名稱: C 語 言 程 序 設(shè) 計(jì) 課題名稱: 醫(yī)院信息管理系統(tǒng) 專業(yè)班別: 12本計(jì)算機(jī)科學(xué)與技術(shù)二班 姓 名: 學(xué) 號(hào): 指導(dǎo)教師: 設(shè)計(jì)日期: 2012-5-25 教師評(píng)語:等級(jí)項(xiàng)目?jī)?yōu)良中及格差專業(yè)設(shè)計(jì)目的設(shè)計(jì)基本要求算法分析源程序代碼源程序代碼測(cè)試設(shè)計(jì)總結(jié) 成績(jī)?cè)u(píng)定: 指導(dǎo)教師簽名: 日期: 2012 年 月 日課程設(shè)計(jì)題目 醫(yī)院信息管理程序作者姓名:同組成員:摘要 利用結(jié)構(gòu)體存儲(chǔ)每個(gè)病人的信息和每種藥品的信息,并使用鏈表存儲(chǔ)全部病人的信息;能完成對(duì)醫(yī)院內(nèi)所有病人信息的注冊(cè)、查詢、刪除和修改等操作,同時(shí)又能對(duì)藥房?jī)?nèi)庫(kù)存的藥品進(jìn)行查詢;可以將鏈表中的病人信息保存在文件中,
2、并且可以對(duì)文件中的病人信息進(jìn)行讀取與顯示1專業(yè)設(shè)計(jì)目的 1、掌握鏈表的操作,包括鏈表節(jié)點(diǎn)的創(chuàng)建、釋放還有鏈表的遍歷 2、掌握對(duì)二進(jìn)制文件的創(chuàng)建、增添等基本操作。 3、熟悉C語言函數(shù)的使用方法,學(xué)會(huì)模塊化處理問題以及多個(gè)源文件的處理方式2設(shè)計(jì)基本要求( 1、使用結(jié)構(gòu)體來存儲(chǔ)病人的信息,結(jié)構(gòu)體中包括病的id號(hào)碼、姓名、病歷以及消費(fèi)信息,并用鏈表將所有病人信息整合。 2、用文件來存儲(chǔ)鏈表的信息以便下次再使用該程序時(shí)載入病人信息 3、能夠?qū)崿F(xiàn)病人信息的注冊(cè)、病人信息的查詢、病人消費(fèi)統(tǒng)計(jì)、保存鏈表信息、載入鏈表信息、查詢庫(kù)存等幾項(xiàng)功能。 4、要求用四個(gè)源文件main.c、link.c、find.c、sa
3、ve_load.c 5、系統(tǒng)完成后應(yīng)實(shí)現(xiàn)類似下面所示界面3、算法分析 1、數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)鏈表中的一個(gè)節(jié)點(diǎn)存儲(chǔ)一個(gè)病人的信息,使用下面的結(jié)構(gòu)體類型定義:struct patient char id10;char name10;char casehist200;int cost3;int transfusion;int surgery;struct patient *next;其中cost數(shù)組用來存儲(chǔ)病人賣藥的的個(gè)數(shù)(總共三種藥),casehist存儲(chǔ)病歷內(nèi)容,transfusion用來存儲(chǔ)病人輸液的花費(fèi),surgery存儲(chǔ)手術(shù)的花費(fèi)。Struct patient *next用來指向下一個(gè)病人結(jié)構(gòu)體
4、的起始地址從而形成一個(gè)鏈表。此外還要用到一個(gè)結(jié)構(gòu)體來存儲(chǔ)庫(kù)存中當(dāng)前的藥品情況。struct storage int amount3;int price3; 2、函數(shù)定義程序代碼有main.c、link.c、find.c、save_load.c四個(gè)源文件組成,使用頭文件head.h把四個(gè)源文件連接起來,四個(gè)文件中所包含的函數(shù)說明如表所示。源文件函數(shù)原型功能說明Main.cvoid test()檢測(cè)有無存儲(chǔ)病人的二進(jìn)制文件void init(struct storage *temp)初始化庫(kù)存中的藥品,參數(shù)為指向struct storage類型的指針void printmenu()打印提示菜單Vo
5、id liststock(struct storage temp)列出庫(kù)存中的藥品struct patient *enroll()注冊(cè)新病人信息void freeall(struct patient *temp)清除鏈表內(nèi)容,參數(shù)為指向struct patient類型的指針Find.cvoid search(struct patient *temp)查詢單個(gè)病人的信息,參數(shù)為指向struct patient類型的指針void listall(struct patient *temp)列出所有病人的信息,參數(shù)為指向struct patient類型的指針Link.cstruct patient *
6、insert(struct patient *head,struct patient *rea加入新節(jié)點(diǎn),參數(shù)為指向struct patient類型的指針void modify(struct patient *temp)修改病人病歷,參數(shù)為指向struct patient類型的指針void buy(struct patient *temp,struct storage *s)/用于病人的消費(fèi)處理,參數(shù)為指向struct patient類型的指針與指向struct storage的指針Save_load.cvoid save(struct patient *head)將鏈表信息保存到文件中,參數(shù)
7、為指向struct patient類型的指針struct patient *load(struct patient *head)將文件信息寫入到鏈表中,參數(shù)為指向struct patient類型的指針 3、處理過程(1)檢查存儲(chǔ)病人信息的文件是否存在,若不存在則創(chuàng)建一個(gè)新文件并設(shè)置flag值為1,以標(biāo)記現(xiàn)在可以對(duì)鏈表進(jìn)行操作。(2)初始化庫(kù)存令巴米爾、感冒靈、病毒唑3種藥的數(shù)量分別為20、20、10,價(jià)格分別為5、9、16。(3)輸出提示菜單讓用戶懸著要操作的項(xiàng)目. 1)寫病歷前先檢查是否有可用的鏈表(此標(biāo)記為flag的值,若為1則代表可以修改病歷,否則要求用戶重新做出選擇)。確認(rèn)有可用鏈表之
8、后進(jìn)入modify函數(shù)。要求用戶輸入病人的id號(hào)碼,然后在鏈表中尋找該病所對(duì)應(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)前日子");gets(c);strcat(
9、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); ······
10、;·· 2)載入鏈表信息是首先定義一個(gè)文件指針,然后以只讀方式打開文件。若失敗則輸出提示信息返回,成功后調(diào)用malloc函數(shù)來申請(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í),再將鏈表的頭指針返回給主函數(shù)即可。Flag值置為1,用來代表已有可用鏈表。 if(fp=fopen("data","r")=0)printf("文件不存在!");return head;while(1)rear=(struct patie
11、nt *)malloc(sizeof(struct patient);if(fread(rear,sizeof(struct patient),1,fp)head=insert(head,rear);elsefree(rear);flag=1;break;4、源程序代碼/*head.h*/#ifndef FIRST#include<stdlib.h>#include<stdio.h>#include<string.h>struct patient/存儲(chǔ)一個(gè)病人的信息 char id10;/id數(shù)組存儲(chǔ)病人號(hào)碼char name10;/name數(shù)組存儲(chǔ)病人姓名
12、char casehist200;/casehist存儲(chǔ)病歷內(nèi)容int cost3;/cost數(shù)組存儲(chǔ)病人買藥的個(gè)數(shù)(總共三種)int transfusion;/transfusion存儲(chǔ)病人輸液的花費(fèi)int surgery;/surgery存儲(chǔ)手術(shù)的花費(fèi)struct patient *next;/struct patient *next用來指向下一個(gè)病人結(jié)構(gòu)體的起始地址從而形成一個(gè)鏈表;struct storage/存儲(chǔ)庫(kù)存中當(dāng)前的藥品情況 int amount3;int price3;int flag;void search(struct patient *temp);/查詢單個(gè)病人的信息
13、,參數(shù)為指向struct patient類型的指針void listall(struct patient *temp);/列出所有病人的信息,參數(shù)為指向struct patient類型的指針struct patient *insert(struct patient *head,struct patient *rear);/加入新節(jié)點(diǎn),參數(shù)為指向struct patient類型的指針void modify(struct patient *temp);/修改病人病歷,參數(shù)為指向struct patient類型的指針void buy(struct patient *temp,struct stora
14、ge *s);/用于病人的消費(fèi)處理,參數(shù)為指向struct patient類型的指針與指向struct storage的指針struct patient *load(struct patient *head); /將文件信息寫入到鏈表中,參數(shù)為指向struct patient類型的指針void save(struct patient *head);/將鏈表信息保存到文件中,參數(shù)為指向struct patient類型的指針#define FIRST#endif/*find.c*/#include "head.h"void search(struct patient *temp
15、)/定義search函數(shù),查詢單個(gè)病人的信息char t10;/定義字符數(shù)組int sum;/定義整型變量sumprintf("請(qǐng)輸入病人的idn");gets(t);/輸入字符串while(temp&&strcmp(temp->id,t)/比較字符串temp->id和t,其值和temp邏輯與運(yùn)算,結(jié)果為非0時(shí),執(zhí)行循環(huán)體temp=temp->next;if(temp)/temp的值為非0時(shí),執(zhí)行下列步驟printf("id: %sn",temp->id);printf("n姓名: %s",te
16、mp->name);printf("n病歷: n%s",temp->casehist);printf("n消費(fèi)記錄:n");if(temp->cost0)printf("巴米爾%d個(gè)n",temp->cost0);if(temp->cost1)printf("感冒靈%d個(gè)n",temp->cost1);if(temp->cost2)printf("病毒唑%d個(gè)n",temp->cost2);if(temp->transfusion)print
17、f("輸液費(fèi)%dn",temp->transfusion);if(temp->surgery)printf("手術(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");void listall(struct patien
18、t *temp)/定義listall函數(shù),列出所有病人的信息printf("id姓名n");while(temp)printf("%s%sn",temp->id,temp->name);temp=temp->next;/*link.c*/#include "head.h"struct patient *insert(struct patient *head,struct patient *rear)/*!可以出現(xiàn)重復(fù)id*/struct patient *temp;if(head)temp=head;while(te
19、mp->next)temp=temp->next;temp->next=rear;rear->next=0;elsehead=rear;rear->next=0;return head;void modify(struct patient *temp)/修改病人病歷char t10,d200;/定義字符組char a4,b2,c2;/定義字符組printf("請(qǐng)輸入病人的idn");gets(t);/輸入病人的idwhile(temp&&strcmp(temp->id,t)/自動(dòng)查找病人的idtemp=temp->n
20、ext;if(temp)printf("原有病歷:%sn",temp->casehist);printf("輸入當(dāng)前日期 年份");gets(a);/輸入年份printf("輸入當(dāng)前月份");gets(b);/輸入月份printf("輸入當(dāng)前日子");gets(c);/輸入日期strcat(temp->casehist,a);/把字符串a(chǎn)接到temp->casehist后面strcat(temp->casehist,"/");/把字符“/”接到temp->caseh
21、ist后面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)容st
22、rcat(temp->casehist,d);/把字符串d接到temp->casehist后面strcat(temp->casehist,"n");/把字符"n"接到temp->casehist后面elseprintf("無此病人信息!n");void buy(struct patient *temp,struct storage *s)/病人消費(fèi)處理char t10;int a,b,c,d,e;int flag1;printf("請(qǐng)輸入病人的idn");gets(t);/輸入病人的idwh
23、ile(temp&&strcmp(temp->id,t)/自動(dòng)查找病人的idtemp=temp->next;if(temp)flag1=0;doprintf("請(qǐng)輸入買入巴米爾的個(gè)數(shù):n");scanf("%d",&a);flag1=0;if(a>s->amount0)/若輸入的值大于庫(kù)存的值,則提示"庫(kù)存不足"printf("庫(kù)存不足!n");flag1=1;while(flag1);/flag1=1時(shí),執(zhí)行循環(huán)體flag1=0;doprintf("請(qǐng)輸入
24、買入感冒靈的個(gè)數(shù):n");scanf("%d",&b);flag1=0;if(b>s->amount1)/若輸入的值大于庫(kù)存的值,則提示"庫(kù)存不足"printf("庫(kù)存不足!n");flag1=1;while(flag1);/flag1=1時(shí),執(zhí)行循環(huán)體flag1=0;doprintf("請(qǐng)輸入買入病毒唑的個(gè)數(shù):n");scanf("%d",&c);flag1=0;if(c>s->amount2)/若輸入的值大于庫(kù)存的值,則提示"庫(kù)存不
25、足"printf("庫(kù)存不足!n");flag1=1;while(flag1);/flag1=1時(shí),執(zhí)行循環(huán)體temp->cost0+=a;/temp->cost0和a的值相加后賦給temp->cost0temp->cost1+=b;/temp->cost1和b的值相加后賦給temp->cost1temp->cost2+=c;/temp->cost2和c的值相加后賦給temp->cost2printf("請(qǐng)輸入輸液費(fèi)n");scanf("%d",&d);temp-
26、>transfusion+=d;/temp->transfusion和d的值相加后賦給temp->transfusionprintf("請(qǐng)輸入手術(shù)費(fèi)n");scanf("%d",&e);temp->surgery+=e;/temp->surgery和e的值相加后賦給temp->surgerys->amount0-=a;/s->amount0減去a的值后賦給s->amount0s->amount1-=b;/s->amount1減去b的值后賦給s->amount1s->am
27、ount2-=c;/s->amount2減去c的值后賦給s->amount2printf("n購(gòu)買成功!n");elseprintf("無此病人信息!n");/*main.h*/#include "head.h"void test();/檢測(cè)有無存儲(chǔ)病人的二進(jìn)制文件void init(struct storage *temp);/初始化庫(kù)存中的藥品,參數(shù)為指向struct storage類型的指針void printmenu();/打印提示菜單void liststock(struct storage temp);/列出庫(kù)
28、存中的藥品struct patient *enroll();/注冊(cè)新病人信息void freeall(struct patient *temp);/清除鏈表內(nèi)容,參數(shù)為指向struct patient類型的指針void main()struct patient *head=0,*rear;struct storage stock;char ch;printf("歡迎使用醫(yī)院管理系統(tǒng)n");test();init(&stock);while(1) printmenu();fflush(stdin);ch=getchar();fflush(stdin);switch(c
29、h)case '1':if(flag)/檢查是否有可用的鏈表rear=enroll();head=insert(head,rear);/調(diào)用insert函數(shù)將節(jié)點(diǎn)加入鏈表printf("注冊(cè)成功!n");else printf("您沒有載入信息不能注冊(cè)!n");break;case '2':if(flag)/檢查是否有可用的鏈表search(head);/查詢病人信息else printf("您沒有載入信息不能進(jìn)行查詢!n");break;case '3':if(flag)/檢查是否有可
30、用的鏈表modify(head);/修改病人病歷else printf("您沒有載入信息不能修改病歷!n");break;case '4':if(flag)/檢查是否有可用的鏈表buy(head,&stock);/病人的消費(fèi)else printf("您沒有載入信息不能進(jìn)行消費(fèi)!n");break; case '5':if(flag)/檢查是否有可用的鏈表listall(head);/列出所有病人信息else printf("您沒有載入信息!n");break;case '6':f
31、reeall(head);/清除鏈表內(nèi)容head=0;head=load(head);/文件信息寫入到鏈表break;case '7':if(flag)/檢查是否有可用的鏈表save(head);/鏈表信息保存到病歷中else printf("您沒有載入信息!n");break;case '8':liststock(stock);/庫(kù)存中藥品列表break;case '9':printf("謝謝使用!n");exit(0);break;default:printf("輸入有誤!n");b
32、reak;void printmenu()/打印提示菜單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
33、.查詢庫(kù)存n");printf("9.退出n");printf("*n");void test()/檢測(cè)病人有無存儲(chǔ)病人的二進(jìn)制文件FILE *fp;if(fp=fopen("data","r")=0)printf("這是您第一次使用該系統(tǒng),在退出時(shí)不要忘了保存信息n");fp=fopen("data","w");/打開外部文件flag=1;fclose(fp);/文件執(zhí)行后返回fpvoid init(struct storage *temp)/
34、初始化庫(kù)存中的藥品,參數(shù)為指向struct storage類型的指針temp->amount0=20;/初始化庫(kù)存令巴米爾數(shù)量為20temp->amount1=20;/初始化庫(kù)存令感冒靈數(shù)量為20temp->amount2=10;/初始化庫(kù)存令病毒唑數(shù)量為10temp->price0=5;/初始化庫(kù)存令巴米爾價(jià)格為5temp->price1=9;/初始化庫(kù)存令感冒靈價(jià)格為9temp->price2=16;/初始化庫(kù)存令感冒靈價(jià)格為16void liststock(struct storage temp)/列出庫(kù)存中的藥品int i;printf("
35、藥品名 數(shù)量 單價(jià)n");/輸出庫(kù)存中各藥品的數(shù)量、價(jià)格for(i=0;i<3;i+)switch(i) case 0:printf("巴米爾 %d %dn",temp.amounti,temp.pricei);/輸出巴米爾的數(shù)量、單價(jià)break;case 1:printf("感冒靈 %d %dn",temp.amounti,temp.pricei);/輸出感冒靈的數(shù)量、單價(jià)break;case 2:printf("病毒唑 %d %dn",temp.amounti,temp.pricei);/輸出病毒唑的數(shù)量、單價(jià)break; struct patient *enroll()/注冊(cè)新病人信息struct patient *rear;rear=(struct patient *)malloc(sizeof(struct patient);printf("請(qǐng)輸入病人id:n");scanf("%s",rear->id);/獲得病人id號(hào)碼printf("請(qǐng)輸入病人姓名n");scanf("%s",rear->name);/獲得病人姓名strcpy(rear->casehist,""
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 部編版小學(xué)語文三年級(jí)下冊(cè)第八單元試卷1
- 2023-2024學(xué)年廣東省清遠(yuǎn)市四校高二下學(xué)期期中聯(lián)考語文試題(解析版)
- 探究春分的奧秘
- 塑造品格小戰(zhàn)士
- 碩士研究生生存指南
- 梅里斯達(dá)斡爾族區(qū)2025屆小升初數(shù)學(xué)檢測(cè)卷含解析
- 山西省臨晉中學(xué)2025屆高三下學(xué)期大聯(lián)考卷Ⅰ生物試題試卷含解析
- 泰山學(xué)院《可靠性技術(shù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 內(nèi)蒙古翁牛特旗2024-2025學(xué)年初三下學(xué)期第一次教學(xué)質(zhì)量診斷性考試生物試題試卷含解析
- 山東省臨沂市臨沭縣一中2025屆高三一輪復(fù)習(xí)階段性考試(歷史試題理)試題含解析
- 南京師范大學(xué)自主招生個(gè)人陳述范文與撰寫要點(diǎn)
- 浙江省A9協(xié)作體2024-2025學(xué)年高二下學(xué)期4月期中聯(lián)考語文試卷(含答案 )
- 礦山地質(zhì)安全培訓(xùn)課件
- 2025年初中學(xué)業(yè)水平考試地理模擬卷及答案:圖表解讀與地理學(xué)科創(chuàng)新試題
- 陰道炎考試題及答案
- 基金職業(yè)道德試題及答案
- 2024年全國(guó)藥物臨床試驗(yàn)機(jī)構(gòu)備案情況報(bào)告
- 2025年高考作文素材積累之《黑鏡》:科技狂歡與文明困境
- DB3307T 128-2023 共富工坊建設(shè)與星級(jí)評(píng)價(jià)規(guī)范
- 《濕地生態(tài)系統(tǒng)》課件
- 2025標(biāo)準(zhǔn)購(gòu)房合同協(xié)議書范本
評(píng)論
0/150
提交評(píng)論