毕业设计(论文)-用C语言编写的学生成绩管理系统.doc_第1页
毕业设计(论文)-用C语言编写的学生成绩管理系统.doc_第2页
毕业设计(论文)-用C语言编写的学生成绩管理系统.doc_第3页
毕业设计(论文)-用C语言编写的学生成绩管理系统.doc_第4页
毕业设计(论文)-用C语言编写的学生成绩管理系统.doc_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

辽宁师范大学本科生毕业论文(设计)专用纸目录摘要.3abstract.4第 1 章 绪言.61.1 研究动机.61.2 研究现状.61.3 主要研究内容.6第 2 章 二进制数据的读写.72.1 文件.72.2 文件类型指针.82.3 文件的打开和关闭.82.3.1 文件的打开(fopen函数)82.3.2 文件的关闭(fclose函数).82.4 数据块输入输出函数fread与fwrite.9第 3 章 动态存储分配.93.1内存管理函数.93.1.1 malloc函数.93.1.2 free函数.103.2链表的基本概念.103.2.1 单链表的概念.103.2.2 单链表的基本结构.113.2.3 结点与结点之间联系的建立.113.3链表的建立和输出.123.3.1 建立链表.123.3.2 实现输出链表.133.3.3 链表结点的插入.133.3.4 链表结点的删除.133.4 链表的查找和排序操作.143.4.1 查找操作.143.4.2 排序.15第 4 章 汉字点阵技术的应用. .164.2.1 获取字模数组.164.2.2 应用画点函数输出字模数组.164.2.3 汉字点阵输出函数.164.2.4 调用汉字点阵输出函数.17第 5 章 菜单的键盘控制.175.1获得键盘的扫描码. 175.2 定义键盘的扫描码.185.3 bioskey()函数.18第 6 章 图形文本模式图形函数的介绍.18第 7 章 总结和展望.19参考文献.20附录1 部分运行结果.22附录2光盘内容简介.23用c语言编写的学生成绩管理系统摘要学生成绩管理系统是典型的信息管理系统(mis),其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面。对于前者要求建立起数据一致性和完整性强、数据安全性好的库。而对于后者则要求应用程序界面美观,简单易用等。经过分析,我们使用 boland公司的 c语言开发工具,利用其提供的各种面向过程的语句操纵数据库的对象,首先在短时间内建立系统应用原型,然后,对初始原型系统进行需求迭代,不断修正和改进,直到形成用户满意的可行系统。用c编写的成绩管理系统是个管理数据库的程序,首先我们要建立数据库。数据库在c语言中的表示方法,通常是定义一个结构体类型,这个结构体类型包括数据库中记录的属性,再由这个结构体类型定义若干个结构体类型变量,将这些变量连接起来,形成一条链表,就组成了一个数据库。形成的链表一般有两种:即动态链表和静态链表。由于静态链表需要事先估计记录的大小,估计过大浪费空间,估计过小不容易扩充,尤其是当需要动态改变链表,如插入、删除等操作,需要移动数据。如果此时数据库已有较大规模时,将会浪费大量时间和资源在这些不必要的移动上。所以这里我们用的是动态链表,动态链表的优点是无长度限制,方便插入、删除等操作,不必移动数据,实现动态管理。其次,实现数据库管理的基本功能。如:创建、打印、存盘、读盘、追加、插入、删除、修改等。由于是学生成绩的数据库管理,所以多实现一个按总分排序的功能。此外系统还提供了成绩的查询功能,可以实现按姓名进行条件查询。另外,我们使用数据库的时候,存储记录和读取记录就显得非常重要。本系统的存盘与读盘都是采用二进制方式,以块写和块读取函数来操作的。另外,为了界面的美观,系统采用了汉字点阵的方法在屏幕上输出了软件初始界面,并采用不同的颜色以及非常美观的字体输出每一个汉字。用户界面用彩色菜单来实现,而菜单的移动是利用人眼具有视觉暂留的生理现象,采用颜色覆盖技术来实现的。为满足界面简单易用的要求,我们用汉字输出控制菜单;通过键盘的扫描码来实现用键盘上的方向键来控制菜单的移动等。关键词:颜色覆盖技术 动态链表 二进制数据的读写 汉字点阵技术 键盘扫描码abstractthe system of managing student file is a typical application of managing information system (know as mis),which mainly includes building up data-base of back-end and developing the application interface of front-end. the former required consistency and integrality and security of data. the later should make the application powerful and easily used. by looking up lots of datum, we selected c language presented by boland because of its objective tools in win32. c offered a series of sentence operating a database. it can give you a shortcut to build up a prototype of system application. the prototype could be modified and developed till users are satisfied with it.the system of managing student achievement is the typical information management system (mis), its development mainly includes two aspects: the establishment and maintenance of the backstage database as well as the development of the application procedure the of the front end.to the former it requests to establishe a uniformity、integrity and good security base .but to the later it requests the application procedure surface to be artistic,characteristic and simple to use. after the analysis, we decide to use the c language of boland corporation to development it.we uses the sentences it provides that are facing the process to operate the object of the database.first we establishes the prototype of the system application in the short time,then, we carries on the demand iteration of the initial prototype system,unceasingly revises and improves, until forms the feasible system which users are satisfacted. the achievement managing system compiled with c is the management database procedure, so we must establish the database first. the expression method of the database in the c language, usually defines a structure body type, this structure body type including the attribute of the database records.then we can defines certain structure body type variables by this structure body type.connects these variables we defined,they can form a chain table,and the chain tables composes a database. generally,there are two kinds of chain table:the dynamic chain table and the static chain table.because of the static chain table needs to estimate the record size beforehand, estimated too large will waste space and estimated too small is not easy to expand.particularly when we needs to change the dynamic chain table, like the operations: insertion, deletion which are needs to move the data.if the database had have a comparative large-scale this time, it will waste massive time and resources in the nonessential migration.therefore here we use the dynamic chain table,the dynamic chain tables merit is it has no length-limit, it has facilitates on the insert and delete operations,and it does not need to move the data, and realized dynamic management.next, realizes the basic database management functions.for example:the creation, the printing, saving the data to file, reading the data from file,appending record,insert record, the deletion,the modify and so on.because this is the student achievement management system, therefore we compelete a function that descend the records by the total score. in addition the system also provid the result inquiry function,which can search the record on the names.moreover, when we use the database, saving records and reading records are very importent.this system use the binary method to save and read the block of records from file.moreover, in order to make the user surface is artistic, the system used the chinese character lattice method to output the initial surface of the software on the screen,as well used the extremely artistic font-type to output each chinese character with the different color.the user surface realizes with the colored menu, and the menu migration is realized by the physiological phenomenon that the person eyes short staying on, uses the color-cover-technology to realize. in order to make the user surface is easy to use, we use the chinese character to output the control menu.after we obtained the scanning code of the keyboard .we canuse the direction key to control menus migration and so on.keywords:colorcoveringtechnology,dynamicchaintable,binarydatareadandwrite,chinesecharacterlatticetechnology,keyboardscanningcode第一章 绪言1.1 研究动机近年来我国信息技术发展迅速,手工管理方式在学生成绩管理中的应用中已显得不相适应,采用it技术提高服务质量和管理水平势在必行。因此,学校必须提高其工作效率,改善其工作环境。这样,学生成绩管理的信息化势在必行。因此,我们的系统开发的整体任务是实现学生成绩管理的系统化、规范化、自动化和智能化,从而达到提高学生成绩管理效率的目的。1.2 研究现状现有的学生成绩管理系统的数据库操作基本都能够很好的实现,但是系统的安全性不好,主要体现在数据的一致性、完整性和安全性上。例如:对于数据的输入没有严格的限制。其次,界面也不够美观,而且也不方便易用。因此,我们的系统开发的整体任务是实现数据一致、完整和安全的数据库,并实现美观和易用的界面。1.3 主要研究内容1.3.1 课题难点 动态链表的建立和插入、删除、查询、排序、打印等操作。 数据库的相关操作:查询、排序、分类汇总等。1.3.2 要解决的关键问题 汉字点阵的应用:软件的初始界面设计。 窗口函数的应用:实现弹出式输入窗口。 键盘控制的实现:通过读取键盘按键的键值从而实现软件中光标的移动和定位。 颜色覆盖技术:被选中的菜单选项呈高亮显示。 数据库的建立和插入、删除、查询、排序、打印、排序和分类汇总等数据库的操作。 数据结构:若使用静态数组保存数据,要求占用连续的存储空间。它的缺点是需要预先估计记录的大小,例如插入数据和删除数据等操作需要移动记录数据,容易出错。而使用单链表结构管理学生成绩,不用事先估计学生人数,方便随时插入和删除学生记录,且不必移动数据,实现动态管理。代价是牺牲一部分空间用来存放表示结点关系的指针。链表的灵活性也带来了管理的复杂性。将一个学生当作一个结点,这个结点的类型为结构体,结构体中的域表示学生的属性,每个结点除了存放属性外,还存放结点之间的关系,即存放指向后继结点的指针。所以定义表结点的结构如下:typedef struct student char no14; char name16; int scoren; float sum; float average; int order; struct student *next;sco;第二章 二进制数据的读写2.1文件在程序中经常有大量对文件的输入输出操作,程序的运行结果往往以文件的形式保存在磁盘上,程序运行所需的数据也常常以文件的形式从磁盘的存储器中调入进行处理。在c语言中通过标准函数库中的输入输出函数实现输入输出功能,从而大大提高了c语言的可移植性。按数据的组织形式,文件可分为: 文本文件: ascii文件,每个字节存放一个字符的ascii码 二进制文件:数据按其在内存中的存储形式原样存放按文件的逻辑结构,文件可分为: 记录文件:由具有一定结构的记录组成(定长和不定长) 流式文件:由一个个字符(字节)数据顺序组成2.2文件类型指针从c语言对文件的处理方法来看,可以将文件分为两类:缓冲文件系统和非缓冲文件系统。我们这里主要用到的是缓冲文件系统。在缓冲文件系统中,最关键的概念是“文件指针”的概念。“文件指针”用于存放文件的有关信息(如文件名,文件状态等)。这些信息用系统定义的结构体file描述,file定义文件在stdio.h中。在c语言中,无论是什么文件都有通过文件结构的数据集合进行输入输出。其中file为所定义的结构体类型的类型名。在打开文件时,操作系统自动建立文件结构体,并把指向它的指针返回来,程序通过这个指针获得文件信息,访问文件。因此用户使用文件时无需重复定义,但要在程序中说明指向文件结构的指针,即定义file型的指针变量。文件型指针变量说明的形式为:file * 文件型指针名这里,file是结构类型,文件型指针是指向文件结构的指针。例如,file * p;此处p为指针变量,指向文件结构。2.3 文件的打开和关闭2.3.1 文件的打开(fopen函数)c语言用库函数fopen()实现打开文件的操作。fopen函数的调用形式是:file * fp;fp=fopen(文件名,文件使用方式);其中,file是文件结构类型,fp是一个指向file类型的指针变量,即指向被打开的文件。文件名即为要打开的文件名称,文件使用方式是具有特定含义的符号。调用fopen函数后,fopen返回一个文件指针,它指向被打开文件的文件信息区(结构体变量) 的起始地址。如果在执行打开操作时失败(如打开一个不存在的文件),则函数返回一个空指针( null,即地址值为0,它是一个无效的指向)。2.3.2 文件的关闭(fclose函数)文件使用完毕必须关闭,以释放文件指针(文件信息区)以供别的程序使用,同时也可以避免文件中数据的丢失。c语言用函数fclose()函数关闭文件。fclose函数的调用形式是:fclose(fp);其中,fp是由调用fopen()函数时返回的文件指针。返回值0表示成功关闭文件,其他值则表示出错。2.4数据块输入输出函数fread与fwritec语言文件系统给出的两个函数fread和fwrite一般用于二进制文件的输入/输出,它们的原型是在头文件stdio.h中定义。 原型:int fread(void *buffer,int size,int count,file *fp)int fwrite(void *buffer,int size,int count,file *fp) 功能:读/写数据块 返值:成功,返回读/写的块数;出错或文件尾,返回0 说明:buffer:对于fread而言buffer是存放从磁盘文件中读出数据的内存指针,而对fwrite而言,buffer指向要写到文件的信息;它们都是指向要输入/输出数据块的首地址的指针。size: 每次要读/写的数据块的大小(字节数)。count: 决定要进行多少向这种读写操作。fp:要读/写的文件指针第三章 动态存储分配3.1内存管理函数我们在编程中,往往会发生这种情况。即所需的内存空间取决于实际输入的数据而其大小却预先无法知道。对于这种问题,c语言提供了一些内存管理函数,这些内存管理函数可以按需要动态的分配内存空间,也可以把不再使用的内存空间回收,这样我们可以更有效的利用内存资源。常用的内存管理函数有以下两个:malloc()和free()。3.1.1 malloc函数 原型:void *malloc(unsigned size); 功能:动态申请内存空间。 返值:函数malloc()得到指向大小为size的内存区域的首字节的指针,该内存是从堆中已被分配的。说明:在使用指针前建议测试返回值不为空的指针,若使用空指针,通常会引起系统毁坏。例如:struct student *p;p=(struct student *)malloc(sizeof(struct student);表示分配了一个学生所需要的内存空间,malloc函数的返回值被强制转换为指向学生结构体类型的指针,并使p指向所分配的内存区域。使用malloc()函数我们可以为结构体动态的分配内存空间,这样,我们可以根据需要申请内存空间。3.1.2 free()函数free()的原型在stdlib.h中。 原型:void free(void *prt) 功能:函数free()释放由prt所指的内存,并将它返回给堆,以便这些内存成为再分配时的可用内存。 返值:没有返回值。 说明:free()只能用以前由动态地址分配系统的函数,诸如malloc或calloc()所分配地址的那个指针来调用。这一点十分重要!在调用中用一个无效的指针将很可能毁坏内存管理机制,并且引起系统破坏。注意,与数组占用的连续的内存区域不同,在使用动态存储方法的时候,申请分配的内存空间不一定是连续的。所以,不连续的内存空间之间必须用一种方法把它们联系起来,由此,我们引入链表。3.2链表的基本概念链表是一种常见的重要的数据结构。它是动态地进行存储分配的一种结构。它可以根据需要开辟内存单元。链表有一个“头指针”变量,以head表示,它存放一个地址。该地址指向一个元素。链表中每一个元素称为“结点”,每个结点都应包括两个部分:一为用户需要用的实际数据,二为下一个结点的地址。因此,head指向第一个元素:第一个元素又指向第二个元素;,直到最后一个元素,该元素不再指向其它元素,它称为“表尾”,它的地址部分放一个“null”(表示“空地址”),链表到此结束。 3.2.1 单链表的概念单链表属于动态数据结构。通俗地讲,单链表是用“一根有方向的链”把各个数据元素连续起来的一种数据结构。单链表中的所以数据元素都分别存储在一个个具有相同数据结构的结点里面。结点是单链表的基本存储单元,一个结点与一个数据元素一一对应。每个结点内部都是内存中一块连续的存储空间,一般来说各个结点的存储空间是不连续的。3.2.2 单链表的基本结构单链表结点的结构体定义:定义一个结构体,用来保存单链表结点的数据,其中含有一个特殊的成员,该成员定义为指向该结构体本身的指针变量。如下:struct studentint no;char namemaxlen;int scoren;struct student *next;sco;在链表中,每个结点的数据域可以包含若干个数据项,而只有一个指针域,所以也成为线性链表。单链表结点的一般示意图如下所示:datalink3-13.2.3 结点与结点之间联系的建立用指针域可以实现结点与结点之间的联系。在第一个结点的指针域内存入第二个结点的首地址,在第二个结点的指针域内又存放第三个结点的首地址,依次类推,直到最后一个结点。最后一个结点因无后续结点连接,其指针域可赋值为null。下图所示就是单链表(含有附加头结点)的示意图。图3-2是有(a1、a2、an)n个数据结点的情况,图3-3是不含数据结点的情况。a1anhead head3-23-3 在图中,head称为头指针,指向附加头结点。附加头结点的数据域闲置不作他用。后面的每个结点都分为两个部分:一个是数据域,存放各种实际的数据,如学号num、姓名name和成绩score等;另一个是指针域,存放下一个结点的首地址。附加头结点的引入是为了对链表的算法进行简化,也可以不用附加头结点。如下图是不含附加头结点的单链表的示意图。ana1a2headhead3-43-5 从图中可以看出,当不用附加头结点的时候,head指针的指向是变化的,可以为空(null),也可以指向元素a1,若要删除a1,则head指针又将指向a2。而从有无附加头结点的单链表图中可以对比看出,有附加头结点时,不管什么情况下,head指针不用变化,总是指向附加头结点。从图中我们还可以清楚的看出判断单链表是否为空的条件: 当有附加头结点时,条件(head-next=null)成立时,单链表为空; 当无附加头结点是,条件(head=null)成立时,单链表为空。而且从图中可以看出,所有数据用“一根带方向的链”把它们联系在一起了,而head相当于链首,沿着head一次往下走,可以找到所有的元素。所以,在单链表中,头指针head是非常重要的,对单链表的各种操作都是从头指针开始的。下面我们通过一个简单的例子来说明结点与结点之间是如何建立“链表关系”的。如,有如下变量定义(student结构体类型定义在前面刚刚介绍过):sco *head,*s1,*s2;并且假设s1和s2的内存空间已经动态分配好了,这两个学生的学号、姓名等数据也已经赋值了,这样就有了两个结点,则下面的语句就是建立它们之间的“链接关系”的。head=s1;s1-next=s2;s2-next=null;3.3链表的建立和输出3.3.1 建立链表在生成链表时,新输入的结点放在表头,这样最先输入的结点存放在最后。如图:2003010101null20030101022003010201head3-6对于数据库管理,为避免数据出错或减少数据出错的概率,应考虑数据完整性的的验证。本系统中该功能由两个函数create()和input()完成。设置头指针为空,申请内存空间,如果申请不到,则内存空间满,无法保存数据,则返回主程序;否则输入数据,并进行相应的校验(学号、姓名和成绩都在调用函数input()输入和校验),以保证输入合法数据,这是很必要的。当成绩输入后,系统将自动计算该生的总分和平均分,并将名次数据先置0,待排序后再赋予新值。数据输入后,将其后继结点指针指向当前头结点,新头指针指向新插入结点,这样新插入结点总在头。数据输入计算后返回链表的头指针到主函数。3.3.2 实现输出链表由于单链表只能采取顺序访问的方法,即对链表结点的输出,只需从第一个结点开始,一次遍历链表,直到最后一个结点为止。所以定义一个指向结点的临时变量p,初值为单链表的头指针,输出指针所指记录的数据后,将指针后移一个记录,直到p指针值为空,则所有记录输出完毕。设计本函数时注意输出格式以二维表格的形式输出,直观漂亮。输出的第一列为记录号。注意调整格式,对齐表格线。3.3.3 链表结点的插入在单链表的指定结点(设由指针变量p指示)后面插入新结点(由指针变量q指示)的方法很简单,只需使用如下的赋值语句q-next=p-next;p-next=q;在单链中值为x的结点前(或后)插入一个值为y的结点,其步骤如下: 为新结点开辟一个结点空间,用q指向它,并把值y放入其中。 在链表中查找值为x的结点,找到后用p指针指向它。 若在值为x的结点后插入,则用上面的两个赋值语句便可以了。 要在值为x的结点前插入,则需要修改p的前驱结点的指针域。假设pf指向p的前驱结点,则相当于在pf的后面插入q结点。3.3.4 链表结点的删除假设结点q是结点p的前驱结点,则删除p所批示的结点时,除了用q-next=p-next;语句修改指针的指向外,还需要使用语句free(p);回收结点p所占用的空间。由此可见,在单链表中为了删除一个结点,我们必须要知道它的前驱结点。3.4 链表的查找和排序操作在非数值计算问题中,数据存储量一般很大,为了在大量信号中找到某些值,就需要用到查找技术,而为了提高查找效率,需要对一些数据进行排序。查找和排序的数据处理几乎占到总处理量的80%以上,故查找和排序的有效性直接影响到基本算法的有效性,因而查找和排序是重要的基本技术。3.4.1 查找操作预备知识:几个与查找有关的基本概念。列表:由同一类型的数据元素(或记录)构成的集合。可利用任意数据结构实现。关键字:数据元素的某个数据项的值,用它可以标识列表中的一个或一组数据元素。如一个关键字可以唯一标识列表中的一个数据元素,则称其为主关键字,否则为次关键字数据元素仅有一个数据项时,数据元素的值就是关键字。查找:根据给定的关键字值,在特定的列表中确定一个其关键字与给定值相同的数据元素,并返回该数据元素在列表中的位置。若找到相应的数据元素,则称查找是成功的,否则查找是失败的,此时应返回空地址及失败信息。例如:在学生成绩管理系统中,假设全部学生的成绩可用下表的结构存储:recnumnamesco1sco2sco3sco4sco5totalave1234022380302238010223802王丽张明许红8092648092648092648092648092644004602608092643-7假设给定值为022381,则通过查找可得学生王丽的各科成绩和总分,此时查找是成功的。若给定值为0223912,则由于表中没有关键字为0223912的记录,则查找不成功。链式存储结构上的查找:链接存储结构(单链表)上的查找只能从链表的首结点开始按顺序查找。若链表无序,则从链表的首结点开始,逐一检查链表中每个结点的值,直到找到要找的结点或者考察了链表的末结点后仍末找到。若链表有序,则按顺序查找时,发现结点的值比要查找的值大(或小)时,就可提早得出结论了。3.4.2 排序预备知识:排序的相关概念排序(sorting):排序又称为分类,把一批无章的数据序列重新排列成有序序列。对于本学生成绩管理系统,一个很重要的运算是将学生按照分数由高到低排名。本程序中的排序主要采用了冒泡排序的方法。现将次方法介绍如下:冒泡排序 (bubble sort)是根据记录的关键字大小,将记录交换来进行排序的,将关键字之较大的记录向序列的后部移动,关键字较小的记录向前移动。在排序的过程中,关键字较小的记录经过与其他记录的对比交换,像水中的气泡向上冒出一样,移动序列的首部,故称此方法为冒泡排序法。冒泡分向上冒和向下冒两种。我们在这里将介绍后者,因为程序中我们是按总分从大到小排序,基本思路为: j 取n-1至1将rj.key与rj-1.key比较,如果rj.keyrj-1.key,则把记录rj与rj-1交换位置,否则不进行交换,最后是r1.key与r0.key比较,关键字最小的记录就换到了r0的位置上,到此第一趟结束。最小关键字的记录就像最轻的气泡一样换到了顺序表的最前面。 让j取n-1至2,重复上述的比较对换操作,最终r1中存放的是剩余的n-1条记录中除r0外关键字值最小的记录。 依次类推,直到让j取n-1到n-2,将rn-1.key与rn-2.key对比,把关键字较小的记录交换到rn-2中。经过n-1趟比较对换,冒泡排序结束。第四章 汉字点阵的输出4.1汉字点阵相关函数介绍 原型:void far putpixel(int x,int color) 功能:在指定位置上画一个像素,这个函数常用来输出图形或汉字。输出汉字时该函数的使用方法:在屏幕上输出16*16点阵的汉字“语”。一个字分三种颜色显示,颜色随机生成。八个像素为一个字节,循环语句8次输出一个字节,利用了位运算,逐个测试二进制位,如果二进制位为1,putpixel()输出一个像素点。16点阵为六个字节所以水平方向的输出循环六次,每次一个字节。共16行,所以最外循环控制16次。4.2 汉字点阵的输出方法4.2.1 获取字模数组那么我们要在屏幕上输出一个汉字,首先我们要获取它的字模。例如想输出“语”字体为楷体,点阵大小为16*16,使用点阵字模工具技术其字模为:可以得到输出字模数组,如下:char yu16k=/* 以下是 语 的 16点阵楷体_gb2312 字模,32 byte */ 0x00,0x00,0x20,0x70,0x13,0x80,0x00,0x80, 0x00,0xf0,0x03,0x90,0x30,0x90,0xd0,0xfe, 0x17,0x00,0x10,0xf0,0x15,0x10,0x19,0x10, 0x11,0xf0,0x01,0x00,0x00,0x00,0x00,0x00,;4.2.2 应用画点函数输出字模数组假设要输出点阵大小为 16*16的“语”字,由于该汉字以16*16点阵模式存储,即每个汉字由16*16=256个点组成,占用16*2=32个字节单元。字节的每一位表示一个点的属性(1表示亮点,0表示暗点)。连续的两个字节组成该汉字字模的一行。在c语言的图形模式下,要想对汉字字模进行输出,就需要配合上面提到的画点函数了。4.2.3 汉字点阵输出函数汉字点阵输出函数就是利用画点函数把这个字的字模数组输出到屏幕的指定位置上。汉字点阵输出函数定义如下:void drawmat(char *mat,int matsize,int x,int y,int color)/*汉字点阵输出函数*/*mat为汉字点阵的大小,如:32*32点阵*/*x,y为汉字点阵在屏幕上输出时的坐标*/*color为汉字点阵输出的颜色*/int i,j,k,m; m=(matsize-1)/8+1;for(j=0;jmatsize;j+)/*输出汉字点阵的一行*/for(i=0;ik))/*测试二进制为是否为可显示点*/putpixel(x+i*8+k,y+j,color);/*输出像素点*/4.2.4 调用汉字点阵输出函数我们只要在需要显示汉字“语”的时候使用下面语句就可以了。drawmat(yu16k,16,30,80,14);其中yu16k为“语”字的字模数组名,16代表点阵的大小为16*16点阵,30,80分别表示“语”字起始位置的横纵坐标。14代表颜色为黄色。第五章 菜单的键盘控制5.1获得键盘的扫描码#define esc 0x11bvoid main(void) int key,i=1,back=0; while(!kbhit() if(i+%5=0) printf(n); key=bioskey(0); if(key=back) break; else back=key; printf(%c=0x%xn %d,key,key); getch();5.2 定义键盘的扫描码#define up 0x4800#define down 0x5000#define left 0x4b00#define right 0x4d00#define esc 0x011b#define enter 0x1c0d5.3 bioskey()函数 原型:int bioskey(int cmd) 说明:bioskey()原型在bios.h中。函数bioskey()完成直接键盘操作。cmd值决定执行什么操作。 返值:如果cmd是0,bioskey()返回下一个在键盘输入的值(它将等待到按下下一个键)。它返回一个16位的二进制数,包括两个不同的值。当按下一个“普通键”时,它的低8位数放着该字符的ascii码。对于“特殊键”,低8位为0.“特殊键”包括箭头键、功能键等等。高8位字节放着该键的扫描码。这个值不太严格地对应语该键在键盘上的位置。这样,我们只要在程序运行期间,按下方向键,上面的这段代码就可以将键盘的变化告诉给程序,从而执行相应的操作。就可以通过按键来实现菜单的控制了。第六章 文本模式下图形函数的介绍 void clrscr(void)和void clreol(void)以上两个函数的原型都在conio.h中clreol()清除当前字符窗口中,从当前光标位置到该行结束的所有字符,光标位置保持不变。函数clrscr()清除整个当前字符窗口,并且把光标定位在左上角(1,1)处。 int cprintf(const char *str)功能:在屏幕上的文本窗口中格式化输出。原型在头文件conio.h中。 void gotoxy(x,

温馨提示

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

评论

0/150

提交评论