《C语言程序设计》课程设计实验报告门诊病历信息管理系统_第1页
《C语言程序设计》课程设计实验报告门诊病历信息管理系统_第2页
《C语言程序设计》课程设计实验报告门诊病历信息管理系统_第3页
《C语言程序设计》课程设计实验报告门诊病历信息管理系统_第4页
《C语言程序设计》课程设计实验报告门诊病历信息管理系统_第5页
已阅读5页,还剩101页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、华中科技大学计算机科学与技术学院华中科技大学计算机科学与技术学院 cc 语言程序设计语言程序设计课程设计课程设计 实验报告实验报告 题目:题目: 门诊病历信息管理系统门诊病历信息管理系统 专业:专业:计算机科学与技术计算机科学与技术 _ 班级:班级:cs0809cs0809 _ 学号:学号: _ 姓名:姓名: _ 成绩:成绩: _ 指导教师:指导教师: _ 完成日期:完成日期:2009 年年 1010 月月 8 8 日日 一、一、系统功能模系统功能模块块结结构构图图 .1 二、数据结构设计及用法说明 .1 三、三、各模块的功能解析、各模块的功能解析、程程序结构、运行结果及部分流程序结构、运行结

2、果及部分流程 图图 .2 文件系统、辅助函数及欢迎界面2 录入信息5 修改信息6 插入信息10 删除信息13 查询信息14 统计信息15 四、四、心得体心得体会会 .17 五、五、源代码及源代码及注注释释 18 六、六、参考参考文文献献 .103 一一、系统功能模块结构图、系统功能模块结构图 二、数据结构设计及用法说明二、数据结构设计及用法说明 该系统的数据结构是采用十字交叉链表。十字交叉链表的模型如下: 单位病历门诊信息十字交叉链表 门诊病历信息管理系统门诊病历信息管理系统 文件系统文件系统 编辑系统编辑系统 查询系统查询系统 统计系统统计系统 信息导入 信息显示 信息保存 录入信息 修改信

3、息 插入信息 子 删除信息 查询病历信息 查询门诊信息 查询单位信息 统计各月门诊量 统计各单位门诊量 统计未门诊员工信息 录入单位信息 录入门诊信息 录入病历信息 修改单位信息 修改门诊信息 修改病历信息 插入单位信息 插入门诊信息 插入病历信息 删除单位信息 删除门诊信息 删除病历信息 d_head 单位 1 单位 2单位 nnull 病历 1 病历 2 病历 n null . 门诊 1 门诊 2 . 门诊 2门诊 1 门诊 n null 门诊 n null 门诊 1 门诊 2 .门诊 n null 门诊 1 门诊 2 .门诊 n null . 三个结构的声明如下: /*定义存储单位基本信

4、息的结构*/ typedef struct danwei char dd_num10; /*单位编号*/ char d_name30; /*单位名称*/ char d_person20; /*单位负责人*/ char d_tel12; /*联系电话*/ struct danwei *next; /*指向下一个单位结点*/ struct bingli *b_head; /*指向病历信息链表头指针*/ danwei; /*定义存储病历基本信息的结构*/ typedef struct bingli char bb_num10; /*病历编号*/ char name10; /*姓名*/ char se

5、x; /*性别*/ char bd_name30 ; /*所在单位*/ char bd_num10; /*所在单位编号*/ char birthday11; /*出生日期*/ char* history; /*药物过敏史*/ char tel12; /*电话*/ char add30; /*住址*/ struct bingli *next; /*指向下一个病历结点*/ struct menzhen *m_head;/*指向门诊信息链表头指针*/ bingli; /*定义存储门诊基本信息的结构*/ typedef struct menzhen char mb_num10; /*病历编号*/ ch

6、ar md_num10; /*所在单位编号*/ char kebie10; /*科别*/ char time11; /*门诊时间*/ char zs30; /*主诉*/ char zd30; /*初步诊断*/ char yj30; /*治疗意见*/ char doctor10; /*医师姓名*/ struct menzhen* next; /*指向下一门诊信息结点*/ menzhen; 三、三、各模块的功能解析、程序结构、运行结果及部分流程图各模块的功能解析、程序结构、运行结果及部分流程图 整个系统有七大模块,除了主函数外,另外还有 24 个函数,除了实现上面模块结构 图中的各个功能以外,还有

