优秀毕业设计]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

提交评论