




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、聲育#育育卞臺*才育知識就是力量曲雷 曹育者 常青青 *西上專業(yè)設(shè)計報告課程名稱:C語言程序設(shè)計課題名稱:醫(yī)院信息管理系統(tǒng)專業(yè)班別:12本計算機科學與技術(shù)二班姓 名:學 號:指導教師:設(shè)計日期:2012-5-25教師評語:等級項目jfj優(yōu)良中及格差專業(yè)設(shè)計目的設(shè)計基本要求算法分析源程序代碼源程序代碼測試設(shè)計總結(jié)成績評定:指導教師簽名:日期:2012年 月課程設(shè)計題目醫(yī)院信息管理程序作者姓名:同組成員:摘要 利用結(jié)構(gòu)體存儲每個病人的信息和每種藥品的信息,并使用鏈表存儲全部病人的信息;能完成 對醫(yī)院內(nèi)所有病人信息的注冊、查詢、刪除和修改等操作,同時又能對藥房內(nèi)庫存的藥品進行查詢;可以 將鏈表中的病
2、人信息保存在文件中,并且可以對文件中的病人信息進行讀取與顯示1.專業(yè)設(shè)計目的1、掌握鏈表的操作,包括鏈表節(jié)點的創(chuàng)建、釋放還有鏈表的遍歷2、掌握對二進制文件的創(chuàng)建、增添等基本操作。3、熟悉C語言函數(shù)的使用方法,學會模塊化處理問題以及多個源文件的處理方式2.設(shè)計基本要求(1、使用結(jié)構(gòu)體來存儲病人的信息,結(jié)構(gòu)體中包括病的id號碼、姓名、病歷以及消費信息,并用鏈表將所有病人信息整合。2、用文件來存儲鏈表的信息以便下次再使用該程序時載入病人信息3、能夠?qū)崿F(xiàn)病人信息的注冊、病人信息的查詢、病人消費統(tǒng)計、保存鏈表信息、載入鏈表信息、 查詢庫存等幾項功能。4、要求用四個源文件main.c、link.c、fin
3、d.c、save_load.c 5、系統(tǒng)完成后應(yīng)實現(xiàn)類似下面所示界面G: 程序設(shè)計'醫(yī)院信息管理系統(tǒng)D6bU八醫(yī)院信息管理系疑.8I6回日臼夕迎使用醫(yī)院管理系統(tǒng)芻3息 信息 自1.的代 信人 人入息 人病 后 圾費有有有存 量歷現(xiàn)庫 冊詢病人出入存詢出 自寫病列載保查退 !3、算法分析1、數(shù)據(jù)結(jié)構(gòu)設(shè)計鏈表中的一個節(jié)點存儲一個病人的信息,使用下面的結(jié)構(gòu)體類型定義:struct patientchar id10;char name10;char casehist200;int cost3;int transfusion;int surgery;struct patient *next;;其
4、中cost數(shù)組用來存儲病人賣藥的的個數(shù)(總共三種藥),casehist存儲病歷內(nèi)容,transfusion用來存儲病人輸液的花費,surgery存儲手術(shù)的花費。Struct patient *next用來指向下一個病人結(jié)構(gòu)體的起始地址 從而形成一個鏈表。此外還要用到一個結(jié)構(gòu)體來存儲庫存中當前的藥品情況。struct storageint amount3;int price3;2、函數(shù)定義程序代碼有 main.c、link.c、find.c、save_load.c四個源文件組成,使用頭文件 head.h把四個源文件連 接起來,四個文件中所包含的函數(shù)說明如表所示。源文件函數(shù)原型功能說明void t
5、est()檢測有無存儲病人的二進制文件void init(struct storage *temp)初始化庫存中的藥品,storage類型的指針參數(shù)為指向structvoid printmenu()打印提示菜單Main.cVoid liststock(struct storage temp)列出庫存中的藥品struct patient *enroll()注冊新病人信息void freeall(struct patient*temp)清除鏈表內(nèi)谷,參數(shù)為指向struct patient類型的指針Find.cvoid search(struct patient*temp)查詢單個病人的信息,pat
6、ient典型的指針參數(shù)為指向structvoid listall(struct patient*temp)列出所有病人的信息,patient典型的指針參數(shù)為指向structLink.cstruct patient *insert(struct patient *head,struct patient *rea加入新ij點,參數(shù)為指向 struct patient類型 的指針void modify(struct patient*temp)修改病人病歷,參數(shù)為指向struct patient類型的指針void buy(struct patient*temp,struct storage *s)/用
7、于病人的消費處理,參數(shù)為指向 struct patient類型的指針與指向struct storage 的指針Save_load.cvoidsave(structpatient*head)將鏈表/息保存到文件中,參數(shù)為指向structpatient典型的指針struct patient *load(struct patient *head)將文件信息寫入到鏈表中,參數(shù)為指向structpatient典型的指針3、處理過程(1)檢查存儲病人信息的文件是否存在,若不存在則創(chuàng)建一個新文件并設(shè)置flag值為1,以標記現(xiàn)在可以對鏈表進行操作。(2)初始化庫存令巴米爾、感冒靈、病毒陛3種藥的數(shù)量分別為20
8、、20、10,價格分別為5、9、16。(3)輸出提示菜單讓用戶懸著要操作的項目.1)寫病歷前先檢查是否有可用的鏈表(此標記為flag的值,若為1則代表可以修改病歷,否則要求用戶重新做出選擇)。確認有可用鏈表之后進入modify函數(shù)。要求用戶輸入病人的id號碼,然后在鏈表中尋找該病所對應(yīng)的節(jié)點,若無此病人的id則直接輸出提示信息后返回:若找到后,先輸出原來的病歷內(nèi)容, 然后提示用戶輸入當前日期和新添加的病歷內(nèi)容,調(diào)用strcmp函數(shù)將新內(nèi)容追加到原來的casehist字符串數(shù)組中。printf("原有病歷:%sn",temp->casehist);printf(&quo
9、t;輸入當前日期年份) gets(a);printf("輸入當前月份");gets(b);printf("輸入當前日子");gets(c);strcat(temp->casehist,a);strcat(temp->casehist,"/");strcat(temp->casehist,b);strcat(temp->casehist,"/");strcat(temp->casehist,c);strcat(temp->casehist,":");printf
10、("請輸入新病歷的內(nèi)容 n");gets(d);strcat(temp->casehist,d);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("文件不
11、存在!”); return head; while(1) rear=(struct patient *)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>存儲一個病人的信息/id數(shù)組存儲病人號碼/name數(shù)組存儲病人姓名/casehist存儲
12、病歷內(nèi)容/cost數(shù)組存儲病人買藥的個數(shù)(總共三種)/transfusion存儲病人輸液的花費/surgery存儲手術(shù)的花費用來指向下一個病人結(jié)構(gòu)體的起始地址從而形成一個鏈表#include<string.h>struct patientchar id10;char name10;char casehist200;int cost3;int transfusion;int surgery;struct patient *next;/struct patient *next;struct storageint amount3;int price3;int flag;void sear
13、ch(struct patient *temp);針存儲庫存中當前的藥品情況查詢單個病人的信息,參數(shù)為指向struct patient 類型的指void listall(struct patient *temp);列出所有病人的信息,參數(shù)為指向struct patient類型的指聲育#育育卞臺*才育知識就是力量育曲舌禽R直離離離直言struct patient *insert(struct patient *head,struct patient *rear);加入新節(jié)點,參數(shù)為指向struct patient類型的指針void modify(struct patient *temp);修改病
14、人病歷,參數(shù)為指向struct patient 類型的指針void buy(struct patient *temp,struct storage *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/*
15、find.c*/#include "head.h"void search(struct patient *temp)char t10;int sum;printf("請輸入病人的id'n");gets(t);while(temp&&strcmp(temp->id,t) 比較字符串temp->id和t,temp=temp->next;if(temp)printf("id: %sn",temp->id);定義search函數(shù),查詢單個病人的信息定義字符數(shù)組定義整型變量sum/輸入字符串其值和
16、temp邏輯與運算,結(jié)果為非 0時,執(zhí)行循環(huán)體/temp的值為非0時,執(zhí)行下列步驟printf("n printf("n printf("n姓名:s",temp->name);病歷:n%s",temp->casehist);消費記錄:n");if(temp->cost0)printf("巴米爾if(temp->cost1)printf("感冒靈if(temp->cost2)printf("病毒口坐if(temp->transfusion)printf("輸液費
17、if(temp->surgery)printf("手術(shù)費%d%d%d個 n",temp->cost0);個 n",temp->cost1);個 n",temp->cost2);%dn",temp->transfusion);%dn",temp->surgery);sum=temp->cost0*5+temp->cost1*9+temp->cost2*16+temp->transfusion+temp->surgery;計算sum的值printf("總費用 d
18、元",sum);else printf("無該病人的信息! n");void listall(struct patient *temp)定義 listall 函數(shù),列出所有病人的信息printf("id 姓名 n");while(temp)printf("%s %sn",temp->id,temp->name);temp=temp->next;/*link.c*/*!可以出現(xiàn)重復id*/#include "head.h"struct patient *insert(struct pati
19、ent *head,struct patient *rear)struct patient *temp;if(head)temp=head;while(temp->next)temp=temp->next;temp->next=rear;rear->next=0;elsehead=rear;rear->next=0;return head;修改病人病歷定義字符組定義字符組輸入病人的idvoid modify(struct patient *temp)char t10,d200;char a4,b2,c2;printf("請輸入病人的id'n&qu
20、ot;); gets(t);自動查找病人的idwhile(temp&&strcmp(temp->id,t) temp=temp->next;if(temp)printf("原有病歷:%sn",temp->casehist);printf("輸入當前日期年份)gets(a);輸入年份printf("輸入當前月份");gets(b);輸入月份printf("輸入當前日子");gets(c);輸入日期strcat(temp->casehist,a);strcat(temp->caseh
21、ist,"/");把字符串a(chǎn)接到temp->casehist后面把字符"/"接到temp->casehist后面strcat(temp->casehist,b);把字符串b接到temp->casehist后面strcat(temp->casehist,"/");把字符"/"接到temp->casehist后面strcat(temp->casehist,c);把字符串c接到temp->casehist后面strcat(temp->casehist,":&
22、quot;);把字符":"接到temp->casehist后面printf("請輸入新病歷的內(nèi)容n");gets(d);輸入新病歷內(nèi)容strcat(temp->casehist,d);把字符串d接到temp->casehist后面strcat(temp->casehist,"n");把字符"n"接到temp->casehist后面elseprintf("無此病人信息!n");void buy(struct patient *temp,struct storage *
23、s)char t10;int a,b,c,d,e;int flag1;printf("請輸入病人的id'n");gets(t);while(temp&&strcmp(temp->id,t) temp=temp->next;if(temp)flag1=0;doprintf("請輸入買入巴米爾的個數(shù):病人消費處理輸入病人的id自動查找病人的idn");scanf("%d",&a);若輸入的值大于庫存的值,則提示"庫存不足"flag1=0;if(a>s->amoun
24、t0)printf("庫存不足!n");聲育#育育卞臺*才育女口 04鄭尢二E"禽曲意育曲直大離離直離flag1=1;while(flag1);flag1=0;doprintf("請輸入買入感冒靈的個數(shù):scanf("%d",&b);flag1=0;if(b>s->amount1)printf("庫存不足! n");flag1=1;while(flag1);flag1=0;doprintf("請輸入買入病毒口坐的個數(shù):scanf("%d",&c);flag1
25、=0;if(c>s->amount2)printf("庫存不足! n");flag1=1;while(flag1);temp->cost0+=a;temp->cost0temp->cost1+=b;temp->cost1temp->cost2+=c;temp->cost2/flag1=1時,執(zhí)行循環(huán)體n");若輸入的值大于庫存的值,則提示/flag1=1時,執(zhí)行循環(huán)體n");若輸入的值大于庫存的值,則提示/flag1=1時,執(zhí)行循環(huán)體/temp->cost0/temp->cost1/temp-&
26、gt;cost2"庫存不足""庫存不足"printf("請輸入輸液費 scanf("%d",&d);temp->transfusion+=d; printf("請輸入手術(shù)費 scanf("%d",&e);n");n");/temp->transfusion 和d的值相加后賦給temp->transfusiontemp->surgery+=e;s->amount0-=a;temp->surgery 和 e 的值相加后賦給 te
27、mp->surgery /s->amount0減去 a 的值后賦給 s->amount0s->amount1-=b;/s->amount1減去 b 的值后賦給 s->amount1s->amount2-=c;/s->amount2減去 c 的值后賦給 s->amount2n");printf("n 購買成功! elseprintf("無此病人信息!n");#include "head.h"void test();void init(struct storage *temp);初始化
28、庫存中的藥品,參數(shù)為指向檢測有無存儲病人的二進制文件struct storage類型的指針打印提示菜單列出庫存中的藥品注冊新病人信息清除鏈表內(nèi)容,參數(shù)為指向struct patient/*main.h*/void printmenu();void liststock(struct storage temp);struct patient *enroll();void freeall(struct patient *temp);類型的指針void main()struct patient *head=0,*rear;struct storage stock;char ch;printf(&quo
29、t;歡迎使用醫(yī)院管理系統(tǒng)n");test();init(&stock);while(1) printmenu();fflush(stdin);ch=getchar();fflush(stdin);switch(ch)case '1':/檢查是否有可用的鏈表調(diào)用insert函數(shù)將節(jié)點加入鏈表!n");/檢查是否有可用的鏈表查詢病人信息if(flag)rear=enroll();head=insert(head,rear); printf("注冊成功!n");else printf("您沒有載入信息不能注冊 break;ca
30、se '2':if(flag)search(head);else printf("您沒有載入信息不能進行查詢!n");break;case '3':*#*#*女口 0工鄭尢二E"禽曲意育曲直大離離直離if(flag)modify(head);else printf("您沒有載入信息不能修改病歷break;case '4':if(flag)buy(head,&stock);else printf("您沒有載入信息不能進行消費break;case '5':/檢查是否有可用的鏈表
31、修改病人病歷!n");/檢查是否有可用的鏈表病人的消費!n");if(flag)listall(head);else printf("您沒有載入信息!n");break;case '6':freeall(head);head=0;head=load(head);break;case '7':if(flag)save(head);else printf("您沒有載入信息!n");break;case '8':liststock(stock);break;case '9':p
32、rintf("謝謝使用!n");exit(0);break;/檢查是否有可用的鏈表列出所有病人信息清除鏈表內(nèi)容文件信息寫入到鏈表/檢查是否有可用的鏈表鏈表信息保存到病歷中庫存中藥品列表default:聲育#育育卞臺*才育知識就是力量曲雷 曹育者 常青青 *西上printf("輸入有誤!n"); break;打印提示菜單void printmenu()printf("n");printf(,*n,);printf("1.printf("2.printf("3.printf("4.printf(&q
33、uot;5.printf("6.printf("7.printf("8.printf("9.注冊新病人信息n");查詢單個病人信息n");寫病歷n");病人消費n");列出所有病人的信息n");載入所有病人信息n");保存現(xiàn)有信息n");查詢庫存n");退出n");printf(,*n,);void test()/檢測病人有無存儲病人的二進制文件FILE *fp;if(fp=fopen("data","r")=0)printf
34、("這是您第一次使用該系統(tǒng),在退出時不要忘了保存信息n");fp=fopen("data","w");打開外部文件flag=1;fclose(fp);文件執(zhí)行后返回fp初始化庫存中的藥品,參數(shù)為指向 struct storagevoid init(struct storage *temp)類型的指針temp->amount0=20; temp->amount1=20; temp->amount2=10; temp->price0=5;temp->price1=9; temp->price2=16;初
35、始化庫存令巴米爾數(shù)量為 20初始化庫存令感冒靈數(shù)量為 20初始化庫存令病毒陛數(shù)量為 10初始化庫存令巴米爾價格為5初始化庫存令感冒靈價格為9初始化庫存令感冒靈價格為 16列出庫存中的藥品void liststock(struct storage temp) int i;printf("藥品名 數(shù)量 單價n"); for(i=0;i<3;i+)switch(i) case 0:printf("巴米爾 dbreak;case 1: printf("感冒靈 %dbreak;case 2: printf("病毒陛 %dbreak;輸出庫存中各藥品
36、的數(shù)量、價格%dn",temp.amounti,temp.pricei);/輸出巴米爾的數(shù)量、單價%dn",temp.amounti,temp.pricei);/輸出感冒靈的數(shù)量、單價%dn",temp.amounti,temp.pricei);/輸出病毒嚏的數(shù)量、單價struct patient *enroll()注冊新病人信息struct patient *rear;rear=(struct patient *)malloc(sizeof(struct patient);printf("請輸入病人 id:n");scanf("%s
37、",rear->id);printf("請輸入病人姓名n"); scanf("%s",rear->name);strcpy(rear->casehist,"");rear->cost0=0;rear->cost1=0;rear->cost2=0;rear->surgery=0;rear->transfusion=0;/獲得病人id號碼獲得病人姓名將注冊信息存儲進病歷初始化令購買巴米爾的花費為0初始化令購買感冒靈的花費為0初始化令購買病毒陛的花費為0初始化令手術(shù)的花費為0初始化令病人輸液的花費為0return rear;清除鏈表內(nèi)容,參數(shù)為指向structpatient 類void free
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 江西農(nóng)業(yè)大學南昌商學院《電視欄目創(chuàng)意與策劃》2023-2024學年第一學期期末試卷
- 公共交通行業(yè)服務(wù)質(zhì)量評價制度
- 公共交通車輛維修質(zhì)量管理制度
- 工作責任追究制度
- 新疆魚類制品種類及食用情況調(diào)查問卷
- 關(guān)于聯(lián)耕聯(lián)種生產(chǎn)方式推行的民意調(diào)查
- 農(nóng)村暗室改造方案范本
- 2025年農(nóng)林牧漁行業(yè)現(xiàn)狀分析:國家對農(nóng)林牧漁行業(yè)政策支持力度不斷加大
- 無機墻體保溫施工方案
- 廣東省深圳實驗學校高中園2024-2025學年高二上學期第三階段考試數(shù)學試題(解析版)
- 農(nóng)民田間學校規(guī)章制度
- 《電力建設(shè)施工技術(shù)規(guī)范 第2部分:鍋爐機組》DLT 5190.2
- 供水管網(wǎng)搶修管理課件
- 微信公眾號總結(jié)報告
- 制定售后服務(wù)績效考評標準與方法
- 正確認識人的本質(zhì) (修改版)
- 2023年北京師范大學珠海分校招聘考試真題
- 2016-2023年江蘇經(jīng)貿(mào)職業(yè)技術(shù)學院高職單招(英語/數(shù)學/語文)筆試歷年考點試題甄選合集含答案解析
- 高原健康呼吸用氧 通用技術(shù)指南
- 中醫(yī)內(nèi)科學-咳嗽課件
- 2022管理學試題庫(馬工程)
評論
0/150
提交評論