優秀畢業設計]C語言課程設計報告 醫院專家門診掛號系統_第1頁
優秀畢業設計]C語言課程設計報告 醫院專家門診掛號系統_第2頁
優秀畢業設計]C語言課程設計報告 醫院專家門診掛號系統_第3頁
優秀畢業設計]C語言課程設計報告 醫院專家門診掛號系統_第4頁
優秀畢業設計]C語言課程設計報告 醫院專家門診掛號系統_第5頁
已閱讀5頁,還剩56頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、計算機0710班 XXX 學號:XXX華中科技大學計算機科學與技術學院C語言程序設計課程設計實驗報告題目: 醫院專家門診掛號系統 專業: 計算機科學與技術 班級: 計算機XXX班 學號: XXXX 姓名: XXX 成績: 指導教師: XXX 完成日期: 20XX年 10月 10日一、 系統功能模塊圖主菜單數據管理保存和讀取統計查詢刪除修改錄入各項信息統計科室、專家、掛號信息查詢打印報表支持多關鍵字的搜索引擎退出添加二、 數據結構設計及用法說明主要的三個結構(采用了十字交叉鏈表):科室信息的結構、專家信息的結構及掛號信息的結構。分別如下:/*科室信息*/struct Troom char num

2、11;/*保存科室號*/ char name20;/*保存科室名*/ char man20;/*保存負責人*/ char tel12;/*保存電話*/int tot_reg;/*保存科室的總掛號量*/ struct Troom *next;/*保存指向下一個科室信息的指針*/ struct Tpro *sub;/*保存指向專家信息的頭指針*/;/*掛號信息結構體*/struct Treg char pro_num11;/*保存專家編號*/ char case_num15;/*保存病歷號*/ char patient_name20;/*保存患者姓名*/ char date11;/*保存掛號日期*

3、/ char assistant20;/*保存掛號人員*/ intserial_num;/*保存掛號流水號*/ float fee;/*保存掛號費*/ struct Treg *next;/*保存指向下一個掛號信息的指針*/;/*專家信息結構體*/struct Tpro char room_num11;/*保存科室號*/ char num11;/*保存專家編號*/ char name20;/*保存姓名*/ char birth11;/*保存出生日期*/ char sex;/*保存性別*/ char tel12;/*保存電話*/ char profession15;/*保存職稱*/ char s

4、ummary50;/*保存簡介*/int tot_reg;/*保存專家的總掛號量*/ struct Tpro *next;/*保存指向下一個專家信息的指針*/ struct Treg *sub;/*保存指向掛號信息的頭指針*/;用法說明圖示如下: head科室1科室2科室nNULL 專家1基本信息 專家2基本信息專家n基本信息專家1掛號記錄鏈 專家2掛號記錄鏈 專家n掛號記錄鏈 三、 程序結構流程圖系統總體流程圖:開始主菜單錄入信息修改信息插入信息刪除信息保存文件讀取文件查詢信息統計數據打印報表退出系統科室信息專家信息掛號信息讀入關鍵字多關鍵字搜索結束查詢流程圖:查詢信息輸入關鍵字從信息總體中

5、提取含有關鍵字的信息輸出信息四、 各模塊功能數據管理模塊中包含錄入信息、修改信息、插入信息和刪除信息四大功能:1、 錄入信息:錄入科室、專家、掛號信息;2、 修改信息:對科室、專家、掛號信息進行修改;3、 添加信息:添加科室或專家;4、 刪除信息:取消科室或解雇專家。統計查詢模塊中包含查詢信息和統計數據1、 查詢信息:可查詢所有科室、專家和掛號信息,還可以查詢某個特定的信息,使用多關鍵字匹配和KMP字符串匹配技術;2、 統計數據:有3種統計的信息可供查看:(1) 各科室的掛號量;(2) 各專家的掛號量;(3) 某天掛號的患者的基本信息。保存和讀取模塊:保存文件和讀取文件;退出程序:退出醫院專家

