C语言程序设计课程设计报告招生查询系统_第1页
C语言程序设计课程设计报告招生查询系统_第2页
C语言程序设计课程设计报告招生查询系统_第3页
C语言程序设计课程设计报告招生查询系统_第4页
C语言程序设计课程设计报告招生查询系统_第5页
已阅读5页,还剩92页未读 继续免费阅读

下载本文档

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

文档简介

1、课 程 设 计 报 告题目: 招生查询系统 课程名称: C语言程序设计 专业班级: 信息安全201302班 学 号: 姓 名: 指导教师: 报告日期: 2014年10月10日 计算机科学与技术学院任务书题目:招生查询系统一、主要内容建立招生查询系统,提供创建、编辑和综合查询等基本业务管理和服务。二、任务要求收集与阅读相关文献资料,确定系统目标与范围,分析系统需求,确定系统功能;设计系统方案,完成系统实现;提交课程设计报告。三、参考文献1曹计昌,卢萍,李开. C语言程序设计,北京:科学出版社,20132李开,卢萍,曹计昌. C语言实验与课程设计,北京:科学出版社,20113张引. C程序设计基础

2、课程设计, 杭州: 浙江大学出版社,20074黄明,梁旭,万洪莉. C语言课程设计,北京: 电子工业出版社,2006四、基本要求只能使用C语言,源程序要有适当的注释,使程序容易阅读。要有用户界面。要求至少采用教材p215-p216类似的简易菜单;鼓励采用文本菜单界面甚至采用图形菜单界面。必须使用结构和十字交叉链表等数据结构。使用文件保存数据。鼓励自行增加新功能。设计测试的模拟数据,完成系统测试。撰写课程设计报告(要求正规双面打印,A4幅面)内容包括:题目、系统功能模块结构图、数据结构设计及用法说明、程序结构(画流程图)、各模块的功能、试验结果(包括输入数据和输出结果)、体会、参考文献和附录:程

3、序清单。课程设计报告封面统一格式,标准格式详见本科生课程设计规范化要求。课程设计资料(包括课程设计报告、源程序、目标程序和测试用例等)刻录光盘。目 录1 引言11.1 课题背景和意义11.2 课程设计的主要研究工作12 系统需求分析与总体设计22.1 系统需求分析22.2 系统总体设计23 系统详细设计43.1 有关数据结构的定义43.2 主要算法设计64 系统实现与测试84.1 系统实现84.2 系统测试95 总结与展望175.1 全文总结175.2 工作展望17体会18参考文献20附录 程序清单21附录一 源文件 main.c21附录二 头文件 RS.h8994 / 97文档可自由编辑打印

4、1 引言1.1 课题背景和意义在当今网络化、信息化、数字化的社会中, 由于科学技术的飞速发展,人们的生活越来越趋向科技化和便捷化。而计算机作为其中最重要的部分,计算机科学技术显然已经成为了现代人们生活中的重要部分,而且它在现代人生活占据了越来越重要的位置。计算机的出现及发展改变了人类生活的方方面面,提升了人类的生活水平,从而推动了人类文明的进步。未来的计算机科学朝着更加多元的方向发展,它已经成为一个国家综合实力的重要体现。1.2 课程设计的主要研究工作本课程设计旨在训练学生的编程能力,正确理解与应用专业知识,并合理灵活地应用于社会实际问题,增强和提高分析问题与解决问题的综合能力;增强和提升信息

5、搜索和分析技能;熟练运用C语言进行链表插入、排序、删除及数组、指针、文件的各种基本操作;熟悉结构体、指针数组、链表等基本数据结构;训练学生的编程风格,做到程序用语规范简洁,适当进行注释等能力。2 系统需求分析与总体设计2.1 系统需求分析系统主要是提供招生信息的快速查询、检索和统计。本系统提供武汉市部分高校查询功能,主要功能有按高校、按专业等查询招生信息;组合条件检索招生信息;统计招生情况等。系统主要涉及“高校”、“专业”和“招生”3类信息。“高校”信息由高校编号、高校名称、高校地址和联系电话等数据项目组成,“专业”信息由专业编号、专业名称等数据项目组成,“招生”信息由招生年份、招生计划、实际