7、读取键入值的函数 int get_key(); 画边框函数 void box(int startx,int stary,int high,int width);和一个欢迎界面的函数 void welcome(void); 。 各个模块的功能解析和程序的结构说明分别如下: 文件系统、辅助函数及欢迎界面文件系统、辅助函数及欢迎界面 1欢迎界面欢迎界面 void welcome(void); 本程序是由 wintc 编译。该界面调用了 dos 库里的 getdate 和 gettime 函数, date 和 time 结构已在 dos.h 中定义,可以读取系统日期和时间。首先将界面背景设为 白色,字

8、体设为蓝色,然后输出相应信息及系统时间。最后使用 getch()函数,使得按 任意键进入系统主界面。 2得到按键值得到按键值 int get_key(); 要使程序得到键盘按键值,就要对按键进行扫描,通过查询键盘编码表,通过 get_key 函数返回按键的扫描码(即编码高位字节)。在 get_key 函数中,首先定义类 型为 regs 的联合体 rg,然后降高字节初始化为 0,然后使用 int86 函数寄存键值,最 后输出高字节键值即扫描码。 3画边框函数画边框函数 void box(int startx,int starty,int high,int width); 该函数主要是在设计下拉菜

9、单时使用,通过该函数画出一个矩形框。 换矩形边框时,先打印左上角,再打印上边线,再打印右上角,再打印左边线和右边线, 最后打印左下角,下边线和右下角。startx、starty、high、width 分别代表起始坐标和 矩形边框的高度和宽度。 4导入文件导入文件 void load(danwei *d_head); 该函数中声明了 3 个字符数组,分别用来存储要导入的三个文件的路径名,即用 户可以自己确定要导入的数据文件。如果用户输入的文件路径不对或者文件不存在, 系统会提示用户重新输入或者退出。读入单位时,建立的是后进先出链表,最先保存 的那个单位建立在链表的尾部;读取病历时,先要找到对应的

10、单位编号,然后建立后 进先出链表;读取门诊时,先找到对应病历编号,然后同样建立后进先出链表。录入 完毕,关闭三个文件。 5保存文件保存文件 void save(danwei *d_head); 该函数有三个文件指针,分别指向三级信息要保存的文件。函数将整个系统的三 部分数据分别保存在 3 个文件里面,而且也声明了 3 个字符数组,用来存储文件名, 即用户可以自己选择保存的路径和文件名。 6显示信息显示信息 void show(danwei *d_head); 该函数可以将整个系统的所有信息显示出来。本函数新建立三个窗口,即先建立一个 窗口输出单位信息,然后在原有窗口上建立第二个窗口用来输出病历

11、信息,最后在原有窗 口上建立第三个窗口用来输出门诊信息。当显示完一次门诊后按任意键清屏显示下一个门 诊,当一个病历的门诊显示完之后,清屏显示下一个病历并显示其病历,当一个单位的病 历显示完之后清屏显示下一个单位,当显示完所有信息后清屏按任意键退出。 录入信息录入信息 1录入单位信息录入单位信息 danwei *create1(void); 该函数是录入单位基本信息,建立第一级链表。建立该链表采用的是后进先出式,即 输入的下一个单位的 next 指针指向前一个单位,最后录入的那个单位作为链表的第一个单 位。返回值为指向第一个单位的指针。将每个单位的 b_head 指针赋值为空。效果如下: 2录入

12、病历信息录入病历信息 bingli *create2(danwei *d_head); 本函数是在录入单位基本信息的基础上录入病历基本信息,建立第二级链表,如果未录入 单位信息将自动退出。首先提示输入要录入病历信息的单位编号,然后找到对应的单位(如未 找到则提示重新输入或退出),如果该单位有多条病历输入,则建立一个先进先出链表。将单 位最后一条病历的 next 指针赋值为 null。如果该单位已经存在病历信息则提示退出,用户可 以通过插入来输入病历信息。每条病历的 m_head 指针都自动赋值为 null。输入病历信息时, 不必重新输入单位编号,单位名称,而通过 strcpy 函数将单位信息复

13、制到病历结构中。当用 户不在输入某一单位病历时,可自动通过循环提示输入下一个单位病历信息或者输入 x 退出。 3录入门诊信息录入门诊信息 menzhen *create3(danwei *d_head); 本函数是在录入单位信息及病历信息的基础上建立的第三级链表,即门诊信息链表。 同前,先找到对应的单位,然后再找到对应的病历,找到后先判断是否已经存在门诊信息, 如果门诊信息不存在,则可建立一个先进先出链表,如果门诊信息已经存在,则提示用户 可以使用插入函数来添加,并退出该函数。当然有些已知信息可以直接复制而不必重新输 入。通过自身的循环可以选择录入某一单位某一病历的门诊信息,也可选择退出。 修

