c语言课程设计C语言文本编辑器

上传人:枫** 文档编号:486241894 上传时间:2022-09-20 格式:DOCX 页数:78 大小:54.57KB
返回 下载 相关 举报
c语言课程设计C语言文本编辑器_第1页
第1页 / 共78页
c语言课程设计C语言文本编辑器_第2页
第2页 / 共78页
c语言课程设计C语言文本编辑器_第3页
第3页 / 共78页
c语言课程设计C语言文本编辑器_第4页
第4页 / 共78页
c语言课程设计C语言文本编辑器_第5页
第5页 / 共78页
点击查看更多>>
资源描述

《c语言课程设计C语言文本编辑器》由会员分享,可在线阅读,更多相关《c语言课程设计C语言文本编辑器(78页珍藏版)》请在金锄头文库上搜索。

1、文 本 编 辑 器文本编辑器是最常用的文档创建和编辑工具。随着计算机科学与技术的 发展,用来处理文本的编辑器随处可见,并且形式多样。比如,Windows 下的记事本,写字板,EditPlus,UltraEdit等都是十分优秀的文本编辑器 和处理工具。在本章中,我们将向读者讲解如何利用C语言来发展开发一 个简易的文本编辑器。1 设计目的利用C语言的单链表数据结构及相关函数,本章编程实现了一个与DOS 操作系统下的Edit相似的文本编辑器。再次文本编辑器中,用户可以通 过快捷和选择菜单项,完成基本的文本编辑器和文件处理工作。通过文章的介绍,读者可以了解文本编辑器的开发过程,掌握菜单的 开发技巧,加

2、深对文件操作的理解。更重要的是,希望此程序能抛砖引玉, 引领读者掌握编程的方法和技巧,开发出更优秀的程序。2 功能描述如图.1所示,文本编辑器主要由五大功能模块构成,它们分别是文件 操作模块,文本编辑模块,剪切操作模块,菜单控制模块和帮助及其他模 块。下面分别简要介绍功能模块的功能。(1)文件操作模块。在文件操作模块中,主要完成文件的创建,打开, 保存和另存操作。用户可以选择File菜单上的New子菜单来完成新建文 本文件操作;选择File菜单上的Save子菜单来完成保存文件操作选择 File菜单上的Open子菜单来完成打开文件操作;选择Flie菜单上的Save as子菜单来完成文件的另存为操

3、作。在文件的打开,保存和另存为操作中,系统会提示用户输入文件路径及文件名。值得一提的是,当用户打开一个 文件时,指定的文件必须存在,否则系统会报错。(2)文本编辑器模块。在文本编辑器模块中,主要完成在编辑窗口中 以添加或插入的方式输入字符,删除光标所在当前位置的单个字符或前一 个位置的单个字符,朝上下左右4个方向的光标移动操作。当光标所在位 置及后面的位置没有字符时,系统会以添加的方式输入字符;当光标所在 位置及后面的位置有字符时,系统会已插入的方式输入字符。用户可以使 用BackSpace键删除光标前一个字符,也可以使用Del键删除当前位置的 字符或删除Ctrl+左移(右移)键i选定了的多个

4、字符。用户可以使用左 移键(一),右移键(),上移键(f)和下移键(I)来移动光标位置。(3)剪贴板操作模块。在剪贴板操作模块中,主要完成对已选定文本 的剪切,复制,粘贴工作。如果用户要剪切文本以便可以将它移动到其他 位置,可通过Ctrl+X左移键(右移键)先选定文本,然后选择Edit菜单 上的Cut子菜单或按Ctrl+X快捷键来完成剪切任务。如果用户要复制文 本以便可以将它黏贴到其他位置,必须先选定文本,然后选择Edit菜单 上的Copy紫菜单或按Ctrl+C快捷键来完成复制任务。如果用户要粘贴剪 切或复制的文本,必须将光标置于要粘贴文本的位置,然后选择Edit菜 单上的Paste子菜单或按

5、Ctrl+V快捷键来完成粘贴任务。(4)菜单控制模块。在菜单控制模块中,主要完成菜单的显示。光带 条在子菜单之间的上下移动或菜单之间的左右移动和子菜单项的选取。本 文本编辑器共有Flie,Edit和Help3个子菜单项,用户可以分别按F1,F2 和F3功能键来完成这3个菜单项的调用,即显示某项菜单。用户可按光标上移或下移键在某菜单项的子菜单之间循环移动,也可使用光标的左移 或右移键在3个菜单项之间循环移动。当光带移动到某个字菜单项上时, 用户此时可使用Enter键来选取相关菜单选项。(5)帮助及其他模块。在帮助及其他模块中,主要完成系统功能及按 键的简要介绍。其他模块包括文本的快速预览和窗口的