6、招生、最高分数和最低分数等数据项目组成。2.2 系统总体设计系统(System)文件(File)数据维护(Maintain)数据查询(Query)数据统计(Stat)帮助(Help)3 系统详细设计3.1 有关数据结构的定义1、数据类型定义/*招生信息链结点结构*/typedef struct rec_stu_node char rec_year5; /* *<招生年份*/ char maj_name20; /* *<专业名称*/ char maj_id5; /* *<专业编码*/ char col_id3; /* *<高校编码*/ char type8; /* *&l

7、t;招生类型*/ int plan_rec; /* *<计划招生*/ int actr_rec; /* *<实际招生*/ int high_grade; /* *<最高录取分数*/ int low_grade; /* *<最低录取分数*/ struct rec_stu *next; /* *<指向下一结点的指针*/RS_NODE;/*专业信息链结点结构*/typedef struct major_node char maj_id5; /* *<专业编号*/ char col_id3; /* *<高校编号*/ char maj_name20; /* *&

8、lt;专业名称*/ int level; /* *<专业星级*/ struct rec_stu_node *pnext; /* *<指向招生信息支链的指针*/ struct major_node *next; /* *<指向下一结点的指针*/MAJ_NODE;/*高校信息链结点结构*/typedef struct college_node char col_id3; /* *<编号*/ char col_name20; /* *<名称*/ char adre40; /* *<地址*/ char tel_num20; /* *<联系电话*/ struct

9、 major_node *anext; /* *<指向专业信息支链的指针*/ struct college_node *next; /* *<指向下一结点的指针*/COL_NODE;LAYER_NODE *gp_top_layer=NULL; /*弹出窗口信息链链头*/COL_NODE *gp_head=NULL; /*主链头指针*/char *gp_sys_name="武汉市高校招生查询系统" /*系统名称*/char *gp_col_info_"col.dat" /*高校信息数据文件*/char *gp_maj_info_"ma

10、j.dat" /*专业信息数据文件*/char *gp_rs_info_"rs.dat" /*招生信息数据文件*/char *backup="backup.dat"/*备份文件*/2、三级链表 head 专业11 专业12 专业1m 高校1 高校2高校n 招生111 招生11p 3.2 主要算法设计程序中很多函数都类似,这里选取查询专家信息、删除预约信息、统计科室信息三个函数来说明。1、查询高校信息查询高校信息输入查询高校的编号否是否存在该高校信息是输出不存在该高校输出该高校信息2、删除专业信息删除专业信息显示所有专业信息输入专业编号否是否存在

11、该专业返回主界面是显示专业信息输入高校编号是否存在该高校是返回主界面显示高校的专业信息否是否存在专业信息是返回主界面输入要删除信息的编号删除专业信息3、统计招生信息统计招生信息输出各高校信息招生信息总计4 系统实现与测试4.1 系统实现各模块功能如下(括号内为函数名):1、文件(File)此模块包括系统运行启动与结束运行相关数据保障操作,以及系统存盘、系统崩溃后数据恢复等操作。包含数据加载、数据保存、数据备份、数据恢复、退出系统五个子模块。数据加载(LoadData):将已有的三个文件的数据信息加载到系统中数据保存(SaveSysData):将新建的各种信息以文件的形式保存下来数据备份(Bac

12、kupSysData):将系统已存的三个文件的信息作好备份数据恢复(RestoreSysData):系统崩溃时恢复系统的数据退出系统(ExitSys):结束程序运行2、数据维护(Maintain)此模块完成数据的录入操作。可选择进行高校信息、专业信息、招生信息的录入。高校信息(MaintainColInfo):新建(pro1)、修改(pro2)、删除(pro3)专业信息(MaintainMajInfo):新建(achieve1)、修改(achieve2)、删除(achieve3)招生信息(MaintainRsInfo):新建(person1)、修改(person2)、删除(person3)3、

