1 / 72
文档名称:

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

格式:doc   大小:315KB   页数:72页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

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

上传人:雨林书屋 2023/1/25 文件大小:315 KB

下载得到文件列表

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

文档介绍

文档介绍:该【c语言课程设计C语言文本编辑器 】是由【雨林书屋】上传分享,文档一共【72】页,该文档可以免费在线阅读,需要了解更多关于【c语言课程设计C语言文本编辑器 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。文本编写器
文本编写器是最常用的文档创办和编写工具。跟着计算机科学与技术的
发展,用来办理文本的编写器随处可见,而且形式多样。比方,Windows
下的记事本,写字板,EditPlus,UltraEdit等都是十分优秀的文本编写器
和办理工具。在本章中,我们将向读者讲解如何利用C语言来发睁开发一
个简单的文本编写器。
1

设计目的
利用C语言的单链表数据结构及相关函数,本章编程实现了一个与DOS
操作系统下的Edit相似的文本编写器。再次文本编写器中,用户可以经过快捷和选择菜单项,达成基本的文本编写器和文件办理工作。
经过文章的介绍,读者可以认识文本编写器的开发过程,掌握菜单的
开发技巧,加深对文件操作的理解。更重要的是,希望此程序能抛砖引玉,引领读者掌握编程的方法和技巧,开发出更优秀的程序。
功能描述
,文本编写器主要由五大功能模块构成,它们分别是文件操作模块,文本编写模块,剪切操作模块,菜单控制模块和帮助及其余模
块。下面分别简要介绍功能模块的功能。
1)文件操作模块。在文件操作模块中,主要达成文件的创办,打开,保存和另存操作。用户可以选择File菜单上的New子菜单来达成新建文本文件操作;选择File菜单上的Save子菜单来达成保存文件操作选择
File菜单上的Open子菜单来达成打开文件操作;选择Flie菜单上的Save
as子菜单来达成文件的另存为操作。在文件的打开,保存和另存为操作中,
系统会提示用户输入文件路径及文件名。值得一提的是,当用户打开一个
文件时,指定的文件一定存在,不然系统会报错。
2)文本编写器模块。在文本编写器模块中,主要达成在编写窗口中
以增加或插入的方式输入字符,删除光标所在当前地址的单个字符或前一
个地址的单个字符,向上下左右4个方向的光标挪动操作。当光标所在位
置及后边的地址没有字符时,系统会以增加的方式输入字符;当光标所在
地址及后边的地址有字符时,系统会已插入的方式输入字符。用户可以使
用BackSpace键删除光标前一个字符,也可以使用Del键删除当前地址的
字符或删除Ctrl+左移(右移)键i选定了的多个字符。用户可以使用左
移键(←),右移键(→),上移键(↑)和下移键(↓)来挪动光标地址。
3)剪贴板操作模块。在剪贴板操作模块中,主要达成对已选定文本的剪切,复制,粘贴工作。假如用户要剪切文本以便可以将它挪动到其余
地址,可经过Ctrl+X左移键(右移键)先选定文本,而后选择Edit菜单上的Cut子菜单或按Ctrl+X快捷键来达成剪切任务。假如用户要复制文
本以便可以将它黏贴到其余地址,一定先选定文本,而后选择Edit菜单
上的Copy紫菜单或按Ctrl+C快捷键来达成复制任务。假如用户要粘贴剪
切或复制的文本,一定将光标置于要粘贴文本的地址,而后选择Edit菜
单上的Paste子菜单或按Ctrl+V快捷键来达成粘贴任务。
4)菜单控制模块。在菜单控制模块中,主要达成菜单的显示。光带条在子菜单之间的上下挪动或菜单之间的左右挪动和子菜单项的采用。本
文本编写器共有Flie,Edit和Help3个子菜单项,用户可以分别按F1,F2
和F3功能键来达成这3个菜单项的调用,即显示某项菜单。用户可按光
标上移或下移键在某菜单项的子菜单之间循环挪动,也可使用光标的左移或右移键在3个菜单项之间循环挪动。当光带挪动到某个字菜单项上时,用户此时可使用Enter键来采用相关菜单项选择项。
5)帮助及其余模块。在帮助及其余模块中,主要达成系统功能及按
键的简要介绍。其余模块包含文本的快速预览和窗口的显示。用户可按F10
功能键来打开快速预览窗口,在快速预览窗口中没有功能菜单条。主窗口
要有菜单栏,文本编写区和状态栏三大部分构成,菜单栏用来显示菜单项,文本编写区主要用来文本字符的输入,删除等操作,状态栏主要用来显示当前光标在文本窗口中的坐标值。
注意:,共有80列(或40列),25行的文本单元,每个单元包含一个字符和一个属性,字符即ASCII码字符,属性规定该字符的颜色和强度。同时,他还规定整个屏幕的左上
角坐标为(1,1),右下角坐标为(80,25)。并规定沿水平方向为X轴,
方向朝右;眼垂直方向为Y轴,方向朝下。
3整体设计