6、門診掛號系統。各功能函數的相關說明見附錄中的源程序清單。五、 試驗結果整個程序運行起來很正常,沒有出現bug,我這就把輸出結果的截屏貼在下面:科室基本信息(部分):專家基本信息(部分):掛號基本信息(部分):統計信息均準確無誤:各科室的掛號量:各專家的掛號量:某天掛號的基本信息:六、 心得體會第一次寫管理系統這樣的大型程序,說真的,有點不習慣,以前的一些代碼風格成了我這次課設的最大障礙。比如說,以前寫小程序因為通常只有一個主函數,所以很多變量都是局部變量,而這次大型作業要求有很多的函數相互交叉,共同完成一些功能,所以必須要用全局變量。還有我的編程風格無意義的變量名使我吃了很多苦頭,很多時候,我

7、的變量名都混淆了,以至于我最后改的時候很麻煩。這次課設,讓我學了很多東西,除了代碼風格和編程習慣的優化之外,我的代碼能力也明顯提高了。經過這次課設,我一些以前沒有徹底掌握的東西都牢牢掌握了。比如指針的靈活運用,函數之間的互相調用的代碼級優化等等。盡管我學到了很多東西,但是對于這次大型作業我還是有一點遺憾,那就是代碼的重復利用率不高,很多幾乎一樣的代碼在我的程序中出現了多次(畢竟是一個上午寫出來的東西,這也不能怪我)。本來我有心想優化一下,使重復利用率提高,但是由于ACM/ICPC將近,我全部時間都用在訓練上,所以就算了。希望不會對我的課設的評價造成太大的影響。路漫漫其修遠兮,吾將上下而求索。程

8、序設計這條路還很長,我會繼續走下去,不斷自我完善,早日成為一個出色的程序員。七、 參考文獻所有資料均從百度而來附錄:程序清單/*/* 醫院門診掛號系統V1.01源代碼 */* Copyright by XXX */*/#include <stdio.h>#include <string.h>#include <stdlib.h>#define Troom_len sizeof(struct Troom)#define Tpro_len sizeof(struct Tpro)#define Treg_len sizeof(struct Treg)#define

9、 TLroom_len sizeof(struct TLroom)#define TLpro_len sizeof(struct TLpro)#define TLreg_len sizeof(struct TLreg)#define Room_in_mes puts("nt科室信息錄入中.")#define Spe_in_mes puts("nt專家信息錄入中.")#define Reg_in_mes puts("nt掛號信息錄入中.")/*掛號信息結構體*/struct Treg char pro_num11;/*保存專家編號*/

10、char case_num15;/*保存病歷號*/ char patient_name20;/*保存患者姓名*/ char date11;/*保存掛號日期*/ char assistant20;/*保存掛號人員*/ intserial_num;/*保存掛號流水號*/ float fee;/*保存掛號費*/ struct Treg *next;/*保存指向第一個專家信息的指針*/;/*專家信息結構體*/struct Tpro char room_num11;/*保存科室號*/ char num11;/*保存專家編號*/ char name20;/*保存姓名*/ char birth11;/*保存

11、出生日期*/ char sex;/*保存性別*/ char tel12;/*保存電話*/ char profession15;/*保存職稱*/ char summary50;/*保存簡介*/int tot_reg;/*保存專家的總掛號量*/ struct Tpro *next;/*保存指向下一個專家信息的指針*/ struct Treg *sub;/*保存指向第一個掛號信息的指針*/;/*科室信息*/struct Troom char num11;/*保存科室號*/ char name20;/*保存科室名*/ char man20;/*保存負責人*/ char tel12;/*保存電話*/in

12、t tot_reg;/*保存科室的總掛號量*/ struct Troom *next;/*保存指向下一個掛號信息的指針*/ struct Tpro *sub;/*保存指向第一個專家信息的指針*/;/*輔助變量*/struct TLroomstruct Troom *st;struct TLroom *next;*storep, *pp;struct TLprostruct Tpro *st;struct TLpro *next;*storeq, *qq;struct TLregstruct Treg *st;struct TLreg *next;*storer, *rr;struct Troo

13、m *p, *pl, *tempp, *head=NULL;struct Tpro *q, *ql, *tempq;struct Treg *r, *rl, *tempr;char rest20, ret5;int n;int flag, changed;void Main_menu();void Show_menu();void Write();void Save();void Load();void Modify();void Insert();void Delete();void Search();void Statistics();void Print();void Exit();vo