14、改信息修改信息 1 1修改单位信息修改单位信息 void modify1(danwei *d_head); 本函数的功能是查找某一单位并修改该单位的某一项信息。首先提示用户输入要修改 的单位编号,然后遍历第一级链表,找出对应的单位,然后提示用户输入要修改的某一项 信息,修改后提示修改成功,并由用户选择继续修改还是退出。 相应的流程图如下: 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_hea d; d_head=nul l? d_nu

15、m=输入的单位编 号 p=null? strcmp(p- dd_num,d_ num)=0? p=p-next 判断重新输入还是退出 flag=输入的选择(r 或 x) flag 不为 r,r,x,x ? flag 为 r 或 r 提示用户输入要修改的 项目 flag1=输入的代号 (1、2、3 或 4) flag1 不为 1、2、3、4 中的任意 一个? 3 4 1 5 开始 y n y n y n y n y n n flag 为 1 提示用户输入新单位编号并 修改 scanf(%s,p-dd_num); flag 为 2 flag=3 提示用户输入新单位名称并修 改 scanf(%s,p

16、-d_name); 提示用户输入新的单位负责人 并修改 scanf(%s,p-d_person); 提示用户输入新电话号码并 修改 scanf(%s,p-d_tel); 提示用户是否继续修改单位信息。 flag2=输入的编号(1 代表继续修 改这个单位的其他信息,2 代表 修改其他单位信息,0 代表不再 修改)。 flag2 不为 1、2、0 中的任 一个 flag2 为 1? 3 flag2 为 2? 4 4 6 1 结束 65 y 运行效果如下: 2修改病历信息修改病历信息 void modify2(danwei* d_head); 该函数的功能是查找某一病历并修改该病历的某一项信息。同单

17、位信息修改函数一样, 需要查找所要修改的病历所在的单位,然后查找出该病历。然后提示用户输入所要修改的 某一项病历信息,然后进行修改,修改成功后可修改其他病历或者退出。 运行效果如下: 3修改门诊信息修改门诊信息 void modify3(danwei *d_head); 该函数的功能是查找某一门诊并修改该门诊的某一项信息。同前,先便利链表找到门诊 对应的单位,然后再找到对应的病历,最后根据门诊时间找出对应的门诊。让用户选择要 修改的门诊选项,修改成功后,用户可以继续修改或者退出。在此期间如果出现找不到的 情况,系统都会提示重新输入或退出。 运行效果如下: 插入信息插入信息 1插入单位信息插入单

18、位信息 danwei *add1(danwei *d_head); 该函数的作用是在某个单位后插入一个新的单位信息。插入时,首先寻找要在其后插 入的那个单位,然后输入要插入的单位信息,然后判断是不是在链尾插入,调整链表指针 的对应关系,插入成功后可继续插入或者退出。 运行效果如下: 相应的流程图如下: 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_hea d; d_head=nul l? d_num=输入的单位编 号 p=n

19、ull? strcmp(p- dd_num,d_ num)=0? p=p-next 判断重新输入还是退出 flag=输入的选择(r 或 x) flag 不为 r,r,x,x ? flag 为 r 或 r after=p-next; other=(danwei *)malloc(sizeof(danwei); 4 1 3 提示用户输入单位编号 scanf(%s,other- dd_num); 提示用户输入单位名称 scanf(%s,other- d_name); 提示用户输入单位负责人 scanf(%s,other- d_person); n y y y n y n 2 2插入病历信息插入病历信

20、息 bingli *add2(danwei *d_head); 该函数功能是在指定的病历后插入一个新的病历。同插入单位信息一样,要先找到指 定的单位,然后找到指定的病历。如果病历信息链未建立,则直接输入第一个病历信息, 如果已经建立,则在对应的位置插入病历信息。插入完成可继续插入或者选择退出。 运行效果如下 flag2 为 1? 1 结束 53 3 提示用户输入单位联系电 话 scanf(%s,other-d_tel); after 不为空, 即不是链尾? other- next=after; p-next=other; other- next=null; p-next=other; 提示用户

21、是否继续插入单位信息。 flag2=输入的编号(1 代表继续 插入,2 代表不再插入)。 flag2 不为 1、2、0 中的 任一个 4 5 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); 本函数的功能是删除指定的一条门诊信息。同前首先找出该门诊,然后

