欢迎来到沃文网! | 帮助中心 分享知识,传播智慧!
沃文网
全部分类
  • 教学课件>
  • 医学资料>
  • 技术资料>
  • 学术论文>
  • 资格考试>
  • 建筑施工>
  • 实用文档>
  • 其他资料>
  • ImageVerifierCode 换一换
    首页 沃文网 > 资源分类 > DOC文档下载
    分享到微信 分享到微博 分享到QQ空间

    实现一个简单的文本文件编辑系统.doc

    • 资源ID:1023196       资源大小:377KB        全文页数:40页
    • 资源格式: DOC        下载积分:10积分
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: QQ登录 微博登录
    二维码
    微信扫一扫登录
    下载资源需要10积分
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,下载更划算!
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    实现一个简单的文本文件编辑系统.doc

    1、摘要这个文本编辑器的功能类似windows的记事本,有新建、打开、保存、退出的文件操作功能,有复制、粘贴、剪切、清除的文件编辑功能,又有帮助与关于功能菜单。在主函数main()中多次调用其他子函数是这个文本编辑器的最大特点。最主体的子函数莫过于drawmenu()画出文本编辑器的功能列表,其他还有各种功能的子函数,如drawmain()画出整个文本编辑器的主界面,如del()定义删除功能,在这里就不一一介绍,详见下面。目录一、 功能设计4二、 详细设计7三、运行结果34四、结束语41一、功能设计通过对Windows自配的记事本的功能研究,并结合老师对本次课程设计的要求,让用户在我设计完成的文本

    2、编辑器中可以通过快捷和选择菜单项,完成基本的文本编辑和文件处理工作。该文本文件编辑系统应该至少具备有以下功能模块:文件操作模块、文本编辑模块、剪切操作模块、菜单控制模块和帮助及其他模块。(一)文件操作模块1、新建:新建功能应该要可以不只是单纯地把输入文本框清空, 而且还应该可以智能判断文本框中是否有数据,如果有数据未 保存或者保存过后又有数据变动,则会弹出提示信息询问是否 保存。新建功能可以通过选择File菜单上的New子菜单来实现。2、打开:打开功能应该要可以通过记事本读入文件。打开功能可以通过选择File菜单上的Open子菜单来实现。在文件打开时,保存和另存为操作中,系统会提示用户输入文件

    3、路径及文件名。特别注意的是,当用户打开一个文件时,指定的文件必须存在,否则系统会报错。3、保存:保存功能应该要可以直接将文本框中的内容记忆保存。保存功能可以通过选择File菜单上的Save子菜单来实现。4、另存为:另存为功能应该要可以将文本框中的内容记忆保存,并且可以进一步把整个文件保存到指定地方。另存为功能可以通过选择File菜单上的Save as子菜单来实现。5、退出:退出功能应该要可以直接退出文本文件编辑系统。退出功能可以通过选择File菜单上的Exit子菜单来实现。(二)文本编辑器模块1、添加:当光标所在位置及后面没有字符时,系统会以添加的方式输入字符。2、插入:当光标所在位置及后面有

    4、字符时,系统会以插入的方式输入字符。3、删除:用户可以通过Backspace键删除光标前一个字符,也可以使用Del键删除当前位置的字符。4、选定:用户可以使用左移键()、右移键、上移键、下移键来移动光标位置。也可以通过Ctrl+左移键(或右移键)来选定多个字符。(三)剪贴板操作模块1、剪切:如果用户要剪切文本以便可以将它移动到其他位置,可通过Ctrl+X左移键(或右移键)先选定文本,然后选择Edit菜单上的Cut子菜单或按Ctrl+X快捷键来完成剪切任务。2、复制:如果用户要复制文本以便可以将它到其他位置,必须先选定文本,然后选择Edit菜单上的Copy子菜单或按Ctrl+C快捷键来完成复制任

    5、务。3、粘贴:如果用户要粘贴剪切或复制的文本,必须将光标置于要粘贴文本的位置,然后选择Edit菜单上的Paste子菜单或按Ctrl+V快捷键来完成粘贴任务。(四)菜单控制模块1、File子菜单:用户可以按F1功能键来完成该菜单项的调用,即显示该项菜单。用户可按光标上移或下移键在该菜单项的子菜单之间循环移动,也可以使用光标的左移键或右移键在3个菜单项之间循环移动。当光带移动到某个子菜单项上时,用户此时可使用Enter键来选取相关菜单选项。2、Edit子菜单:用户可以按F2功能键来完成该菜单项的调用,即显示该项菜单。其他功能调用如上。3、Help子菜单:用户可以按F3功能键来完成该菜单项的调用,即

    6、显示该项菜单。其他功能调用如上。(五)帮助及其他模块1、帮助:帮助功能可以提示使用者如何进入菜单中的各个项目。2、关于:关于功能是描述此文本文件编辑系统的设计者。3、快速预览:用户可按F10功能键来打开快速预览窗口,在快速预览窗口中没有功能菜单条。二、详细设计1、程序预处理。首先有头文件的加载,再有宏定义上下左右、退格、换行、复制、粘贴、剪切等热键,使用户可以直接从键盘上录入字符进行操控(字符即ASCII码字符),为了方便下面程序的运行,还要定义3个结构体,分别与剪贴板、列单链表和行单链表相关。2、main()主函数。因为程序是从main()函数开始执行,在main()函数结束的,所以在mai

    7、n()函数下。(1)首先在main()中初始化一些全局变量及结构数组,接着调用drawmain()函数来显示主窗口,然后调用while(1)进入主循环,等待用户按键,最后程序根据用户的按键值,进行相应的处理,完成文本编辑的相关工作。(2)若按键为常规字符,则继续判断在文本编辑区的当前光标位置有没有字符,若有字符,则调用insert()函数,将此字符插入在当前位置,否则直接输入即可。(3)若按键为Enter键,则将光标移至下一行的行首,等待用户输入新的字符。(4)若按键为左,右,上,下,则执行gotoxy()操作,将光标移动至目标位置。(5) 若按键为退格(BackSpace)键,则将调用del

    8、()函数将光标的前一个字符删除;若按键为Del键,也将调用del()函数将光标的当前位置的字符中删除。(6)若按键为Ctrl开头的按键,则执行与其相关的操作。具体来说,若为Ctrl+左移键(),则将选定当前光标的位置开始向右的一个字符,若按住Ctrl键不放,连续按右移键,可以选定多个字符。若为Ctrl+左移键(),则将执行与以上相同的操作。若为Ctrl+X键,则为剪切键(即将选定相关内容保存起来,且删除选定的字符)。若为Ctrl+C键,则为复制键(即将选定的相关内容保存起来)。若为Ctrl+V键,则调用insert()函数将保存起来的字符插入光标所在字符之前。(7)若按键为F10键,则调用qv

    9、iew()函数,实现文本的快速预览。若按键为F1,F2,F3功能键,则调用menuctrl()菜单控制函数。若为F1键,则调用File菜单;若为F2键,则调用Edit菜单;若为F3键,则调用Help菜单。具体程序如下:void main() char a; int i,A,x,y,flag=0,b; Hnode *Hhead,*q; node *p1,*p2; Hhead=(Hnode *)malloc(sizeof(Hnode); /*为行单链表中首节点分配内存空间*/ q=Hhead; Hhead-nextl=NULL; p1=p2=q-next=(node *)malloc(sizeof

    10、(node); /*为列单链表中首节点分配内存空间*/ p1-ch=13; p1-next=NULL; drawmain(); /*显示主窗口*/ window(2,2,79,23); textbackground(9); for(i=0;i=32&a127) /*若输入为常规字符或回车键*/ if(check(Hhead,wherey(),wherex()ch=a; putch(a); if(NUM=76)/*连续输入满行,分别生成一个新的行单链表和列单链表节点*/ p2-next=NULL; q-nextl=(Hnode *)malloc(sizeof(Hnode); q=q-nextl;

    11、 q-nextl=NULL; q-next=NULL; p1=p2=q-next=(node *)malloc(sizeof(node); p1-ch=13; p1-next=NULL; NUM=0; else /*连续输入未满一行,生成一个新的列单链表节点*/ p2-next=(node *)malloc(sizeof(node); p2=p2-next; p2-ch=13; p2-next=NULL; else /*当前位置有字符且输入是常规字符,则执行插入字符操作*/ x=wherex(); y=wherey(); insert(Hhead,wherey(),wherex(),a); N

    12、UM+; view(Hhead); gotoxy(x,y); if(a=13) /*若输入为回车键*/ gotoxy(1,wherey()+1); q-nextl=(Hnode *)malloc(sizeof(Hnode); q=q-nextl; q-nextl=NULL; q-next=NULL; p1=p2=q-next=(node *)malloc(sizeof(node); p1-ch=13; p1-next=NULL; NUM=0; x=wherex(); y=wherey(); /*文本窗口中左移,当前光标不在窗口的第1列*/ if(A=LEFT)&(x!=1) gotoxy(wh

    13、erex()-1,wherey(); /*文本窗口中左移,当前光标在窗口的第1列*/ if(A=LEFT)&(x=1) gotoxy(abs(judge(Hhead,wherey()-1),wherey()-1); /*文本窗口中右移,若当前光标的右边一位有字符*/ if(A=RIGHT)&check(Hhead,wherey(),wherex()0) gotoxy(wherex()+1,wherey(); /*文本窗口中右移至下行的第1列,若当前光标位置没有字符且下行的第1列有字符*/ if(A=RIGHT)&check(Hhead,wherey()+1,1)!=0&check(Hhead,

    14、y,x)=0) gotoxy(1,wherey()+1); /*右移*/ if(A=RIGHT)&x=76) gotoxy(1,wherey()+1) ; /*上移*/ if(A=UP)&check(Hhead,wherey()-1,wherex()!=0) gotoxy(wherex(),wherey()-1); /*上移*/ if(A=UP)&check(Hhead,wherey()-1,wherex()=0) if(judge(Hhead,wherey()-1)=0) gotoxy(-judge(Hhead,wherey()-1)+1,wherey()-1); else gotoxy(-

    15、judge(Hhead,wherey()-1),wherey()-1); /*下移*/ if(A=DOWN)&check(Hhead,wherey()+1,wherex()!=0) gotoxy(wherex(),wherey()+1); if(A=BACK) /*处理BackSpace键*/ flag=del(Hhead,wherey(),wherex()-1); x=wherex()-1; y=wherey(); view(Hhead); if(flag=0) if(x!=0) gotoxy(x,y); else gotoxy(x+1,y); if(flag=1) gotoxy(x+1,y

    16、); flag=0; /*处理菜单按键F1 F2 F3*/ if(A=F1)|(A=F2)|(A=F3)|(a127) A=menuctrl(Hhead,A); if(A=100)main(); /*新建文件*/ if(A=101) /*打开文件*/ Hhead=(Hnode *)malloc(sizeof(Hnode); opens(Hhead); getchar();clrscr();gotoxy(3,3);view(Hhead); /*保存文件*/ if(A=102)save(Hhead);clrscr();cprintf(save successfully!);getch();goto

    17、xy(3,3);view(Hhead); /*文件另存为*/ if(A=103)saveas(Hhead);clrscr();cprintf(save as successfully!);getch();gotoxy(3,3);view(Hhead); /*帮助*/ if(A=120)clrscr();cprintf( F1:FilenF2:EditnF3:Help ); getch();gotoxy(3,3);view(Hhead); if(A=121)clrscr();cprintf(It is designed by Zheng Yiying . );getch();gotoxy(3,3

    18、);view(Hhead); if(A=DEL)/*处理DEL键,删除当前位置的单个字符*/ x=wherex(); y=wherey(); del(Hhead,wherey(),wherex(); view(Hhead); gotoxy(x,y); /*处理已经选定文本字符后,按DEL键的情况*/ if(A=DEL&value!=0) if(value0) x=wherex(), y=wherey(); else x=r0.col, y=r0.line; for(i=0;i0) del(Hhead,ri.line,ri.col); if(value0) x=wherex(), y=where

    19、y(); else x=r0.col, y=ri.line; for(i=0;i0) del(Hhead,ri.line,ri.col); if(value0) del(Hhead,rabs(value)-1-i.line,rabs(value)-1-i.col); backup=value; /*保存r数组的有值元素的最大下标值*/ value=0; /*此value为全局变量*/ view(Hhead); gotoxy(x,y); /*处理Ctrl+c按键*/ if(A=Cc&value!=0) x=wherex(); y=wherey(); backup=value; value=0;

    20、/*此value为全局变量*/ view(Hhead); gotoxy(x,y); /*处理Ctrl+v按键*/ if(A=Cv&backup!=0) x=wherex(); y=wherey(); if(backup0) /*Ctrl+右移键选定的文本,贴切此当前位置*/ for(i=0;i0) /*Ctrl+左移键选定的文本,贴切此当前位置*/ for(i=0;ibackup;i+) insert(Hhead,y,x+i,rbackup-1-i.ch); view(Hhead); gotoxy(x,y); /*快速预览*/ if(A=F10) qview(Hhead); view(Hhea

    21、d); gotoxy(x,y); /*处理Ctrl+左移键或右移键*/ if(A=CL|A=CR) control(A,Hhead); /*显示当前行列号*/ x=wherex(); y=wherey(); window(1,1,80,25); textcolor(0); textbackground(7); gotoxy(10,25); /*第25行,第10列,输出当前行号wherey()*/ cprintf(%-3d,y); gotoxy(24,25); /*第25行,第24列*/ cprintf(%-3d,x); window(3,3,78,23); textcolor(10); got

    22、oxy(x,y); textcolor(10); textbackground(1); 3、接下来是要处理其他在主函数中被调用的子函数。(1)void drawmain()功能:画主窗口。drawmain()函数用于在程序中绘画出主窗口,其中包括颜色、边框、叶脚等。具体程序如下:void drawmain()/*画主窗口函数*/ int i,j; gotoxy(1,1);/*在文本窗口中设置光标至(1,1)处*/ textbackground(24);/*选择新的文本背景颜色*/ textcolor(7);/*在文本模式中选择新的字符颜色*/ insline();/*在文本窗口的(1,1)位置

    23、处中插入一个空行*/ for(i=1;i=24;i+) gotoxy(1,1+i);/*(x,y)中x不变,y+*/ cprintf(%c,4);/*画出主窗口的左边界 */ gotoxy(80,1+i); cprintf(%c,5);/*画出主窗口的右边界*/ for(i=1;i=79;i+) gotoxy(1+i,2);/*在第2行,第2列开始*/ cprintf(%c,3);/*画出主窗口的上边界*/ gotoxy(1+i,25);/*在第25行,第2列开始*/ cprintf(%c,2);/*画出主窗口的下边界*/ gotoxy(1,1); cprintf(%c,3); gotoxy(

    24、1,24); cprintf(%c,3); gotoxy(80,1); cprintf(%c,3); gotoxy(80,24); cprintf(%c,3); gotoxy(7,1); cprintf(%c %c File %c %c,186,17,16,186);/* | |*/ gotoxy(34,1); cprintf(%c %c Edit %c %c,186,17,16,186);/* | |*/ gotoxy(60,1); cprintf(%c %c Help %c %c,186,17,16,186);/* | |*/ gotoxy(5,25);/*跳至窗口底端*/ textcol

    25、or(1); cprintf( Row:1 Col:1); gotoxy(60,25); cprintf(By Zheng yiying . ); (2)void qview(Hnode*q)功能:快速预览文本。qview()函数让使用者可以通过F10键快速预览自己输入的文本。具体程序如下:void qview(Hnode *q)/*快速预览文本*/ void view(Hnode *q);/*view()函数声明*/ node *p; int i; window(1,1,80,25);/*定义文本窗口大小*/ clrscr(); /*循环读取两个单链表中的值:q是一个指向行单链表首节点的指针

    26、, 此单链表数据域的值为实际保存各行字符的列单链表p中的首节点地址*/ do p=q-next; /*p指向保存行数据的列单链表的首节点的地址*/ cprintf( ); while(p!=NULL)/*循环读取单链表p中的值*/ if(p-ch=13) putch( ); else putch(p-ch);/*输出各行中的字符到预览窗口*/ p=p-next;/*指向下一个节点*/ q=q-nextl;/*指向下一个节点*/ printf(n);/*输出一个回车*/ while(q!=NULL); getch(); clrscr(); drawmain();/*输出一个回车*/ window

    27、(2,2,79,23); textbackground(9); for(i=0;inext; while(p!=NULL&p-ch=32&p-chch!=13&p-ch!=-1) /*指针p不能为空,且数据域必须为常规字符*/ putch(p-ch);/*在文本窗口中输出该字符*/ p=p-next; q=q-nextl; if(p-ch=13|p-ch=-1)&q!=NULL) gotoxy(1,wherey()+1);/*若ch为回车或EOF标记,光标跳至下行的开始处*/ while(q!=NULL); /*逐行逐列显示文本字符*/ 4)int check(Hnode *Hhead,int m,int n)功能:检查字符。check()函数用于在单链表中检查第m行,第n列位置的字符,若为常规字符,则返回该字符;否则返回0或-1.具体程序如下:int check(Hnode *Hhead,int m,int n)/*check():在单链表中检查第m行第n列位置的字符,若为常规字符,则返回该字符*/ int i; Hnode *q; node *p; q=Hhead; for(i=1;


    注意事项

    本文(实现一个简单的文本文件编辑系统.doc)为本站会员(星星)主动上传,沃文网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知沃文网(点击联系客服),我们立即给予删除!




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服点击这里,给沃文网发消息,QQ:2622162128 - 联系我们

    版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。

    Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1

    陕公网安备 61072602000132号     违法和不良信息举报:0916-4228922