14、id Search_room();void Search_room_with_num(char *);void Search_room_with_name(char *);void Search_room_with_man(char *);void Search_room_with_tel(char *);void Search_pro();void Search_pro_with_num(char *);void Search_pro_with_name(char *);void Search_pro_with_tel(char *);void Search_reg();void Searc

15、h_reg_with_serial_num(int);void Search_reg_with_case_num(char *);void Sort_room();void Sort_pro();void Show_room();void Show_room_with_reg();void Show_pro();void Show_pro_with_reg();void Show_reg();void Print_room();void Print_pro();void Print_reg();char *Tostring(int);void PrnN();void PrnB();void P

16、rnM();void ClearAll();void Clearp();void Clearq();void Clearr();void cls();/*/* 主菜單 */*/void Main_menu() char command; do do Show_menu();command=getchar(); gets(rest);cls(); if (command<'0' | command>'9') puts("n無此選項!請重新選擇");printf("按ENTER以繼續.");gets(rest);c

17、ls(); while (command<'0' | command>'9');switch (command) case '1':Write();break;case '2':Save();break; case '3':Load();break; case '4':Modify();break; case '5':Insert();break; case '6':Delete();break; case '7':Search();bre

18、ak; case '8':Statistics();break;case '9':Print();break; case '0':Exit(); while (command!='0');void Show_menu() puts("歡迎進入醫院門診掛號系統!"); puts("n請選擇:n"); puts("t1: 錄入數據n"); puts("t2: 保存文件n"); puts("t3: 載入文件n"); puts("

19、t4: 修改數據n"); puts("t5: 插入數據n"); puts("t6: 刪除數據n"); puts("t7: 查詢信息n"); puts("t8: 統計數據n"); puts("t9: 輸出報表n");puts("t0: 退出系統n");/*/* 錄入信息 */*/void Write() char command0, command1, command2;char command;if (changed) puts("n錄入將覆蓋原有信息,您

20、尚未保存,是否保存?Y/N?");command=getchar();gets(rest);cls();if (command='Y' | command='y') Save();head=NULL; do p=(struct Troom *)malloc(Troom_len);Room_in_mes;puts("n請輸入科室號");gets(p->num);cls();Room_in_mes;puts("n請輸入科室名");gets(p->name);cls();Room_in_mes;puts(&

21、quot;n請輸入負責人姓名");gets(p->man);cls();Room_in_mes;puts("n請輸入電話");gets(p->tel);cls();p->sub=NULL;p->tot_reg=0;p->next=head;head=p;puts("n是否錄入此科室的專家信息?Y/N?");command1=getchar();gets(rest);cls();while (command1='Y' | command1='y') q=(struct Tpro *)m

22、alloc(Tpro_len);strcpy(q->room_num, p->num);Spe_in_mes;puts("n請輸入專家編號"); gets(q->num);cls();Spe_in_mes; puts("n請輸入姓名");gets(q->name);cls();Spe_in_mes;puts("n請輸入出生日期,例:XXXX/XX/XX");gets(q->birth);cls();Spe_in_mes;puts("n請輸入性別,M for MAN, W for WOMAN&qu

23、ot;);q->sex=getchar();gets(rest);cls();Spe_in_mes;puts("n請輸入電話");gets(q->tel);cls();Spe_in_mes;puts("n請輸入職稱");gets(q->profession);cls();Spe_in_mes;puts("n請輸入簡介");gets(q->summary);cls();q->sub=NULL;q->tot_reg=0;q->next=p->sub;p->sub=q;puts(&quo

24、t;n是否錄入此專家的掛號信息?Y/N?");command2=getchar();gets(rest);cls();while (command2='Y' | command2='y') q->tot_reg+;r=(struct Treg *)malloc(sizeof(struct Treg);strcpy(r->pro_num, q->num);Reg_in_mes;puts("n請輸入掛號流水號");scanf("%d", &r->serial_num);gets(res

25、t);cls();Reg_in_mes;puts("n請輸入病歷號");gets(r->case_num);cls();Reg_in_mes;puts("n請輸入患者姓名");gets(r->patient_name);cls();Reg_in_mes;puts("n請輸入掛號費(元)");scanf("%f", &r->fee);gets(rest);cls();Reg_in_mes;puts("n請輸入掛號時間,例:XXXX/XX/XX");gets(r->d

26、ate);cls();Reg_in_mes;puts("n請輸入掛號人員");gets(r->assistant);cls();r->next=q->sub;q->sub=r;puts("n是否錄入下一個掛號信息?Y/N?");command2=getchar();gets(rest);cls();p->tot_reg+=q->tot_reg;puts("n是否錄入下一個專家信息?Y/N?");command1=getchar();gets(rest);cls();puts("n是否錄入下

27、一個科室信息?Y/N?");command0=getchar();gets(rest);cls(); while (command0='Y' | command0='y'); puts("n錄入成功!"); printf("按ENTER以繼續."); gets(rest);cls();changed=1;/*/* 保存文件 */*/void Save() FILE *fp, *fq, *fr; char file120, file220, file320; do puts("nt正在創建科室數據文件.&

28、quot;);puts("n請輸入文件名:");gets(file1);cls();if (fp=fopen(file1, "wb")=NULL) puts("n文件不能打開!");printf("按ENTER以繼續.");gets(rest);cls(); while (fp=NULL); do puts("nt正在創建專家數據文件.");puts("n請輸入文件名:");gets(file2);cls();if (fq=fopen(file2, "wb"

29、;)=NULL) puts("n文件不能打開!");printf("按ENTER以繼續.");gets(rest);cls(); while (fq=NULL); do puts("nt正在創建掛號數據文件.");puts("n請輸入文件名:");gets(file3);cls();if (fr=fopen(file3, "wb")=NULL) puts("n文件不能打開!");printf("按ENTER以繼續.");gets(rest);cls();

30、while (fr=NULL);for (p=head; p; p=p->next) fwrite(p, Troom_len, 1, fp);for (q=p->sub; q; q=q->next) fwrite(q, Tpro_len, 1, fq);for (r=q->sub; r; r=r->next)fwrite(r, Treg_len, 1, fr); puts("n保存成功!"); printf("按ENTER以繼續."); gets(rest);cls();changed=0; fclose(fp); fclo

31、se(fq); fclose(fr);/*/* 讀取文件 */*/void Load() FILE *fp, *fq, *fr; int t; char file120, file220, file320; if (changed) char command;puts("n您尚未保存,是否保存?Y/N?");command=getchar();gets(rest);cls();if (command='Y' | command='y') Save(); ClearAll(); t=0; do puts("n正在載入科室數據文件.&q

32、uot;);t+;puts("n請輸入文件名:");gets(file1);cls();if (fp=fopen(file1, "rb")=NULL) puts("n文件不能打開!");printf("按ENTER以繼續.");gets(rest);cls();if (t>3) puts("n讀取失敗,返回主菜單");printf("按ENTER以繼續.");gets(rest);cls();return; while (fp=NULL); t=0; do puts(&

33、quot;n正在載入專家數據文件");puts("n請輸入文件名:");gets(file2);cls();if (fq=fopen(file2, "rb")=NULL) puts("n文件不能打開!");printf("按ENTER以繼續.");gets(rest);cls();if (t>3) puts("n讀取失敗,返回主菜單");printf("按ENTER以繼續.");gets(rest);cls();return; while (fq=NULL);

34、 t=0; do puts("n正在載入掛號數據文件");puts("n請輸入文件名:");gets(file3);cls();if (fr=fopen(file3, "rb")=NULL) puts("n文件不能打開!");printf("按ENTER以繼續.");gets(rest);cls();if (t>3) puts("n讀取失敗,返回主菜單");printf("按ENTER以繼續.");gets(rest);cls();return; w

35、hile (fr=NULL); head=NULL; while (!feof(fp) p=(struct Troom *)malloc(Troom_len);fread(p, Troom_len, 1, fp);p->sub=NULL;if (!feof(fp) p->next=head;head=p; while (!feof(fq) q=(struct Tpro *)malloc(Tpro_len);fread(q, Tpro_len, 1, fq);q->sub=NULL;Search_room_with_num(q->room_num);if (!feof(f

36、q) && p) q->next=p->sub;p->sub=q; while (!feof(fr) r=(struct Treg *)malloc(Treg_len);fread(r, Treg_len, 1, fr);for (p=head; p; p=p->next) Search_pro_with_num(r->pro_num);if (q) break;if (!feof(fr) && q) r->next=q->sub;q->sub=r; puts("n載入成功!"); printf

37、("按ENTER以繼續."); gets(rest);cls();changed=0; fclose(fp); fclose(fq); fclose(fr);/*/* 修改信息 */*/void Modify()char command1, command2;int flag2;int t;while (1) t=0;do puts("n請選擇您想修改的信息:n");puts("t1: 科室信息n");puts("t2: 專家信息n");puts("t3: 掛號信息n");printf(&quo

38、t;t"); PrnM(); puts("n");command1=getchar();gets(rest);cls();if (command1<'1' | command1>'3') && command1!='M' && command1!='m') puts("n無此選項!請重新選擇");printf("按ENTER以繼續.");gets(rest);cls(); while (command1<'

39、;1' | command1>'3') && command1!='M' && command1!='m'); switch (command1) case '1':printf("n請提供科室的相關信息,");flag=0;Search_room();if (flag) continue;if (p) t=0;flag2=0;while (1) do puts("n請選擇您想修改的信息:n");puts("t1: 科室號n"

40、);puts("t2: 科室名n");puts("t3: 負責人n");puts("t4: 電話n");printf("t"); PrnB(); puts("n");command2=getchar();gets(rest);cls();if (command2<'1' | command2>'4') && command2!='B' && command2!='b') puts(&quo

41、t;n無此選項!請重新選擇");printf("按ENTER以繼續.");gets(rest);cls(); while (command2<'1' | command2>'4') && command2!='B' && command2!='b');switch (command2) case '1':puts("n請輸入新的科室號");gets(p->num);cls();for (q=p->sub; q;

42、 q=q->next) strcpy(q->room_num, p->num);break;case '2':puts("n請輸入新的科室名");gets(p->name);cls();break;case '3':puts("n請輸入新的負責人姓名");gets(p->man);cls();break;case '4':puts("n請輸入新的電話");gets(p->tel);cls();break;case 'B':case &#

43、39;b':flag2=1;if (flag2) break;puts("n修改成功!");printf("按ENTER以繼續.");gets(rest);cls();changed=1; else puts("n錯誤!科室不存在");t+;if (t=5) puts("錯誤太多!返回主菜單");printf("按ENTER以繼續.");gets(rest);cls();return;printf("按ENTER以繼續.");gets(rest);cls();cont

44、inue;break;case '2':printf("n請提供專家所在科室的相關信息,");flag=0;Search_room();if (flag) continue;if (p) printf("n請提供專家的相關信息,");flag=0;Search_pro();if (flag) continue;if (q) t=0;flag2=0;while (1) do puts("n請選擇您想修改的信息:n");puts("t1: 專家編號n");puts("t2: 姓名n"

45、);puts("t3: 出生日期n");puts("t4: 性別n");puts("t5: 電話n");puts("t6: 職稱n");puts("t7: 簡介n");printf("t"); PrnB(); puts("n");command2=getchar();gets(rest);cls();if (command2>'7' | command2<'1') && command2!=

46、9;B' && command2!='b') puts("n無此選項!請重新選擇");printf("按ENTER以繼續.");gets(rest);cls(); while (command2>'7' | command2<'1') && command2!='B' && command2!='b');switch (command2) case '1':puts("n請輸入新的專

47、家編號");gets(q->num);cls();for (r=q->sub; r; r=r->next) strcpy(r->pro_num, q->num);break;case '2':puts("n請輸入新的姓名");gets(q->name);cls();break;case '3':puts("n請輸入新的出生日期,例:XXXX/XX/XX");gets(q->birth);cls();break;case '4':puts("n請輸入新的性別");q->sex=getchar();gets(rest);cls();break;case '5':puts("n請輸入新的電話");gets(q->tel);cls();break;case '6':puts("n請輸入新的職稱");gets(q->profession);cls();break;c

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論