23、通过判断该门 诊是不是头结点做出相应的操作,最后释放该节点。 运行结果: 查询信息查询信息 1查询单位信息查询单位信息 void danweiinfo_inq(danwei *d_head); 该函数是为了查找某一个单位的基本信息,用户首先输入要查找的单位编号,然后找 到后系统输出所要查找的单位信息。 运行结果如下: 2查询病历信息查询病历信息 void bingliinfo_inq(danwei *d_head); 该函数是为了查找并显示某一个病历的基本信息,通过单位编号及病历编号找出该病 历,然后将病历信息依次显示。 运行结果如下: 3查询门诊信息查询门诊信息 void menzhenin

24、fo_inq(danwei *d_head); 同前该函数的作用是查找某一门诊并显示该门诊信息,依次通过单位编号、病历编号、门 诊日期找到该门诊,然后将其详细信息输出。 运行结果如下: 统计信息统计信息 1统计一年中各月的门诊量统计一年中各月的门诊量 void cal1(danwei *d_head); 该函数的功能是统计一年中各月的门诊量,并且按照降序排序后输出。该函数首先定 义一个二维整型数组 m122,每行第一个位置存取月份,第二个位置存放该月门诊量,定 义字符数组 b3,用于中间月份的转化。然后遍历链表,将门诊月份的那两位字符存取到 b 中,然后利用 atoi 函数将其转化为整型,那么

25、则将 m 中对应的月份的门诊量加一,循环直 至遍历所有门诊。然后利用冒泡排序法对二维整型数组进行降序排序,排序时大小比较按 照第二列,但整行要互换。最后将排序后的结果按顺序输出。 运行结果如下: 2统计各单位员工的总门诊量统计各单位员工的总门诊量 void cal2(danwei *d_head); 该函数的功能是统计各单位员工的总门诊量,并且按照降序排序后输出显示。该函数 首先定义一个存储单位员工总门诊量的结构 m_list,该结构中包括单位编号、单位名称、总 门诊量及指向下一个单位的指针。然后遍历单位链表,同时创建统计门诊量的链表,将单 位信息拷贝到新建结构中,然后遍历该单位各病历的门诊,

26、统计门诊量并存储到新建结构 中。然后对 m_list 链表进行降序排列,排列时采用的是交换节点的方法。最后将排序后的 各单位门诊量按从大到小顺序依次输出。 运行结果如下: 3列出从未门诊的员工基本信息列出从未门诊的员工基本信息 void cal3(danwei *d_head); 该函数的功能是列出从未门诊的员工的基本信息,即找出门诊链为空的病历,并将其 信息输出。该函数首先遍历链表,找出门诊链为空的病历,然后将其信息输出,每当显示 完两条病历信息时,提示用户按任意键进入下一页,则将在原有窗口基础上新建一个同样 大小的窗口继续输出未门诊病历信息,相当于翻页。最后提示信息输出完毕,可以输出从 未

27、门诊的员工的个数,按任意键退出该函数。 运行效果如下: 四、心得体会四、心得体会 这是我进入大学以来的第一次大型的并且与专业相关的作业,完成它我前后花费将近两个 月的时间,虽然付出了很大的精力,但很值得,收获颇丰。 第一次接到这样的作业,刚开始非常迷茫,感到无从下手。虽然很努力地学习了一个学 期的 c 语言,但真到学以致用之时却力不从心。回到家我并没有立即去做课设,而是又仔细地 将 c 语言课本从头到尾又看了一遍,尤其是仔细地看了指针和文件的内容,因为学的时候不是 太清楚。然后又大概将谭浩强的 c 语言程序设计浏览了一遍,感觉对 c 语言有了更深的理解。 接着拿起放假前买的那本 c 语言课程设

28、计看起来,但我发现这本书里介绍的都是一些很简单的 小型程序的设计,例如通讯录,但还是只有很少的功能。但学习都是由易到难的,因此我就先 学习了一下这本书里的内容,如统计工资、职工档案及简明信息的生成、链表信息管理、学生 成绩管理系统等。在学习中,我更加体会到 c 语言的伟大之处,并且对结构和链表有了进一步 的理解。 正式开始做这次课设大概是 8 月 19 日,这次我又仔细地读了一下 c 语言课程设计任务书。 第一个出现在我面前的问题是采用简易菜单还是文本菜单的形式,这也是决定代码简单还是复 杂的问题。由于对文本菜单充满好奇,并且想自我挑战一下,我决定采用文本菜单的形式。然 后查询了一些书籍和网站

