您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > C语言程序设计实践报告模板
1中南大学CentralSouthUniversityC语言课程设计实践题目名称:实现一个简单的文本文件编辑系统完成人姓名:郑艺颖专业班级:电气信息类1117班学号:09091117172摘要这个文本编辑器的功能类似windows的记事本,有新建、打开、保存、退出的文件操作功能,有复制、粘贴、剪切、清除的文件编辑功能,又有帮助与关于功能菜单。在主函数main()中多次调用其他子函数是这个文本编辑器的最大特点。最主体的子函数莫过于drawmenu()画出文本编辑器的功能列表,其他还有各种功能的子函数,如drawmain()画出整个文本编辑器的主界面,如del()定义删除功能,在这里就不一一介绍,详见下面。3目录一、功能设计……4二、详细设计……7三、运行结果……34四、结束语……414一、功能设计通过对Windows自配的记事本的功能研究,并结合老师对本次课程设计的要求,让用户在我设计完成的文本编辑器中可以通过快捷和选择菜单项,完成基本的文本编辑和文件处理工作。该文本文件编辑系统应该至少具备有以下功能模块:文件操作模块、文本编辑模块、剪切操作模块、菜单控制模块和帮助及其他模块。(一)文件操作模块1、新建:新建功能应该要可以不只是单纯地把输入文本框清空,而且还应该可以智能判断文本框中是否有数据,如果有数据未保存或者保存过后又有数据变动,则会弹出提示信息询问是否保存。新建功能可以通过选择File菜单上的New子菜单来实现。2、打开:打开功能应该要可以通过记事本读入文件。打开功能可以通过选择File菜单上的Open子菜单来实现。在文件打开时,保存和另存为操作中,系统会提示用户输入文件路径及文件名。特别注意的是,当用户打开一个文件时,指定的文件必须存在,否则系统会报错。3、保存:保存功能应该要可以直接将文本框中的内容记忆保存。保存功能可以通过选择File菜单上的Save子菜单来实现。4、另存为:另存为功能应该要可以将文本框中的内容记忆保存,并且可以进一步把整个文件保存到指定地方。另存为功能可以通过选择File菜单上的Saveas子菜单来实现。5、退出:退出功能应该要可以直接退出文本文件编辑系统。退出功能可以通过选择File菜单上的Exit子菜单来实现。5(二)文本编辑器模块1、添加:当光标所在位置及后面没有字符时,系统会以添加的方式输入字符。2、插入:当光标所在位置及后面有字符时,系统会以插入的方式输入字符。3、删除:用户可以通过Backspace键删除光标前一个字符,也可以使用Del键删除当前位置的字符。4、选定:用户可以使用左移键(←)、右移键、上移键、下移键来移动光标位置。也可以通过Ctrl+左移键(或右移键)来选定多个字符。(三)剪贴板操作模块1、剪切:如果用户要剪切文本以便可以将它移动到其他位置,可通过Ctrl+X左移键(或右移键)先选定文本,然后选择Edit菜单上的Cut子菜单或按Ctrl+X快捷键来完成剪切任务。2、复制:如果用户要复制文本以便可以将它到其他位置,必须先选定文本,然后选择Edit菜单上的Copy子菜单或按Ctrl+C快捷键来完成复制任务。3、粘贴:如果用户要粘贴剪切或复制的文本,必须将光标置于要粘贴文本的位置,然后选择Edit菜单上的Paste子菜单或按Ctrl+V快捷键来完成粘贴任务。(四)菜单控制模块1、File子菜单:用户可以按F1功能键来完成该菜单项的调用,即显示该项菜单。用户可按光标上移或下移键在该菜单项的子菜单之间循6环移动,也可以使用光标的左移键或右移键在3个菜单项之间循环移动。当光带移动到某个子菜单项上时,用户此时可使用Enter键来选取相关菜单选项。2、Edit子菜单:用户可以按F2功能键来完成该菜单项的调用,即显示该项菜单。其他功能调用如上。3、Help子菜单:用户可以按F3功能键来完成该菜单项的调用,即显示该项菜单。其他功能调用如上。(五)帮助及其他模块1、帮助:帮助功能可以提示使用者如何进入菜单中的各个项目。2、关于:关于功能是描述此文本文件编辑系统的设计者。3、快速预览:用户可按F10功能键来打开快速预览窗口,在快速预览窗口中没有功能菜单条。7二、详细设计1、程序预处理。首先有头文件的加载,再有宏定义上下左右、退格、换行、复制、粘贴、剪切等热键,使用户可以直接从键盘上录入字符进行操控(字符即ASCII码字符),为了方便下面程序的运行,还要定义3个结构体,分别与剪贴板、列单链表和行单链表相关。2、main()主函数。因为程序是从main()函数开始执行,在main()函数结束的,所以在main()函数下。(1)首先在main()中初始化一些全局变量及结构数组,接着调用drawmain()函数来显示主窗口,然后调用while(1)进入主循环,等待用户按键,最后程序根据用户的按键值,进行相应的处理,完成文本编辑的相关工作。(2)若按键为常规字符,则继续判断在文本编辑区的当前光标位置有没有字符,若有字符,则调用insert()函数,将此字符插入在当前位置,否则直接输入即可。(3)若按键为Enter键,则将光标移至下一行的行首,等待用户输入新的字符。(4)若按键为左,右,上,下,则执行gotoxy()操作,将光标移动至目标位置。(5)若按键为退格(BackSpace)键,则将调用del()函数将光标的前一个字符删除;若按键为Del键,也将调用del()函数将光标的当前位置的字符中删除。(6)若按键为Ctrl开头的按键,则执行与其相关的操作。具体来8说,若为Ctrl+左移键(←),则将选定当前光标的位置开始向右的一个字符,若按住Ctrl键不放,连续按右移键,可以选定多个字符。若为Ctrl+左移键(←),则将执行与以上相同的操作。若为Ctrl+X键,则为剪切键(即将选定相关内容保存起来,且删除选定的字符)。若为Ctrl+C键,则为复制键(即将选定的相关内容保存起来)。若为Ctrl+V键,则调用insert()函数将保存起来的字符插入光标所在字符之前。(7)若按键为F10键,则调用qview()函数,实现文本的快速预览。若按键为F1,F2,F3功能键,则调用menuctrl()菜单控制函数。若为F1键,则调用File菜单;若为F2键,则调用Edit菜单;若为F3键,则调用Help菜单。具体程序如下:voidmain(){chara;inti,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(node));/*为列单链表中首节点分配内存空间*/p1-ch=13;p1-next=NULL;drawmain();/*显示主窗口*/window(2,2,79,23);textbackground(9);for(i=0;i24;i++)insline();window(3,3,78,23);textcolor(10);while(1)9{while(bioskey(1)==0)continue;/*等待用户按键*/a=A=bioskey(0);/*返回输入的字符的键值*/if(a=32&&a127)/*若输入为常规字符或回车键*/{if(check(Hhead,wherey(),wherex())=0)/*当前位置没有字符且输入是常规字符,则执行添加字符操作*/{NUM++;p2-ch=a;putch(a);if(NUM==76)/*连续输入满行,分别生成一个新的行单链表和列单链表节点*/{p2-next=NULL;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;}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);NUM++;view(Hhead);gotoxy(x,y);}}if(a==13)/*若输入为回车键*/10{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(wherex()-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,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);elsegotoxy(-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);11x=wherex()-1;y=wherey();view(Hhead);if(flag==0){if(x!=0)gotoxy(x,y);elsegotoxy(x+1,y);}if(flag==1){gotoxy(x+1,y);flag=0;}}/*处理菜单按键F1F2F3*/if((A==F1)||(A==F2)||(A==F3)||(a32||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(Hhea
本文标题:C语言程序设计实践报告模板
链接地址:https://www.777doc.com/doc-3262429 .html