C语言程序设计课程设计实验报告门诊病历信息管理系统

上传人:仙*** 文档编号:82562683 上传时间:2022-04-29 格式:DOC 页数:105 大小:1.58MB
收藏 版权申诉 举报 下载
C语言程序设计课程设计实验报告门诊病历信息管理系统_第1页
第1页 / 共105页
C语言程序设计课程设计实验报告门诊病历信息管理系统_第2页
第2页 / 共105页
C语言程序设计课程设计实验报告门诊病历信息管理系统_第3页
第3页 / 共105页
资源描述:

《C语言程序设计课程设计实验报告门诊病历信息管理系统》由会员分享,可在线阅读,更多相关《C语言程序设计课程设计实验报告门诊病历信息管理系统(105页珍藏版)》请在装配图网上搜索。

1、华中科技大学计算机科学与技术学院C语言程序设计课程设计实验报告题目: 门诊病历信息管理系统 专业:计算机科学与技术 _ 班级:CS0809 _ 学号: _姓名: _ 成绩: _指导教师: _完成日期:2009年 10月 8日一、系统功能模块结构图.1二、数据结构设计及用法说明 .1三、各模块的功能解析、程序结构、运行结果及部分流程图 .2文件系统、辅助函数及欢迎界面2录入信息5修改信息6插入信息10删除信息13查询信息14统计信息15四、心得体会.17五、源代码及注释18六、参考文献.103 C语言课程设计实验报告 CS0809陶松桥一、系统功能模块结构图门诊病历信息管理系统 统计系统查询系统

2、编辑系统文件系统 信息保存信息显示信息导入插入信息子统计各月门诊量统计各单位门诊量统计未门诊员工信息查询门诊信息查询病历信息查询单位信息删除信息修改信息录入信息删除门诊信息删除病历信息删除单位信息插入门诊信息插入病历信息插入单位信息修改门诊信息修改病历信息修改单位信息录入门诊信息录入病历信息录入单位信息二、数据结构设计及用法说明该系统的数据结构是采用十字交叉链表。十字交叉链表的模型如下:单位nNULL.单位2单位1d_head门诊n NULL.门诊2门诊1病历1门诊n NULL门诊2门诊1病历2门诊2门诊1门诊n NULL.病历nNULL门诊1门诊n NULL.门诊2 单位病历门诊信息十字交叉

3、链表三个结构的声明如下:/*定义存储单位基本信息的结构*/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 nam

4、e10; /*姓名*/ char sex; /*性别*/ 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_nu

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

6、_key(); 画边框函数void box(int startx,int stary,int high,int width);和一个欢迎界面的函数void welcome(void);。各个模块的功能解析和程序的结构说明分别如下: 文件系统、辅助函数及欢迎界面 欢迎界面void welcome(void);本程序是由wintc编译。该界面调用了dos库里的getdate和gettime函数,date和time结构已在dos.h中定义,可以读取系统日期和时间。首先将界面背景设为白色,字体设为蓝色,然后输出相应信息及系统时间。最后使用getch()函数,使得按任意键进入系统主界面。 得到按键值in

7、t get_key();要使程序得到键盘按键值,就要对按键进行扫描,通过查询键盘编码表,通过get_key函数返回按键的扫描码(即编码高位字节)。在get_key函数中,首先定义类型为REGS的联合体rg,然后降高字节初始化为0,然后使用int86函数寄存键值,最后输出高字节键值即扫描码。 画边框函数void box(int startx,int starty,int high,int width);该函数主要是在设计下拉菜单时使用,通过该函数画出一个矩形框。 换矩形边框时,先打印左上角,再打印上边线,再打印右上角,再打印左边线和右边线,最后打印左下角,下边线和右下角。startx、start

8、y、high、width分别代表起始坐标和矩形边框的高度和宽度。 导入文件 void load(DANWEI *d_head);该函数中声明了3个字符数组,分别用来存储要导入的三个文件的路径名,即用户可以自己确定要导入的数据文件。如果用户输入的文件路径不对或者文件不存在,系统会提示用户重新输入或者退出。读入单位时,建立的是后进先出链表,最先保存的那个单位建立在链表的尾部;读取病历时,先要找到对应的单位编号,然后建立后进先出链表;读取门诊时,先找到对应病历编号,然后同样建立后进先出链表。录入完毕,关闭三个文件。 保存文件 void save(DANWEI *d_head);该函数有三个文件指针,