29、,对 turboc 的图形菜单有了一定得了解。然后我就开始规划我的系统 模块,考虑到时间问题和老师的要求及系统的实用性,我将整个程序分成了七大模块、24 个函 数。由于我使用的是 vista 系统,turoc2.0 无法使用,经朋友推荐我选择了 wintc 编译软件,该 软件有两大优点:1.在 windows 下编辑 tc 代码,可以充分利用 windows 的支持剪贴版和中 文的特点 2.include 和 lib 路径自动定位,告别 tc 设置路径的历史。选择好了编译系统,然后 就是设计函数了。由于是文本菜单,自然要有一个函数来接收键盘的按键值。通过查询网络, 并查阅汇编语言的一些相关知识

30、,最后终于把函数搞出来。可是运行的时候敲击回车键无反应, 可我回车键的编码没搞错呀,经过再三审查,原来是我没有弄清楚扫描码与扩展码之间的关系。 将回车键的键码修改以后,程序立即按找预期效果运行,心中成就感油然而生。在确定结构时, 我也多次修改三个结构里的内容,以便某些函数例如查询修改函数的需要。链表的基本操作例 如创建修改插入删除功能已经学过,自然写得很快,但其间也出现不少问题,主要还是回车键 的处理问题。由于函数中大部分变量为字符串,那么接收数据时很容易忽略回车键,经过仔细 的反复修改,程序终于调试运行成功。在写查询函数时也是很轻松的。但是在写统计函数时, 又遇见了不少问题。例如排列月份的门

31、诊量,我最先想到的是用结构,但过于复杂,我最终选 择使用二维整型数组,利用循环将各月门诊量统计,然后利用冒泡排序法进行输出。在统计各 单位门诊量时,由于变量类型不一致,我决定使用结构,最终通过排列结构也顺利实现函数功 能。 然后面临的一个问题是函数输出的美观性问题,例如在显示全部信息时犯了难。由于信息 较多,无法一次数完,然后想着建立三个窗口分别输出各个结构的内容,而且要按照输完一个 单位的全部信息后在输出其他单位,输完一个病历的所有信息后再输出其他病历的信息的原则, 这样我就要按顺序清屏和输出信息,并且要提示用户换页。这个问题解决了,统计未门诊病历 的信息时也按照相似方法得到了解决。然后我不

32、断调节系统的美观性,如换行的控制,屏幕背 景颜色的调节以及字体颜色的调节。 另外,我也为系统增添了一些附加功能,如在欢迎界面里我利用课本介绍的 dos 库函数调 用了系统的时间。当然,该系统还有很多缺点,例如由于使用的是 wintc 编译系统,自身不能 识别中文的输入与输出,我只好在整个程序中使用英文,在这个方面金山词霸帮了我不少忙。 一个大型的程序要考虑的问题是很多的,并且对用户每次输入的数据要有全面的考虑,因 此,在程序中要始终从用户的角度考虑系统的完善性。这就要求考虑问题要全面,自然也增加 对用户的引内容及代码的长度。 通过这次课设,我认为自身得到了很大提高。我变得更加细心认真,考虑问题

33、更加全面, 解决一个大问题更加有针对性和步骤性,并且能把问模块化,步步为营,最终顺利完成任务, 体会到成功的喜悦。 因此,我要感谢老师给予我们一次锻炼自己的机会,让我们能在完成作业中更加灵活的使 用所学知识,让我们能在解决问题中不断提高自身做事和做人的能力。 五、源代码及注释五、源代码及注释 #include /*输入/输出函数*/ #include /*一般的使用函数*/ #include /*进程处理函数*/ #include /*调用 dos 库中时间函数*/ #include #include /*图形函数*/ #include /*字符串函数*/ #include /*内存操作函数*

34、/ #include /*字符操作函数*/ #include /*动态地址分配函数*/ #define key_down 80 /* 向下箭头键 */ #define key_up 72 /* 向上箭头键 */ #define key_esc 1 /* esc 键 */ #define key_alt_x 45 /* alt + x */ #define key_enter 28 /* enter */ #define key_alt_f 33 /* alt + f*/ #define key_alt_r 19 /*alt+r*/ #define key_alt_m 50 /*alt+m*/

