华中科技大学计算机科学与技术学院
《C 语言程序设计》课程设计
实验报告
题目: 医院专家门诊挂号系统
专业:
计算机科学与技术
班级:
计算机 0710 班
学号:
U200714517
姓名:
成绩:
周树杰
指导教师:
卢萍
完成日期: 2008 年 10 月 10 日
计算机 0710 班
周树杰
学号:U200714517
一、 系统功能模块图
主菜单
数据管理
录入
添加
删除
修改
保存和读取
统计查询
支持多关键字的搜索
各项信息统计
科室、专家、挂号信息查
打印报表
退出
二、 数据结构设计及用法说明
1
计算机 0710 班
周树杰
学号:U200714517
主要的三个结构(采用了十字交叉链表):科室信息的结构、专家信息的结构及挂号信息的
结构。分别如下:
/*科室信息*/
struct Troom{
char num[11];
char name[20];
char man[20];
char tel[12];
int tot_reg;
struct Troom *next;
struct Tpro *sub;
/*挂号信息结构体*/
struct Treg{
char pro_num[11];
char case_num[15];
char patient_name[20];
char date[11];
char assistant[20];
int serial_num;
float fee;
struct Treg *next;
};
};
};
/*保存科室号*/
/*保存科室名*/
/*保存负责人*/
/*保存电话*/
/*保存科室的总挂号量*/
/*保存指向下一个科室信息的指针*/
/*保存指向专家信息的头指针*/
/*保存专家编号*/
/*保存病历号*/
/*保存患者姓名*/
/*保存挂号日期*/
/*保存挂号人员*/
/*保存挂号流水号*/
/*保存挂号费*/
/*保存指向下一个挂号信息的指针*/
/*保存科室号*/
/*保存专家编号*/
/*保存姓名*/
/*保存出生日期*/
/*保存性别*/
/*保存电话*/
/*保存职称*/
/*保存简介*/
/*保存专家的总挂号量*/
/*保存指向下一个专家信息的指针*/
/*保存指向挂号信息的头指针*/
/*专家信息结构体*/
struct Tpro{
char room_num[11];
char num[11];
char name[20];
char birth[11];
char sex;
char tel[12];
char profession[15];
char summary[50];
int tot_reg;
struct Tpro *next;
struct Treg *sub;
用法说明图示如下:
2
计算机 0710 班
周树杰
学号:U200714517
head
科室 1
科室 2
…
科室 n
NULL
专家 1 基本信息
专家 1 挂号记录链
专家 2 基本信息
专家 2 挂号记录链
…
专家 n 基本信息
专家 n 挂号记录链
三、 程序结构流程图
系统总体流程图:
开始
主菜单
查询流程图:
科室信息
专家信息
挂号信息
读 入 关
键字
多关键字搜索
结束
录入信息
修改信息
插入信息
删除信息
保存文件
读取文件
查询信息
统计数据
打印报表
退出系统
3
计算机 0710 班
周树杰
学号:U200714517
查询信息
输 入 关
键字
从信息总体中提
取含有关键字的
信息
输 出 信
息
四、 各模块功能
数据管理模块中包含录入信息、修改信息、插入信息和删除信息四大功能:
1、 录入信息:录入科室、专家、挂号信息;
2、 修改信息:对科室、专家、挂号信息进行修改;
3、 添加信息:添加科室或专家;
4、 删除信息:取消科室或解雇专家。
统计查询模块中包含查询信息和统计数据
1、 查询信息:可查询所有科室、专家和挂号信息,还可以查询某个特定的信息,使用多关
键字匹配和KMP字符串匹配技术;
2、 统计数据:有3种统计的信息可供查看:
(1) 各科室的挂号量;
(2) 各专家的挂号量;
(3) 某天挂号的患者的基本信息。
保存和读取模块:保存文件和读取文件;
退出程序:退出医院专家门诊挂号系统。
各功能函数的相关说明见附录中的源程序清单。
五、 试验结果
整个程序运行起来很正常,没有出现bug,我这就把输出结果的截屏贴在下面:
科室基本信息(部分):
4
计算机 0710 班
周树杰
学号:U200714517
专家基本信息(部分):
挂号基本信息(部分):
统计信息均准确无误:
5
计算机 0710 班
周树杰
学号:U200714517
各科室的挂号量:
各专家的挂号量:
某天挂号的基本信息:
六、 心得体会
6
计算机 0710 班
周树杰
学号:U200714517
第一次写管理系统这样的大型程序,说真的,有点不习惯,以前的一些代码风格成了我这次
课设的最大障碍。比如说,以前写小程序因为通常只有一个主函数,所以很多变量都是局部
变量,而这次大型作业要求有很多的函数相互交叉,共同完成一些功能,所以必须要用全局
变量。还有我的编程风格——无意义的变量名使我吃了很多苦头,很多时候,我的变量名都
混淆了,以至于我最后改的时候很麻烦。
这次课设,让我学了很多东西,除了代码风格和编程习惯的优化之外,我的代码能力也明显
提高了。经过这次课设,我一些以前没有彻底掌握的东西都牢牢掌握了。比如指针的灵活运
用,函数之间的互相调用的代码级优化等等。
尽管我学到了很多东西,但是对于这次大型作业我还是有一点遗憾,那就是代码的重复利用
率不高,很多几乎一样的代码在我的程序中出现了多次(毕竟是一个上午写出来的东西,这
也不能怪我)。本来我有心想优化一下,使重复利用率提高,但是由于ACM/ICPC将近,我
全部时间都用在训练上,所以就算了。希望不会对我的课设的评价造成太大的影响。
路漫漫其修远兮,吾将上下而求索。程序设计这条路还很长,我会继续走下去,不断自我完
善,早日成为一个出色的程序员。
七、 参考文献
所有资料均从百度而来
附录:程序清单
/***************************************************************/
*/
/*
/*
*/
/***************************************************************/
#include
#include
#include
医院门诊挂号系统V1.01源代码
Copyright by 周树杰
#define Troom_len sizeof(struct Troom)
#define Tpro_len sizeof(struct Tpro)
#define Treg_len sizeof(struct Treg)
#define TLroom_len sizeof(struct TLroom)
#define TLpro_len sizeof(struct TLpro)
#define TLreg_len sizeof(struct TLreg)
#define Room_in_mes puts("\n\t科室信息录入中...")
#define Spe_in_mes puts("\n\t专家信息录入中...")
#define Reg_in_mes puts("\n\t挂号信息录入中...")
/*挂号信息结构体*/
struct Treg{
char pro_num[11];
/*保存专家编号*/
7