9、分别指向三级信息要保存的文件。函数将整个系统的三部分数据分别保存在3个文件里面,而且也声明了3个字符数组,用来存储文件名,即用户可以自己选择保存的路径和文件名。 显示信息void show(DANWEI *d_head);该函数可以将整个系统的所有信息显示出来。本函数新建立三个窗口,即先建立一个窗口输出单位信息,然后在原有窗口上建立第二个窗口用来输出病历信息,最后在原有窗口上建立第三个窗口用来输出门诊信息。当显示完一次门诊后按任意键清屏显示下一个门诊,当一个病历的门诊显示完之后,清屏显示下一个病历并显示其病历,当一个单位的病历显示完之后清屏显示下一个单位,当显示完所有信息后清屏按任意键退出。

10、录入信息 录入单位信息 DANWEI *create1(void); 该函数是录入单位基本信息,建立第一级链表。建立该链表采用的是后进先出式,即输入的下一个单位的next指针指向前一个单位,最后录入的那个单位作为链表的第一个单位。返回值为指向第一个单位的指针。将每个单位的b_head指针赋值为空。效果如下: 录入病历信息 BINGLI *create2(DANWEI *d_head);本函数是在录入单位基本信息的基础上录入病历基本信息,建立第二级链表,如果未录入单位信息将自动退出。首先提示输入要录入病历信息的单位编号,然后找到对应的单位(如未找到则提示重新输入或退出),如果该单位有多条病历输入

11、,则建立一个先进先出链表。将单位最后一条病历的next指针赋值为NULL。如果该单位已经存在病历信息则提示退出,用户可以通过插入来输入病历信息。每条病历的m_head 指针都自动赋值为NULL。输入病历信息时,不必重新输入单位编号,单位名称,而通过strcpy函数将单位信息复制到病历结构中。当用户不在输入某一单位病历时,可自动通过循环提示输入下一个单位病历信息或者输入X退出。 录入门诊信息 MENZHEN *create3(DANWEI *d_head); 本函数是在录入单位信息及病历信息的基础上建立的第三级链表,即门诊信息链表。同前,先找到对应的单位,然后再找到对应的病历,找到后先判断是否已

12、经存在门诊信息,如果门诊信息不存在,则可建立一个先进先出链表,如果门诊信息已经存在,则提示用户可以使用插入函数来添加,并退出该函数。当然有些已知信息可以直接复制而不必重新输入。通过自身的循环可以选择录入某一单位某一病历的门诊信息,也可选择退出。 修改信息 修改单位信息 void modify1(DANWEI *d_head); 本函数的功能是查找某一单位并修改该单位的某一项信息。首先提示用户输入要修改的单位编号,然后遍历第一级链表,找出对应的单位,然后提示用户输入要修改的某一项信息,修改后提示修改成功,并由用户选择继续修改还是退出。相应的流程图如下:开始DANWEI *p=NULL;char

13、d_num10; char flag; int flag1;int flag2; char space;4p=d_head;d_num=输入的单位编号1d_head=NULL? Y Y N 判断重新输入还是退出flag=输入的选择(R或X)p=NULL? Y flag不为R,r,X,x? N p=p-nextstrcmp(p-dd_num,d_num)=0? N Y N 3flag为r或R Y N 提示用户输入要修改的项目flag1=输入的代号(1、2、3或4) Y 5 Nflag1不为1、2、3、4中的任意一个? Y 提示用户输入新单位编号并修改scanf(%s,p-dd_num);flag

14、为1 Y 提示用户输入新单位名称并修改scanf(%s,p-d_name);flag为2 N Y N 提示用户输入新的单位负责人并修改scanf(%s,p-d_person);Flag=3 Y3 N 44提示用户输入新电话号码并修改scanf(%s,p-d_tel);提示用户是否继续修改单位信息。flag2=输入的编号(1代表继续修改这个单位的其他信息,2代表修改其他单位信息,0代表不再修改)。flag2不为1、2、0中的任一个 Yflag2为1? N YFlag2为2?1 NY6结束56 N 运行效果如下: 修改病历信息 void modify2(DANWEI* d_head);该函数的功能

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