13、数据查询(Query)此模块完成录入的三种基本信息的查询工作,按照相应条件进行查询。输出高校信息(printpro):输出录入的高校的基本信息输出专业信息(printachieve):输出录入的专业基本信息输出招生信息(printperson):输出录入的招生基本信息查询高校信息(QueryColInfo):以高校编号为条件来查找信息(SeekProNode1);以高校名称为条件来查找单位信息(SeekProNode2)查询专业信息(QueryMajInfo):以专业编号为条件查找信息(SeekCaseNode1);以专业名称为条件查找信息(SeekCaseNode2)查询招生信息(Query

14、RsInfo):以专业编号为条件查找信息(SeekMediaNode1);以年份为条件查找信息(SeekMediaNode2)4、数据统计(Stat)此模块完成科室基本信息、专家基本信息、预约基本信息的统计工作。高校信息(StatFunc1):统计各高校各年份招生人数专业信息(StatFunc2):统计各高校专业数招生信息(StatFunc3):统计年招生数超过300人的专业5、帮助(Help)此模块为使用者提供部分操作帮助,包括系统信息、模块功能等。帮助主题(HelpTopic):提供模块组成及功能的信息关于(About):提供系统信息4.2 系统测试系统功能较多,每个模块仅选择部分功能展示

15、,如下:1、进入系统,数据加载2、任意键继续,初始界面3、查看“帮助主题”4、查看“文件”功能5、查看“数据查询”功能输出“专业信息” 查询“招生信息”以年份为条件查询6、查看“数据维护”功能新建“高校信息”修改“专业信息”删除“招生信息”7、查看“数据统计”功能统计“各高校各年份招生人数”统计“年招生数超过300人的专业”8、查看“关于”5 总结与展望5.1 全文总结对自己的工作做个总结,主要工作如下:(1)看书查资料,加深了对指针和链表的理解与运用。(2)查阅了很多资料,对控制台函数有了一定的了解。(3)通过编写第一个较大的程序,对自己的编程思维有了新的认识。5.2 工作展望在今后的研究中

16、,将围绕着如下几个方面开展工作:(1)进一步巩固C语言知识,尽量做到精通,为后续的学习打下更加扎实的基础。(2)锻炼自己思考问题的能力和更加灵活的计算思维。体会从刚接触C语言到能完成这个课程设计,其中经历的困难很难想象,特别是刚放暑假就满怀信心要做好这个课设,可是一直没有怎么用心,终于暑假过了我却还没做到一大半。最开始是想做图形界面的,可是由于自己的懒散最终还是选择了做文本菜单。而在做文本菜单的过程中,也是经历了一系列艰难的过程的······接触编程语言以前,一直觉得编程应该不会很难,经历了一学期的C语言学习后,才发现编写一个程序并不

17、简单。不知从何而起,构思也没有很明确的目标在学习C语言中那一点自信荡然无存,畏难心理更加严重。而实验书上有详细的关于文本菜单的介绍,所以反复去看书,研究书上的代码,这样就大抵开始了,设计出整个框架来。首先我只想做错一个界面,至于链表函数,因为之前编过一个类似的程序,虽然用的是单链表的链接,但事实上大致是相同的。因此便专心构造界面。构造界面不是一件简单的事,尽管书上给出了代码,但是照着书本输入书上的代码到code:blocks里面之后,编译一下,一大堆Error和Warning。平时学习C语言的时候,很注重语法、标点什么的错误,所以这类的错误都避免了,然而这么多错误还是让我倍感压力。一行一行的对

18、着书检查,也的确减少了一些错误,但错误仍然存在,所以大胆怀疑书上有错误,事实上书本上也的确有些错误。但是所接触的错误许多都是以前从未接触过的,有一次弹出一个窗口,后来在往上搜了才知道是内存方面出了问题。所以后来将一些错误放到网上去搜,这样也的确解决了一些问题。很不容易的解决了错误,窗口终于出来了。但是还是存在着一些错误,最开始,我学着书上的方法将所有的函数分布在不同的C文件里面,后来发现出现了一堆同样的错误,应该是多重定义了,由于各个文件都包含了头文件,而头文件里面有全局变量的定义,这样就有了一大堆错误.而照着网上的解决方法也没有成功,所以最后决定在同一个C文件里编辑代码,调试起来更方便。我习

