《C语言程序设计课程设计实验报告-门诊病历信息管理系统》(共106页).doc
《《C语言程序设计课程设计实验报告-门诊病历信息管理系统》(共106页).doc》由会员分享,可在线阅读,更多相关《《C语言程序设计课程设计实验报告-门诊病历信息管理系统》(共106页).doc(106页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上专心-专注-专业华中科技大学计算机科学与技术学院华中科技大学计算机科学与技术学院CC 语言程序设计语言程序设计课程设计课程设计实验报告实验报告题目:题目: 门诊病历信息管理系统门诊病历信息管理系统 专业:专业:计算机科学与技术计算机科学与技术 _ 班级:班级:CS0809CS0809 _ 学号:学号: _姓名:姓名: _ 成绩:成绩: _指导教师:指导教师: _完成日期:完成日期:2009 年年 1010 月月 8 8 日日精选优质文档-倾情为你奉上专心-专注-专业一、一、.1 .1三、三、 .2文件系统、辅助函数及欢迎界面2录入信息5修改信息6插入信息10删除信息1
2、3查询信息14统计信息15四、四、.17五、五、18六、六、.103精选优质文档-倾情为你奉上专心-专注-专业精选优质文档-倾情为你奉上专心-专注-专业一一、系统功能模块结构图、系统功能模块结构图 二、数据结构设计及用法说明二、数据结构设计及用法说明该系统的数据结构是采用十字交叉链表。十字交叉链表的模型如下: 单位病历门诊信息十字交叉链表门诊病历信息管理系统门诊病历信息管理系统文件系统文件系统编辑系统编辑系统查询系统查询系统统计系统统计系统信息导入信息显示信息保存录入信息修改信息插入信息子删除信息查询病历信息查询门诊信息查询单位信息统计各月门诊量统计各单位门诊量统计未门诊员工信息录入单位信息录
3、入门诊信息录入病历信息修改单位信息修改门诊信息修改病历信息插入单位信息插入门诊信息插入病历信息删除单位信息删除门诊信息删除病历信息d_head单位1单位 2单位 nNULL病历 1病历 2病历 nNULL.门诊 1门诊 2.门诊 2门诊 1门诊 n NULL门诊 n NULL门诊 1门诊 2.门诊 n NULL门诊 1门诊 2.门诊 n NULL.精选优质文档-倾情为你奉上专心-专注-专业三个结构的声明如下:/*定义存储单位基本信息的结构*/typedef struct danwei char dd_num10; /*单位编号*/ char d_name30; /*单位名称*/ char d_
4、person20; /*单位负责人*/ char d_tel12; /*联系电话*/ struct danwei *next; /*指向下一个单位结点*/ struct bingli *b_head; /*指向病历信息链表头指针*/DANWEI;/*定义存储病历基本信息的结构*/typedef struct bingli char bb_num10; /*病历编号*/ char name10; /*姓名*/ char sex; /*性别*/ char bd_name30 ; /*所在单位*/ char bd_num10; /*所在单位编号*/ char birthday11; /*出生日期*/
5、 char* history; /*药物过敏史*/ char tel12; /*电话*/ char add30; /*住址*/ struct bingli *next; /*指向下一个病历结点*/ struct menzhen *m_head;/*指向门诊信息链表头指针*/BINGLI;/*定义存储门诊基本信息的结构*/typedef struct menzhen char mb_num10; /*病历编号*/ char md_num10; /*所在单位编号*/ char kebie10; /*科别*/ char time11; /*门诊时间*/ char zs30; /*主诉*/ char
6、zd30; /*初步诊断*/ char yj30; /*治疗意见*/ char doctor10; /*医师姓名*/ struct menzhen* next; /*指向下一门诊信息结点*/MENZHEN;三、三、各模块的功能解析、程序结构、运行结果及部分流程图各模块的功能解析、程序结构、运行结果及部分流程图整个系统有七大模块,除了主函数外,另外还有 24 个函数,除了实现上面模块结构图中的各个功能以外,还有读取键入值的函数 int get_key(); 画边框函数 void box(int startx,int stary,int high,int width);和一个欢迎界面的函数 voi
7、d welcome(void);。各个模块的功能解析和程序的结构说明分别如下:精选优质文档-倾情为你奉上专心-专注-专业 文件系统、辅助函数及欢迎界面文件系统、辅助函数及欢迎界面1欢迎界面欢迎界面 void welcome(void);本程序是由 wintc 编译。该界面调用了 dos 库里的 getdate 和 gettime 函数,date 和 time 结构已在 dos.h 中定义,可以读取系统日期和时间。首先将界面背景设为白色,字体设为蓝色,然后输出相应信息及系统时间。最后使用 getch()函数,使得按任意键进入系统主界面。2得到按键值得到按键值 int get_key();要使程序
8、得到键盘按键值,就要对按键进行扫描,通过查询键盘编码表,通过get_key 函数返回按键的扫描码(即编码高位字节)。在 get_key 函数中,首先定义类型为 REGS 的联合体 rg,然后降高字节初始化为 0,然后使用 int86 函数寄存键值,最后输出高字节键值即扫描码。3画边框函数画边框函数 void box(int startx,int starty,int high,int width);该函数主要是在设计下拉菜单时使用,通过该函数画出一个矩形框。 换矩形边框时,先打印左上角,再打印上边线,再打印右上角,再打印左边线和右边线,最后打印左下角,下边线和右下角。startx、starty
9、、high、width 分别代表起始坐标和矩形边框的高度和宽度。精选优质文档-倾情为你奉上专心-专注-专业4导入文件导入文件 void load(DANWEI *d_head);该函数中声明了 3 个字符数组,分别用来存储要导入的三个文件的路径名,即用户可以自己确定要导入的数据文件。如果用户输入的文件路径不对或者文件不存在,系统会提示用户重新输入或者退出。读入单位时,建立的是后进先出链表,最先保存的那个单位建立在链表的尾部;读取病历时,先要找到对应的单位编号,然后建立后进先出链表;读取门诊时,先找到对应病历编号,然后同样建立后进先出链表。录入完毕,关闭三个文件。5保存文件保存文件 void s
10、ave(DANWEI *d_head);该函数有三个文件指针,分别指向三级信息要保存的文件。函数将整个系统的三部分数据分别保存在 3 个文件里面,而且也声明了 3 个字符数组,用来存储文件名,即用户可以自己选择保存的路径和文件名。6显示信息显示信息 void show(DANWEI *d_head);该函数可以将整个系统的所有信息显示出来。本函数新建立三个窗口,即先建立一个窗口输出单位信息,然后在原有窗口上建立第二个窗口用来输出病历信息,最后在原有窗精选优质文档-倾情为你奉上专心-专注-专业口上建立第三个窗口用来输出门诊信息。当显示完一次门诊后按任意键清屏显示下一个门诊,当一个病历的门诊显示完
11、之后,清屏显示下一个病历并显示其病历,当一个单位的病历显示完之后清屏显示下一个单位,当显示完所有信息后清屏按任意键退出。 录入信息录入信息1录入单位信息录入单位信息 DANWEI *create1(void); 该函数是录入单位基本信息,建立第一级链表。建立该链表采用的是后进先出式,即输入的下一个单位的 next 指针指向前一个单位,最后录入的那个单位作为链表的第一个单位。返回值为指向第一个单位的指针。将每个单位的 b_head 指针赋值为空。效果如下:2录入病历信息录入病历信息 BINGLI *create2(DANWEI *d_head);本函数是在录入单位基本信息的基础上录入病历基本信息
12、,建立第二级链表,如果未录入单位信息将自动退出。首先提示输入要录入病历信息的单位编号,然后找到对应的单位(如未找到则提示重新输入或退出),如果该单位有多条病历输入,则建立一个先进先出链表。将单位最后一条病历的 next 指针赋值为 NULL。如果该单位已经存在病历信息则提示退出,用户可以通过插入来输入病历信息。每条病历的 m_head 指针都自动赋值为 NULL。输入病历信息时,精选优质文档-倾情为你奉上专心-专注-专业不必重新输入单位编号,单位名称,而通过 strcpy 函数将单位信息复制到病历结构中。当用户不在输入某一单位病历时,可自动通过循环提示输入下一个单位病历信息或者输入 X 退出。
13、3录入门诊信息录入门诊信息 MENZHEN *create3(DANWEI *d_head); 本函数是在录入单位信息及病历信息的基础上建立的第三级链表,即门诊信息链表。同前,先找到对应的单位,然后再找到对应的病历,找到后先判断是否已经存在门诊信息,如果门诊信息不存在,则可建立一个先进先出链表,如果门诊信息已经存在,则提示用户可以使用插入函数来添加,并退出该函数。当然有些已知信息可以直接复制而不必重新输入。通过自身的循环可以选择录入某一单位某一病历的门诊信息,也可选择退出。 修改信息修改信息1 1修改单位信息修改单位信息 void modify1(DANWEI *d_head); 本函数的功能
14、是查找某一单位并修改该单位的某一项信息。首先提示用户输入要修改的单位编号,然后遍历第一级链表,找出对应的单位,然后提示用户输入要修改的某一项信息,修改后提示修改成功,并由用户选择继续修改还是退出。相应的流程图如下:精选优质文档-倾情为你奉上专心-专注-专业 Y Y N Y N N Y N Y N Y N Y DANWEI *p=NULL;char d_num10; char flag; int flag1;int flag2; char space;p=d_head;d_head=NULL?d_num=输入的单位编号p=NULL?strcmp(p-dd_num,d_num)=0?p=p-nex
15、t判断重新输入还是退出flag=输入的选择(R 或X)flag 不为R,r,X,x?flag 为 r或 R提示用户输入要修改的项目 flag1=输入的代号(1、2、3 或 4)flag1 不为1、2、3、4 中的任意一个?3415开始精选优质文档-倾情为你奉上专心-专注-专业 Y N Y N Y N Y N Y N N flag 为 1提示用户输入新单位编号并修改scanf(%s,p-dd_num);flag 为 2Flag=3提示用户输入新单位名称并修改scanf(%s,p-d_name);提示用户输入新的单位负责人并修改 scanf(%s,p-d_person);提示用户输入新电话号码并修
16、改 scanf(%s,p-d_tel);提示用户是否继续修改单位信息。flag2=输入的编号(1 代表继续修改这个单位的其他信息,2 代表修改其他单位信息,0 代表不再修改)。flag2 不为1、2、0 中的任一个flag2 为1?3Flag2 为 2?4461结束65Y精选优质文档-倾情为你奉上专心-专注-专业运行效果如下:2修改病历信息修改病历信息 void modify2(DANWEI* d_head);该函数的功能是查找某一病历并修改该病历的某一项信息。同单位信息修改函数一样,需要查找所要修改的病历所在的单位,然后查找出该病历。然后提示用户输入所要修改的某一项病历信息,然后进行修改,修
17、改成功后可修改其他病历或者退出。运行效果如下:3修改门诊信息修改门诊信息 void modify3(DANWEI *d_head);该函数的功能是查找某一门诊并修改该门诊的某一项信息。同前,先便利链表找到门诊对应的单位,然后再找到对应的病历,最后根据门诊时间找出对应的门诊。让用户选择要修改的门诊选项,修改成功后,用户可以继续修改或者退出。在此期间如果出现找不到的情况,系统都会提示重新输入或退出。运行效果如下:精选优质文档-倾情为你奉上专心-专注-专业 插入信息插入信息1插入单位信息插入单位信息 DANWEI *add1(DANWEI *d_head);该函数的作用是在某个单位后插入一个新的单位
18、信息。插入时,首先寻找要在其后插入的那个单位,然后输入要插入的单位信息,然后判断是不是在链尾插入,调整链表指针的对应关系,插入成功后可继续插入或者退出。运行效果如下:相应的流程图如下:DANWEI *p=NULL,*other,*after;char d_num10; char flag; int flag2; char space;开始精选优质文档-倾情为你奉上专心-专注-专业 Y Y N Y N N Y N Y N Y N p=d_head;d_head=NULL?d_num=输入的单位编号p=NULL?strcmp(p-dd_num,d_num)=0?p=p-next判断重新输入还是退出
19、flag=输入的选择(R 或X)flag 不为R,r,X,x?flag 为 r或 Rafter=p-next;other=(DANWEI *)malloc(sizeof(DANWEI);413提示用户输入单位编号scanf(%s,other-dd_num);提示用户输入单位名称scanf(%s,other-d_name);提示用户输入单位负责人scanf(%s,other-d_person);精选优质文档-倾情为你奉上专心-专注-专业 N Y Y Y N Y N 2 2插入病历信息插入病历信息 BINGLI *add2(DANWEI *d_head);该函数功能是在指定的病历后插入一个新的病历
20、。同插入单位信息一样,要先找到指定的单位,然后找到指定的病历。如果病历信息链未建立,则直接输入第一个病历信息,如果已经建立,则在对应的位置插入病历信息。插入完成可继续插入或者选择退出。运行效果如下flag2 为1?1结束533提示用户输入单位联系电话scanf(%s,other-d_tel);after 不为空,即不是链尾?other-next=after;p-next=other;other-next=NULL;p-next=other;提示用户是否继续插入单位信息。flag2=输入的编号(1 代表继续插入,2 代表不再插入)。flag2 不为1、2、0 中的任一个45精选优质文档-倾情为你
21、奉上专心-专注-专业3插入门诊信息插入门诊信息 MENZHEN *add3(DANWEI *d_head);该函数是在指定的门诊后插入一个新的门诊信息。同上,先找到指定的单位,然后找到指定的病历,最后根据门诊日期找到对应的门诊。如果门诊信息链未建立,则直接输入第一个门诊信息,如果已经建立,则在指定位置插入门诊信息。运行效果如下: 删除信息删除信息1删除单位信息删除单位信息 DANWEI *del1(DANWEI *d_head);本函数是删除指定的一个单位信息。找到该单位后,先释放该单位下单位下的病历和门诊链,然后判断删除的单位是否是单位信息链的头部,如果是就将头指针指向下一个单位,如果不是,
22、将前一个单位指向后一个单位,最后释放所要删除的单位。运行结果:精选优质文档-倾情为你奉上专心-专注-专业2删除病历信息删除病历信息 BINGLI *del2(DANWEI *d_head);本函数的功能是删除指定的一条病历信息。同前首先找出该病历,然后释放该病历的门诊信息链,然后再判断该病历是否是链表的头部,同前做出相应的操作。运行结果:3删除门诊信息删除门诊信息 MENZHEN *del3(DANWEI *d_head); 本函数的功能是删除指定的一条门诊信息。同前首先找出该门诊,然后通过判断该门诊是不是头结点做出相应的操作,最后释放该节点。运行结果: 查询信息查询信息1查询单位信息查询单位
23、信息 void danweiinfo_inq(DANWEI *d_head); 该函数是为了查找某一个单位的基本信息,用户首先输入要查找的单位编号,然后找到后系统输出所要查找的单位信息。 运行结果如下:2查询病历信息查询病历信息 void bingliinfo_inq(DANWEI *d_head);该函数是为了查找并显示某一个病历的基本信息,通过单位编号及病历编号找出该病历,然后将病历信息依次显示。运行结果如下:精选优质文档-倾情为你奉上专心-专注-专业3查询门诊信息查询门诊信息 void menzheninfo_inq(DANWEI *d_head);同前该函数的作用是查找某一门诊并显示该
24、门诊信息,依次通过单位编号、病历编号、门诊日期找到该门诊,然后将其详细信息输出。运行结果如下: 统计信息统计信息1统计一年中各月的门诊量统计一年中各月的门诊量 void cal1(DANWEI *d_head); 该函数的功能是统计一年中各月的门诊量,并且按照降序排序后输出。该函数首先定义一个二维整型数组 m122,每行第一个位置存取月份,第二个位置存放该月门诊量,定义字符数组 b3,用于中间月份的转化。然后遍历链表,将门诊月份的那两位字符存取到 b中,然后利用 atoi 函数将其转化为整型,那么则将 m 中对应的月份的门诊量加一,循环直至遍历所有门诊。然后利用冒泡排序法对二维整型数组进行降序
25、排序,排序时大小比较按照第二列,但整行要互换。最后将排序后的结果按顺序输出。运行结果如下:精选优质文档-倾情为你奉上专心-专注-专业2统计各单位员工的总门诊量统计各单位员工的总门诊量 void cal2(DANWEI *d_head); 该函数的功能是统计各单位员工的总门诊量,并且按照降序排序后输出显示。该函数首先定义一个存储单位员工总门诊量的结构 m_list,该结构中包括单位编号、单位名称、总门诊量及指向下一个单位的指针。然后遍历单位链表,同时创建统计门诊量的链表,将单位信息拷贝到新建结构中,然后遍历该单位各病历的门诊,统计门诊量并存储到新建结构中。然后对 m_list 链表进行降序排列,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C语言程序设计课程设计实验报告-门诊病历信息管理系统 语言程序设计 课程设计 实验 报告 门诊 病历 信息管理 系统 106
限制150内