16、DANWEI *add1(DANWEI *d_head);该函数的作用是在某个单位后插入一个新的单位信息。插入时,首先寻找要在其后插入的那个单位,然后输入要插入的单位信息,然后判断是不是在链尾插入,调整链表指针的对应关系,插入成功后可继续插入或者退出。运行效果如下:相应的流程图如下:开始DANWEI *p=NULL,*other,*after;char d_num10; char flag; int flag2; char space;4p=d_head;d_num=输入的单位编号1d_head=NULL? Y Y N 判断重新输入还是退出flag=输入的选择(R或X)p=NULL? Y fl

17、ag不为R,r,X,x? N p=p-nextstrcmp(p-dd_num,d_num)=0? N Y N flag为r或R Y N after=p-next;other=(DANWEI *)malloc(sizeof(DANWEI); Y 提示用户输入单位编号scanf(%s,other-dd_num);3 N 提示用户输入单位名称scanf(%s,other-d_name); 提示用户输入单位负责人scanf(%s,other-d_person); 提示用户输入单位联系电话scanf(%s,other-d_tel); other-next=NULL;p-next=other;after不

18、为空,即不是链尾? N other-next=after;p-next=other;Y提示用户是否继续插入单位信息。flag2=输入的编号(1代表继续插入,2代表不再插入)。flag2不为1、2、0中的任一个4 Y 1结束335flag2为1? N Y5 N 插入病历信息 BINGLI *add2(DANWEI *d_head);该函数功能是在指定的病历后插入一个新的病历。同插入单位信息一样,要先找到指定的单位,然后找到指定的病历。如果病历信息链未建立,则直接输入第一个病历信息,如果已经建立,则在对应的位置插入病历信息。插入完成可继续插入或者选择退出。运行效果如下 插入门诊信息 MENZHEN

19、 *add3(DANWEI *d_head);该函数是在指定的门诊后插入一个新的门诊信息。同上,先找到指定的单位,然后找到指定的病历,最后根据门诊日期找到对应的门诊。如果门诊信息链未建立,则直接输入第一个门诊信息,如果已经建立,则在指定位置插入门诊信息。运行效果如下: 删除信息 删除单位信息 DANWEI *del1(DANWEI *d_head);本函数是删除指定的一个单位信息。找到该单位后,先释放该单位下单位下的病历和门诊链,然后判断删除的单位是否是单位信息链的头部,如果是就将头指针指向下一个单位,如果不是,将前一个单位指向后一个单位,最后释放所要删除的单位。运行结果: 删除病历信息 BI

20、NGLI *del2(DANWEI *d_head);本函数的功能是删除指定的一条病历信息。同前首先找出该病历,然后释放该病历的门诊信息链,然后再判断该病历是否是链表的头部,同前做出相应的操作。运行结果: 删除门诊信息 MENZHEN *del3(DANWEI *d_head); 本函数的功能是删除指定的一条门诊信息。同前首先找出该门诊,然后通过判断该门诊是不是头结点做出相应的操作,最后释放该节点。运行结果: 查询信息 查询单位信息 void danweiinfo_inq(DANWEI *d_head); 该函数是为了查找某一个单位的基本信息,用户首先输入要查找的单位编号,然后找到后系统输出所

21、要查找的单位信息。 运行结果如下: 查询病历信息void bingliinfo_inq(DANWEI *d_head);该函数是为了查找并显示某一个病历的基本信息,通过单位编号及病历编号找出该病历,然后将病历信息依次显示。运行结果如下: 查询门诊信息 void menzheninfo_inq(DANWEI *d_head);同前该函数的作用是查找某一门诊并显示该门诊信息,依次通过单位编号、病历编号、门诊日期找到该门诊,然后将其详细信息输出。运行结果如下: 统计信息 统计一年中各月的门诊量 void cal1(DANWEI *d_head); 该函数的功能是统计一年中各月的门诊量,并且按照降序排

22、序后输出。该函数首先定义一个二维整型数组m122,每行第一个位置存取月份,第二个位置存放该月门诊量,定义字符数组b3,用于中间月份的转化。然后遍历链表,将门诊月份的那两位字符存取到b中,然后利用atoi函数将其转化为整型,那么则将m中对应的月份的门诊量加一,循环直至遍历所有门诊。然后利用冒泡排序法对二维整型数组进行降序排序,排序时大小比较按照第二列,但整行要互换。最后将排序后的结果按顺序输出。运行结果如下: 统计各单位员工的总门诊量 void cal2(DANWEI *d_head); 该函数的功能是统计各单位员工的总门诊量,并且按照降序排序后输出显示。该函数首先定义一个存储单位员工总门诊量的

23、结构m_list,该结构中包括单位编号、单位名称、总门诊量及指向下一个单位的指针。然后遍历单位链表,同时创建统计门诊量的链表,将单位信息拷贝到新建结构中,然后遍历该单位各病历的门诊,统计门诊量并存储到新建结构中。然后对m_list链表进行降序排列,排列时采用的是交换节点的方法。最后将排序后的各单位门诊量按从大到小顺序依次输出。 运行结果如下: 列出从未门诊的员工基本信息 void cal3(DANWEI *d_head); 该函数的功能是列出从未门诊的员工的基本信息,即找出门诊链为空的病历,并将其信息输出。该函数首先遍历链表,找出门诊链为空的病历,然后将其信息输出,每当显示完两条病历信息时,提

24、示用户按任意键进入下一页,则将在原有窗口基础上新建一个同样大小的窗口继续输出未门诊病历信息,相当于翻页。最后提示信息输出完毕,可以输出从未门诊的员工的个数,按任意键退出该函数。 运行效果如下:四、心得体会这是我进入大学以来的第一次大型的并且与专业相关的作业,完成它我前后花费将近两个月的时间,虽然付出了很大的精力,但很值得,收获颇丰。 第一次接到这样的作业,刚开始非常迷茫,感到无从下手。虽然很努力地学习了一个学期的C语言,但真到学以致用之时却力不从心。回到家我并没有立即去做课设,而是又仔细地将C语言课本从头到尾又看了一遍,尤其是仔细地看了指针和文件的内容,因为学的时候不是太清楚。然后又大概将谭浩

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

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

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

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

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

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

31、ne 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*/#define key_alt_a 30 /*Alt+A*/#define key_alt_d 32 /*Al+D*

32、/#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 danwei *next; /*指向下一个单位结点*/ struct bingli *b_head; /*指向病历信息链表头指针*/D

33、ANWEI;/*定义存储病历基本信息的结构*/typedef struct bingli char bb_num10; /*病历编号*/ char name10; /*姓名*/ char sex; /*性别*/ char bd_name30 ; /*所在单位*/ char bd_num10; /*所在单位编号*/ char birthday11; /*出生日期*/ char history30; /*药物过敏史*/ char tel12; /*电话*/ char add30; /*住址*/ struct bingli *next; /*指向下一个病历结点*/ struct menzhen *m

34、_head;/*指向门诊信息链表头指针*/BINGLI;/*定义存储门诊基本信息的结构*/typedef struct menzhen char mb_num10; /*病历编号*/ char md_num10; /*所在单位编号*/ char kebie10; /*科别*/ char time11; /*门诊时间*/ char zs30; /*主诉*/ char zd30; /*初步诊断*/ char yj30; /*治疗意见*/ char doctor10; /*医师姓名*/ struct menzhen* next; /*指向下一门诊信息结点*/MENZHEN;/*函数声明*/void

35、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); /*显示所有信息*/DANWEI *create1(void); /*单位基本信息录入函数*/BINGLI *create2(DANWEI *); /*病历基本信息录入函数*/MENZH

