




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(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 語(yǔ) 言 程 序 設(shè) 計(jì) 課題名稱: 醫(yī)院信息管理系統(tǒng) 專業(yè)班別: 11本計(jì)算機(jī)科學(xué)與技術(shù)二班 姓 名: 學(xué) 號(hào): 指導(dǎo)教師: 設(shè)計(jì)日期: 2012-5-25 教師評(píng)語(yǔ):等級(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語(yǔ)言函數(shù)的使用方法,學(xué)會(huì)模塊化處理問(wèn)題以及多個(gè)源文件的處理方式2設(shè)計(jì)基本要求( 1、使用結(jié)構(gòu)體來(lái)存儲(chǔ)病人的信息,結(jié)構(gòu)體中包括病的id號(hào)碼、姓名、病歷以及消費(fèi)信息,并用鏈表將所有病人信息整合。 2、用文件來(lái)存儲(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ù)組用來(lái)存儲(chǔ)病人賣(mài)藥的的個(gè)數(shù)(總共三種藥),casehist存儲(chǔ)病歷內(nèi)容,transfusion用來(lái)存儲(chǔ)病人輸液的花費(fèi),surgery存儲(chǔ)手術(shù)的花費(fèi)。Struct patient *next用來(lái)指向下一個(gè)病人結(jié)構(gòu)體
4、的起始地址從而形成一個(gè)鏈表。此外還要用到一個(gè)結(jié)構(gòu)體來(lái)存儲(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è)源文件連接起來(lái),四個(gè)文件中所包含的函數(shù)說(shuō)明如表所示。源文件函數(shù)原型功能說(shuō)明Main.cvoid test()檢測(cè)有無(wú)存儲(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)將文件信息寫(xiě)入到鏈表中,參數(shù)為指向struct patient類型的指針 3、處理過(guò)程(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)寫(xiě)病歷前先檢查是否有可用的鏈表(此標(biāo)記為flag的值,若為1則代表可以修改病歷,否則要求用戶重新做出選擇)。確認(rèn)有可用鏈表之
8、后進(jìn)入modify函數(shù)。要求用戶輸入病人的id號(hào)碼,然后在鏈表中尋找該病所對(duì)應(yīng)的節(jié)點(diǎn),若無(wú)此病人的id則直接輸出提示信息后返回:若找到后,先輸出原來(lái)的病歷內(nèi)容,然后提示用戶輸入當(dāng)前日期和新添加的病歷內(nèi)容,調(diào)用strcmp函數(shù)將新內(nèi)容追加到原來(lá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è)文件指針,然后以只讀方式打開(kāi)文件。若失敗則輸出提示信息返回,成功后調(diào)用malloc函數(shù)來(lái)申請(qǐng)一塊內(nèi)存,用read函數(shù)將文件內(nèi)容寫(xiě)入到節(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)代表已有可用鏈表。 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ǔ)病人買(mǎi)藥的個(gè)數(shù)(總共三種)int transfusion;/transfusion存儲(chǔ)病人輸液的花費(fèi)int surgery;/surgery存儲(chǔ)手術(shù)的花費(fèi)struct patient *next;/struct patient *next用來(lái)指向下一個(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); /將文件信息寫(xiě)入到鏈表中,參數(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("無(wú)該病人的信息!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("無(wú)此病人信息!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)輸入買(mǎi)入巴米爾的個(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、買(mǎi)入感冒靈的個(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)輸入買(mǎi)入病毒唑的個(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)買(mǎi)成功!n");elseprintf("無(wú)此病人信息!n");/*main.h*/#include "head.h"void test();/檢測(cè)有無(wú)存儲(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("您沒(méi)有載入信息不能注冊(cè)!n");break;case '2':if(flag)/檢查是否有可用的鏈表search(head);/查詢病人信息else printf("您沒(méi)有載入信息不能進(jìn)行查詢!n");break;case '3':if(flag)/檢查是否有可
30、用的鏈表modify(head);/修改病人病歷else printf("您沒(méi)有載入信息不能修改病歷!n");break;case '4':if(flag)/檢查是否有可用的鏈表buy(head,&stock);/病人的消費(fèi)else printf("您沒(méi)有載入信息不能進(jìn)行消費(fèi)!n");break; case '5':if(flag)/檢查是否有可用的鏈表listall(head);/列出所有病人信息else printf("您沒(méi)有載入信息!n");break;case '6':f
31、reeall(head);/清除鏈表內(nèi)容head=0;head=load(head);/文件信息寫(xiě)入到鏈表break;case '7':if(flag)/檢查是否有可用的鏈表save(head);/鏈表信息保存到病歷中else printf("您沒(méi)有載入信息!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.寫(xiě)病歷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è)病人有無(wú)存儲(chǔ)病人的二進(jìn)制文件FILE *fp;if(fp=fopen("data","r")=0)printf("這是您第一次使用該系統(tǒng),在退出時(shí)不要忘了保存信息n");fp=fopen("data","w");/打開(kāi)外部文件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,"&quo
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 起重機(jī)定期檢定合同協(xié)議
- 設(shè)備購(gòu)買(mǎi)補(bǔ)充協(xié)議書(shū)范本
- 豪車(chē)租賃收售合同協(xié)議
- 購(gòu)瓷磚建材合同協(xié)議
- 談判授權(quán)協(xié)議書(shū)范本
- 2025年精益生產(chǎn)管理專業(yè)素養(yǎng)考試試卷及答案
- 品牌粥店轉(zhuǎn)讓合同協(xié)議
- 櫻花樹(shù)苗木購(gòu)銷(xiāo)合同協(xié)議
- 商業(yè)匯票質(zhì)押合同協(xié)議
- 商業(yè)綠植購(gòu)買(mǎi)合同協(xié)議
- 《光伏發(fā)電工程工程量清單計(jì)價(jià)規(guī)范》
- 廢棄物管理制度范本
- 激光武器簡(jiǎn)介
- 民事起訴狀(股東資格確認(rèn)糾紛)
- 基于交通沖突的信號(hào)交叉口交通安全評(píng)價(jià)研究論文設(shè)計(jì)
- 心理健康案例分析試題
- 銅螺母標(biāo)準(zhǔn)相關(guān)參考內(nèi)容
- 第十二講 建設(shè)社會(huì)主義生態(tài)文明PPT習(xí)概論2023優(yōu)化版教學(xué)課件
- 2023年梅毒診療指南
- 挖掘機(jī)人員安全教育
- 非煤露天礦山安全確認(rèn)牌
評(píng)論
0/150
提交評(píng)論