19、惯写一个函数就编译一下,编译没有了错误再写下一个函数。虽然函数很多,但是有一些大致上都是一样的。就这样一个一个的写,也就慢慢将函数都写好了,而且编译的都没有错误,也解决了一些警告。链表操作函数的编写开始比较麻烦,因为我们要写的是一个三层链表,不过明白了链表的实质之后,构建链表看起来也不是一件特别难的事了,但是删除的时候碰到了麻烦,删除的时候头结点没有指到对的位置,所以一删除了头结点,程序就出现bug了。调试了好久,终于找出了头结点指向的一个错误,这样才解决了这个问题。最后都写好了的时候,发生了一件让我喷血的事,就是所有代码显示出来的中文不知道为什么都变成了乱码!调了很长时间都没有调试好,让我很

20、崩溃。最后在同学的帮助下发现是编译器的编码问题,才把这个问题解决。再来就是重复调整文字的排版,一个一个调试功能,虽然很繁琐,但是看到自己做出来的东西,也没有那么困难了。通过这次课程设计,我对于链表操作、文件操作甚至是整个C语言都有了更深入的了解了。不实实际际地敲上这么多代码我也许真的体会不到代码的真谛。虽然敲代码的确很辛苦,但是也真正的学到了东西。不像学习C语言过程中那样,各种语法都会,但什么像样的程序都不能编写出来。我想,这才是真正意义上的学习了编程吧。本次课程设计总的来说,不仅仅是运用了课程上学到的知识,更多的是对自己想要实现功能的一种尝试,去学习一种新的方法,这一点比我能完成这一次任务更

21、重要。本次课程设计也让我领悟到,有时候自己走进死胡同了,很难出来,但经过同学的提点帮忙,就能从中解脱出来,让我更明白了为什么很多大型软件都是团队来完成的任务,不单单因为分工合作,有时候因为个人的习惯,就会走进死胡同,多一个人就多一种方法,就多一条简便的路。虽然C语言课程已经结束,但我深知道它的重要性,我以后一定会继续努力学习C语言各方面的知识,争取自己在C语言学有所成,让以后的学习和工作更加辉煌。参考文献1 刘云生. 现代数据库技术. 北京: 国防工业出版社,2001.38462 阳小华,刘振宇,谭敏生等.元搜索引擎系统合成算法的约束条件.软件学报,2002,13(7):126412703 R

22、ogic S, Mackworth A K, Ouellette F B. Evaluation of gene-finding programs on mammalian sequences. Genome Res., 2001, 11(5): 8178324 Krogh A. Two methods for improving performance of an HMM and their application for gene-finding. In: Gaasterland T, Karp P, Karplus K, et al., eds. Proc. Int. Conf. Int

23、ell. Syst. Mol. Biol., Menlo Park, CA: AAAI Press, 1997, 5:1791865 孙良.一种分布式智能信息检索系统的研究与实现:硕士学位论文.浙江大学,2002.43476 URL: 7 曹计昌,卢萍,李开. C语言程序设计,北京:科学出版社,2013.18 曹计昌,卢萍,李开. C语言实验与课程设计,北京:科学出版社,2011附录 程序清单附录一 源文件 main.c#include "RS.h"int main() COORD size = SCR_COL, SCR_ROW; /*窗口缓冲区大小*/ gh_std_ou