35、#define key_alt_a 30 /*alt+a*/ #define key_alt_d 32 /*al+d*/ #define key_alt_i 23 /*alt+i*/ #define key_alt_c 46 /*alt+c*/ #define key_alt_h 35/*alt+h*/ /*定义存储单位基本信息的结构*/ typedef struct danwei char dd_num10; /*单位编号*/ char d_name30; /*单位名称*/ char d_person20; /*单位负责人*/ char d_tel12; /*联系电话*/ struct da

36、nwei *next; /*指向下一个单位结点*/ struct bingli *b_head; /*指向病历信息链表头指针*/ danwei; /*定义存储病历基本信息的结构*/ typedef struct bingli char bb_num10; /*病历编号*/ char name10; /*姓名*/ char sex; /*性别*/ char bd_name30 ; /*所在单位*/ char bd_num10; /*所在单位编号*/ char birthday11; /*出生日期*/ char history30; /*药物过敏史*/ char tel12; /*电话*/ cha

37、r 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 zd30; /*初步诊断*/ char yj30; /*治疗意见*/ char docto

38、r10; /*医师姓名*/ struct menzhen* next; /*指向下一门诊信息结点*/ menzhen; /*函数声明*/ void welcome(void); /*欢迎界面*/ int get_key(); /*读取键入值函数*/ void box(int startx,int starty,int high,int width); /*画边框函数*/ void load(danwei* d_head); /*读入链表*/ void save(danwei* d_head); /*保存链表*/ void show(danwei* d_head); /*显示所有信息*/ dan

39、wei *create1(void); /*单位基本信息录入函数*/ bingli *create2(danwei *); /*病历基本信息录入函数*/ menzhen *create3(danwei *); /*门诊信息录入函数*/ void modify1(danwei *); /*单位基本信息修改函数*/ void modify2(danwei *); /*病历基本信息修改函数*/ void modify3(danwei *); /*门诊修改函数*/ danwei *add1(danwei *); /*插入一条单位基本信息函数*/ bingli *add2(danwei *); /*插入

40、一条病历基本信息函数*/ menzhen *add3(danwei *); /*插入一条门诊信息函数*/ danwei *del1(danwei *); /*删除一条单位基本信息函数*/ bingli *del2(danwei *); /*删除一条病历基本信息函数*/ menzhen *del3(danwei *); /*删除一条门诊信息函数*/ void danweiinfo_inq(danwei* d_head);/*查询某一单位基本信息*/ void bingliinfo_inq(danwei* d_head);/*查询某一病历基本信息*/ void menzheninfo_inq(da

41、nwei* d_head);/*查询某一门诊基本信息*/ void cal1(danwei*); /*统计一年中各月的门诊量,并按降序排序后输出*/ void cal2(danwei*); /*统计各单位员工的总门诊量,并按降序排序后输出*/ void cal3(danwei*); /*列出从未门诊的员工基本信息*/ /*各个下拉菜单中要打出的内容*/ char *menu=file,read-in,modify,add-in,delete,inquiry,calculation,help; char *red=f,r,m,a,d,i,c,h; char *f=load file, save

42、file,show info, quit alt_x ; char *r=danwei info,bingli info,menzhen info; char *m=danwei info,bingl info,menzhen info; char *a=danwei info,bingl info,menzhen info; char *d=danwei info,bingl info,menzhen info; char *i=danwei info,bingl info,menzhen info; char *c=geyue menzhen,gedanwei menzhen,weimen

