C++课程设计简易文本编辑器
简单的C语言编辑器课程设计
扬州大学编译原理课程设计报告题目简单的编译器班级计科0802班学号081202427姓名张俊指导教师姜卯生成绩扬州大学信息工程学院2011年6月10日一、课程设计题目实现一个简单的编译器二、课程设计目的通过编译原理课程设计,加深对课堂中所讲授的内容的理解,设计一个具有词法分析、语法、语义分析、错误处理的综合程序。
进一步掌握编译程序常用实现的方法和技术,使学生初步具有研究、设计、编制和调试编译程序的能力。
三、课程设计要求1.实现一个C语言子集或Pascal语言子集的编译器,工具任选。
2.要求实现的功能:翻译 +,-,*, / 四则运算表达式及布尔表达式,翻译包含if语句,while语句及do-while语句及相互间的嵌套。
四、课程设计语言及选用工具选用语言:Java工具 Eclipse五、课程设计方法设计过程中用到的数据结构://关键字数组public static List<Eryuanshi> keyWord= new ArrayList<Eryuanshi>();//自定义符号串数组p ublic static Eryuanshi[] valueAndClass = new Eryuanshi[100];//目标代码数组public static List<Siyuanshi> siyuanshi= new ArrayList<Siyuanshi>();//目标代码类,存放四元式的另外一种形式class Siyuanshi{String op;String str1;String str2;}//二元式类,存放词法分析后的标志符,关键字及其类号class Eryuanshi{String word;int classID;}Stack<Integer> stateStack = new Stack<Integer>(); //状态栈Stack<String> symStack = new Stack<String>(); //符号栈Stack<String> semanticStack = new Stack<String>(); //语义栈编译器主要分为两个模块:(1)词法分析程序:主要功能是从文件逐个单词读取源程序,进行次词法分析,并输出源程序的二元式列表,二元式列表保存在keyWord对象数组中。
c语言课程设计C语言文本编辑器
文本编辑器文本编辑器是最常用的文档创建和编辑工具。
随着计算机科学与技术的发展,用来处理文本的编辑器随处可见,并且形式多样。
比如,Windows下的记事本,写字板,EditPlus,UltraEdit等都是十分优秀的文本编辑器和处理工具。
在本章中,我们将向读者讲解如何利用C语言来发展开发一个简易的文本编辑器。
1 设计目的利用C语言的单链表数据结构及相关函数,本章编程实现了一个与DOS操作系统下的Edit相似的文本编辑器。
再次文本编辑器中,用户可以通过快捷和选择菜单项,完成基本的文本编辑器和文件处理工作。
通过文章的介绍,读者可以了解文本编辑器的开发过程,掌握菜单的开发技巧,加深对文件操作的理解。
更重要的是,希望此程序能抛砖引玉,引领读者掌握编程的方法和技巧,开发出更优秀的程序。
2 功能描述如图.1所示,文本编辑器主要由五大功能模块构成,它们分别是文件操作模块,文本编辑模块,剪切操作模块,菜单控制模块和帮助及其他模块。
下面分别简要介绍功能模块的功能。
(1)文件操作模块。
在文件操作模块中,主要完成文件的创建,打开,保存和另存操作。
用户可以选择File菜单上的New子菜单来完成新建文本文件操作;选择File菜单上的Save子菜单来完成保存文件操作选择File菜单上的Open子菜单来完成打开文件操作;选择Flie菜单上的Save as子菜单来完成文件的另存为操作。
在文件的打开,保存和另存为操作中,系统会提示用户输入文件路径及文件名。
值得一提的是,当用户打开一个文件时,指定的文件必须存在,否则系统会报错。
(2)文本编辑器模块。
在文本编辑器模块中,主要完成在编辑窗口中以添加或插入的方式输入字符,删除光标所在当前位置的单个字符或前一个位置的单个字符,朝上下左右4个方向的光标移动操作。
当光标所在位置及后面的位置没有字符时,系统会以添加的方式输入字符;当光标所在位置及后面的位置有字符时,系统会已插入的方式输入字符。
用户可以使用BackSpace键删除光标前一个字符,也可以使用Del键删除当前位置的字符或删除Ctrl+左移(右移)键i选定了的多个字符。
C++课程设计简易文本编辑器
目录第一章课程设计目的和要求 (1)1.1课程设计的目 (1)1.2基本要求 (1)第二章课程设计任务内容 (2)2.1设计背景 (2)2.2简易文本编辑器设计内容 (2)第三章详细设计 (3)3.1总体结构图 (3)3.2函数分析 (3)3.3主函数程序流程图 (4)3.4子函数流程图 (5)第四章程序编码与调试 (7)4.1程序编码 (7)4.2编码调试 (8)4.3运行结果 (9)第五章课程设计心得与体会 (11)附录1 参考文献 (12)附录2 源程序代码 (13)第一章课程设计目的和要求C语言课程设计是一门实践性非常强的课程,不但要注重c语言程序设计基本知识的学习,更要注重程序设计技能的培养,使学生能够允许渐进地把握c语言程序设计的技能。
通过课程设计,培养学生阅读和编写程序的能力,培养计算机程序设计的能力和素质,以及思维方法。
初步积累编程经验,打下良好的计算机应用基础。
1.1课程设计的目1.通过本项课程设计,可以培养独立思考、综合运用所学有关相应知识的能力,能更好的巩固《c语言程序设计》课程学习的内容2.掌握工程软件设计的基本方法,强化上级动手编程能力,闯过理论与实践相结合的难关!更加了解了c语言的好处和其可用性。
3.掌握基本的程序设计过程和技巧,掌握基本的分析问题合理性,通过计算机求解问题的能力,具备初步的高级语言程设计能力。
为后续个门计算机课程的学习和毕业设计打下结实基础。
4.通过c语言课程设计,使学生了解高级程序设计语言的结构。
1.2 基本要求1.基本要求:①要求用VC中的MFC控件打开和保存文件。
②要求在设计的程序中至少能完成六种编辑功能。
③完成的程序界面要美观,能够完成六种编辑的全过程。
2.创新要求:①在记事本中增加工具栏,工具栏中应有常使用的工具按钮;②在记事本中增加状态栏;第二章课程设计任务内容2.1 设计背景随着计算机在社会生活深红越来越深入而广泛的应用,在文件中有些文件需要改动,比如插入,替换,删除等一系列操作,为了更好的修改文件,不得不进行一系列的操作来修改,因此,文件的修改操作是十分重要的。
数据结构课程设计--简易文本编辑器
课程设计说明书课程名称:数据结构课程设计专业:电子信息科学与技术班级:2012-1 设计人:山东科技大学2015年 7 月 11 日目录1需求分析说明 (2)1.1主函数模块 (2)1.2菜单显示及输出子模块 (2)1.3查找功能子模块 (2)1.4替换功能子模块 (2)1.5插入功能子模块 (3)1.6块移动功能模块 (3)1.7删除功能模块 (3)1.8读盘功能模块 (3)1.9存盘功能模块 (3)1.10测试数据 (3)2概要设计说明 (4)2.1设计思想 (4)2.2模块调用图 (4)2.3程序代码简介 (4)3详细设计说明 (7)3.1主函数模块 (7)3.2菜单显示及输出子模块 (7)3.3查找功能子模块 (7)3.4替换子模块 (9)3.5插入子模块 (10)3.6块移动模块 (11)3.7删除模块 (12)3.8读盘功能模块 (13)3.9存盘功能模块 (15)3.10流程图 (16)4调试分析 (17)4.1遇到的问题 (17)4.2测试结果 (18)5用户使用说明 (22)6课程设计总结 (24)1需求分析说明简易文本编辑器的总体目标:在Visual Studio的开发环境下,利用所学C 语言和数据结构的相关知识,开发一个具有良好人机界面的简易文本编辑器,实现对文本的简单修改,从而达到编辑文本以及查看文本信息的目的。
基本功能如下:(1)界面友好,易与操作。
采用菜单或其它人机对话方式进行选择。
(2)能正确打开所键入的文本路径,并能够读取相应文本信息。
(3)能对打开的文本进行文本信息显示、替换、查找、块移动、删除等基本操作。
(4)能够正确对修改后的文本内容存盘。
(5)正确显示文本总行数。
以下是各功能模块的功能描述:1.1主函数模块主函数模块的主要功能是初始化菜单界面,功能按键选择并调用相关模块,实现软件功能。
1.2菜单显示及输出子模块菜单显示模块的主要功能是将菜单进行显示,内容包括本设计的主要功能及相关代号。
C语言实现文本编辑器
C语言实现文本编辑器本文将介绍使用C语言实现一个简单的文本编辑器的基本原理和实现步骤。
通过此编辑器,用户可以打开、编辑、保存和关闭文本文件,并且具备基本的文本编辑功能,如插入、删除、查找和替换文本等。
一、编辑器界面设计为了实现一个简单易用的文本编辑器,我们可以设计一个基于命令行界面的编辑器。
用户可以通过文本命令来操作编辑器,从而实现基本的编辑功能。
二、文件的打开和保存在C语言中,我们可以使用标准文件操作函数来实现文件的打开和保存。
用户可以通过指定文件路径来打开或保存文件。
打开文件时,程序会读取文件内容,并将其显示在编辑器界面中;保存文件时,程序会将编辑器内的文本内容写入目标文件中。
三、基本文本编辑功能1. 插入文本用户可以使用插入命令将文本内容插入到当前光标位置之前或之后。
程序会根据插入位置的不同,调整光标的位置,并显示插入后的文本内容。
2. 删除文本用户可以使用删除命令删除当前光标位置处的文本内容。
程序会删除光标所在位置的字符,并相应地调整文本的显示和光标的位置。
3. 搜索文本用户可以使用搜索命令来查找特定的文本内容。
程序会从当前光标位置开始搜索,并根据搜索结果将光标移动到匹配文本的位置。
4. 替换文本用户可以使用替换命令将指定的文本内容替换为新的内容。
程序会搜索文本中的所有匹配项,并将其替换为新的内容。
四、其他功能扩展除了基本的文本编辑功能外,我们还可以对编辑器进行功能扩展,以提升用户体验和编辑效率。
一些可能的扩展功能包括:1. 撤销和重做功能:允许用户撤销和重做操作,以便回退或恢复文本编辑的历史记录。
2. 多窗口编辑:支持同时打开和编辑多个文本文件的功能,提供多窗口切换和管理。
3. 自动保存与恢复:定时自动保存编辑的文本内容,并在下次启动时自动恢复上次编辑的状态。
4. 语法高亮:根据文本类型,对关键字、注释、字符串等进行特殊标记显示,提升代码可读性。
五、总结通过使用C语言,我们可以实现一个简单但功能完善的文本编辑器。
C语言实现简易文本编译器
C语言实现简易文本编译器数据结构课程设计之简易文本编译器(C语言实现)需求分析(1)具有图形菜单界面:显示实时年份,日期,星期及时间(2)查找:查找文本中的字符串,显示其出现的行数,列数及总共出现次数替换(等长,不等长):对文本中的文本实现等长及不等长替换插入(插串,文本块的插入):插入一行或在具体行号列号处插入文本块移动(行块,列块移动):向下移动一行,向上移动一行,具体行号列号处向左移动或向右移动删除:删除一行,删除莫一行,莫列,定长的内容(3)可正确存盘、取盘;:可读取,保存文本;(4)正确显示总行数。
(行数不少于5行,每行字符数不少于80个字符)采用的数据结构1:采用的逻辑结构文本编辑器主要是针对文本进行编辑,文本的操作就是对字符的操作。
文本编辑器可以从行、列两个方向进行编辑。
每一行可以看成一个线性表,线性表是一种线性结构,线性结构的特点是数据元素之间为线性关系,据元素“一个接一个的排列”。
在一个线性表中数据元素的类型是相同的,由于每一行可以存储的最大字数是相同的,行方向所有线性表的最大长度可以设置成相同的。
行与行之间的关系也可以看成一个线性表。
2.采用的存储结构线性表的存储分为两种:顺序存储和链式存储。
顺序存储是指在内存中用地址连续的一块存储空间顺序存放线性表的各元素,用这种存储形式存储的线性表称为顺序表。
在程序设计语言中,一维数组在内存中占用的存储空间就是一组连续的存储区域,因此,用一维数组来表示顺序表的数据存储区域是再合适不过的。
链式存储是通过-组任意的存储单元来存储线性表中的数据元素的,为建立数据元系之间的线性关系对每个数据元素除了存放数据元素自身的信息之外,还需要和一起存放其后继或前驱所在的存储单元的地址,这两部分信息组成一个“结点”,每个元素都如此。
存放数据元素信息的称为数据域,存放其前驱或后继地址的称为指针域。
只有一个存储单元地址的为单链表,有两个存储单元地址的为双链表。
考虑到实际的功能需求,每行的线性表可以用顺序存储方式,每个字符是一个节点。
c#文本编辑器课程设计
摘要:这个课题是一个关于文本编辑器的小程序,运用一些简单的记事本的基本操作功能来实现的。
该程序利用C#程序编写,在Visual Studio 2005的环境下进行调试运行的。
对于该程序开发,必须达到以下要求:1、熟悉.NET开发环境,能够使用C#语言在.NET平台上独立设计、开发WINDOWS应用程序。
2、掌握C#语言的异常处理技术,能够使用.NET各种调试方法调试代码,掌握帮助的使用方法。
3、掌握常用控件以及控件的常用属性的使用方法。
4、界面要做到简洁易懂,具有人性化等特点。
5、程序没有在使用过程中不存在任何的问题。
目录摘要: (1)一、采用技术 (3)1. visual studio 2005编辑环境 (3)2.C#的窗体编程编程 (3)二、选题说明 (4)三.总体说明 (4)1. 程序的基本结构 (4)2. 程序的主要技术 (4)四.详细说明 (5)1. 界面设计 (5)五.遇到的问题和解决方法 (9)六.心得体会 (9)七.参考文献 (10)八.部分程序代码 (10)一、采用技术1. visual studio 2005编辑环境Visual Studio 是微软公司推出的开发环境。
是目前最流行的 Windows 平台应用程序开发环境。
目前已经开发到 8.0 版本,也就是 Visual Studio 2005。
Visual Studio 可以用来创建 Windows 平台下的 Windows 应用程序和网络应用程序,也可以用来创建网络服务、智能设备应用程序和 Office 插件。
Visual Studio 是一套完整的开发工具集,用于生成 Web 应用程序、XML Web Services、桌面应用程序和移动应用程序。
Visual Basic、Visual C++、Visual C# 和 Visual J# 全都使用相同的集成开发环境 (IDE),利用此 IDE 可以共享工具且有助于创建混合语言解决方案。
简易文本编辑器课程设计报告说明书
简易文本编辑器摘要:此次课程设计设计了一个简易的文本编辑器,该程序主要用于文本编辑的几个操作,主要由C语言实现。
基于对文本编辑的需求该程序的功能在于:输入一页文字,程序可以统计出文字、数字、空格的个数统计某一字符串在文章中出现的次数,并输出该次数;删除某一子串,并将后面的字符前移。
程序算法立足于书本并适当改良,能够实现文本的一些特定操作。
关键词:文本编辑 C语言程序算法Abstract:The curriculum designed a simple text editor, which is mainly used for text editing of several operations, mainly by the C programming language. Based on the needs of the program text editing ,the program can input a text, count the number of words numbers and spaces in the file, statistics the number of a string of in the article, and output the number of times; to remove a substring, and the characters behind the forward. Program algorithm based on the book also have some improvement. Able to achieve some specific text operations.Key words:Text editing C programming language Program algorithm1引言目前社会上文字编辑系统发展飞快,文本编辑软件在人们的日常生活和学习、科研、生产等各个方面有着重要的应用。
简易文本编辑器数据结构课设
摘要当下C++语言是一门重要的课程学习,学会运用并结合其他的知识一起解题是一件值得我们重视的,数据结构是一门结合C++知识的重要课程,因此我们要学会将平时课本的知识运用到我们现实生活当中,这样才能让我们所学的知识更加深刻。
简易文本编辑器的问题就是一个例子,传统的纸质文档已经不能满足大家的需求,有容易丢失、查找不方便等缺点。
计算机信息管理为人们的生活、工作提供了方便,提高了效率。
“简易文本编辑器”就是为了帮助老师、同学或其他一些需要使用文本编辑的人员进行管理和分析的一种计算机应用程序。
关键词:简易文本编辑器,数据结构,顺序表。
目录一、需求分析11.1问题描述11.2基本任务1二、概要设计12.1主界面设计12.2数据结构设计1三、详细设计23.1清空内容模块23.2打开文件模块23.3输入模块23.4插入模块23.5删除模块23.6替换模块23.7显示模块23.8保存模块33.9系统层次图3四、测试结果34.1文本编辑器主界面34.2系统功能4五、调试分析7六、心得体会8七、参考文献9八、程序源代码10一、需求分析1.1问题描述传统的纸质文档已经不能满足大家的需求,有容易丢失、查找不方便等缺点。
计算机信息管理为人们的生活、工作提供了方便,提高了效率。
“简易文本编辑器”就是为了帮助老师、同学或其他一些需要使用文本编辑的人员进行管理和分析的一种计算机应用程序。
1.2基本任务通过用户调查分析和实际需求,系统需要实现如下基本任务:(1)输入数据信息建立文本;(2)打开文本读取已保存的信息;(3)插入新的信息到文本中;(4)删除不再需要的文本信息;(5)替换不需要的文本信息;(6)显示所有的文本信息;(7)保存所输入、插入、替换过的文本信息;(8)清空文本信息。
二、概要设计2.1主界面设计为了实现简易文本编辑器的各项功能,设计一个含有多个菜单项的主控菜单模块以操作系统的各项功能,进而方便用户使用系统。
2.2数据结构设计为实现数据的有序存储,该编辑器应该用顺序存储结构来存储输入的信息。
c设计文本编辑器课程设计
c 设计文本编辑器课程设计一、教学目标本课程的设计文本编辑器课程旨在让学生掌握文本编辑器的基本概念、原理和应用,培养学生具备文本编辑器的使用和开发能力。
具体的教学目标如下:1.知识目标:(1)了解文本编辑器的发展历程和基本原理。
(2)掌握文本编辑器的主要功能和特点。
(3)了解文本编辑器的应用领域和前景。
2.技能目标:(1)能够熟练使用常见的文本编辑器。
(2)能够根据实际需求,编写简单的文本编辑器程序。
(3)能够对文本编辑器进行基本的维护和优化。
3.情感态度价值观目标:(1)培养学生对文本编辑器的兴趣,提高学生主动学习的积极性。
(2)培养学生团队协作的精神,提高学生的沟通与协作能力。
(3)培养学生勇于创新、追求卓越的品质,提高学生的自主创新能力。
二、教学内容本课程的教学内容主要包括以下几个部分:1.文本编辑器概述:介绍文本编辑器的发展历程、基本原理和主要功能。
2.文本编辑器的使用:讲解如何熟练使用常见的文本编辑器,包括基本操作和高级功能。
3.文本编辑器程序设计:介绍文本编辑器的程序设计方法,包括界面设计、字符处理、文件操作等。
4.文本编辑器的维护与优化:讲解如何对文本编辑器进行维护和优化,以提高性能和稳定性。
5.文本编辑器的应用案例:介绍文本编辑器在实际应用中的案例,激发学生的学习兴趣和应用能力。
三、教学方法为了提高教学效果,本课程将采用以下教学方法:1.讲授法:通过讲解文本编辑器的基本概念、原理和应用,使学生掌握相关知识。
2.案例分析法:分析文本编辑器的实际应用案例,使学生更好地理解文本编辑器的功能和作用。
3.实验法:让学生动手编写文本编辑器程序,提高学生的实际操作能力和实践能力。
4.讨论法:学生进行小组讨论,培养学生的团队协作能力和沟通与表达能力。
四、教学资源为了支持本课程的教学,我们将准备以下教学资源:1.教材:选用一本与文本编辑器相关的教材,作为学生学习的主要参考资料。
2.参考书:提供一些与文本编辑器相关的参考书籍,供学生拓展阅读。
C++课程设计报告(简易文本编辑器)
C++课程设计报告(简易文本编辑器)面向对象程序设计课程设计报告(2011/2012学年第二学期)题目名称简单文本编辑器的设计系部专业计算机科学与技术班级学生完成时间 2012年 6 月指导老师在文本编辑器出现前,人们用打孔机把计算机文字打到穿孔卡片上。
文字存放于一个装着这样的薄卡片的盒子里,可以用读卡器来阅读它。
第一个文本编辑器是一种行编辑器,它运行在打字机型的终端上,这种编辑器并不具备在窗口和屏幕中显示的功能。
它包含了一些非常短的命令(为了减少打字量)。
其中一个命令能够把文件的指定部分通过打字机打印出来。
编辑光标是想象中的一个插入点,通过特殊命令,可以把它移动到特定内容字符串所在的行。
随后,内容字符串又被扩展成正则表达式。
如果想看到文件的变化,你需要把它打印出来。
相对于穿孔机来说,人们认为这种基于行的文本编辑器具有革命性的进步。
如果没有它,用户就需要把那些处理文本的命令打成专用的卡片,并在编辑文件时使用这些卡片。
当带有显示屏的计算机终端出现后,基于显示屏的文本编辑器开始流行起来。
最早的全屏编辑器中,有一种叫做O26,它是于1967年为CDC 6000系列机器的操作控制台而作的。
另外一个早期的全屏编辑器是vi。
vi诞生于20世纪70年代,至今,它仍是Unix和Linux的标准编辑器。
全屏编辑器对视频终端的销售起到了促进的作用。
文本编辑器在Windows的应用中是一个非常重要的项目,在过去十数年中,微软对windows文本编辑器有多个版本的升级改进,而基于其他的编程环境的文本编辑器也是多如牛毛,今天我们用MFC可视化编译环境做一个简易的文本编辑器。
引言 (2)1.课程设计目的和意义 (4)2.详细设计 (4)2.1需求描述 (4)2.1.1文件 (4)2.1.2编辑 (4)2.1.3应用 (5)2.1.4帮助 (5)2.1.5高级 (5)2.2功能描述 (5)2.2.1文本编辑区 (5)2.2.2文件 (7)2.2.3编辑 (15)2.2.4应用 (16)2.2.5帮助 (21)2.2.6高级 (22)2.2.7菜单栏 (25)2.2.7图标 (26)2.3程序运行说明 (27)3.课程设计总结 (30)3.1编程日志 (30)3.3测试报告 (31)4.心得体会 (31)5.参考文献 (31)1.课程设计目的和意义《面向对象程序设计》课程设计是实践性教学环节之一,是《面向对象程序设计》课程的辅助教学课程。
C语言文本编辑器设计
C语言文本编辑器设计
一、项目要求
设计一款文本编辑器,通过选择,实现如下6项功能:
选择操作:1,新建文件。
输入1,选择添加文本,输入0,返回菜单操作界面。
按任意键返回…
选择操作:2,打开指定路径下指定文件,同时输出文本内容。
询问是否添加文本?(0/1)。
输入1,添加,输入0,返回操作菜单界面。
按任意键返回操作菜单。
从操作菜单,再次选择2,打开添加文本后的file1.txt文件,查看效果如下:
选择操作:3,实现文件的复制、粘贴。
按任意键,返回操作菜单界面。
选择2,打开复制粘贴的file2.txt文件,验证如下:
选择操作:4,打开指定文件,查找指定字符,输出第一次查到字符位置。
选择操作:5,打开指定文件,输入查找字符,替换为指定字符。
二、相关知识
1. 文件的打开与关闭
2. 字符数组
打开file1.txt文件,验证替换后效果。
选择操作:6,打开指定文件,统计文件中字符、数字和其他字符个数,并输出。
C简单文本编辑器
[简单文本编辑器]一、项目内容及要求要求:1)设计和实现“文件”菜单(提供“新建”、“打开”、“保存”、“另存为”、“退出”功能)2)设计和实现“编辑”菜单(提供“撤销”、“恢复”、“剪切”、“复制”、“粘贴”功能)3)对窗体中的文本内容提供“格式”菜单。
界面如下图所示:文件操作:包括文件的新建、打开、保存、另存为及退出。
编辑功能:包括撤销、还原、全选、剪切、复制、粘贴。
字体设置:包含字体、字体颜色及大小的设置二、算法分析(描述清楚程序流程,可用自然语言说明,也可用流程图等说明。
)一.界面设计1.新建Windows窗体应用程序。
向其中添加RichTextBox控件、MenuStrip控件、open控件、save、 fontDialog、colorDialog。
2.添加菜单:a.文件(新建、打开、保存、另存为、退出)。
b.编辑(撤销、还原、剪切、复制、粘贴、全选)。
c.格式(字体、颜色)二.代码编写1.定义窗体全局变量并设置初始值fname = ""; //文件名issave = false; //文档是否保存过tchange = false; //文档是否修改过。
2.双击新建菜单,输入新建事件代码:a.如果当前文档没有保存,则保存当前文档;b.清空richTextBox1;c.设置issave、tchange、fname值。
3.输入打开事件代码:a.设置open控件Title、、Filter的初始值。
b.使用open()方法打开“打开文件”对话框。
c.将open控件的文件名存入fname。
d.使用richTextBox1.LoadFile方法打开文件。
e.设置issave、tchange的值。
4.输入保存事件代码:a.如果fname不为空,则使用richTextBox.SaveFile方法保存文件,设置issave值。
否则:设置save控件Title、Filter值。
b.使用save()方法打开“保存文件”对话框,输入要保存的文件名。
C#编写的文本编辑器课程设计
河南中医学院《C#程序设计》课程设计报告文本编辑器院系:信息技术学院专业:信息管理与信息系统专业班级: 2010级信管一班姓名:指导教师:完成日期: 2011年6月10日设计题目:文本编辑器1.题目描述设计一个文本编辑器,能够实现对文本的编辑,窗体应有:文件,编辑,格式,查看,帮助。
(模拟文本文档,添加部分word功能)提供以下功能:1.1文件操作能够实现:新建、打开、保存、另存为、页面属性、打印、打印预览、退出功能。
1.2编辑操作能够实现:撤销、剪切、复制、粘贴、删除、查找、转到、全选、时间/日期、替换功能。
1.3格式操作能够实现:自动换行、字体、颜色、背景颜色设置。
1.4查看操作能够实现:状态栏。
1.5 帮助操作能够实现:帮助主题、关于记事本。
另:(1)实现鼠标的右键常用功能,如复制、粘贴、剪切、撤销、全选、颜色。
(2)实现各功能的快捷键设置(3)实现文本框的外观设置2.应用程序功能说明新建:在未保存的情况下提示是否需要对文件进行保存打开:打开已有的文件保存:对文件进行保存,并显示保存的位置另存为:和保存的功能基本相似文件页面属性:显示文本文档的页面属性打印:实现对文本的打印功能打印预览:打印前对打印效果的预览退出:关闭打开的文本文档撤销:撤除上一步操作剪切:将选中的部分剪切掉复制:复制选中的部分粘贴:对剪切和复制的部分进行粘贴编辑删除:删除选中的部分查找:实现单方向查找全选:选中文本文档中的全部内容时间/日期:在文本后加上时间替换:对那些需要改变的内容实施替换和全部替换自动换行:在一行写满之后,自动跳转到下一行格式字体:调用系统中自带的字体,实现对字体样式和大小的改变颜色:调用系统中自带的颜色,实现对字体颜色的改变背景颜色:在给定的几种颜色中选一种作为背景颜色查看状态栏:显示当前输入文本的字数和年/月/日帮助主题:显示帮助部分帮助关于记事本:版权的说明客户反馈:对客户的满意程度实施调查3. 源程序3.1 Form1部分源代码using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.IO;//调用命名空间using System.Drawing.Printing;//调用打印命名空间namespace模拟文本文档Ì{public partial class Form1 : Form{string name;string dk;StringReader streamToPrint = null;Font printFont;//int FindPosition = 0;public int k = 0;public Form1(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e){撤销¨²ToolStripMenuItem.Enabled = false;//在程序运行开始时这些选择都是无效的剪切DToolStripMenuItem.Enabled = false;复制ToolStripMenuItem.Enabled = false;删除yToolStripMenuItem.Enabled = false;转到Ì?ToolStripMenuItem.Enabled = false;//状态栏ToolStripMenuItem.Enabled = false;查找替换ToolStripMenuItem.Enabled = false;this.richTextBox1.Anchor =(System.Windows.Forms.AnchorStyles)(System.Windows.Forms.AnchorStyles.Left |System.Windows.Forms.AnchorStyles.Bottom |System.Windows.Forms.AnchorStyles.Right |System.Windows.Forms.AnchorStyles.Top);//richTextBox1的放大与还原代码}private void字体¬?ToolStripMenuItem_Click(object sender, EventArgs e){if (fontDialog1.ShowDialog() == DialogResult.OK)//获取对话框的返回值是确定richTextBox1.SelectionFont = fontDialog1.Font;//获取系统的字体}private void新建ToolStripMenuItem_Click(object sender, EventArgs e){if (richTextBox1.Modified == true){DialogResult n = MessageBox.Show("文件" + Text + "”内容已修改\n是否要保存", "提示", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Exclamation);//带有黄色感叹号的MessageBoxswitch (n)//使switch用语句判断{case (DialogResult.Yes):保存ToolStripMenuItem_Click(sender, e);break;case (DialogResult.No):richTextBox1.Text = "";break;case (DialogResult.Cancel):richTextBox1.Modified = false;break;}}}private void打开ToolStripMenuItem_Click_1(object sender, EventArgs e){OpenFileDialog newdk = new OpenFileDialog();//实例化 newdknewdk.Title = "打开";//设置文件对话框的标题string dakai =Environment.GetFolderPath(Environment.SpecialFolder.Desktop);//从电脑中检索的对应文件赋值给字符串变量dakainewdk.InitialDirectory = dakai;//将dakai赋值给newdknewdk.Filter = "纯文本(*.txt)|*.txt|c#源文件(*.cs)|*.cs|10信管一班陈勇(*.txt)|*.10信管一班陈勇";//文件名筛选器newdk.ValidateNames = true;newdk.CheckFileExists = true;newdk.ShowHelp = true;//获取帮助按钮newdk.Multiselect = true;newdk.FilterIndex = 2;//表示32位的有效整数不可随意赋值if (openFileDialog1.ShowDialog() == DialogResult.OK)//在打开对话框确认的情况下{dk = openFileDialog1.FileName;//将获取的文件名字符串赋值给dkthis.richTextBox1.Text = newdk.FileName;richTextBox1.LoadFile(openFileDialog1.FileName, RichTextBoxStreamType.PlainText);}}private void保存ToolStripMenuItem_Click(object sender, EventArgs e){try//使用语句处理异常情况{StreamWriter bc = new StreamWriter(name, false,Encoding.GetEncoding("gb2312"));string baocun = richTextBox1.Text;bc.Write(baocun);bc.Close();}catch{saveFileDialog1.Filter = "纯文本(*.txt)|*.txt|10信管一班陈勇c#源文件(*.cs)|*.cs";saveFileDialog1.OverwritePrompt = true;if (richTextBox1.Text == ""){MessageBox.Show("请输入要保存的内容", "提示");}else{if (saveFileDialog1.ShowDialog() == DialogResult.OK){StreamWriter c = new StreamWriter(saveFileDialog1.FileName, false, Encoding.GetEncoding("gb2312"));//gb2312国标,中国自己的name = saveFileDialog1.FileName;string d = richTextBox1.Text;//将文本中的字符串赋值给局部变量c.Write(d);//将字符串重载c.Close();}}}}private void另存为aToolStripMenuItem_Click(object sender, EventArgs e)//类似保存{if (richTextBox1.Modified == true){DialogResult close = MessageBox.Show("是否保存已修改的内容, "提示", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning);switch (close){case DialogResult.Yes:this.保存ToolStripMenuItem_Click(sender, e);try//使用语句处理异常情况{StreamWriter sww = new StreamWriter(name, false, Encoding.GetEncoding("gb2312"));string data = richTextBox1.Text;sww.Write(data);sww.Close();}catch{saveFileDialog1.Filter = "文件t|*.txt";saveFileDialog1.OverwritePrompt = true;if (saveFileDialog1.ShowDialog() == DialogResult.OK){StreamWriter sww = newStreamWriter(saveFileDialog1.FileName, false, Encoding.GetEncoding("gb2312"));name = saveFileDialog1.FileName;string data = richTextBox1.Text;sww.Write(data);sww.Close();}}break;case DialogResult.No:richTextBox1.Clear();break;case DialogResult.Cancel:break;}}}private void撤销ToolStripMenuItem_Click(object sender, EventArgs e){richTextBox1.Undo();//撤销}private void richTextBox1_TextChanged(object sender, EventArgs e){if (richTextBox1 == null){剪切DToolStripMenuItem.Enabled = false;}else{剪切DToolStripMenuItem.Enabled = true;}if (richTextBox1.Text == null){撤销ToolStripMenuItem.Enabled = false;//如果richTextBox1为空则无法执行}else{撤销ToolStripMenuItem.Enabled = true;}if (richTextBox1.Text == null)//复制{复制ToolStripMenuItem.Enabled = false;}else{复制ToolStripMenuItem.Enabled = true;}if (richTextBox1.Text == null)//粘贴{粘贴ToolStripMenuItem.Enabled = false;}else{粘贴ToolStripMenuItem.Enabled = true;}if (richTextBox1.Text == null){删除ToolStripMenuItem.Enabled = false;}else{删除ToolStripMenuItem.Enabled = true;}if (richTextBox1.Text == null){查找替换ToolStripMenuItem.Enabled = false;}else{查找替换ToolStripMenuItem.Enabled = true;}this.toolStripStatusLabel5.Text = "当前文档字数合计为" +this.richTextBox1.Text.Length;this.toolStripStatusLabel6.Text =datetime.now.Tosting();}private void剪?切DToolStripMenuItem_Click(object sender, EventArgs e) {richTextBox1.Cut();//剪切}private void复制ToolStripMenuItem_Click(object sender, EventArgs e){richTextBox1.Copy();//复制}private void粘贴ToolStripMenuItem_Click(object sender, EventArgs e){richTextBox1.Paste();//粘贴}private void删除ToolStripMenuItem_Click(object sender, EventArgs e){richTextBox1.SelectedText = "";//删除}private void撤销ToolStripMenuItem1_Click(object sender, EventArgs e) {richTextBox1.Undo();}private void全选ToolStripMenuItem1_Click(object sender, EventArgs e) {richTextBox1.SelectAll();}private void剪切ToolStripMenuItem1_Click(object sender, EventArgs e) {richTextBox1.Cut();}private void复制ToolStripMenuItem1_Click_1(object sender, EventArgs e) {richTextBox1.Copy();}private void Form1_FormClosing(object sender, FormClosingEventArgs e)}private void saveFileDialog1_FileOk(object sender, CancelEventArgs e){}private void自动换行ToolStripMenuItem_Click(object sender, EventArgs e){richTextBox1.WordWrap = true;}private void打开ToolStripMenuItem_Click(object sender, EventArgs e){this.openFileDialog1.Title = "打开";this.openFileDialog1.Filter = "文本文件t(*.txt;*.rtf)|*.txt;*.rtf|所有文件t(*.*)|*.*";this.openFileDialog1.FilterIndex = 1;this.openFileDialog1.InitialDirectory = "桌面";this.openFileDialog1.ShowReadOnly = true;this.openFileDialog1.ReadOnlyChecked = false;this.openFileDialog1.FileName = "";if (this.openFileDialog1.ShowDialog() == DialogResult.OK){this.Text = this.openFileDialog1.FileName;StreamReader str = new StreamReader(this.openFileDialog1.FileName, Encoding.Default);this.richTextBox1.Text = str.ReadToEnd();str.Close();}}private void页面属性ToolStripMenuItem_Click(object sender, EventArgs e){printDialog1.Document = printDocument1;printDialog1.ShowDialog();}private void粘贴ToolStripMenuItem1_Click(object sender, EventArgs e){richTextBox1.Paste();}private void复制ToolStripMenuItem1_Click(object sender, EventArgs e){richTextBox1.Copy();}private void粘贴ToolStripMenuItem1_Click_1(object sender, EventArgs e){richTextBox1.Paste();}private void页面属性ToolStripMenuItem_Click_1(object sender, EventArgs e)pageSetupDialog1.Document = printDocument1;pageSetupDialog1.ShowDialog();}private void颜色ToolStripMenuItem_Click(object sender, EventArgs e){if (colorDialog1.ShowDialog() == DialogResult.OK)//对Click事件中的颜色richTextBox1.SelectionColor = colorDialog1.Color;}private void颜色ToolStripMenuItem_Click(object sender, EventArgs e){if (colorDialog1.ShowDialog() == DialogResult.OK)//右键功能中的颜色设置对选中的进行修改richTextBox1.SelectionColor = colorDialog1.Color;//获取选中的文字}private void printDocument1_PrintPage(object sender, PrintPageEventArgs e)//打印{//用浮点类型因为可能出现小数float linesPerPage = 0;//记录每页的最大行数float yPosition = 0;//垂直方向的位置int count = 0;//每页打印的行数float leftMargin = e.MarginBounds.Left;//左边距float topMargin = e.MarginBounds.Top;//顶边距string line = null;//从中读取段字符串存储到line中linesPerPage = e.MarginBounds.Height / printFont.GetHeight(e.Graphics);//行数总高度每行高度while(count < linesPerPage && ((line = streamToPrint.ReadLine())) != null)//如果当前打印页面行数不足页的最大行数并且读取的行数不为空那么继续打印{yPosition = topMargin + (count * printFont.GetHeight(e.Graphics));//计算高度e.Graphics.DrawString(line, printFont, Brushes.Black, leftMargin, yPosition, new StringFormat());count++;//已打印行数再加}if (line != null)//判断是否需要打印下一页e.HasMorePages = true;elsee.HasMorePages = false;}private void printDocument1_BeginPrint(object sender, PrintEventArgs e){printFont = richTextBox1.Font;//打印使用的字体将richTextBox中的赋值给printFontstreamToPrint = new StringReader(richTextBox1.Text);//创建读取字符串的对象}private void printDocument1_EndPrint(object sender, PrintEventArgs e){if (streamToPrint != null)streamToPrint.Close();}private void退出XToolStripMenuItem_Click(object sender, EventArgs e){if (this.richTextBox1.Modified == true){DialogResult tc =MessageBox.Show("文件t“¡”" + this.Text + "的内容已经修改是否要保存", "提示", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Exclamation);if (tc == DialogResult.Yes){另存为aToolStripMenuItem_Click(sender, e);this.richTextBox1.Clear();this.Text = "";}if (tc == DialogResult.No){Application.Exit();}else{this.Close();}}}private void toolStripMenuItem1_Click(object sender, EventArgs e)//打印预览 {printPreviewDialog1.Document = printDocument1;printPreviewDialog1.ShowDialog();}private void打印ToolStripMenuItem_Click_2(object sender, EventArgs e){printDialog1.Document = printDocument1;if (printDialog1.ShowDialog(this) == DialogResult.OK)printDocument1.Print();}private void fileSystemWatcher1_Changed(object sender, FileSystemEventArgs e) {}private void页面属性ToolStripMenuItem_Click_2(object sender, EventArgs e) {pageSetupDialog1.Document = printDocument1;//添加控件pageSetupDialog1.ShowDialog();}private void颜?色ToolStripMenuItem_Click_1(object sender, EventArgs e){if (colorDialog1.ShowDialog() == DialogResult.OK)richTextBox1.SelectionColor = colorDialog1.Color;}private void颜色ToolStripMenuItem_Click_1(object sender, EventArgs e){if (colorDialog1.ShowDialog() == DialogResult.OK)richTextBox1.SelectionColor = colorDialog1.Color;}private void关于记事本ToolStripMenuItem_Click_1(object sender, EventArgs e) {formabout about = new formabout();about.ShowDialog();}private void全选ToolStripMenuItem_Click_1(object sender, EventArgs e){richTextBox1.SelectAll();}private void日期时间ToolStripMenuItem_Click_1(object sender, EventArgs e) {richTextBox1.Text = richTextBox1.Text + DateTime.Now.ToString();}private void查找ToolStripMenuItem_Click(object sender, EventArgs e)//查找替换{//FindPosition = 0;//formFind FindReplaceDialog = new formFind();//FindReplaceDialog.Show();formFind f = new formFind();f.rtb = this.richTextBox1; //传值(从主窗口传到FindForm)f.Owner = this; //悬浮于当前窗体f.Show();}private void状态栏ToolStripMenuItem_Click(object sender, EventArgs e){if (k == -1){statusStrip1.Show();状态栏ToolStripMenuItem.Checked = true;k = 0;}else{statusStrip1.Hide();状态栏ToolStripMenuItem.Checked = false;k = -1;}}private void toolStripStatusLabel5_Click(object sender, EventArgs e){}private void白色ToolStripMenuItem_Click(object sender, EventArgs e) {richTextBox1.BackColor = Color.White;白色ToolStripMenuItem.Enabled = true;灰色ToolStripMenuItem.Enabled = false;咖啡色ToolStripMenuItem.Enabled = false;}private void灰色ToolStripMenuItem_Click(object sender, EventArgs e) {richTextBox1.BackColor = Color.Gray;白色ToolStripMenuItem.Enabled = false;灰色ToolStripMenuItem.Enabled = true;咖啡色ToolStripMenuItem.Enabled = false;}private void咖啡色ToolStripMenuItem_Click(object sender, EventArgs e) {richTextBox1.BackColor = Color.BurlyWood;白色ToolStripMenuItem.Enabled = false;灰色ToolStripMenuItem.Enabled = false;咖啡色ToolStripMenuItem.Enabled = true;}private void替换TToolStripMenuItem_Click(object sender, EventArgs e) {tihuan newth = new tihuan();// newth.Show();newth.rtb = this.richTextBox1; //传值(从主窗口传到FindForm)newth.Owner = this; //悬浮于当前窗体newth.Show();// tihuan newth = new tihuan();// newth.Show();}3.2 formabout部分源代码(关于)using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace模拟文本文档{public partial class formabout : Form{public formabout(){InitializeComponent();}private void formabout_Load(object sender, EventArgs e){MaximizeBox = false;//没有最大化MinimizeBox = false;//没有最小化label1.Text = "Microsoft(R)文本文档版本:模拟Windows记事本,添加部分offce 功能版权所有严禁盗版本产品最终解释权归冰点所有;}private void pictureBox1_Click(object sender, EventArgs e){}private void label1_Click(object sender, EventArgs e){}private void button1_Click(object sender, EventArgs e){Close();}private void pictureBox1_Click_1(object sender, EventArgs e){}3.3 formFind部分源代码(查找)using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace模拟文本文档{public partial class formFind : Form{ public formFind(){InitializeComponent();}public RichTextBox rtb;int start = 0;//查找的起始位置?string nr = "";//查找的内容RichTextBoxFinds f=0;private void button1_Click_1(object sender, EventArgs e){this.Close();}private void button3_Click(object sender, EventArgs e){nr = this.textBox1.Text; //查找start = rtb.Find(nr, start, f);if (start == -1){MessageBox.Show("对不起查找不到与+ nr +相符的内容, (记事本)查找示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);start = 0;}else{start = start + nr.Length;//找到后从找到位置之后开始下一次rtb.Focus(); //给予焦点}}private void formFind_Load(object sender, EventArgs e){}3.4 tihuan部分源代码using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace模拟文本文档{public partial class tihuan : Form{public tihuan(){InitializeComponent();}public RichTextBox rtb;int start = 0;//开始位置string nr = "";//定义内容字符串string th = "";//定义转换字符串RichTextBoxFinds f=0;//int i = 0;private void tihuan_Load(object sender, EventArgs e){}private void button1_Click(object sender, EventArgs e)//查找{nr = this.textBox1.Text;//将textBox1中的内容赋值给start = rtb.Find(nr, start, f);//开始的位置是找到的内容if (start == -1)//找不到啊{MessageBox.Show("对不起查找不到与+ nr +内容相匹配的信息, 记事本查找提示信息", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);start = 0;//返回开始位置}else{start = start + nr.Length;//找到后从找到位置之后开始下一次rtb.Focus(); //给予焦点,此处不解}}private void button2_Click(object sender, EventArgs e){nr = this.textBox1.Text;//找的内容th = this.textBox2.Text;//替换的内容// rtb.SelectedText = th;//start = rtb.Find(nr, start, f);if (start == -1){MessageBox.Show("对不起查找不到与+ nr + 内容相匹配的信息, 记事本查找提示信息", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);}else{rtb.SelectedText =th;// start = start + th.Length;//找到后从找到位置之后开始下一次// rtb.Focus(); //给予焦点}}private void button3_Click(object sender, EventArgs e){nr = this.textBox1.Text;//找的内容th = this.textBox2.Text;start = rtb.Find(nr, start, f);while (start != -1){rtb.SelectedText = th;start = start + nr.Length;start = rtb.Find(nr, start, f);i++;}MessageBox.Show("全部替换完毕,全部一共替换了 + i.ToString() + "次, "记事本替换完毕信息);start = 0;}private void button4_Click(object sender, EventArgs e){this.Close();}}}4. 调试结果4.1在实现查找功能时无法在文本文档中找到相应的内容一个警告,原因是我在别人的电脑上调试,出现这种情况解决方案4.2解决方案是在主窗体中将定义的初始位置注释掉,结果发现还不行,于是从新分析查找过程,根据过程再修改代码,调试成功。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录第一章课程设计目的和要求 (1)1.1课程设计的目 (1)1.2基本要求 (1)第二章课程设计任务内容 (2)2.1设计背景 (2)2.2简易文本编辑器设计内容 (2)第三章详细设计 (3)3.1总体结构图 (3)3.2函数分析 (3)3.3主函数程序流程图 (4)3.4子函数流程图 (5)第四章程序编码与调试 (7)4.1程序编码 (7)4.2编码调试 (8)4.3运行结果 (9)第五章课程设计心得与体会 (11)附录1 参考文献 (12)附录2 源程序代码 (13)第一章课程设计目的和要求C语言课程设计是一门实践性非常强的课程,不但要注重c语言程序设计基本知识的学习,更要注重程序设计技能的培养,使学生能够允许渐进地把握c语言程序设计的技能。
通过课程设计,培养学生阅读和编写程序的能力,培养计算机程序设计的能力和素质,以及思维方法。
初步积累编程经验,打下良好的计算机应用基础。
1.1课程设计的目1.通过本项课程设计,可以培养独立思考、综合运用所学有关相应知识的能力,能更好的巩固《c语言程序设计》课程学习的内容2.掌握工程软件设计的基本方法,强化上级动手编程能力,闯过理论与实践相结合的难关!更加了解了c语言的好处和其可用性。
3.掌握基本的程序设计过程和技巧,掌握基本的分析问题合理性,通过计算机求解问题的能力,具备初步的高级语言程设计能力。
为后续个门计算机课程的学习和毕业设计打下结实基础。
4.通过c语言课程设计,使学生了解高级程序设计语言的结构。
1.2 基本要求1.基本要求:①要求用VC中的MFC控件打开和保存文件。
②要求在设计的程序中至少能完成六种编辑功能。
③完成的程序界面要美观,能够完成六种编辑的全过程。
2.创新要求:①在记事本中增加工具栏,工具栏中应有常使用的工具按钮;②在记事本中增加状态栏;第二章课程设计任务内容2.1 设计背景随着计算机在社会生活深红越来越深入而广泛的应用,在文件中有些文件需要改动,比如插入,替换,删除等一系列操作,为了更好的修改文件,不得不进行一系列的操作来修改,因此,文件的修改操作是十分重要的。
2.2简易文本编辑器设计内容1.具有显示总行数;2.具有:查找,替换(等长,不等长),插入(插串,文本块的插入),块移动(行块,列块移动),删除;3.可正确存盘,取盘。
第三章详细设计3.1总体结构图该程序是用c语言编译成的,主要能够实现查找功能、复制功能、粘贴功能、替3.2函数分析ID_FILE_NEW:新建ID_FILE_OPEN:打开ID_FILE_PRINT:打印DECLARE_MESSAGE:删除ID_EDIT_FIND:查找ID_EDIT_REPLACE:替换ID_EDIT_CUT:剪切ID_EDIT_COPY:粘贴ID_EDIT_HELP:帮助ID_EDIT_ALL :全选3.3主函数程序流程图图3-2 主函数流程图为了添加工具按钮,要使用ActiveX控件中的Microsoft Windows Common Control 6.0控件。
请按上述方法添加。
选择其中一个叫ImageList的控件来装载图像。
在程序界面上添加它,然后右键单击此控件,左键单击“属性”,弹出“属性页”对话框的“图像”,再单击“插入图片”就可以一次性装载图片了(如不满意,以后还可以添加)。
图片可在C:\Microsoft VisualStudio\Common\Graphics\Bitmaps\TlBr_W98下选择(假设VB安装在C盘下)。
在插入图片时给每一张图片注明关键字,以便在引用图片时不至于混乱。
如插入“新建”的图片,我们在“关键字”栏注明“New”。
图片有了,接下来在程序界面添加工具栏(ToolBar)。
添加后工具栏就出现在菜单下面,右键单击它,选择“属性”,在弹出的“属性页”对话框中的“通用”项作些设置,主要如下两项:①“图像列表”:选择ImageList1②“样式”:根据喜爱选择1-trbStandard或者2-trbFlat继续点击“属性页”的“按钮”选项,插入若干按钮。
按钮有多种样式,请根据需要设置。
这里请一定注意:每一个与用户操作有关的按钮都必须注明关键字、装载图片,如“新建”按钮,在“关键字”项注明“新建”,在“图像”项键入“New”(即ImageList1中的图片关键字),需要的话还可以在“工具提示文本”项填入适当的提示语。
3.4子函数流程图图3-3 ID_EDIT_FIND查找流程图这是实现查找功能的函数。
首先我们要输入想要查找的内容。
然后点击确定。
程序根据输入的内容,检索文本。
如果检索到输入的内容就显示出来,如果没有就要求重新输入。
图3-4 ID_EDIT_REPLACE替换流程图这是实现替换功能的函数。
首先要选中要替换的内容,然后输入想要替换的内容。
点击替换按钮,电脑会检索文本。
然后用项替换的内容,替换选中的内容。
图3-5 ID_EDIT_CUT剪切流程图这是实现剪切功能的函数。
首先要选中剪切的内容。
然后剪切,程序会把剪切的内容放到建立的缓存中。
第四章程序编码与调试4.1 程序编码1.设计方法和基本原理:(1)问题的解决方案:根据问题描述,可以将问题解决分为三步:①绘制界面:新建一个标准EXE工程,点击Icon属性给它找个合适的Icon图标。
②编辑菜单。
按Ctrl+E调出菜单编辑器,设置菜单编辑器的菜单项。
③编写代码。
④添加工具按钮⑤编写工具按钮代码(2)主要技术问题的描述:①为了将要编辑的文档显示出来,要添加一个控件。
使用单击菜单“工程”-“部件”,在弹出的“部件”对话框里找到Microsoft RichText Box 6.0并选中它,“确定”按钮。
这时左边的工具栏上出现了该控件的图标。
在窗体上绘制RichText Box,其大小和位置可不用理睬,我们将在代码中处理,为了在打开和编辑文件时有垂直滚动条,可以把它的ScrollBar属性设为2-rtfVertical。
②将ActiveX控件中的公共对话框Microsoft Common Dialog 6.0控件添加到控件箱中,以便提供一组标准的操作对话框,进行诸如打开和保存文件,设置打印选项,以及选择颜色和字体等操作。
③参考教材第五章的内容,编写程序代码。
④为了添加工具按钮,要使用ActiveX控件中的Microsoft Windows Common Control6.0控件。
请按上述方法添加。
选择其中一个叫ImageList的控件来装载图像。
在程序界面上添加它,然后右键单击此控件,左键单击“属性”,弹出“属性页”对话框的“图像”,再单击“插入图片”就可以一次性装载图片了(如不满意,以后还可以添加)。
图片可在C:\Microsoft Visual Studio\Common\Graphics\Bitmaps\TlBr_W98下选择(假设VB安装在C盘下)。
在插入图片时给每一张图片注明关键字,以便在引用图片时不至于混乱。
如插入“新建”的图片,我们在“关键字”栏注明“New”。
图片有了,接下来在程序界面添加工具栏(ToolBar)。
添加后工具栏就出现在菜单下面,右键单击它,选择“属性”,在弹出的“属性页”对话框中的“通用”项作些设置,主要如下两项:①“图像列表”:选择ImageList1②“样式”:根据喜爱选择1-trbStandard或者2-trbFlat继续点击“属性页”的“按钮”选项,插入若干按钮。
按钮有多种样式,请根据需要设置。
这里请一定注意:每一个与用户操作有关的按钮都必须注明关键字、装载图片,如“新建”按钮,在“关键字”项注明“新建”,在“图像”项键入“New”(即ImageList1中的图片关键字),需要的话还可以在“工具提示文本”项填入适当的提示语。
⑶编写工具栏的按钮代码:工具栏按钮的代码编辑很简单,可以按照下面的格式去编写:Private Sub ToolBar1_ButtonClick(ByVal Button As MSComctlLib.Button)On Error Resume Next '出错处理Select Case Button.Key '按关键字选择Case "新建"mnuNew_Click '等于菜单项“新建”被单击Case "打开" '等于菜单项“打开”被单击mnuOpen_Click'......(继续编写其它按钮的代码)End Select4.2编码调试根据数据结构、函数功能和主要的流程图,进行源代码操作。
在编码时,注意代码的书写规范,包括命名惯例、注释、分隔和缩进等,这样使程序层次清晰,增强可读性和可维护性。
编码完成后,检查错误,编译直到正常运行,达到预期效果。
4.3运行结果运行结果及部分运行界面截图如下:图4-1 初始状态图4-2 替换操作图4-3 查找操作第五章课程设计心得与体会步入大学,我们接触到了更多的计算机专业知识。
在大一第二学期,学习了c++程序设计,大二的时候又学习了数据结构课程。
而这学期的课程设计,对我来说是一个新的挑战。
从开始到现在,课程设计的每一个环节,我自己都精心准备,让我对编程有了更深刻的认识,也是我知道了自己的不足之处。
在老师刚布置下来任务之后,我便开始在网上和图书管理搜集资料,虽然关于这方面的资料很多,但是好多都和我的不相匹配。
于是我每一本书都仔细阅读,筛选出了对我的程序设计有用的信息。
然后,看懂了是一方面,自己动手做,又是另一个挑战。
我发现如果不是透彻的弄懂了,在实际操作的时候,根本实现不了结果。
于是,我又把资料仔细的阅读,并询问老师和同学们,再加上自己的摸索,最终提早完成了任务。
我设计的是简易文本编辑器,要求有查找,插入,替换,块移动,删除功能,在这次课程设计作业的过程中,虽然课程设计有明确的目的及要求,但由于在设计方面我们没有经验,理论基础知识掌握得不牢固,在设计中难免会出现这样那样的问题。
在编写过程中也有许多小问题,比如没有定义,缺少符号等等,但经过仔细的修改以及寻求别人的帮助把问题也改正了,大多数是因为自己的粗心而引起的。
在设计过程中,要独立的完成自己的设计思路。
在学习理论知识的同时也要参加实践活动,把课本上的知识运动到实践当中去,也是我们学习专业理论知识的最终目的。
本次的课程设计,培养了我C++语言,C语言及其他课程的理论知识和理论联系实际,应用生产实际知识解决实际问题的能力;在设计的过程中还培养独立自主的能力。
在今后的学习过程中我们会更加努力。
附录1 参考文献1.谭浩强:C++程序设计,清华大学出版社,2004年6月第一版2.严蔚敏:数据结构(C语言版),清华大学出版社,1997年4月第一版3.王大刚:《c语言编程宝典》4.鲁沐浴:《c语言最新编程技巧200例》,电子工业出版社,1997年1月5.梁翎,李爱齐:《c语言程序设计使用技巧与程序实例》,上海科普出版社,1996年5月6.陈国章:《Turbo c程序技巧与应用实例》,天津科学技术出版社,1995年5月7.王士元:《c高级使用程序设计》,清华大学出版社,1996年6月8.Herbert Schildt:《C:The Complete Reference》9.黄明,梁旭,万红丽:《c语言课程设计》,电子工业出版社,2006年10.郭翠英:《c语言程序设计案例精编》,中国水利水电出版社,2005年附录2 源程序代码11A081__INCLUDED_)// 简单文本.cpp : Defines the class behaviors for the application.//#include "stdafx.h"#include "简单文本.h"#include "MainFrm.h"#include "简单文本Doc.h"#include "简单文本View.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif/////////////////////////////////////////////////////////////////////////// //// CMyAppBEGIN_MESSAGE_MAP(CMyApp, CWinApp)//{{AFX_MSG_MAP(CMyApp)ON_COMMAND(ID_APP_ABOUT, OnAppAbout)// NOTE - the ClassWizard will add and remove mapping macros here.// DO NOT EDIT what you see in these blocks of generated code!//}}AFX_MSG_MAP// Standard file based document commandsON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen)// Standard print setup commandON_COMMAND(ID_FILE_PRINT_SETUP, CWinApp::OnFilePrintSetup)END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////// //// CMyApp constructionCMyApp::CMyApp(){// TODO: add construction code here,// Place all significant initialization in InitInstance}/////////////////////////////////////////////////////////////////////////// //// The one and only CMyApp objectCMyApp theApp;/////////////////////////////////////////////////////////////////////////// //// CMyApp initializationBOOL CMyApp::InitInstance(){AfxEnableControlContainer();// Standard initialization// If you are not using these features and wish to reduce the size// of your final executable, you should remove from the following// the specific initialization routines you do not need.#ifdef _AFXDLLEnable3dControls(); // Call this when using MFC in a shared DLL #elseEnable3dControlsStatic(); // Call this when linking to MFC statically #endif// Change the registry key under which our settings are stored.// TODO: You should modify this string to be something appropriate// such as the name of your company or organization.SetRegistryKey(_T("Local AppWizard-Generated Applications"));LoadStdProfileSettings(); // Load standard INI file options (including MRU)// Register the application's document templates. Document templates// serve as the connection between documents, frame windows and views.CSingleDocTemplate* pDocTemplate;pDocTemplate = new CSingleDocTemplate(IDR_MAINFRAME,RUNTIME_CLASS(CMyDoc),RUNTIME_CLASS(CMainFrame), // main SDI frame windowRUNTIME_CLASS(CMyView));AddDocTemplate(pDocTemplate);// Parse command line for standard shell commands, DDE, file openCCommandLineInfo cmdInfo;ParseCommandLine(cmdInfo);// Dispatch commands specified on the command lineif (!ProcessShellCommand(cmdInfo))return FALSE;// The one and only window has been initialized, so show and update it.m_pMainWnd->ShowWindow(SW_SHOW);m_pMainWnd->UpdateWindow();return TRUE;}/////////////////////////////////////////////////////////////////////////// //// CAboutDlg dialog used for App Aboutclass CAboutDlg : public CDialog{public:CAboutDlg();// Dialog Data//{{AFX_DATA(CAboutDlg)enum { IDD = IDD_ABOUTBOX };//}}AFX_DATA// ClassWizard generated virtual function overrides//{{AFX_VIRTUAL(CAboutDlg)protected:virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL// Implementationprotected://{{AFX_MSG(CAboutDlg)// No message handlers//}}AFX_MSGDECLARE_MESSAGE_MAP()};CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD){//{{AFX_DATA_INIT(CAboutDlg)//}}AFX_DATA_INIT}void CAboutDlg::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(CAboutDlg)//}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)//{{AFX_MSG_MAP(CAboutDlg)// No message handlers//}}AFX_MSG_MAPEND_MESSAGE_MAP()// App command to run the dialogvoid CMyApp::OnAppAbout(){CAboutDlg aboutDlg;aboutDlg.DoModal();}/////////////////////////////////////////////////////////////////////////// //// CMyApp message handlers// MainFrm.h : interface of the CMainFrame class///////////////////////////////////////////////////////////////////////////// //#if !defined(AFX_MAINFRM_H__2B4A6574_EC9D_4C5B_802E_9FFB04EF8786__INCLUDED_ )#define AFX_MAINFRM_H__2B4A6574_EC9D_4C5B_802E_9FFB04EF8786__INCLUDED_#if _MSC_VER > 1000#pragma once#endif // _MSC_VER > 1000class CMainFrame : public CFrameWnd{protected: // create from serialization onlyCMainFrame();DECLARE_DYNCREATE(CMainFrame)// Attributespublic:// Operationspublic:// Overrides// ClassWizard generated virtual function overrides//{{AFX_VIRTUAL(CMainFrame)virtual BOOL PreCreateWindow(CREATESTRUCT& cs);//}}AFX_VIRTUAL// Implementationpublic:virtual ~CMainFrame();#ifdef _DEBUGvirtual void AssertValid() const;virtual void Dump(CDumpContext& dc) const;#endifprotected: // control bar embedded membersCStatusBar m_wndStatusBar;CToolBar m_wndToolBar;// Generated message map functionsprotected://{{AFX_MSG(CMainFrame)afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);// NOTE - the ClassWizard will add and remove member functions here.// DO NOT EDIT what you see in these blocks of generated code!//}}AFX_MSGDECLARE_MESSAGE_MAP()};/////////////////////////////////////////////////////////////////////////// ////{{AFX_INSERT_LOCATION}}// Microsoft Visual C++ will insert additional declarations immediately beforethe previous line.#endif// !defined(AFX_MAINFRM_H__2B4A6574_EC9D_4C5B_802E_9FFB04EF8786__INCLUDED_)// 简单文本.h : main header file for the 简单文本 application//#if !defined(AFX__H__1DD5B072_4F80_4F7C_9F05_2FFBCD7DE7F3__INCLUDED_)#define AFX__H__1DD5B072_4F80_4F7C_9F05_2FFBCD7DE7F3__INCLUDED_#if _MSC_VER > 1000#pragma once#endif // _MSC_VER > 1000#ifndef __AFXWIN_H__#error include 'stdafx.h' before including this file for PCH #endif#include "resource.h" // main symbols/////////////////////////////////////////////////////////////////////////// //// CMyApp:// See 简单文本.cpp for the implementation of this class//class CMyApp : public CWinApp{public:CMyApp();// Overrides// ClassWizard generated virtual function overrides//{{AFX_VIRTUAL(CMyApp)public:virtual BOOL InitInstance();//}}AFX_VIRTUAL// Implementation//{{AFX_MSG(CMyApp)afx_msg void OnAppAbout();// NOTE - the ClassWizard will add and remove member functions here.// DO NOT EDIT what you see in these blocks of generated code !//}}AFX_MSGDECLARE_MESSAGE_MAP()};/////////////////////////////////////////////////////////////////////////// ////{{AFX_INSERT_LOCATION}}// Microsoft Visual C++ will insert additional declarations immediately before the previous line.#endif // !defined(AFX__H__1DD5B072_4F80_4F7C_9F05_2FFBCD7DE7F3__INCLUDED_)// 简单文本Doc.h : interface of the CMyDoc class///////////////////////////////////////////////////////////////////////////// //#if !defined(AFX_DOC_H__55667EB4_AB9C_44C9_B790_E5E249118EB1__INCLUDED_) #define AFX_DOC_H__55667EB4_AB9C_44C9_B790_E5E249118EB1__INCLUDED_#if _MSC_VER > 1000#pragma once#endif // _MSC_VER > 1000class CMyDoc : public CDocument{protected: // create from serialization onlyCMyDoc();DECLARE_DYNCREATE(CMyDoc)// Attributespublic:// Operationspublic:// Overrides// ClassWizard generated virtual function overrides//{{AFX_VIRTUAL(CMyDoc)public:virtual BOOL OnNewDocument();virtual void Serialize(CArchive& ar);//}}AFX_VIRTUAL// Implementationpublic:virtual ~CMyDoc();#ifdef _DEBUGvirtual void AssertValid() const;virtual void Dump(CDumpContext& dc) const;#endifprotected:// Generated message map functionsprotected://{{AFX_MSG(CMyDoc)// NOTE - the ClassWizard will add and remove member functions here.// DO NOT EDIT what you see in these blocks of generated code !//}}AFX_MSGDECLARE_MESSAGE_MAP()};/////////////////////////////////////////////////////////////////////////// ////{{AFX_INSERT_LOCATION}}// Microsoft Visual C++ will insert additional declarations immediately before the previous line.#endif// !defined(AFX_DOC_H__55667EB4_AB9C_44C9_B790_E5E249118EB1__INCLUDED_)// 简单文本View.h : interface of the CMyView class///////////////////////////////////////////////////////////////////////////// //#if !defined(AFX_VIEW_H__1E4AC431_E4C9_4EE2_86C3_195FF811A081__INCLUDED_) #define AFX_VIEW_H__1E4AC431_E4C9_4EE2_86C3_195FF811A081__INCLUDED_#if _MSC_VER > 1000#pragma once#endif // _MSC_VER > 1000class CMyView : public CView{protected: // create from serialization onlyCMyView();DECLARE_DYNCREATE(CMyView)// Attributespublic:CMyDoc* GetDocument();// Operationspublic:// Overrides// ClassWizard generated virtual function overrides//{{AFX_VIRTUAL(CMyView)public:virtual void OnDraw(CDC* pDC); // overridden to draw this viewvirtual BOOL PreCreateWindow(CREATESTRUCT& cs);protected:virtual BOOL OnPreparePrinting(CPrintInfo* pInfo);virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo);virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo);//}}AFX_VIRTUAL// Implementationpublic:virtual ~CMyView();#ifdef _DEBUGvirtual void AssertValid() const;virtual void Dump(CDumpContext& dc) const;#endifprotected:// Generated message map functionsprotected://{{AFX_MSG(CMyView)// NOTE - the ClassWizard will add and remove member functions here.// DO NOT EDIT what you see in these blocks of generated code !//}}AFX_MSGDECLARE_MESSAGE_MAP()};#ifndef _DEBUG // debug version in 简单文本View.cppinline CMyDoc* CMyView::GetDocument(){ return (CMyDoc*)m_pDocument; }#endif/////////////////////////////////////////////////////////////////////////// ////{{AFX_INSERT_LOCATION}}// Microsoft Visual C++ will insert additional declarations immediately before the previous line.#endif // !defined(AFX_VIEW_H__1E4AC431_E4C9_4EE2_86C3_195FF8。