24、t = GetStdHandle(STD_OUTPUT_HANDLE); /* 获取标准输出设备句柄*/ gh_std_in = GetStdHandle(STD_INPUT_HANDLE); /* 获取标准输入设备句柄*/ SetConsoleTitle(gp_sys_name); /*设置窗口标题*/ SetConsoleScreenBufferSize(gh_std_out, size); /*设置窗口缓冲区大小80*25*/ LoadData(); /*数据加载*/ InitInterface(); /*界面初始化*/ RunSys(&gp_head); /*系统功能模块的选择

25、及运行*/ CloseSys(gp_head); /*退出系统*/ return 0;/* * 函数名称: LoadData * 函数功能: 将代码表和三类基础数据从数据文件载入到内存缓冲区和十字链表中. * 输入参数: 无 * 输出参数: 无 * 返 回 值: BOOL类型, 功能函数中除了函数ExitSys的返回值可以为FALSE外, * 其他函数的返回值必须为TRUE. * * 调用说明: 为了能够以统一的方式调用各功能函数, 将这些功能函数的原型设为 * 一致, 即无参数且返回值为BOOL. 返回值为FALSE时, 结束程序运行. */BOOL LoadData() int Re =

26、0; Re = CreatList(&gp_head); gc_sys_state |= Re; gc_sys_state &= (16 + 32 + 64 - Re); if (gc_sys_state < (1 | 2 | 4 | 8 | 16 | 32 | 64) /*数据加载提示信息*/ printf("n系统包含的基础数据不完整!n"); printf("n按任意键继续!n"); getch(); return TRUE;/* * 函数名称: LoadCode * 函数功能: 将代码表从数据文件载入到内存缓冲区, 并进行排

27、序和去除空格. * 输入参数: 存放代码表的数据文件名. * 输出参数: pBuffer 指向内存缓冲区的指针变量的地址. * 返 回 值: 存放代码表的内存缓冲区大小(以字节为单位). * * 调用说明: */int LoadCode(char *, char *pBuffer) char *pTemp, *pStr1, *pStr2; int handle; int BufferLen, len, loc1, loc2, i; long ; if (handle = open(, O_RDONLY | O_TEXT) = -1) /*如果以只读方式打开失败 */ handle = open

28、(, O_CREAT | O_TEXT, S_IREAD); /*以创建方式打开*/ = (handle); /*数据文件的长度*/ pTemp = (char *)calloc( + 1, sizeof(char); /*申请同样大小的动态存储区*/ BufferLen = read(handle, pTemp, ); /*将数据文件的内容全部读入到内存*/ a=BufferLen; close(handle); *(pTemp + BufferLen) = '0' /*在动态存储区尾存一个空字符,作为字符串结束标志*/ BufferLen+; for (i=0; i<

29、BufferLen; i+) /*将动态存储区中的所有换行符替换成空字符*/ if (*(pTemp + i) = 'n') *(pTemp + i) = '0' /*再申请一块同样大小的动态存储区,用于存放排序后的代码串*/ *pBuffer = (char *)calloc(BufferLen, sizeof(char); loc2 = 0; pStr1 = pTemp; len = strlen(pStr1); while (BufferLen > len + 1) /*选择法排序*/ loc1 = len + 1; while (BufferLen

30、 > loc1) /*每趟找到序列中最小代码串,首地址存入pStr1*/ pStr2 = pTemp + loc1; if (strcmp(pStr1, pStr2) > 0) pStr1 = pStr2; loc1 += strlen(pStr2) + 1; len = strlen(pStr1); /*这一趟所找到的最小代码串长度*/ /*如果不是空串,则进行复制,loc2是下一个最小代码串存放地址的偏移量*/ if (len > 0) strcpy(*pBuffer + loc2, pStr1); loc2 += len + 1; /*已复制的代码串所占存储空间大小*/

31、 /*将最小代码串从序列中删除掉*/ for(i=0; i<BufferLen-(pStr1-pTemp)-(len+1); i+) *(pStr1 + i) = *(pStr1 + i + len + 1); BufferLen -= len + 1; /*下一趟排序所处理序列的长度*/ pStr1 = pTemp; /*假定序列的第一个代码串为最小代码串*/ len = strlen(pStr1); /*序列中只剩下一个代码串时,排序结束*/ /*复制最后这个代码串*/ len = strlen(pStr1); strcpy(*pBuffer + loc2, pStr1); /*修改

32、动态存储区大小,使其正好放下排序后代码串*/ loc2 += len + 1; *pBuffer = (char *)realloc(*pBuffer, loc2); free(pTemp); /*释放最先申请的动态存储区*/ return loc2; /*返回存放代码串的内存缓冲区实际大小*/* * 函数名称: CreatList * 函数功能: 从数据文件读取基础数据, 并存放到所创建的十字链表中. * 输入参数: 无 * 输出参数: phead 主链头指针的地址, 用来返回所创建的十字链. * 返 回 值: int型数值, 表示链表创建的情况. * 0 空链, 无数据 * 16 已加载高

33、校信息数据,无专业基本信息和招生捐款信息数据 * 48 已加载高校信息和专业信息数据,无招生捐款信息数据 * 112 三类基础数据都已加载 * * 调用说明: */int CreatList(COL_NODE *phead) COL_NODE *hd = NULL, *pProNode; MAJ_NODE *pCaseNode; RS_NODE *pMediaNode; FILE *pFile; int find; int re = 0; if (pFile = fopen(gp_col_info_, "rb") = NULL) printf("高校信息数据文件打

34、开失败!n"); return re; printf("高校信息数据文件打开成功!n"); while (!feof(pFile) pProNode = (COL_NODE *)malloc(sizeof(COL_NODE); fread(pProNode, sizeof(COL_NODE), 1, pFile); if(!feof(pFile) /*最后一个数据无效*/ pProNode->anext = NULL; pProNode->next = hd; hd = pProNode; fclose(pFile); if (hd = NULL) p

35、rintf("高校信息数据文件加载失败!n"); return re; printf("高校信息数据文件加载成功!n"); *phead = hd; re += 16; if (pFile = fopen(gp_maj_info_, "rb") = NULL) printf("专业基本信息数据文件打开失败!n"); return re; printf("专业基本信息数据文件打开成功!n"); re += 32; while (!feof(pFile) pCaseNode = (MAJ_NODE

36、*)malloc(sizeof(MAJ_NODE); fread(pCaseNode, sizeof(MAJ_NODE), 1, pFile); pCaseNode->pnext = NULL; pProNode = hd; while (pProNode != NULL && strcmp(pProNode->col_id, pCaseNode->col_id) != 0) pProNode = pProNode->next; if (pProNode != NULL) pCaseNode->next = pProNode->anext;

37、pProNode->anext = pCaseNode; else /*如果未找到,则释放所创建结点的内存空间*/ free(pCaseNode); fclose(pFile); if (pFile = fopen(gp_rs_info_, "rb") = NULL) printf("招生基本信息数据文件打开失败!n"); return re; printf("招生基本信息数据文件打开成功!n"); re += 64; while (!feof(pFile) /*创建结点,存放从数据文件中读出的招生缴费信息*/ pMediaNo

38、de = (RS_NODE *)malloc(sizeof(RS_NODE); fread(pMediaNode, sizeof(RS_NODE), 1, pFile); /*查找媒体报道信息支链上对应媒体报道信息结点*/ pProNode = hd; find = 0; while (pProNode != NULL && find = 0) pCaseNode = pProNode->anext; while (pCaseNode != NULL && find = 0) if (strcmp(pCaseNode->maj_id, pMediaN

39、ode->maj_id) = 0) find = 1; break; pCaseNode = pCaseNode->next; pProNode = pProNode->next; if (find) /*如果找到,则将结点以后进先出方式插入媒体报道信息支链中*/ pMediaNode->next = pCaseNode->pnext; pCaseNode->pnext = pMediaNode; else /*如果未找到,则释放所创建结点的内存空间*/ free(pMediaNode); fclose(pFile); return re;/* * 函数名称

40、: InitInterface * 函数功能: 初始化界面. * 输入参数: 无 * 输出参数: 无 * 返 回 值: 无 * * 调用说明: */void InitInterface() WORD att = FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY | BACKGROUND_BLUE; /*黄色前景和蓝色背景*/ SetConsoleTextAttribute(gh_std_out, att); /*设置控制台屏幕缓冲区字符属性*/ ClearScreen(); /* 清屏*/ /*创建弹出窗口信息堆栈,将初始化后的屏

41、幕窗口当作第一层弹出窗口*/ gp_scr_att = (char *)calloc(SCR_COL * SCR_ROW, sizeof(char);/*屏幕字符属性*/ gp_top_layer = (LAYER_NODE *)malloc(sizeof(LAYER_NODE); gp_top_layer->LayerNo = 0; /*弹出窗口的层号为0*/ gp_top_layer->rcArea.Left = 0; /*弹出窗口的区域为整个屏幕窗口*/ gp_top_layer->rcArea.Top = 0; gp_top_layer->rcArea.Righ

42、t = SCR_COL - 1; gp_top_layer->rcArea.Bottom = SCR_ROW - 1; gp_top_layer->pContent = NULL; gp_top_layer->pScrAtt = gp_scr_att; gp_top_layer->next = NULL; ShowMenu(); /*显示菜单栏*/ ShowState(); /*显示状态栏*/ return;/* * 函数名称: ClearScreen * 函数功能: 清除屏幕信息. * 输入参数: 无 * 输出参数: 无 * 返 回 值: 无 * * 调用说明: */

43、void ClearScreen(void) CONSOLE_SCREEN_BUFFER_INFO bInfo; COORD home = 0, 0; unsigned long size; GetConsoleScreenBufferInfo( gh_std_out, &bInfo );/*取屏幕缓冲区信息*/ size = bInfo.dwSize.X * bInfo.dwSize.Y; /*计算屏幕缓冲区字符单元数*/ /*将屏幕缓冲区所有单元的字符属性设置为当前屏幕缓冲区字符属性*/ FillConsoleOutputAttribute(gh_std_out, bInfo.wA

44、ttributes, size, home, &abc); /*将屏幕缓冲区所有单元填充为空格字符*/ FillConsoleOutputCharacter(gh_std_out, ' ', size, home, &abc); return;/* * 函数名称: ShowMenu * 函数功能: 在屏幕上显示主菜单, 并设置热区, 在主菜单第一项上置选中标记. * 输入参数: 无 * 输出参数: 无 * 返 回 值: 无 * * 调用说明: */void ShowMenu() CONSOLE_SCREEN_BUFFER_INFO bInfo; CONSOLE_

45、CURSOR_INFO lpCur; COORD size; COORD pos = 0, 0; int i, j; int PosA = 2, PosB; char ch; GetConsoleScreenBufferInfo( gh_std_out, &bInfo ); size.X = bInfo.dwSize.X; size.Y = 1; SetConsoleCursorPosition(gh_std_out, pos); for (i=0; i < 5; i+) /*在窗口第一行第一列处输出主菜单项*/ printf(" %s ", ga_main_

46、menui); GetConsoleCursorInfo(gh_std_out, &lpCur); lpCur.bVisible = FALSE; SetConsoleCursorInfo(gh_std_out, &lpCur); /*隐藏光标*/ /*申请动态存储区作为存放菜单条屏幕区字符信息的缓冲区*/ gp_buff_menubar_info = (CHAR_INFO *)malloc(size.X * size.Y * sizeof(CHAR_INFO); SMALL_RECT rcMenu =0, 0, size.X-1, 0 ; /*将窗口第一行的内容读入到存放菜单

47、条屏幕区字符信息的缓冲区中*/ ReadConsoleOutput(gh_std_out, gp_buff_menubar_info, size, pos, &rcMenu); /*将这一行中英文字母置为红色,其他字符单元置为白底黑字*/ for (i=0; i<size.X; i+) (gp_buff_menubar_info+i)->Attributes = BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_RED; ch = (char)(gp_buff_menubar_info+i)->Char.AsciiChar

48、); if (ch >= 'A' && ch <= 'Z') | (ch >= 'a' && ch <= 'z') (gp_buff_menubar_info+i)->Attributes |= FOREGROUND_RED; /*修改后的菜单条字符信息回写到窗口的第一行*/ WriteConsoleOutput(gh_std_out, gp_buff_menubar_info, size, pos, &rcMenu); COORD endPos = 0, 1; SetC

温馨提示

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

评论

0/150

提交评论