




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、專業(yè)設計報告課程名稱: C 語 言 程 序 設 計 課題名稱: 醫(yī)院信息管理系統(tǒng) 專業(yè)班別: 12本計算機科學與技術(shù)二班 姓 名: 學 號: 指導教師: 設計日期: 2012-5-25 教師評語:等級項目優(yōu)良中及格差專業(yè)設計目的設計基本要求算法分析源程序代碼源程序代碼測試設計總結(jié) 成績評定: 指導教師簽名: 日期: 2012 年 月 日課程設計題目 醫(yī)院信息管理程序作者姓名:同組成員:摘要 利用結(jié)構(gòu)體存儲每個病人的信息和每種藥品的信息,并使用鏈表存儲全部病人的信息;能完成對醫(yī)院內(nèi)所有病人信息的注冊、查詢、刪除和修改等操作,同時又能對藥房內(nèi)庫存的藥品進行查詢;可以將鏈表中的病人信息保存在文件中,
2、并且可以對文件中的病人信息進行讀取與顯示1專業(yè)設計目的 1、掌握鏈表的操作,包括鏈表節(jié)點的創(chuàng)建、釋放還有鏈表的遍歷 2、掌握對二進制文件的創(chuàng)建、增添等基本操作。 3、熟悉C語言函數(shù)的使用方法,學會模塊化處理問題以及多個源文件的處理方式2設計基本要求( 1、使用結(jié)構(gòu)體來存儲病人的信息,結(jié)構(gòu)體中包括病的id號碼、姓名、病歷以及消費信息,并用鏈表將所有病人信息整合。 2、用文件來存儲鏈表的信息以便下次再使用該程序時載入病人信息 3、能夠?qū)崿F(xiàn)病人信息的注冊、病人信息的查詢、病人消費統(tǒng)計、保存鏈表信息、載入鏈表信息、查詢庫存等幾項功能。 4、要求用四個源文件main.c、link.c、find.c、sa
3、ve_load.c 5、系統(tǒng)完成后應實現(xiàn)類似下面所示界面3、算法分析 1、數(shù)據(jù)結(jié)構(gòu)設計鏈表中的一個節(jié)點存儲一個病人的信息,使用下面的結(jié)構(gòu)體類型定義:struct patient char id10;char name10;char casehist200;int cost3;int transfusion;int surgery;struct patient *next;其中cost數(shù)組用來存儲病人賣藥的的個數(shù)(總共三種藥),casehist存儲病歷內(nèi)容,transfusion用來存儲病人輸液的花費,surgery存儲手術(shù)的花費。Struct patient *next用來指向下一個病人結(jié)構(gòu)體
4、的起始地址從而形成一個鏈表。此外還要用到一個結(jié)構(gòu)體來存儲庫存中當前的藥品情況。struct storage int amount3;int price3; 2、函數(shù)定義程序代碼有main.c、link.c、find.c、save_load.c四個源文件組成,使用頭文件head.h把四個源文件連接起來,四個文件中所包含的函數(shù)說明如表所示。源文件函數(shù)原型功能說明Main.cvoid test()檢測有無存儲病人的二進制文件void init(struct storage *temp)初始化庫存中的藥品,參數(shù)為指向struct storage類型的指針void printmenu()打印提示菜單Vo
5、id 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 patient類型的指針void listall(struct patient *temp)列出所有病人的信息,參數(shù)為指向struct patient類型的指針Link.cstruct patient *
6、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ù)為指向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)檢查存儲病人信息的文件是否存在,若不存在則創(chuàng)建一個新文件并設置flag值為1,以標記現(xiàn)在可以對鏈表進行操作。(2)初始化庫存令巴米爾、感冒靈、病毒唑3種藥的數(shù)量分別為20、20、10,價格分別為5、9、16。(3)輸出提示菜單讓用戶懸著要操作的項目. 1)寫病歷前先檢查是否有可用的鏈表(此標記為flag的值,若為1則代表可以修改病歷,否則要求用戶重新做出選擇)。確認有可用鏈表之
8、后進入modify函數(shù)。要求用戶輸入病人的id號碼,然后在鏈表中尋找該病所對應的節(jié)點,若無此病人的id則直接輸出提示信息后返回:若找到后,先輸出原來的病歷內(nèi)容,然后提示用戶輸入當前日期和新添加的病歷內(nèi)容,調(diào)用strcmp函數(shù)將新內(nèi)容追加到原來的casehist字符串數(shù)組中。 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èi)容n");gets(d);strcat(temp->casehist,d); ······
10、;·· 2)載入鏈表信息是首先定義一個文件指針,然后以只讀方式打開文件。若失敗則輸出提示信息返回,成功后調(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("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數(shù)組存儲病人號碼char name10;/name數(shù)組存儲病人姓名
12、char casehist200;/casehist存儲病歷內(nèi)容int cost3;/cost數(shù)組存儲病人買藥的個數(shù)(總共三種)int transfusion;/transfusion存儲病人輸液的花費int surgery;/surgery存儲手術(shù)的花費struct patient *next;/struct patient *next用來指向下一個病人結(jié)構(gòu)體的起始地址從而形成一個鏈表;struct storage/存儲庫存中當前的藥品情況 int amount3;int price3;int flag;void search(struct patient *temp);/查詢單個病人的信息
13、,參數(shù)為指向struct patient類型的指針void listall(struct patient *temp);/列出所有病人的信息,參數(shù)為指向struct 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 stora
14、ge *s);/用于病人的消費處理,參數(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ù),查詢單個病人的信息char t10;/定義字符數(shù)組int sum;/定義整型變量sumprintf("請輸入病人的idn");gets(t);/輸入字符串while(temp&&strcmp(temp->id,t)/比較字符串temp->id和t,其值和temp邏輯與運算,結(jié)果為非0時,執(zhí)行循環(huán)體temp=temp->next;if(temp)/temp的值為非0時,執(zhí)行下列步驟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("手術(shù)費%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函數(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)重復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(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("請輸入新病歷的內(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)/病人消費處理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("請輸入買入巴米爾的個數(shù):n");scanf("%d",&a);flag1=0;if(a>s->amount0)/若輸入的值大于庫存的值,則提示"庫存不足"printf("庫存不足!n");flag1=1;while(flag1);/flag1=1時,執(zhí)行循環(huán)體flag1=0;doprintf("請輸入
24、買入感冒靈的個數(shù):n");scanf("%d",&b);flag1=0;if(b>s->amount1)/若輸入的值大于庫存的值,則提示"庫存不足"printf("庫存不足!n");flag1=1;while(flag1);/flag1=1時,執(zhí)行循環(huán)體flag1=0;doprintf("請輸入買入病毒唑的個數(shù):n");scanf("%d",&c);flag1=0;if(c>s->amount2)/若輸入的值大于庫存的值,則提示"庫存不
25、足"printf("庫存不足!n");flag1=1;while(flag1);/flag1=1時,執(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("請輸入輸液費n");scanf("%d",&d);temp-
26、>transfusion+=d;/temp->transfusion和d的值相加后賦給temp->transfusionprintf("請輸入手術(shù)費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);/初始化庫存中的藥品,參數(shù)為指向struct storage類型的指針void printmenu();/打印提示菜單void liststock(struct storage temp);/列出庫
28、存中的藥品struct patient *enroll();/注冊新病人信息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é)點加入鏈表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);/清除鏈表內(nèi)容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.保存現(xiàn)有信息n");printf("8
33、.查詢庫存n");printf("9.退出n");printf("*n");void test()/檢測病人有無存儲病人的二進制文件FILE *fp;if(fp=fopen("data","r")=0)printf("這是您第一次使用該系統(tǒng),在退出時不要忘了保存信息n");fp=fopen("data","w");/打開外部文件flag=1;fclose(fp);/文件執(zhí)行后返回fpvoid init(struct storage *temp)/
34、初始化庫存中的藥品,參數(shù)為指向struct storage類型的指針temp->amount0=20;/初始化庫存令巴米爾數(shù)量為20temp->amount1=20;/初始化庫存令感冒靈數(shù)量為20temp->amount2=10;/初始化庫存令病毒唑數(shù)量為10temp->price0=5;/初始化庫存令巴米爾價格為5temp->price1=9;/初始化庫存令感冒靈價格為9temp->price2=16;/初始化庫存令感冒靈價格為16void liststock(struct storage temp)/列出庫存中的藥品int i;printf("
35、藥品名 數(shù)量 單價n");/輸出庫存中各藥品的數(shù)量、價格for(i=0;i<3;i+)switch(i) case 0:printf("巴米爾 %d %dn",temp.amounti,temp.pricei);/輸出巴米爾的數(shù)量、單價break;case 1:printf("感冒靈 %d %dn",temp.amounti,temp.pricei);/輸出感冒靈的數(shù)量、單價break;case 2:printf("病毒唑 %d %dn",temp.amounti,temp.pricei);/輸出病毒唑的數(shù)量、單價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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 社會化媒體與公共關(guān)系試題及答案
- 2025年工程項目的總體規(guī)劃測試試題及答案
- 工程經(jīng)濟數(shù)字化轉(zhuǎn)型試題及答案
- 2025年市政工程考試趨勢研究與試題及答案
- 公共關(guān)系溝通平臺分析試題及答案
- 工程實施中的環(huán)境保護意識培育試題及答案
- 2025年市政工程復習資料與試題及答案
- 2025年工程項目管理瞄準目標試題及答案
- 中級經(jīng)濟師考試項目管理試題及答案分析
- 2025年工程量清單編制試題及答案
- 大學生創(chuàng)業(yè)計劃書word文檔(三篇)
- 土工織物防護施工
- 生產(chǎn)性服務業(yè)集聚對城市產(chǎn)業(yè)結(jié)構(gòu)優(yōu)化的影響共3篇
- 施工單位考察記錄表
- YY/T 1244-2014體外診斷試劑用純化水
- GB/T 4130-2017聲學水聽器低頻校準方法
- GB/T 26192-2010雙向拉伸聚丙烯可涂覆合成紙薄膜
- GB/T 2546.1-2006塑料聚丙烯(PP)模塑和擠出材料第1部分:命名系統(tǒng)和分類基礎
- GB/T 20257.4-2007國家基本比例尺地圖圖式第4部分:1∶2500001∶5000001∶1000000地形圖圖式
- 《Matlab程序設計》教學大綱
- 填石路基沉降差記錄表
評論
0/150
提交評論