43、zhen info; char *h=file,read-in,modify,add-in,delete,inquiry,calculation,about; char buf18*10*2,buf117*2; void main() danwei*d_head=null; int i,key,x,y,l; textbackground(black); clrscr(); welcome(); clrscr(); while(1) /*设置屏幕背景颜色,并清除屏幕*/ textbackground(lightgreen); clrscr(); /*创建窗口用于显示菜单栏*/ window(1,

44、1,80,1); /*设置文本属性:白底黑字*/ textbackground(white);/*白色背景*/ textcolor(black);/*黑色字体*/ clrscr();/*清屏*/ window(1,1,80,1); clrscr();/*清屏*/ /*显示菜单*/ for(i=0,l=0;i8;i+) /* 保存菜单第一个字母的位置,后面要用红色再打一次菜单的第一个字母 */ x=wherex(); /* 当前光标 x 坐标 */ y=wherey(); /* 当前光标 y 坐标 */ /* 打印输出菜单 */ cprintf( %s,menui); l=strlen(menu

45、i); gotoxy(x,y); /* 用红色输出菜单的第一个字母 */ textcolor(red); cprintf( %s,redi); x=x+l+3; gotoxy(x,y); /* 将文本颜色修改为黑色 */ textcolor(black); x=0; key=0; while (bioskey(1)=0); /* 等待键盘输入 */ /* 取得按键 */ key=get_key(); /*alt + x 退出程序*/ if(key=key_alt_x)exit(0); /*alt + f 显示 file 下拉菜单*/ if(key=key_alt_f) /*设置文本属性:黑底白

46、字 */ textbackground(black); textcolor(white); /*打印输出 file */ gotoxy(2,1); cprintf(%s,menu0); /*备份将要被 file 下拉菜单窗口覆盖的区域到内存 buf */ gettext(4,2,20,7,buf); /*创建 file 下拉菜单窗口 */ window(4,2,19,7); /*设置文本属性:白底黑字 */ textbackground(white); textcolor(black); clrscr(); /* 画边框 */ window(4,2,20,7); box(1,1,6,16);

