1、C语言课程设计报告医院专家门诊挂号系统docC语言课程设计报告医院专家门诊挂号系统 华中科技大学计算机科学与技术学院 C语言程序设计课程设计 实验报告 题目 医院专家门诊挂号系统 专业 计算机科学与技术 班级 计算机XXX班 学号 XXXX 姓名 XXX 成绩 指导教师 XXX 完成日期 20XX年 10月 10日 一、 系统功能模块图 主菜单 数据管理 保存和读取 统计查询 删除 修改 录入 各项信息统计 科室、专家、挂号信息查询 打印报表 支持多关键字的搜索引擎 退出 添加 二、 数据结构设计及用法说明 主要的三个结构(采用了十字交叉链表)科室信息的结构、专家信息的结构及挂号信息的结构。
2、分别如下 /*科室信息*/ struct Troom char num11;/*保存科室号*/ 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_
3、name20;/*保存患者姓名*/ char date11;/*保存挂号日期*/ char assistant20;/*保存挂号人员*/ intserial_num;/*保存挂号流水号*/ float fee;/*保存挂号费*/ struct Treg *next;/*保存指向下一个挂号信息的指针*/ ; /*专家信息结构体*/ struct Tpro char room_num11;/*保存科室号*/ char num11;/*保存专家编号*/ char name20;/*保存姓名*/ char birth11;/*保存出生日期*/ char sex;/*保存性别*/ char tel12;
4、/*保存电话*/ char profession15;/*保存职称*/ char summary50;/*保存简介*/ int tot_reg;/*保存专家的总挂号量*/ struct Tpro *next;/*保存指向下一个专家信息的指针*/ struct Treg *sub;/*保存指向挂号信息的头指针*/ ; 用法说明图示如下 head 科室1 科室2 科室n NULL 专家1基本信息 专家2基本信息 专家n基本信息 专家1挂号记录链 专家2挂号记录链 专家n挂号记录链 三、 程序结构流程图 系统总体流程图 开始 主菜单 录入信息 修改信息 插入信息 删除信息 保存文件 读取文件 查询信
5、息 统计数据 打印报表 退出系统 科室信息 专家信息 挂号信息 读入关键字 多关键字搜索 结束 查询流程图 查询信息 输入关键字 从信息总体中提取含有关键字的信息 输出信息 四、 各模块功能 数据管理模块中包含录入信息、修改信息、插入信息和删除信息四大功能 1、 录入信息录入科室、专家、挂号信息; 2、 修改信息对科室、专家、挂号信息进行修改; 3、 添加信息添加科室或专家; 4、 删除信息取消科室或解雇专家。 统计查询模块中包含查询信息和统计数据 1、 查询信息可查询所有科室、专家和挂号信息,还可以查询某个特定的信息,使用多关键字匹配和KMP字符串匹配技术; 2、 统计数据有3种统计的信息可
6、供查看 (1) 各科室的挂号量; (2) 各专家的挂号量; (3) 某天挂号的患者的基本信息。 保存和读取模块保存文件和读取文件; 退出程序退出医院专家门诊挂号系统。 各功能函数的相关说明见附录中的源程序清单。 五、 试验结果 整个程序运行起来很正常,没有出现bug,我这就把输出结果的截屏贴在下面 科室基本信息(部分) 专家基本信息(部分) 挂号基本信息(部分) 统计信息均准确无误 各科室的挂号量 各专家的挂号量 某天挂号的基本信息 六、 心得体会 第一次写管理系统这样的大型程序,说真的,有点不习惯,以前的一些代码风格成了我这次课设的最大障碍。 比如说,以前写小程序因为通常只有一个主函数,所以
7、很多变量都是局部变量,而这次大型作业要求有很多的函数相互交叉,共同完成一些功能,所以必须要用全局变量。 还有我的编程风格无意义的变量名使我吃了很多苦头,很多时候,我的变量名都混淆了,以至于我最后改的时候很麻烦。 这次课设,让我学了很多东西,除了代码风格和编程习惯的优化之外,我的代码能力也明显提高了。 经过这次课设,我一些以前没有彻底掌握的东西都牢牢掌握了。 比如指针的灵活运用,函数之间的互相调用的代码级优化等等。 尽管我学到了很多东西,但是对于这次大型作业我还是有一点遗憾,那就是代码的重复利用率不高,很多几乎一样的代码在我的程序中出现了多次(毕竟是一个上午写出来的东西,这也不能怪我)。 本来我
8、有心想优化一下,使重复利用率提高,但是由于ACM/ICPC将近,我全部时间都用在训练上,所以就算了。 希望不会对我的课设的评价造成太大的影响。 路漫漫其修远兮,吾将上下而求索。 程序设计这条路还很长,我会继续走下去,不断自我完善,早日成为一个出色的程序员。 七、 参考文献 所有资料均从XX而来 附录程序清单 /*/ /* 医院门诊挂号系统V1.01源代码 */ /* Copyright by XXX */ /*/ include include include define Troom_len sizeofstruct Troom define Tpro_len sizeofstruct Tp
9、ro define Treg_len sizeofstruct Treg define TLroom_len sizeofstruct TLroom define TLpro_len sizeofstruct TLpro define TLreg_len sizeofstruct 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 birth1
11、1;/*保存出生日期*/ 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;
12、/*保存电话*/ int tot_reg;/*保存科室的总挂号量*/ struct Troom *next;/*保存指向下一个挂号信息的指针*/ struct Tpro *sub;/*保存指向第一个专家信息的指针*/ ; /*辅助变量*/ struct TLroom struct Troom *st; struct TLroom *next; *storep, *pp; struct TLpro struct Tpro *st; struct TLpro *next; *storeq, *qq; struct TLreg struct Treg *st; struct TLreg *next;
13、 *storer, *rr; struct Troom *p, *pl, *tempp, *headNULL; 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 P
14、rint; void Exit; void Search_room; void Search_room_with_numchar *; void Search_room_with_namechar *; void Search_room_with_manchar *; void Search_room_with_telchar *; void Search_pro; void Search_pro_with_numchar *; void Search_pro_with_namechar *; void Search_pro_with_telchar *; void Search_reg; v
15、oid Search_reg_with_serial_numint; void Search_reg_with_case_numchar *; 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 *Tostringint; void PrnN; void PrnB; void PrnM; v
16、oid ClearAll; void Clearp; void Clearq; void Clearr; void cls; /*/ /* 主菜单 */ /*/ void Main_menu char command; do do Show_menu; commandgetchar; getsrest; cls; if command 9 puts“n无此选项请重新选择“; printf“按ENTER以继续.“; getsrest; cls; while command 9 ; switch command case 1 Write; break; case 2 Save; break; ca
17、se 3 Load; break; case 4 Modify; break; case 5 Insert; break; case 6 Delete; break; case 7 Search; break; 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“t4 修改数据n“; puts
18、“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录入将覆盖原有信息,您尚未保存,是否保存Y/N“; commandgetchar; getsrest; cls; if command Y | command y Save; headNULL; do pstruct Tro
19、om *mallocTroom_len; Room_in_mes; puts“n请输入科室号“; getsp-num; cls; Room_in_mes; puts“n请输入科室名“; getsp-name; cls; Room_in_mes; puts“n请输入负责人姓名“; getsp-man; cls; Room_in_mes; puts“n请输入电话“; getsp-tel; cls; p-subNULL; p-tot_reg0; p-nexthead; headp; puts“n是否录入此科室的专家信息Y/N“; command1getchar; getsrest; cls; whi
20、le command1 Y | command1 y qstruct Tpro *mallocTpro_len; strcpyq-room_num, p-num; Spe_in_mes; puts“n请输入专家编号“; getsq-num; cls; Spe_in_mes; puts“n请输入姓名“; getsq-name; cls; Spe_in_mes; puts“n请输入出生日期,例XXXX/XX/XX“; getsq-birth; cls; Spe_in_mes; puts“n请输入性别,M for MAN, W for WOMAN“; q-sexgetchar; getsrest;
21、cls; Spe_in_mes; puts“n请输入电话“; getsq-tel; cls; Spe_in_mes; puts“n请输入职称“; getsq-profession; cls; Spe_in_mes; puts“n请输入简介“; getsq-summary; cls; q-subNULL; q-tot_reg0; q-nextp-sub; p-subq; puts“n是否录入此专家的挂号信息Y/N“; command2getchar; getsrest; cls; while command2 Y | command2 y q-tot_reg; rstruct Treg *mal
22、locsizeofstruct Treg; strcpyr-pro_num, q-num; Reg_in_mes; puts“n请输入挂号流水号“; scanf“d“, getsrest; cls; Reg_in_mes; puts“n请输入病历号“; getsr-case_num; cls; Reg_in_mes; puts“n请输入患者姓名“; getsr-patient_name; cls; Reg_in_mes; puts“n请输入挂号费(元)“; scanf“f“, getsrest; cls; Reg_in_mes; puts“n请输入挂号时间,例XXXX/XX/XX“; gets
23、r-date; cls; Reg_in_mes; puts“n请输入挂号人员“; getsr-assistant; cls; r-nextq-sub; q-subr; puts“n是否录入下一个挂号信息Y/N“; command2getchar; getsrest; cls; p-tot_regq-tot_reg; puts“n是否录入下一个专家信息Y/N“; command1getchar; getsrest; cls; puts“n是否录入下一个科室信息Y/N“; command0getchar; getsrest; cls; while command0 Y | command0 y ;
24、 puts“n录入成功“; printf“按ENTER以继续.“; getsrest; cls; changed1; /*/ /* 保存文件 */ /*/ void Save FILE *fp, *fq, *fr; char file120, file220, file320; do puts“nt正在创建科室数据文件.“; puts“n请输入文件名“; getsfile1; cls; if fpfopenfile1, “wb“NULL puts“n文件不能打开“; printf“按ENTER以继续.“; getsrest; cls; while fpNULL; do puts“nt正在创建专
25、家数据文件.“; puts“n请输入文件名“; getsfile2; cls; if fqfopenfile2, “wb“NULL puts“n文件不能打开“; printf“按ENTER以继续.“; getsrest; cls; while fqNULL; do puts“nt正在创建挂号数据文件.“; puts“n请输入文件名“; getsfile3; cls; if frfopenfile3, “wb“NULL puts“n文件不能打开“; printf“按ENTER以继续.“; getsrest; cls; while frNULL; for phead; p; pp-next fwr
26、itep, Troom_len, 1, fp; for qp-sub; q; qq-next fwriteq, Tpro_len, 1, fq; for rq-sub; r; rr-next fwriter, Treg_len, 1, fr; puts“n保存成功“; printf“按ENTER以继续.“; getsrest; cls; changed0; fclosefp; fclosefq; fclosefr; /*/ /* 读取文件 */ /*/ void Load FILE *fp, *fq, *fr; int t; char file120, file220, file320; if
27、 changed char command; puts“n您尚未保存,是否保存Y/N“; commandgetchar; getsrest; cls; if command Y | command y Save; ClearAll; t0; do puts“n正在载入科室数据文件.“; t; puts“n请输入文件名“; getsfile1; cls; if fpfopenfile1, “rb“NULL puts“n文件不能打开“; printf“按ENTER以继续.“; getsrest; cls; if t3 puts“n读取失败,返回主菜单“; printf“按ENTER以继续.“; g
28、etsrest; cls; return; while fpNULL; t0; do puts“n正在载入专家数据文件“; puts“n请输入文件名“; getsfile2; cls; if fqfopenfile2, “rb“NULL puts“n文件不能打开“; printf“按ENTER以继续.“; getsrest; cls; if t3 puts“n读取失败,返回主菜单“; printf“按ENTER以继续.“; getsrest; cls; return; while fqNULL; t0; do puts“n正在载入挂号数据文件“; puts“n请输入文件名“; getsfile
29、3; cls; if frfopenfile3, “rb“NULL puts“n文件不能打开“; printf“按ENTER以继续.“; getsrest; cls; if t3 puts“n读取失败,返回主菜单“; printf“按ENTER以继续.“; getsrest; cls; return; while frNULL; headNULL; while feoffp pstruct Troom *mallocTroom_len; freadp, Troom_len, 1, fp; p-subNULL; if feoffp p-nexthead; headp; while feoffq qstruct Tpro *mallocTpro_len; freadq, Tpro_len, 1, fq; q-subNULL; Search_
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1