版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、專業(yè)設(shè)計報告課程名稱:C語言程序設(shè)計課題名稱:醫(yī)院信息管理系統(tǒng)專業(yè)班別:11本計算機(jī)科學(xué)與技術(shù)二班姓名:學(xué)號:指導(dǎo)教師:設(shè)計日期:2012-5-25教師評語:等級工程優(yōu)良中及格差專業(yè)設(shè)計目的設(shè)計根本要求算法分析源程序代碼源程序代碼測試設(shè)計總結(jié)成績評定:指導(dǎo)教師簽名:日期:2012年月日課程設(shè)計題目醫(yī)院信息管理程序作者XX:同組成員:摘要利用構(gòu)造體存儲每個病人的信息和每種藥品的信息,并使用鏈表存儲全部病人的信息;能完成對醫(yī)院所有病人信息的注冊、查詢、刪除和修改等操作,同時又能對藥房庫存的藥品進(jìn)展查詢;可以將鏈表中的病人信息保存在文件中,并且可以對文件中的病人信息進(jìn)展讀取與顯示專業(yè)設(shè)計目的1、掌握
2、鏈表的操作,包括鏈表節(jié)點(diǎn)的創(chuàng)立、釋放還有鏈表的遍歷2、掌握對二進(jìn)制文件的創(chuàng)立、增添等根本操作。3、熟悉C語言函數(shù)的使用方法,學(xué)會模塊化處理問題以及多個源文件的處理方式2.設(shè)計根本要求1、使用構(gòu)造體來存儲病人的信息,構(gòu)造體中包括病的id、XX、病歷以及消費(fèi)信息,并用鏈表將所有病人信息整合。2、用文件來存儲鏈表的信息以便下次再使用該程序時載入病人信息3、能夠?qū)崿F(xiàn)病人信息的注冊、病人信息的查詢、病人消費(fèi)統(tǒng)計、保存鏈表信息、載入鏈表信息、查詢庫存等幾項功能。4、要求用四個源文件main.c、link.c、find.c、save_load.c5、系統(tǒng)完成后應(yīng)實(shí)現(xiàn)類似下面所示界面3、算法分析1、數(shù)據(jù)構(gòu)造設(shè)
3、計鏈表中的一個節(jié)點(diǎn)存儲一個病人的信息,使用下面的構(gòu)造體類型定義:structpatientcharid10;charname10;charcasehist200;intcost3;inttransfusion;intsurgery;structpatient*next;其中cost數(shù)組用來存儲病人賣藥的的個數(shù)總共三種藥,casehist存儲病歷容,transfusion用來存儲病人輸液的花費(fèi),surgery存儲手術(shù)的花費(fèi)。Structpatient*next用來指向下一個病人構(gòu)造體的起始地址從而形成一個鏈表。此外還要用到一個構(gòu)造體來存儲庫存中當(dāng)前的藥品情況。structstorage(inta
4、mount3;intprice3;;2、函數(shù)定義程序代碼有main.c、link.c、find.c、save_load.c四個源文件組成,使用頭文件head.h把四個源文件連接起來,四個文件中所包含的函數(shù)說明如表所示。源文件函數(shù)原型功能說明Main.cvoidtest()檢測有無存儲病人的一進(jìn)制文件voidinit(structstorage*temp)初始化庫存中的藥品,參數(shù)為指向structstorage類型的指針voidprintmenu()打印提示菜單Voidliststock(structstoragetemp)列出庫存中的藥品structpatient*enroll()注朋新病人信
5、息voidfreeall(structpatient*temp)去除鏈表谷,參數(shù)為指向structpatient類型的指針Find.cvoidsearch(structpatient*temp)查詢單個病人的信息,參數(shù)為指向structpatient類型的指針voidlistall(structpatient*temp)列出所有病人的信息,參數(shù)為指向structpatient類型的指針Link.cstructpatient*insert(structpatient*head,structpatient*rea參加新ij點(diǎn),參數(shù)為指向structpatient類型的指針voidmodify(st
6、ructpatient*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、處理過程flag值
7、為1,以標(biāo)記1檢查存儲病人信息的文件是否存在,假設(shè)不存在那么創(chuàng)立一個新文件并設(shè)置現(xiàn)在可以對鏈表進(jìn)展操作。2初始化庫存令巴米爾、感冒靈、病毒哩3種藥的數(shù)量分別為20、20、10,價格分別為5、9、16。3輸出提示菜單讓用戶懸著要操作的工程.1)寫病歷前先檢查是否有可用的鏈表此標(biāo)記為flag的值,假設(shè)為1那么代表可以修改病歷,否那么要求用戶重新做出選擇。確認(rèn)有可用鏈表之后進(jìn)入modify函數(shù)。要求用戶輸入病人的id,然后在鏈表中尋找該病所對應(yīng)的節(jié)點(diǎn),假設(shè)無此病人的id那么直接輸出提示信息后返回:假設(shè)找到后,先輸出原來的病歷容,然后提示用戶輸入當(dāng)前日期和新添加的病歷容,調(diào)用strcmp函數(shù)將新容追加
8、到原來的casehist字符串?dāng)?shù)組中。printf("原有病歷:sn”,temp->casehist);printf("輸入當(dāng)前日期年份");gets(a);printf("輸入當(dāng)前月份");gets(b);printf("輸入當(dāng)前日子");gets(c);strcat(temp->casehist,a);strcat(temp->casehist,"/");strcat(temp->casehist,b);strcat(temp->casehist,"/"
9、;);strcat(temp->casehist,c);strcat(temp->casehist,":");printf("請輸入新病歷的容n");gets(d);strcat(temp->casehist,d);2載入鏈表信息是首先定義一個文件指針,然后以只讀方式翻開文件。假設(shè)失敗那么輸出提示信息返回,成功后調(diào)用malloc函數(shù)來申請一塊存,用read函數(shù)將文件容寫入到節(jié)點(diǎn)中,隨后調(diào)用insert函數(shù)將節(jié)點(diǎn)參加鏈表,如此循環(huán)下去直到fread函數(shù)返回0值,即文件已經(jīng)讀到了末尾時,再將鏈表的頭指針返回給主函數(shù)即可。Flag值置為1,用
10、來代表已有可用鏈表。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);elsefree(rear);flag=1;break;4、源程序代碼/*head.h*/*ifndefFIRST*include<stdlib.h>*in
11、clude<stdio.h>*include<string.h>structpatientcharid10;charname10;charcasehist200;intcost3;inttransfusion;intsurgery;structpatient*next;/structpatient*next/存儲一個病人的信息/id數(shù)組存儲病人/name數(shù)組存儲病人XX/casehist存儲病歷容/cost數(shù)組存儲病人買藥的個數(shù)總共三種/transfusion存儲病人輸液的花費(fèi)/surgery存儲手術(shù)的花費(fèi)用來指向下一個病人構(gòu)造體的起始地址從而形成一個鏈表;struct
12、storageintamount3;intprice3;intflag;voidsearch(structpatient*temp);voidlistall(structpatient*temp);/存儲庫存中當(dāng)前的藥品情況查詢單個病人的信息,參數(shù)為指向列出所有病人的信息,參數(shù)為指向structpatient類型的指針structpatient類型的指針structpatient*insert(structpatient*head,structpatient*rear);/參加新節(jié)點(diǎn),參數(shù)為指向structpatient類型的指針voidmodify(structpatient*temp);/
13、修改病人病歷,參數(shù)為指向voidbuy(structpatient*temp,structstorage*s);用于病人的消費(fèi)處理,參數(shù)為指向structpatient類型的指針與指向structpatient*load(structpatient*head);/將文件信息寫入到鏈表中,參數(shù)為指向voidsave(structpatient*head);/將鏈表信息保存到文件中,參數(shù)為指向structpatient類型的指針structstorage的指針structpatient類型的指針structpatient類型的指針*defineFIRST*endif/*find.c*/*inclu
14、de"head.h"voidsearch(structpatient*temp)chart10;intsum;printf("請輸入病人的idn");gets(t);/定義search函數(shù),查詢單個病人的信息定義字符數(shù)組定義整型變量sum/輸入字符串while(temp&&strcmp(temp->id,t)比擬字符串temp->id和t,其值和temp邏輯與運(yùn)算,結(jié)果為非0時,執(zhí)行循環(huán)體temp=temp->next;if(temp)/temp的值為非0時,執(zhí)行以下步驟printf("id:%sn"
15、,temp->id);printf("nXX:%s”,temp->name);printf("n病歷:n%s”,temp->casehist);printf("n消費(fèi)記錄:n");if(temp->cost0)printf("巴米爾%d個n”,temp->cost0);if(temp->cost1)printf("感冒靈%d個n",temp->cost1);if(temp->cost2)printf("病毒哩%d個n”,temp->cost2);if(temp-
16、>transfusion)printf("輸液費(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;/計算sum的值printf("總費(fèi)用%d元",sum);elseprintf("無該病人的信息!n");voidlistall
17、(structpatient*temp)/定義listall函數(shù),列出所有病人的信息printf("idXXn");while(temp)printf("%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;whil
18、e(temp->next)(temp=temp->next;temp->next=rear;rear->next=0;else(head=rear;rear->next=0;returnhead;voidmodify(structpatient*temp)(chart10,d200;chara4,b2,c2;printf("請輸入病人的idn");gets(t);while(temp&&strcmp(temp->id,t)temp=temp->next;修改病人病歷/定義字符組定義字符組/輸入病人的id自動查找病人的
19、idif(temp)printf("原有病歷:sn”,temp->casehist);printf("輸入當(dāng)前日期年份");gets(a);printf("輸入當(dāng)前月份");gets(b);printf("輸入當(dāng)前日子");gets(c);strcat(temp->casehist,a);strcat(temp->casehist,"/");strcat(temp->casehist,b);strcat(temp->casehist,"/");strcat
20、(temp->casehist,c);strcat(temp->casehist,":");printf("請輸入新病歷的容n");gets(d);strcat(temp->casehist,d);strcat(temp->casehist,"n");else/輸入年份/輸入月份輸入日期把字符串a(chǎn)接到temp->casehist后面/把字符"/"接到temp->casehist后面把字符串b接到temp->casehist后面/把字符"/"接到temp-
21、>casehist后面把字符串c接到temp->casehist后面/把字符":'接到temp->casehist后面/輸入新病歷容把字符串d接到temp->casehist后面把字符”n"接到temp->casehist后面printf("無此病人信息!n");voidbuy(structpatient*temp,structstorage*s)(chart10;inta,b,c,d,e;intflag1;printf("請輸入病人的idn");gets(t);while(temp&&a
22、mp;strcmp(temp->id,t)temp=temp->next;if(temp)flag1=0;doprintf("請輸入買入巴米爾的個數(shù):scanf("%d",&a);flag1=0;if(a>s->amount0)printf("庫存缺乏!n");flag1=1;while(flag1);flag1=0;doprintf("請輸入買入感冒靈的個數(shù):scanf("%d",&b);flag1=0;if(b>s->amount1)printf("
23、庫存缺乏!n");flag1=1;while(flag1);flag1=0;doprintf("請輸入買入病毒哩的個數(shù):scanf("%d”,&c);flag1=0;if(c>s->amount2)printf("庫存缺乏!n");flag1=1;while(flag1);temp->cost0+=a;temp->cost0temp->cost1+=b;病人消費(fèi)處理輸入病人的id自動查找病人的idn");假設(shè)輸入的值大于庫存的值,那么提示”庫存缺乏"/flag1=1時,執(zhí)行循環(huán)體n&qu
24、ot;);假設(shè)輸入的值大于庫存的值,那么提示”庫存缺乏"/flag1=1時,執(zhí)行循環(huán)體n");假設(shè)輸入的值大于庫存的值,那么提示”庫存缺乏"/flag1=1時,執(zhí)行循環(huán)體/temp->cost0和a的值相加后賦給/temp->cost1和b的值相加后賦給temp->cost1temp->cost2+=c;temp->cost2printf(-請輸入輸液費(fèi)n");scanf("%d”,&d);temp->transfusion+=d;printf("請輸入手術(shù)費(fèi)scanf("%d&q
25、uot;,&e);temp->surgery+=e;s->amount0-=a;s->amount1-=b;s->amount2-=c;printf("n購置成功!elseprintf("無此病人信息!/temp->cost2和c的值相加后賦給/temp->transfusion和d的值相加后賦給temp->transfusionn");n");n");/*main.h*/*include"head.h"/temp->surgery和e的值相加后賦給temp->s
26、urgery/s->amount0減去a的值后賦給s->amount0/s->amount1減去b的值后賦給s->amount1/s->amount2減去c的值后賦給s->amount2voidtest();voidinit(structstorage*temp);初始化庫存中的藥品,/檢測有無存儲病人的二進(jìn)制文件voidprintmenu();voidliststock(structstoragetemp);structpatient*enroll();voidfreeall(structpatient*temp);指針voidmain()structpa
27、tient*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':參數(shù)為指向structstorage類型的指針/打印提示菜單/列出庫存中的藥品注冊新病人信息去除鏈表容,參數(shù)為指向structpatient類型的if(flag)/檢查是否有可用的鏈表rear=enroll();head=i
28、nsert(head,rear);printf("注冊成功!n");/調(diào)用insert函數(shù)將節(jié)點(diǎn)參加鏈表else(printf(-您沒有載入信息不能注冊!n");break;case'2':if(flag)(search(head);else(printf("您沒有載入信息不能進(jìn)展查詢break;/檢查是否有可用的鏈表查詢病人信息!n");case'3':if(flag)(modify(head);else(printf(-您沒有載入信息不能修改病歷break;case'4':if(flag)(b
29、uy(head,&stock);else(printf("您沒有載入信息不能進(jìn)展消費(fèi)break;/檢查是否有可用的鏈表修改病人病歷!n");/檢查是否有可用的鏈表病人的消費(fèi)!n");case'5':if(flag)(listall(head);else(printf(-您沒有載入信息!n");break;case'6':freeall(head);head=0;head=load(head);/檢查是否有可用的鏈表列出所有病人信息去除鏈表容文件信息寫入到鏈表break;case'7':if(flag
30、)save(head);elseprintf(-您沒有載入信息!n");break;case'8':liststock(stock);break;case'9':printf(-謝謝使用!n");exit(0);break;default:printf("輸入有誤!n");break;/檢查是否有可用的鏈表鏈表信息保存到病歷中庫存中藥品列表voidprintmenu()(printf("n");printf("*n");printf("1.注冊新病人信息n");p
31、rintf("2.查詢單個病人信息n");printf("3.寫病歷n");printf("4.病人消費(fèi)n");printf("5.列出所有病人的信息n");printf("6.載入所有病人信息n");printf("7.保存現(xiàn)有信息n");printf("8.查詢庫存n");printf("9.退出n");printf("*n");voidtest()(FILE*fp;if(fp=fopen("data”
32、,"r")=0)打印提不'采單/檢測病人有無存儲病人的二進(jìn)制文件printf(-這是您第一次使用該系統(tǒng),在退出時不要忘了保存信息n");fp=fopen("data”,"w”);翻開外部文件flag=1;fclose(fp);文件執(zhí)行后返回fpvoidinit(structstorage*temp)(類型的指針初始化庫存中的藥品,參數(shù)為指向structstoragetemp->amount0=20;temp->amount1=20;temp->amount2=10;temp->price0=5;temp->
33、price1=9;temp->price2=16;初始化庫存令巴米爾數(shù)量為20初始化庫存令感冒靈數(shù)量為20初始化庫存令病毒哩數(shù)量為10初始化庫存令巴米爾價格為5初始化庫存令感冒靈價格為9初始化庫存令感冒靈價格為16列出庫存中的藥品voidliststock(structstoragetemp)(inti;printf("藥品名數(shù)量單價n")for(i=0;i<3;i+)switch(i)(case0:printf("巴米爾%dbreak;case1:printf("感冒靈%dbreak;case2:printf("病毒哩%dbrea
34、k;structpatient*enroll()structpatient*rear;輸出庫存中各藥品的數(shù)量、價格%dn”,temp.amounti,temp.pricei);/輸出巴米爾的數(shù)量、單價%dn”,temp.amounti,temp.pricei);/輸出感冒靈的數(shù)量、單價%dn”,temp.amounti,temp.pricei);/輸出病毒哩的數(shù)量、單價/注冊新病人信息/獲得病人id/獲得病人XX將注冊信息存儲進(jìn)病歷初始化令購置巴米爾的花費(fèi)為0初始化令購置感冒靈的花費(fèi)為0初始化令購置病毒哩的花費(fèi)為0初始化令手術(shù)的花費(fèi)為0rear=(structpatient*)malloc(sizeof(structpatient);printf("請輸入病人id:n");scanf("%s",rear->id);printf("請輸入病人XXn&
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024房屋買賣全款購房合同范本模板
- 2024年度勞動合同員工崗位及工資待遇
- 2024公立醫(yī)院與醫(yī)療設(shè)備供應(yīng)商之間的采購合同
- 2024丙丁雙方就服務(wù)器租賃及維護(hù)合同
- 2024年度醫(yī)藥產(chǎn)品研發(fā)與生產(chǎn)承包合同
- 2024年度船舶租賃合同
- 2024年度股權(quán)投資投資人與目標(biāo)公司股權(quán)轉(zhuǎn)讓合同
- 2024年修訂版:知識產(chǎn)權(quán)許可使用合同標(biāo)的規(guī)范
- 2024年度KTV裝修設(shè)計服務(wù)合同
- 賽船音樂課件教學(xué)課件
- 學(xué)生體育學(xué)情分析報告
- “楓橋經(jīng)驗(yàn)”課件
- 第15課 列強(qiáng)入侵與中國人民的反抗斗爭 教學(xué)設(shè)計-2023-2024學(xué)年中職高一上學(xué)期高教版(2023)中國歷史全一冊
- 2024年廣西玉林北流市鎮(zhèn)街道社區(qū)殘疾人專職委員招聘筆試沖刺題(帶答案解析)
- 2024年營養(yǎng)指導(dǎo)員理論知識考試題庫及答案
- 2024年四川成都青白江蓉歐園區(qū)運(yùn)營管理有限公司招聘筆試參考題庫含答案解析
- MOOC 國家安全概論-西安交通大學(xué) 中國大學(xué)慕課答案
- 《1+X幼兒照護(hù)(中級)》課件-6.1.身高的測量與評估
- 團(tuán)隊協(xié)作與沖突解決技巧訓(xùn)練
- 重癥感染合并糖尿病
- Blender超級學(xué)習(xí)手冊
評論
0/150
提交評論