47、/* 打印输出下拉菜单 */ for(i=2; i6;i+) gotoxy(2,i); cprintf(%s,fi-2); /* 备份下拉菜单的第一项到内存 bufl,然后用 黑底白字(表示选中) 打印输出第一 项 */ gettext(5,3,20,3,buf1); textbackground(black); textcolor(white); gotoxy(2,2); cprintf(%s,f0); /* 处理按键 */ y=2; key=get_key(); while(key!=key_alt_x /* 恢复之前 黑底白字的项 到 白底黑字*/ if(key=key_up) y=y=

48、2? 5:y-1; /* 如果往上,到了最上面跳到最下面 */ if(key=key_down) y=y=5? 2:y+1; /* 如果往下,到了最下面跳到最上面 */ gettext(5,y+1,18,y+1,buf1); /* 备份当前项(白底黑字) */ textbackground(black); /* 以下 4 行,用 黑底白字(表示选中) 打印输出 当前项 */ textcolor(white); gotoxy(2,y); cprintf(%s,fy-2); key=get_key(); /* 等待键盘输入 */ /* alt + x 退出 */ if(key=key_alt_x)

49、 exit(0); /* enter */ if(key=key_enter) /* 下拉菜单处理 */ switch(y-1) case 1:puttext(4,2,20,7,buf);/*恢复屏幕显示*/ puttext(5,y+1,18,y+1,buf1); /* 恢复之前 黑底白字的项 到 白底黑字 */ window(1,2,80,25); /*在整个屏幕上建一个窗口*/ textbackground(blue); textcolor(yellow); clrscr(); load( /*load 文件*/ break; case 2:puttext(4,2,20,7,buf);/*

50、恢复屏幕显示*/ puttext(5,y+1,18,y+1,buf1); /*恢复之前 黑底白字的项 到 白底黑字*/ window(1,2,80,25); /*在整个屏幕上建一个窗口*/ textbackground(blue); textcolor(yellow); clrscr(); save(d_head); /*save 文件*/ break; case 3:puttext(4,2,20,7,buf); /*恢复屏幕显示*/ puttext(5,y+1,18,y+1,buf1); /*恢复之前 黑底白字的项 到 白底黑字*/ window(1,2,80,25); /*在整个屏幕上建一

51、个窗口*/ textbackground(blue); textcolor(yellow); clrscr(); show(d_head); /*输出所有信息的报表*/ break; case 4:exit(0); default: break; /* esc -关闭下拉菜单,恢复屏幕显示 */ else window(1,1,80,2); puttext(4,2,20,7,buf); textbackground(white); textcolor(black); gotoxy(2,1); cprintf(%s,menu0); /*alt+r 显示 read-in 下拉菜单*/ if(key

52、=key_alt_r) window(1,1,80,1); /*设置文本属性:黑底白字 */ textbackground(black); textcolor(white); /*打印输出 read-in */ gotoxy(9,1); cprintf(%s,menu1); /*备份将要被 read-in 下拉菜单窗口覆盖的区域到内存 buf */ gettext(11,2,27,6,buf); /*创建 file 下拉菜单窗口 */ window(11,2,27,6); /*设置文本属性:白底黑字 */ textbackground(white); textcolor(black); clr

53、scr(); /* 画边框 */ window(11,2,28,6); box(1,1,5,17); /* 打印输出下拉菜单 */ for(i=2; i5;i+) gotoxy(2,i); cprintf(%s,ri-2); /* 备份下拉菜单的第一项到内存 bufl,然后用 黑底白字(表示选中) 打印输出第一 项 */ gettext(12,3,27,3,buf1); textbackground(black); textcolor(white); gotoxy(2,2); cprintf(%s,r0); /* 处理按键 */ y=2; key=get_key(); /*读取键入的值*/ w

54、hile(key!=key_alt_x /* 恢复之前黑底白字的项 到 白底黑字*/ if(key=key_up) y=y=2? 4:y-1; /* 如果往上,到了最上面跳到最下面 */ if(key=key_down) y=y=4? 2:y+1; /* 如果往下,到了最下面跳到最上面 */ gettext(12,y+1,27,y+1,buf1); /* 备份当前项(白底黑字) */ textbackground(black); /* 以下 4 行,用 黑底白字(表示选中) 打印输出 当前项 */ textcolor(white); gotoxy(2,y); cprintf(%s,ry-2);

55、 key=get_key(); /* 等待键盘输入 */ /* alt + x 退出 */ if(key=key_alt_x) exit(0); /* enter */ if(key=key_enter) /* 下拉菜单处理 */ switch(y-1) case 1: puttext(11,2,27,6,buf);/*恢复屏幕显示*/ puttext(12,y+1,27,y+1,buf1); /* 恢复之前 黑底白字的项 到 白底黑 字*/ window(1,2,80,25); textbackground(blue); textcolor(yellow); clrscr(); d_head

56、=create1(); /*录入单位基本信息*/ break; case 2: puttext(11,2,27,6,buf); /*恢复屏幕显示*/ puttext(12,y+1,27,y+1,buf1); /* 恢复之前 黑底白字的项 到 白底 黑字*/ window(1,2,80,25); textbackground(blue); textcolor(yellow); clrscr(); create2(d_head); /*录入病历基本信息*/ break; case 3: puttext(11,2,27,6,buf); /*恢复屏幕显示*/ puttext(12,y+1,27,y+1

57、,buf1); window(1,2,80,25); textbackground(blue); textcolor(yellow); clrscr(); create3(d_head); /*录入门诊基本信息*/ break; default: break; /* esc -关闭下拉菜单,恢复屏幕显示 */ else window(1,1,80,2); puttext(11,2,27,7,buf); textbackground(white); textcolor(black); gotoxy(2,1); cprintf(%s,menu1); /*alt+m 显示 modify 下拉菜单*/

58、 if(key=key_alt_m) window(1,1,80,1); /*设置文本属性:黑底白字 */ textbackground(black); textcolor(white); /*打印输出 modify*/ gotoxy(19,1); cprintf(%s,menu2); /*备份将要被 modify 下拉菜单窗口覆盖的区域到内存 buf */ gettext(21,2,37,6,buf); /*创建 modify 下拉菜单窗口 */ window(21,2,37,6); /*设置文本属性:白底黑字 */ textbackground(white); textcolor(blac

59、k); clrscr(); /* 画边框 */ window(21,2,38,6); box(1,1,5,17); /* 打印输出下拉菜单 */ for(i=2; i5;i+) gotoxy(2,i); cprintf(%s,mi-2); /* 备份下拉菜单的第一项到内存 bufl,然后用 黑底白字(表示选中) 打印输出第一 项 */ gettext(22,3,37,3,buf1); textbackground(black); textcolor(white); gotoxy(2,2); cprintf(%s,m0); /* 处理按键 */ y=2; key=get_key(); /*读取键

60、入的值*/ while(key!=key_alt_x /* 恢复之前 黑底白字的项 到 白底黑字*/ if(key=key_up) y=y=2? 4:y-1; /* 如果往上,到了最上面跳到最下面 */ if(key=key_down) y=y=4? 2:y+1; /* 如果往下,到了最下面跳到最上面 */ gettext(22,y+1,37,y+1,buf1); /* 备份当前项(白底黑字) */ textbackground(black); /* 以下 4 行,用 黑底白字(表示选中) 打印输出 当前项 */ textcolor(white); gotoxy(2,y); cprintf(%

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论