.2节中,简单描述了各功能模块的作用,下面分别介绍各功能模块的详细设计。在介绍各功能模块的详细设计从前,有必需先描述一下主程
序的执行流程。
程序执行主流程
,它是在main()函数中实
现的。他第一初始化一些全局变量及结构数组,接着调用drawmain()函数
来显示主窗口,而后调用while(1)进入主循环,等候用户按键,最后程序
依据用户的按键值,进行相应的办理,达成文本编写的相关工作。下面对

1)若按键为老例字符,即其ASCII码大于32小于127,则连续判断
在文本编写区的当前光标地址有没有字符,如有字符,则调用insert()
函数,将此字符插入在当前地址,不然在判断没有满行后,将此字符增加
在单链表的数据域中,若此行已满,则执行增加新行操作。
2)若按键为Enter键,则将光标移至下一行的行首,等候用户输入
新的字符。
3)若按键为光标挪动键(左,右,上,下)且挪动后的地址满足相关条件,则执行gotoxy()操作,将光标挪动至目标地址。
4)若按键为BackSpace键,则将调用Del()函数将光标的前一个字符从单链表中删除;若按键为Del键,也将调用del()函数将光标的当前地址的字符从单链表中删除。
5)若按键为Ctrl开头的按键,则执行与其相关的操作。详细来说,若为Ctrl+左移键(←),则将选定当前光标的地址开始向右的一个字符,
若按住Ctrl键不放,连续按右移键,可以选定多个字符。若为Ctrl+左移
键(←),则将执行与以上相同的操作。若为Ctrl+X键,则将选定相关内
容保存起来,且从单链表中删除选定的字符后重新显示单链表的内容。若
Ctrl+C键,则将选定的相关内容保存起来,重新显示单链表中的内容
(目的:为了去除字符的底色)。若为Ctrl+V键,则调用insert()函数将
保存起来的字符插入在单链表中,并重新显示单链表中的内容。
6)若按键为F10键,则调用qview()函数,实现文本的快速预览。若按键为F1,F2,F3功能键,则调用menuctrl()菜单控制函数,在此函数
中达成案件的详细判断和执行相应功能操作。若为F1键,则调用File菜
单;若为F2键,则调用Edit菜单;若为F3键,则调用Help菜单。

在此模块中,主要实现文件的新建、打开、保存和另存为操作。在此系统
中,文件的新建操作实现比较简单,文件另存为操作与保存操作近似,下
面要点介绍在此文本编写器程序中,文件的打开和保存操作的详细设计和
实现。在介绍从前,我们先简单描述一下程序顶用到的保存数据的数据结
构。在此程序中,共有两各种类的单链表,我们称其为行单链表和列单链
表,一个列单链表用来保存一行的字符,有多少行即有多少个这样的单链
表。行单链表只有一个,它的每个节点的数据域用来保存不一样列单链表的
首节点的地址。比方,第4行第4列的字符保存内行单链表的第4个节点
的数据域所指的列单链表的第4个节点的数据域中。相关详细数据结构的
定义,在后边的小节中会有详细介绍。
1)打开文件
,它第一提示用户输入要打开文件的文件名,
若该文件不存在或因为其余原由打开失败,则会结束文件打开操作。若文
件成功打开而且文件指针没有到文件尾,则从文件中一次读取一个字符,
并将该字符增加到一列单链表节点中,直至遇到换行符(ASCII码10)或
连续读取字符个数大于76(在此文件编写器中,每行最多为76个字符)。
当列单链表形成后,它的首地址将被保存至行单链表的相应节点的数据域
中,这样动作,直至文件指针指向文件尾部而结束。
注意:因为本程序中每行以回车符(ASCII码为13)结束,而当用Windows
的记事本创办一个文本文件,打开此文件并用fgetc()函数读取时,程序
写入列单链表节点中的值是ASCII码为13的回车符。
2)保存文件
保存文件操作主要达成将单链表中的数据写入文件中的任务,它的详细
实现流程以下。
1)用户输入一个保存此单链表数据的文件名。
2)以只写方式打开此文件,若成功打开此文件,则执行步骤(3);不然退出。
3)读取行单链表中的节点数据域的值,若值不为空,则执行步骤(4);不然执行步骤(6)。
4)挨次读取行单链表节点中保存的首地址的相应列单链表节点的数据域的值,若其值为回车符,则用换行符代替后将其写入文件中;否
则直接将其值写入文件中,直至该列单链表中指针域为NULL的最后一个元素结束。
5)读取行单链表中的下一个节点,并跳至步骤(3)。
6)关闭文件,退出。