6、显示。用户可按F10 功能键来打开快速预览窗口,在快速预览窗口中没有功能菜单条。主窗口 要有菜单栏,文本编辑区和状态栏三大部分构成,菜单栏用来显示菜单项, 文本编辑区主要用来文本字符的输入,删除等操作,状态栏主要用来显示 当前光标在文本窗口中的坐标值。注意:Turbo C2.默认定义的文本窗口为整个屏幕,共有80列(或40 列),25行的文本单元,每个单元包括一个字符和一个属性,字符即ASCII 码字符,属性规定该字符的颜色和强度。同时,他还规定整个屏幕的左上 角坐标为(1,1),右下角坐标为(80,25)。并规定沿水平方向为X轴, 方向朝右;眼垂直方向为Y轴,方向朝下。3 总体设计3.1 功

7、能模块设计在.2节中,简单描述了各功能模块的作用,下面分别介绍各功能模块 的具体设计。在介绍各功能模块的具体设计之前,有必要先描述一下主程 序的执行流程。1. 程序执行主流程文本编辑器程序执行主流程如图.2所示,它是在main()函数中实 现的。他首先初始化一些全局变量及结构数组,接着调用drawmain()函数来显示主窗口,然后调用while(1)进入主循环,等待用户按键,最后程序 根据用户的按键值,进行相应的处理,完成文本编辑的相关工作。下面对 图.2中的按键判断和相关处理作补充说明。(1)若按键为常规字符,即其ASCII码大于32小于127,则继续判断 在文本编辑区的当前光标位置有没有字

8、符,若有字符,则调用insert() 函数,将此字符插入在当前位置,否则在判断没有满行后,将此字符添加 在单链表的数据域中,若此行已满,则执行添加新行操作。(2)若按键为Enter键,则将光标移至下一行的行首,等待用户输入 新的字符。(3)若按键为光标移动键(左,右,上,下)且移动后的位置满足相 关条件,则执行gotoxy()操作,将光标移动至目标位置。(4)若按键为BackSpace键,则将调用Del()函数将光标的前一个字 符从单链表中删除;若按键为Del键,也将调用del()函数将光标的当前 位置的字符从单链表中删除。(5)若按键为Ctrl开头的按键,则执行与其相关的操作。具体来说, 若

9、为Ctrl+左移键(一),则将选定当前光标的位置开始向右的一个字符, 若按住Ctrl键不放,连续按右移键,可以选定多个字符。若为Ctrl+左移 键(一),则将执行与以上相同的操作。若为Ctrl+X键,则将选定相关内 容保存起来,且从单链表中删除选定的字符后重新显示单链表的内容。若 为Ctrl+C键,则将选定的相关内容保存起来,重新显示单链表中的内容(目的:为了去除字符的底色)。若为Ctrl+V键,则调用insert()函数将 保存起来的字符插入在单链表中,并重新显示单链表中的内容。(6) 若按键为F10键,则调用qview()函数,实现文本的快速预览。若按键为F1,F2,F3功能键,则调用me

10、nuctrl()菜单控制函数,在此函数 中完成案件的具体判断和执行相应功能操作。若为F1键,则调用File菜 单;若为F2键,则调用Edit菜单;若为F3键,则调用Help菜单。2. 文件操作模块在此模块中,主要实现文件的新建、打开、保存和另存为操作。在此系统 中,文件的新建操作实现比较简单,文件另存为操作与保存操作类似,下 面重点介绍在此文本编辑器程序中,文件的打开和保存操作的具体设计和 实现。在介绍之前,我们先简单描述一下程序中用到的保存数据的数据结 构。在此程序中,共有两种类型的单链表,我们称其为行单链表和列单链 表,一个列单链表用来保存一行的字符,有多少行即有多少个这样的单链 表。行单

