




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、專業設計報告課程名稱: C 語 言 程 序 設 計 課題名稱: 醫院信息管理系統 專業班別: 11本計算機科學與技術二班 姓 名: 學 號: 指導教師: 設計日期: 2012-5-25 教師評語:等級項目優良中及格差專業設計目的設計基本要求算法分析源程序代碼源程序代碼測試設計總結 成績評定: 指導教師簽名: 日期: 2012 年 月 日課程設計題目 醫院信息管理程序作者姓名:同組成員:摘要 利用結構體存儲每個病人的信息和每種藥品的信息,并使用鏈表存儲全部病人的信息;能完成對醫院內所有病人信息的注冊、查詢、刪除和修改等操作,同時又能對藥房內庫存的藥品進行查詢;可以將鏈表中的病人信息保存在文件中,
2、并且可以對文件中的病人信息進行讀取與顯示1專業設計目的 1、掌握鏈表的操作,包括鏈表節點的創建、釋放還有鏈表的遍歷 2、掌握對二進制文件的創建、增添等基本操作。 3、熟悉C語言函數的使用方法,學會模塊化處理問題以及多個源文件的處理方式2設計基本要求( 1、使用結構體來存儲病人的信息,結構體中包括病的id號碼、姓名、病歷以及消費信息,并用鏈表將所有病人信息整合。 2、用文件來存儲鏈表的信息以便下次再使用該程序時載入病人信息 3、能夠實現病人信息的注冊、病人信息的查詢、病人消費統計、保存鏈表信息、載入鏈表信息、查詢庫存等幾項功能。 4、要求用四個源文件main.c、link.c、find.c、sa
3、ve_load.c 5、系統完成后應實現類似下面所示界面3、算法分析 1、數據結構設計鏈表中的一個節點存儲一個病人的信息,使用下面的結構體類型定義:struct patient char id10;char name10;char casehist200;int cost3;int transfusion;int surgery;struct patient *next;其中cost數組用來存儲病人賣藥的的個數(總共三種藥),casehist存儲病歷內容,transfusion用來存儲病人輸液的花費,surgery存儲手術的花費。Struct patient *next用來指向下一個病人結構體
4、的起始地址從而形成一個鏈表。此外還要用到一個結構體來存儲庫存中當前的藥品情況。struct storage int amount3;int price3; 2、函數定義程序代碼有main.c、link.c、find.c、save_load.c四個源文件組成,使用頭文件head.h把四個源文件連接起來,四個文件中所包含的函數說明如表所示。源文件函數原型功能說明Main.cvoid test()檢測有無存儲病人的二進制文件void init(struct storage *temp)初始化庫存中的藥品,參數為指向struct storage類型的指針void printmenu()打印提示菜單Vo
5、id liststock(struct storage temp)列出庫存中的藥品struct patient *enroll()注冊新病人信息void freeall(struct patient *temp)清除鏈表內容,參數為指向struct patient類型的指針Find.cvoid search(struct patient *temp)查詢單個病人的信息,參數為指向struct patient類型的指針void listall(struct patient *temp)列出所有病人的信息,參數為指向struct patient類型的指針Link.cstruct patient *
6、insert(struct patient *head,struct patient *rea加入新節點,參數為指向struct patient類型的指針void modify(struct patient *temp)修改病人病歷,參數為指向struct patient類型的指針void buy(struct patient *temp,struct storage *s)/用于病人的消費處理,參數為指向struct patient類型的指針與指向struct storage的指針Save_load.cvoid save(struct patient *head)將鏈表信息保存到文件中,參數
7、為指向struct patient類型的指針struct patient *load(struct patient *head)將文件信息寫入到鏈表中,參數為指向struct patient類型的指針 3、處理過程(1)檢查存儲病人信息的文件是否存在,若不存在則創建一個新文件并設置flag值為1,以標記現在可以對鏈表進行操作。(2)初始化庫存令巴米爾、感冒靈、病毒唑3種藥的數量分別為20、20、10,價格分別為5、9、16。(3)輸出提示菜單讓用戶懸著要操作的項目. 1)寫病歷前先檢查是否有可用的鏈表(此標記為flag的值,若為1則代表可以修改病歷,否則要求用戶重新做出選擇)。確認有可用鏈表之
8、后進入modify函數。要求用戶輸入病人的id號碼,然后在鏈表中尋找該病所對應的節點,若無此病人的id則直接輸出提示信息后返回:若找到后,先輸出原來的病歷內容,然后提示用戶輸入當前日期和新添加的病歷內容,調用strcmp函數將新內容追加到原來的casehist字符串數組中。 printf("原有病歷:%sn",temp->casehist);printf("輸入當前日期 年份");gets(a);printf("輸入當前月份");gets(b);printf("輸入當前日子");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("請輸入新病歷的內容n");gets(d);strcat(temp->casehist,d); ······
10、;·· 2)載入鏈表信息是首先定義一個文件指針,然后以只讀方式打開文件。若失敗則輸出提示信息返回,成功后調用malloc函數來申請一塊內存,用read函數將文件內容寫入到節點中,隨后調用insert函數將節點加入鏈表,如此循環下去直到fread函數返回0值,即文件已經讀到了末尾時,再將鏈表的頭指針返回給主函數即可。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/存儲一個病人的信息 char id10;/id數組存儲病人號碼char name10;/name數組存儲病人姓名
12、char casehist200;/casehist存儲病歷內容int cost3;/cost數組存儲病人買藥的個數(總共三種)int transfusion;/transfusion存儲病人輸液的花費int surgery;/surgery存儲手術的花費struct patient *next;/struct patient *next用來指向下一個病人結構體的起始地址從而形成一個鏈表;struct storage/存儲庫存中當前的藥品情況 int amount3;int price3;int flag;void search(struct patient *temp);/查詢單個病人的信息
13、,參數為指向struct patient類型的指針void listall(struct patient *temp);/列出所有病人的信息,參數為指向struct patient類型的指針struct patient *insert(struct patient *head,struct patient *rear);/加入新節點,參數為指向struct patient類型的指針void modify(struct patient *temp);/修改病人病歷,參數為指向struct patient類型的指針void buy(struct patient *temp,struct stora
14、ge *s);/用于病人的消費處理,參數為指向struct patient類型的指針與指向struct storage的指針struct patient *load(struct patient *head); /將文件信息寫入到鏈表中,參數為指向struct patient類型的指針void save(struct patient *head);/將鏈表信息保存到文件中,參數為指向struct patient類型的指針#define FIRST#endif/*find.c*/#include "head.h"void search(struct patient *temp
15、)/定義search函數,查詢單個病人的信息char t10;/定義字符數組int sum;/定義整型變量sumprintf("請輸入病人的idn");gets(t);/輸入字符串while(temp&&strcmp(temp->id,t)/比較字符串temp->id和t,其值和temp邏輯與運算,結果為非0時,執行循環體temp=temp->next;if(temp)/temp的值為非0時,執行下列步驟printf("id: %sn",temp->id);printf("n姓名: %s",te
16、mp->name);printf("n病歷: n%s",temp->casehist);printf("n消費記錄: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->transfusion)print
17、f("輸液費%dn",temp->transfusion);if(temp->surgery)printf("手術費%dn",temp->surgery);sum=temp->cost0*5+temp->cost1*9+temp->cost2*16+temp->transfusion+temp->surgery;/計算sum的值printf("總費用%d元",sum);elseprintf("無該病人的信息!n");void listall(struct patien
18、t *temp)/定義listall函數,列出所有病人的信息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)/*!可以出現重復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("請輸入病人的idn");gets(t);/輸入病人的idwhile(temp&&strcmp(temp->id,t)/自動查找病人的idtemp=temp->n
20、ext;if(temp)printf("原有病歷:%sn",temp->casehist);printf("輸入當前日期 年份");gets(a);/輸入年份printf("輸入當前月份");gets(b);/輸入月份printf("輸入當前日子");gets(c);/輸入日期strcat(temp->casehist,a);/把字符串a接到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("請輸入新病歷的內容n");gets(d);/輸入新病歷內容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)/病人消費處理char t10;int a,b,c,d,e;int flag1;printf("請輸入病人的idn");gets(t);/輸入病人的idwh
23、ile(temp&&strcmp(temp->id,t)/自動查找病人的idtemp=temp->next;if(temp)flag1=0;doprintf("請輸入買入巴米爾的個數:n");scanf("%d",&a);flag1=0;if(a>s->amount0)/若輸入的值大于庫存的值,則提示"庫存不足"printf("庫存不足!n");flag1=1;while(flag1);/flag1=1時,執行循環體flag1=0;doprintf("請輸入
24、買入感冒靈的個數:n");scanf("%d",&b);flag1=0;if(b>s->amount1)/若輸入的值大于庫存的值,則提示"庫存不足"printf("庫存不足!n");flag1=1;while(flag1);/flag1=1時,執行循環體flag1=0;doprintf("請輸入買入病毒唑的個數:n");scanf("%d",&c);flag1=0;if(c>s->amount2)/若輸入的值大于庫存的值,則提示"庫存不
25、足"printf("庫存不足!n");flag1=1;while(flag1);/flag1=1時,執行循環體temp->cost0+=a;/temp->cost0和a的值相加后賦給temp->cost0temp->cost1+=b;/temp->cost1和b的值相加后賦給temp->cost1temp->cost2+=c;/temp->cost2和c的值相加后賦給temp->cost2printf("請輸入輸液費n");scanf("%d",&d);temp-
26、>transfusion+=d;/temp->transfusion和d的值相加后賦給temp->transfusionprintf("請輸入手術費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購買成功!n");elseprintf("無此病人信息!n");/*main.h*/#include "head.h"void test();/檢測有無存儲病人的二進制文件void init(struct storage *temp);/初始化庫存中的藥品,參數為指向struct storage類型的指針void printmenu();/打印提示菜單void liststock(struct storage temp);/列出庫
28、存中的藥品struct patient *enroll();/注冊新病人信息void freeall(struct patient *temp);/清除鏈表內容,參數為指向struct patient類型的指針void main()struct patient *head=0,*rear;struct storage stock;char ch;printf("歡迎使用醫院管理系統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);/調用insert函數將節點加入鏈表printf("注冊成功!n");else printf("您沒有載入信息不能注冊!n");break;case '2':if(flag)/檢查是否有可用的鏈表search(head);/查詢病人信息else printf("您沒有載入信息不能進行查詢!n");break;case '3':if(flag)/檢查是否有可
30、用的鏈表modify(head);/修改病人病歷else printf("您沒有載入信息不能修改病歷!n");break;case '4':if(flag)/檢查是否有可用的鏈表buy(head,&stock);/病人的消費else printf("您沒有載入信息不能進行消費!n");break; case '5':if(flag)/檢查是否有可用的鏈表listall(head);/列出所有病人信息else printf("您沒有載入信息!n");break;case '6':f
31、reeall(head);/清除鏈表內容head=0;head=load(head);/文件信息寫入到鏈表break;case '7':if(flag)/檢查是否有可用的鏈表save(head);/鏈表信息保存到病歷中else printf("您沒有載入信息!n");break;case '8':liststock(stock);/庫存中藥品列表break;case '9':printf("謝謝使用!n");exit(0);break;default:printf("輸入有誤!n");b
32、reak;void printmenu()/打印提示菜單printf("n");printf("*n");printf("1.注冊新病人信息n");printf("2.查詢單個病人信息n");printf("3.寫病歷n");printf("4.病人消費n");printf("5.列出所有病人的信息n");printf("6.載入所有病人信息n");printf("7.保存現有信息n");printf("8
33、.查詢庫存n");printf("9.退出n");printf("*n");void test()/檢測病人有無存儲病人的二進制文件FILE *fp;if(fp=fopen("data","r")=0)printf("這是您第一次使用該系統,在退出時不要忘了保存信息n");fp=fopen("data","w");/打開外部文件flag=1;fclose(fp);/文件執行后返回fpvoid init(struct storage *temp)/
34、初始化庫存中的藥品,參數為指向struct storage類型的指針temp->amount0=20;/初始化庫存令巴米爾數量為20temp->amount1=20;/初始化庫存令感冒靈數量為20temp->amount2=10;/初始化庫存令病毒唑數量為10temp->price0=5;/初始化庫存令巴米爾價格為5temp->price1=9;/初始化庫存令感冒靈價格為9temp->price2=16;/初始化庫存令感冒靈價格為16void liststock(struct storage temp)/列出庫存中的藥品int i;printf("
35、藥品名 數量 單價n");/輸出庫存中各藥品的數量、價格for(i=0;i<3;i+)switch(i) case 0:printf("巴米爾 %d %dn",temp.amounti,temp.pricei);/輸出巴米爾的數量、單價break;case 1:printf("感冒靈 %d %dn",temp.amounti,temp.pricei);/輸出感冒靈的數量、單價break;case 2:printf("病毒唑 %d %dn",temp.amounti,temp.pricei);/輸出病毒唑的數量、單價break; struct patient *enroll()/注冊新病人信息struct patient *rear;rear=(struct patient *)malloc(sizeof(struct patient);printf("請輸入病人id:n");scanf("%s",rear->id);/獲得病人id號碼printf("請輸入病人姓名n");scanf("%s",rear->name);/獲得病人姓名strcpy(rear->casehist,"&quo
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2025新員工入職前安全培訓考試試題A卷
- 2024-2025公司、項目部、各個班組三級安全培訓考試試題及答案培優A卷
- 2025年美發師創意造型考核試卷:時尚短發造型設計試題
- 2025-2030中國有機硅防污涂料行業市場發展趨勢與前景展望戰略研究報告
- 2025-2030中國新能源天然氣行業發展分析及投資前景預測研究報告
- 2025-2030中國操作優化解決方案行業市場發展趨勢與前景展望戰略研究報告
- 2025-2030中國微晶實時鐘行業市場發展趨勢與前景展望戰略研究報告
- 2025-2030中國干燥劑空氣干燥器行業市場發展趨勢與前景展望戰略研究報告
- 2025-2030中國反芻綜合征治療行業市場發展趨勢與前景展望戰略研究報告
- 2025-2030中國區塊鏈行業市場發展現狀及投資前景研究報告
- 小說中景物描寫的作用
- 第十二講 建設社會主義生態文明PPT習概論2023優化版教學課件
- 工商管理實習周記十篇
- 幼兒園體育游戲活動評價表
- 2023年通管局安全員考試-培訓及考試題庫(導出版)
- GB/T 4857.22-1998包裝運輸包裝件單元貨物穩定性試驗方法
- GB/T 25074-2010太陽能級多晶硅
- GB/T 23842-2009無機化工產品中硅含量測定通用方法還原硅鉬酸鹽分光光度法
- GA/T 1217-2015光纖振動入侵探測器技術要求
- 特種陶瓷介紹課件
- 有機物污染(環境化學)課件
評論
0/150
提交評論