在文件编写模块中,主要达成以增加或插入的方式输入字符、删除光标所
在的当前地址或前一个地址的单个字符、向上下左右4个方向的光标的移
动操作。下面介绍这4个功能的详细设计与实现。
1)增加字符
当光标处在文本编写的最后一行的地址且光标后边没有字符时,若此时输
入字符,程序会判断一行中字符的个数,若字符个数不等于76,则在当前
的列单链表的最后一个节点中保存输入的字符,而后增加一个新的节点来
保存下一个输入的字符:若等于76,则在当前的列单链表的最后一个节点
中保存输入的字符,而后内行单链表中增加一个新节点用来保存下一行的
列单链表的首地址,增加一个新的列单链表节点来保存下一个用户输入的
字符。
2)插入字符
若光标所在处已经存在字符,当用户在当前地址输入字符时,程序会调用
insert()函数将输入的字符在光标所在的地址处在列单链表中插入,插入
达成后,会调用test()函数来检查各行能否满足只有76个字符的条件,
若不满足此条件,则在此函数中会对多出的字符进行办理。下面分别对列
单链表中字符的插入过程和单链表的检查过程进行介绍。
若在第m行,第n列的地址插入一个字符,其insert()过程描述以下:
1)定位至行单链表中的第m个节点,获取这个节点的数据域的值,其值为对应列单链表中第一个节点的地址。
2)定位至列单链表中的第n-1个节点。
3)创办一个新的列单链表节点,用其数据域保存输入的字符。
(4)若字符插入在第m行第1列,则直接将行单链表中第m个节点的数
据域的值改变成新的列单链表节点的地址,新的列单链表节点的指
针域指向列单链表中本来的第1个节点。若字符不是插入在第m行
1列,则执行简单的单链表中插入节点的操作。
5)插入此字符后,调用test()函数,从第m行开始检查各行能否满足每行只同意有76个字符的条件,若不满足此条件,则一定进行办理。
test()检查办理过程描述以下:
1)用指针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的数据域为回车符而且行单链表中只有m个节点,则内行单链表中增加一个新的节点,新节点的数据域为p2的值,指针域为空,并将第m节点的指针域指向
它;若tail所指节点的数据域不为回车符而且行单链表中有多于m
节点,则将tail的指针域指向行单链表中第m+1个节点所指的列单链表的首节点,并将行单链表中第m+1个节点的数据域更正成指针p2的值,并对行单链表中第m+1个节点所指的列单链表进行test()
检查,相似的办理过程至行单链表中的最后一个节点结束。
3)删除字符
当用户按下Del键时,系统会调用del()函数在单链表中删除当前光标所在处的字符;当用户按下BackSpace键时,系统也会调用这个函数在单链表中删除当前光标所在处前一个地址的字符。
若在第m行、第n列的地址删除一个字符,其在列单链表中删除一个节点的操作域插入工作十分相似,所以这里要点介绍删除该字符后,单链表中数据的前移工作过程。
1)在相应的列单链表中删除第n个节点。
(2)
判断第m行能否存在而且判断在此行中能否有字符,若第
m行不存
在,或此行中没有字符,则结束字符删除过程,不然执行步骤(
3)。
(3)
用tail保存第m行相应列单链表中最后一个节点的地址,
并将最后
一个节点的指针域保存为第
m+1行中相应列单链表的第一个元素的
地址。
4)计算出第m行中没有字符的地址的个数num,而后在第m+1行的相应列单链表中截取num个节点,并将行单链表中的第m+1节点的数据域改为相应列单链表中的第num个节点后的节点的地址。
5)调用m++语句,是变量m增1,跳至步骤(3),开始对下一行进行办理。
4)挪动光标
挪动光标的操作主要利用gotoxy()函数来实现,过程特别简单,只需对当
前的光标地址和挪动方向进行判断后,即可执行gotoxy()过程。比方,如
果当前光标在第m行第1列,且按下了光标左移键,只需将光标移至第m-1