11、链表只有一个,它的每个节点的数据域用来保存不同列单链表的 首节点的地址。例如,第4行第4列的字符保存在行单链表的第4个节点 的数据域所指的列单链表的第4个节点的数据域中。有关具体数据结构的 定义,在后面的小节中会有具体介绍。1) 打开文件文件的打开流程如图.3所示,它首先提示用户输入要打开文件的文件名, 若该文件不存在或由于其他原因打开失败,则会结束文件打开操作。若文 件成功打开并且文件指针没有到文件尾,则从文件中一次读取一个字符, 并将该字符添加到一列单链表节点中,直至遇到换行符(ASCII码10)或 连续读取字符个数大于76 (在此文件编辑器中,每行最多为76个字符)。 当列单链表形成后,

12、它的首地址将被保存至行单链表的相应节点的数据域 中,如此动作,直至文件指针指向文件尾部而结束。注意:由于本程序中每行以回车符(ASCII码为13)结束,而当用Windows 的记事本创建一个文本文件,打开此文件并用fgetc()函数读取时,程序 写入列单链表节点中的值是ASCII码为13的回车符。2)保存文件保存文件操作主要完成将单链表中的数据写入文件中的任务,它的具体 实现流程如下。(1)用户输入一个保存此单链表数据的文件名。(2)以只写方式打开此文件,若成功打开此文件,则执行步骤(3);否 则退出。(3)读取行单链表中的节点数据域的值,若值不为空,则执行步骤(4); 否则执行步骤(6)。(

13、4)依次读取行单链表节点中保存的首地址的相应列单链表节点的数据 域的值,若其值为回车符,则用换行符替代后将其写入文件中;否 则直接将其值写入文件中,直至该列单链表中指针域为NULL的最后 一个元素结束。(5)读取行单链表中的下一个节点,并跳至步骤(3)。(6)关闭文件,退出。3. 文件编辑模块在文件编辑模块中,主要完成以添加或插入的方式输入字符、删除光标所 在的当前位置或前一个位置的单个字符、朝上下左右4个方向的光标的移 动操作。下面介绍这4个功能的具体设计与实现。1)添加字符当光标处在文本编辑的最后一行的位置且光标后面没有字符时,若此时输 入字符,程序会判断一行中字符的个数,若字符个数不等于

14、76,则在当前 的列单链表的最后一个节点中保存输入的字符,然后添加一个新的节点来 保存下一个输入的字符:若等于76,则在当前的列单链表的最后一个节点 中保存输入的字符,然后在行单链表中添加一个新节点用来保存下一行的 列单链表的首地址,添加一个新的列单链表节点来保存下一个用户输入的 字符。2)插入字符若光标所在处已经存在字符,当用户在当前位置输入字符时,程序会调用 insert()函数将输入的字符在光标所在的位置处在列单链表中插入,插入 完成后,会调用test()函数来检查各行是否满足只有76个字符的条件, 若不满足此条件,则在此函数中会对多出的字符进行处理。下面分别对列 单链表中字符的插入过程

15、和单链表的检查过程进行介绍。若在第m行,第n列的位置插入一个字符,其insert()过程描述如下:(1)定位至行单链表中的第m个节点,得到这个节点的数据域的值,其 值为对应列单链表中第一个节点的地址。(2)定位至列单链表中的第n-1个节点。(3)创建一个新的列单链表节点,用其数据域保存输入的字符。(4)若字符插入在第m行第1列,则直接将行单链表中第m个节点的数 据域的值改变为新的列单链表节点的地址,新的列单链表节点的指 针域指向列单链表中原来的第1个节点。若字符不是插入在第m行 第1列,则执行简单的单链表中插入节点的操作。(5)插入此字符后,调用test()函数,从第m行开始检查各行是否满足

16、每行只允许有76个字符的条件,若不满足此条件,则必须进行处理。其test()检查处理过程描述如下: 用指针tail指向已经插入了新节点的列单链表中的最后一个节点。(2)若此单链表中节点数超过76个,则指针p1会指向此列单链表中的 第76个节点,指针p2指向第77个节点,并将p1所指节点的指针 域设置为NULL。(3)若tail所指节点的数据域为Enter键(ASCII为13)且在行单链表 中只有m个节点,则在此行单链表中添加一个新的节点,新节点的 数据域为p2的值,指针域为空,并将m节点的指针域指向它;若tail 所指节点反而数据域为Enter键(ASCII为13)且在行单链表中有多 于m个节点,与上面不同的是,它执行的是在行单链表插入一个新 的节点的操作。(4)若tail所指节点的数据域不是回车符,p1的数据域

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号