36、EN *create3(DANWEI *); /*门诊信息录入函数*/void modify1(DANWEI *); /*单位基本信息修改函数*/void modify2(DANWEI *); /*病历基本信息修改函数*/void modify3(DANWEI *); /*门诊修改函数*/DANWEI *add1(DANWEI *); /*插入一条单位基本信息函数*/BINGLI *add2(DANWEI *); /*插入一条病历基本信息函数*/MENZHEN *add3(DANWEI *); /*插入一条门诊信息函数*/DANWEI *del1(DANWEI *); /*删除一条单位基本信息

37、函数*/BINGLI *del2(DANWEI *); /*删除一条病历基本信息函数*/MENZHEN *del3(DANWEI *); /*删除一条门诊信息函数*/void danweiinfo_inq(DANWEI* d_head);/*查询某一单位基本信息*/void bingliinfo_inq(DANWEI* d_head);/*查询某一病历基本信息*/void menzheninfo_inq(DANWEI* d_head);/*查询某一门诊基本信息*/void cal1(DANWEI*); /*统计一年中各月的门诊量,并按降序排序后输出*/void cal2(DANWEI*); /

38、*统计各单位员工的总门诊量,并按降序排序后输出*/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 file,Show info, Quit alt_x ;char *R=DANWEI info,BINGLI info,MENZHEN info;char *M=DANWEI info,BINGL inf

39、o,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,Weimenzhen info;char *H=File,Read-in,Modify,Add-in,Delete,Inquiry,Calculation,About;char buf18*10*2,buf117*2;void

40、main() DANWEI*d_head=NULL; int i,key,x,y,l; textbackground(BLACK); clrscr(); welcome(); clrscr(); while(1) /*设置屏幕背景颜色,并清除屏幕*/ textbackground(LIGHTGREEN); clrscr(); /*创建窗口用于显示菜单栏*/ window(1,1,80,1); /*设置文本属性:白底黑字*/ textbackground(WHITE);/*白色背景*/ textcolor(BLACK);/*黑色字体*/ clrscr();/*清屏*/ window(1,1,80

41、,1); clrscr();/*清屏*/ /*显示菜单*/ for(i=0,l=0;i8;i+) /* 保存菜单第一个字母的位置,后面要用红色再打一次菜单的第一个字母 */ x=wherex(); /* 当前光标 X坐标 */ y=wherey(); /* 当前光标 Y坐标 */ /* 打印输出菜单 */ cprintf( %s,menui); l=strlen(menui); gotoxy(x,y); /* 用红色输出菜单的第一个字母 */ textcolor(RED); cprintf( %s,redi); x=x+l+3; gotoxy(x,y); /* 将文本颜色修改为黑色 */ te

42、xtcolor(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) /*设置文本属性:黑底白字 */ textbackground(BLACK); textcolor(WHITE); /*打印输出 File */ gotoxy(2,1); cprintf(%s,menu0); /*备份将要被File下拉菜单窗口覆盖的区域

43、到内存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); /* 打印输出下拉菜单 */ for(i=2; i6;i+) gotoxy(2,i); cprintf(%s,Fi-2); /* 备份下拉菜单的第一项到内存bufl,然后用 黑底白字(表示选中) 打印输出第一项 */ gettext(5,3

44、,20,3,buf1); textbackground(BLACK); textcolor(WHITE); gotoxy(2,2); cprintf(%s,F0); /* 处理按键 */ y=2; key=get_key(); while(key!=key_alt_x&key!=key_enter&key!=key_esc) /* 上下键 */ /* 用内存buf1恢复当前菜单项,并备份将要被选中的菜单项到buf1,然后用 黑底白字 打印输出将要被选中的菜单项 */ if(key=key_up|key=key_down) puttext(5,y+1,20,y+1,buf1); /* 恢复之前

45、黑底白字的项 到 白底黑字*/ if(key=key_up) y=y=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(); /* 等待键盘输入 */ /

46、* Alt + X 退出 */ if(key=key_alt_x) 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(&d_head); /*load文件*

47、/ break; case 2:puttext(4,2,20,7,buf);/*恢复屏幕显示*/ 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); /*在整个屏幕上建一个窗口*/ textbackground(BLUE); textcolor(YELLOW); clrscr(); show(d_head); /*输出所有信息的报表*/ break; case 4:exit(0); default: break; /* ESC -关闭下拉菜单,恢复屏幕显示 */ else

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!