C++课程设计报告(简易文本编辑器)

合集下载

简单的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编写文本编辑器实验报告

用C#编写“文本编辑器”实验报告实验3 项目名称:文本编辑器1、实验目的和要求通过本实验,使得学生理解操作系统目录与文件的概念,掌握文件流的读写操作。

要求编写一个满足以下条件的文本编辑器程序。

(1)程序界面与操作系统中的记事本界面类似。

(2)程序可以打开、保存和编辑txt文本文件。

(3)程序可以查找和替换文本内容中的指定字符串2、程序代码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;namespace 记事本{public partial class frmNotepad : Form{bool b = false;//布尔变量b用于判断文件是新建的还是从磁盘打开。

true表示文件从磁盘打开的,false表示文件是新建的,默认值为falsebool s = true;//布尔变量s用于判断文件是否被保存。

false表示未被保存,默认值为truepublic frmNotepad(){InitializeComponent();}/*多格式文本框TextChange的事件代码*/private void rtxtNotepad_TextChanged(object sender, EventArgs e){//文本被修改后,设置s为false,表示文件未被保存s = false;}/*【新建】菜单代码*/private void tsmiNew_Click(object sender, EventArgs e){//判断当前文件是否从磁盘打开,或者新建时文档不为空,并且文件未被保存if (b == true || rtxtNotepad.Text.Trim() != ""){//若文件未被保存if (s == false){string result;result = MessageBox.Show("文件尚未保存,是否保存?", "保存文件", MessageBoxButtons.YesNoCancel).ToString();switch (result){case "Yes"://若文件是从磁盘打开的if (b == true){//按文件打开的路径保存文件rtxtNotepad.SaveFile(odlgNotepad.FileName);}//若文件不是从磁盘打开的else if (sdlgNotepad.ShowDialog() == DialogResult.OK){rtxtNotepad.SaveFile(sdlgNotepad.FileName);}s = true;rtxtNotepad.Text = "";break;case "No":b = false;rtxtNotepad.Text = "";break;}}}}/*【打开】菜单代码*/private void tsmiOpen_Click(object sender, EventArgs e){if (b == true || rtxtNotepad.Text.Trim() != ""){string result;result = MessageBox.Show("文件尚未保存,是否保存?", "保存文件", MessageBoxButtons.YesNoCancel).ToString();switch (result){case "Yes":if (b == true){rtxtNotepad.SaveFile(odlgNotepad.FileName);}else if (sdlgNotepad.ShowDialog() == DialogResult.OK){rtxtNotepad.SaveFile(sdlgNotepad.FileName);}s = true;rtxtNotepad.Text = "";break;case "No":b = false;rtxtNotepad.Text = "";break;}}odlgNotepad.RestoreDirectory = true;if ((odlgNotepad.ShowDialog() == DialogResult.OK) && odlgNotepad.FileName != ""){rtxtNotepad.LoadFile(odlgNotepad.FileName);b = true;}s = true;}/*【保存】菜单代码*/private void tsmiSave_Click(object sender, EventArgs e){//若文件从磁盘打开并且修改了其内容if (b == true && rtxtNotepad.Modified == true){rtxtNotepad.SaveFile(odlgNotepad.FileName);s = true;}else if (b == false && rtxtNotepad.Text.Trim() != "" && sdlgNotepad.ShowDialog() == DialogResult.OK){rtxtNotepad.SaveFile(sdlgNotepad.FileName);s = true;b = true;odlgNotepad.FileName = sdlgNotepad.FileName;}}/*【另存为】菜单代码*/private void tsmiSaveAs_Click(object sender, EventArgs e)if (sdlgNotepad.ShowDialog() == DialogResult.OK){rtxtNotepad.SaveFile(sdlgNotepad.FileName);s = true;}}/*【退出】菜单代码*/private void tsmiClose_Click(object sender, EventArgs e){Application.Exit();}//【撤销】菜单代码private void tsmiUndo_Click(object sender, EventArgs e){rtxtNotepad.Undo();}//【复制】菜单代码private void tsmiCopy_Click(object sender, EventArgs e){rtxtNotepad.Copy();}//【剪切】菜单代码private void tsmiCut_Click(object sender, EventArgs e){rtxtNotepad.Cut();}//【粘贴】菜单代码private void tsmiPaste_Click(object sender, EventArgs e){rtxtNotepad.Paste();}//【全选】菜单代码private void tsmiSelectAll_Click(object sender, EventArgs e) {rtxtNotepad.SelectAll();}//【日期】菜单代码private void tsmiDate_Click(object sender, EventArgs e){rtxtNotepad.AppendText(System.DateTime.Now.ToString()); }//【自行换行】菜单代码private void tsmiAuto_Click(object sender, EventArgs e)if (tsmiAuto.Checked == false){tsmiAuto.Checked = true;//选中该菜单项rtxtNotepad.WordWrap = true;//设置为自动换行}else{tsmiAuto.Checked = false;rtxtNotepad.WordWrap = false;}}//【字体】菜单代码private void tsmiFont_Click(object sender, EventArgs e){fdlgNotepad.ShowColor = true;if (fdlgNotepad.ShowDialog() == DialogResult.OK){rtxtNotepad.SelectionColor = fdlgNotepad.Color;rtxtNotepad.SelectionFont = fdlgNotepad.Font;}}//【工具栏】菜单代码private void tsmiToolStrip_Click(object sender, EventArgs e){Point point;if (tsmiToolStrip.Checked == true){point = new Point(0, 25);//隐藏工具栏时,把坐标设为(0,25),因为菜单的高度为24tsmiToolStrip.Checked = false;tlsNotepad.Visible = false;rtxtNotepad.Location = point;//设置多格式文本框左上角的位置rtxtNotepad.Height += tlsNotepad.Height;//隐藏工具栏后,增加文本框的高度}else{//显示工具栏时,多格式文本框左上角的位置为(0,50),因为工具栏的高度25加上菜单的高度25=50point = new Point(0, 50);tsmiToolStrip.Checked = true;tlsNotepad.Visible = true;rtxtNotepad.Location = point;rtxtNotepad.Height -= tlsNotepad.Height;}}//【状态栏】菜单代码private void tsmiStatusStrip_Click(object sender, EventArgs e){if (tsmiStatusStrip.Checked == true){tsmiStatusStrip.Checked = false;stsNotepad.Visible = false;rtxtNotepad.Height += stsNotepad.Height;}else{tsmiStatusStrip.Checked = true;stsNotepad.Visible = true;rtxtNotepad.Height -= stsNotepad.Height;}}//【关于记事本】菜单代码private void tsmiAbout_Click(object sender, EventArgs e){frmAbout ob_FrmAbout = new frmAbout();ob_FrmAbout.Show();}private void tlsNotepad_ItemClicked(object sender, ToolStripItemClickedEventArgs e) {int n;//变量n用来接收按下按钮的索引号n = tlsNotepad.Items.IndexOf(e.ClickedItem);switch (n){case 1:tsmiNew_Click(sender, e);break;case 2:tsmiOpen_Click(sender, e);break;case 3:tsmiSave_Click(sender, e);break;case 4:tsmiCut_Click(sender, e);break;case 5:tsmiCopy_Click(sender, e);break;case 6:tsmiPaste_Click(sender, e);break;case 7:tsmiAbout_Click(sender, e);break;}}//计时器控件代码private void tmrNotepad_Tick(object sender, EventArgs e){tssLbl2.Text = System.DateTime.Now.ToString();}//窗体的sizechanged事件代码(为使得改变窗体大小时,状态栏随之改变)private void frmNotepad_SizeChanged(object sender, EventArgs e){frmNotepad ob_frmNotepad = new frmNotepad();tssLbl1.Width = this.Width / 2 - 12;tssLbl2.Width = tssLbl1.Width;}}}3、实验结果及程序运行界面。

c#简易文本编辑器实训报告

c#简易文本编辑器实训报告
{
saveFileDialog1.InitialDirectory = "";
saveFileDialog1.Filter = "*.txt|*.txt|RTF文件(*.rtf)|*.rtf";
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
richTextBox1.SaveFile(saveFileDialog1.FileName,RichTextBoxStreamType.RichText);
ff.Show();
this.Hide();
}
else
MessageBox.Show("密码或用户不正确!");
}
private void button2_Click(object sender, EventArgs e)
{
this.Close();
}
}
}
实训总结、体会:
经过一学期的C#学习我的体会是:
{
public Form2()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
if (textBox1.Text == "abc" && textBox2.Text == "abc")
{
Form1 ff = new Form1();
实训任务及要求:掌握并熟练类、接口的创建和应用。并最终设计完成《密码验证登陆系统》,将各种算法综合运用于具体的设计任务中。
实训仪器、仪表与工具、器材:硬件设备为多媒体计算机、实验运行环境及软件为MicroSoft visual 2008及Windows XP操作系统、程序设计语言为C#语言。

C++课程设计简易文本编辑器

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 设计背景随着计算机在社会生活深红越来越深入而广泛的应用,在文件中有些文件需要改动,比如插入,替换,删除等一系列操作,为了更好的修改文件,不得不进行一系列的操作来修改,因此,文件的修改操作是十分重要的。

c课程设计报告

c课程设计报告

c 课程设计报告。

一、课程目标知识目标:1. 学生能理解并掌握本章节的核心概念,如XX、XX及XX,建立扎实的学科知识基础。

2. 学生能运用所学知识解释现象,解决实际问题,提高知识运用能力。

技能目标:1. 学生通过课堂讨论、小组合作等形式,提升沟通协作能力。

2. 学生能运用批判性思维分析问题,提高问题解决能力。

情感态度价值观目标:1. 学生培养对学科的兴趣和热情,形成积极的学习态度。

2. 学生在学习过程中,树立正确的价值观,认识到学科知识在现实生活中的重要性。

课程性质分析:本课程为XX学科的教学内容,旨在帮助学生建立系统的学科知识体系,提高实际操作能力。

课程注重理论与实践相结合,强调培养学生的创新精神和实践能力。

学生特点分析:针对所教年级的学生,他们在认知水平、兴趣爱好、个性特点等方面具有多样性。

因此,课程目标设定需兼顾不同学生的需求,激发学生的学习兴趣和潜能。

教学要求:1. 教师应关注学生的个体差异,实施差异化教学,确保每个学生都能达到课程目标。

2. 教师要注重课堂互动,引导学生主动参与,提高课堂教学效果。

3. 教学过程中,教师要关注学生的情感态度,培养其积极向上的价值观。

二、教学内容根据课程目标,本章节的教学内容主要包括以下几部分:1. 知识点讲解:- XX概念及其应用- XX原理与XX现象- XX技能的实践操作2. 教学大纲制定:- 第一课时:导入与XX概念介绍,教材第X章第X节- 第二课时:XX原理学习与实例分析,教材第X章第X节- 第三课时:XX技能的实践操作,教材第X章第X节3. 教学内容安排与进度:- 第一周:学习XX概念,了解其在实际中的应用- 第二周:深入研究XX原理,分析XX现象- 第三周:实践操作XX技能,提高学生的动手能力4. 教学内容列举:- XX概念:定义、特点、应用场景- XX原理:基本原理、公式、实例- XX现象:分类、原因、影响- XX技能:操作方法、注意事项、实际应用教学内容的选择和组织确保了科学性和系统性,有利于学生系统地掌握学科知识。

c语言课程设计设计报告

c语言课程设计设计报告

c语言课程设计设计报告c语言课程设计设计报告「篇一」c语言课程设计实验报告第一章基础掌握1.1 实验目的掌握C程序设计编程环境Visual C++,掌握运行一个C程序的基本步骤,包括编辑、编译、链接和运行。

(]1.2 实验要求在报告中记录建立、保存C程序实习过程。

1.3 实验基本内容编写程序,在屏幕上显示一个短句“Hello World”(1)程序:1)编译如下程序:#includeVoid main{printf (“Hello World! ”);}2)链接。

执行Build-命令。

3)运行。

执行Build Execute 命令。

显示结果。

4)关闭程序工作区。

(2)运行结果:输出结果:Hello World!总结:掌握C语言程序设计的基本框架,能够编写简单的程序。

第二章数据类型2.1 实验目的(1)掌握C语言的运算符和表达式的正确使用以及C语言的几种基本数据类型和基本输入输出函数的使用方法。

()(2)通过编程进一步理解和掌握运算符的确切含义和功能。

2.2 实验要求(1)在报告中记录建立、保存C程序实习过程。

(2)完成典型题目,分析遇到的困难和实验中的收获。

2.3 实验基本内容输入程序,观察输出结果 1>./*test2.1c*/1)编译如下程序: #includevoid main{char ch; int k;ch='a',k='b';printf("%d,%x,%c",ch,ch,ch,ch,k); printf("k=%%d ",k) }2)链接。

执行Build-命令。

3)运行。

执行Build Execute 命令。

显示结果。

4)关闭程序工作区。

2>./*test2.2c*/1)编译如下程序: #includevoid main{float a1,a2; double b1,b2; a1=1234.12; a2=0.000001; b1=1234.12; b2=0.000001;printf("%f,%l f ",a1+a2,b1+b2);}2)链接。

c课程设计书面报告

c课程设计书面报告

c 课程设计书面报告一、课程目标知识目标:1. 学生能掌握课程相关章节的基本知识点,如XXX(根据具体学科和内容填写),并能够运用这些知识分析解决实际问题。

2. 学生能理解并描述XXX(根据具体学科和内容填写)的概念、原理和规律,形成知识体系。

技能目标:1. 学生通过本课程的学习,能够提升XXX(如实验操作、数据分析、逻辑思维等)技能,具备实际操作和解决问题的能力。

2. 学生能够运用所学知识和方法,进行小组合作、讨论交流,提高沟通协作能力。

情感态度价值观目标:1. 学生在学习过程中,培养对学科的兴趣和热情,形成积极向上的学习态度。

2. 学生能够认识到所学知识在实际生活中的应用,增强社会责任感和创新意识。

3. 学生通过课程学习,培养严谨、求实的科学精神,形成正确的价值观。

课程性质分析:本课程为XXX学科的基础课程,旨在帮助学生掌握学科基本知识和技能,为后续学习奠定基础。

课程注重理论与实践相结合,提高学生的实际操作能力。

学生特点分析:针对所教授年级的学生,考虑到他们的认知水平、兴趣和需求,课程设计力求生动有趣,注重启发式教学,引导学生主动探究和思考。

教学要求:1. 教师应注重课程内容的实用性,结合生活实际,激发学生的学习兴趣。

2. 教师要关注学生的个体差异,因材施教,使每个学生都能在课程中取得进步。

3. 教学过程中,教师要注重培养学生的自主学习能力和团队合作精神,提高学生的综合素质。

二、教学内容根据课程目标,本章节教学内容主要包括以下几部分:1. 知识点讲解:- 教材第X章:XXX(具体知识点)- 教材第X章:XXX(具体知识点)2. 技能训练:- 实践操作:XXX(根据学科特点,如实验、上机操作等)- 数据分析:XXX(如数据处理、图表绘制等)3. 案例分析:- 结合教材第X章,分析XXX案例,让学生了解知识在实际应用中的具体情况。

4. 小组讨论:- 针对教材第X章的内容,设置相关讨论话题,培养学生的沟通协作能力。

简易文本编辑器课程设计报告说明书

简易文本编辑器课程设计报告说明书

简易文本编辑器摘要:此次课程设计设计了一个简易的文本编辑器,该程序主要用于文本编辑的几个操作,主要由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引言目前社会上文字编辑系统发展飞快,文本编辑软件在人们的日常生活和学习、科研、生产等各个方面有着重要的应用。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

面向对象程序设计课程设计报告(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++应用程序的设计开发过程和编程方法、测试方法2.详细设计2.1需求描述简单文本编辑器的设计是基于Microsoft Visual Studio 2008开发的一款小型的软件,主要的设计是为了满足普通用户对文本文档进行一般的简单操作,通过MFC可视化编程环境,直接生成一个友好的用户操作界面,通过这个窗口,用户可以对文本进行如下的基本操作。

2.1.1 文件①新建:创建一篇空白文档,从“工具栏”或“文件下拉菜单”中创建②打开:打开文本(.txt)文件,从“工具栏”或“文件下拉菜单”中打开;或将文本(.txt)文件拖入程序界面打开或应用程序图标上打开;或右键单击文本文件,在“打开方式”中选择本程序打开②保存:保存文档,从“工具栏”或“文件下拉菜单”中打开④另存为:保存文件副本,在不同位置或以不同文件名保存文档,从“工具栏”或“文件下拉菜单”中另存2.1.2 编辑①撤销:撤销前一步所进行的操作,从“编辑下拉菜单”或“右键菜单”中撤销③删除:删除当前选定字符(串),从“编辑下拉菜单”或“右键菜单”中删除④剪切:复制并删除选定字符(串),从“编辑下拉菜单”或“右键菜单”中剪切⑤复制:复制选定字符(串),“编辑下拉菜单”或“右键菜单”中复制⑥粘贴:对粘贴内容进行粘贴,从“编辑下拉菜单”或“右键菜单”中粘贴⑦全选:对文本编辑框中文本全部选定,从“编辑下拉菜单”或“右键菜单”中全2.1.3 应用①查找/替换:输入查找内容(和替换内容),可从光标位置逐个查找(或替换)相应内容,也可一次性全部替换掉相应内容,从“工具栏”或“应用下拉菜单”中执行②字体设置:设置字体、字形及字的大小,从“工具栏”或“应用下拉菜单”中设置字体③统计字符串:统计用户输入的字符串出现次数,从“工具栏”或“应用下拉菜单”中执行④统计字数:统计所有字符数、中文字符数、英文字符数、数字字符数和空格数,从“工具栏”或“应用下拉菜单”中启动2.1.4 帮助①关于EasyTXT:显示关于本程序的信息,从“帮助下拉菜单”中启动②帮助:显示程序帮助文档,包括程序功能、使用、简要说明等各种信息,从“工具栏”或“帮助下拉菜单”中启动2.1.5 高级①关联注册:向注册表添加SLW文件关联,改变文本(.txt)文件图标,并使文本(.txt)文件可单击右键后选择用本程序打开(部分功能重启或注销后方能生效)②还原注册:取消注册,文本(.txt)文件还原为默认图标,不能右键打开(部分功能重启或注销后方能生效)2.2功能描述2.2.1 文本编辑区本程序的编译框架为MFC,功能的实现使用的是模块化的编程方式进行,由于使用的是MFC可视化编程,所以其中的很多过程使用的是相关的系统自带函数实现的,其中整个编辑器的编辑区使用的是MFC自动生成的文本框,但是这个文本框没有插入符,不能实现文字编辑功能,所以需要在程序的CEasyTXTView中插入一些特定的文本编辑函数,如插入符函数cwnd::createsolidcreat,这个函数默认的为隐藏,所以在后面需要showcreate()才能正常显示,而整个编辑器的操作编辑部分使用的是一个独立的*.CPP 进行控制的,代码中使用的是图形至于文本输入的下方并设置为透明,在下面的文本编辑区下层有一张写有内容的图片作为装饰,换行等动作惠济路插入符位置并按照坐标进行绘制,文本框的大小改变等会导致文本编辑区的重绘,所以在改变文本框时必须调用函数对文本框中的内容进行保存,相关代码如下所示:BOOL CBmpEdit::OnEraseBkgnd(CDC* pDC){CDC memDC;memDC.CreateCompatibleDC(pDC);//创建内存设备上下文memDC.SelectObject(&m_Bitmap);//将位图选入设备上下文BITMAP m_Bmp; //声明位图控件m_Bitmap.GetBitmap(&m_Bmp); //获得位图信息int x = m_Bmp.bmWidth; //获取图片宽度int y = m_Bmp.bmHeight; //获取图片高度CRect rect; //声明矩形区域对象GetClientRect(rect); //获取编辑区大小矩形框pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&memDC,0,0,x,y,SRCCOPY); //伸展铺上图片memDC.DeleteDC();//释放内存设备上下文return TRUE; //return CEdit::OnEraseBkgnd(pDC);}void CBmpEdit::OnChange(){Invalidate(); //刷新用户界面}HBRUSH CBmpEdit::CtlColor(CDC* pDC, UINT nCtlColor){pDC->SetBkMode(TRANSPARENT); //设置文字背景透明return NULL;}void CBmpEdit::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar * pScrollBar) {CEdit::OnVScroll(nSBCode, nPos, pScrollBar); //判断滚动条是否滑动Invalidate(); //刷新用户界面}void CBmpEdit::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags){int n1,n2;n1 = GetScrollPos (SB_VERT);CEdit::OnKeyDown(nChar, nRepCnt, nFlags);n2 = GetScrollPos (SB_VERT);if (n1 != n2) //判断滚动条是否滑动{Invalidate(); //刷新用户界面}}BOOL CBmpEdit::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt){BOOL editS = CEdit::OnMouseWheel(nFlags, zDelta, pt);Invalidate(); //刷新用户界面return editS;}2.2.2 文件新建新建菜单使用的是MFC自带的系统函数中的FILE等函数指令在massagebox的功能实现模块,其中在新建文档的时候需要对文本的编辑区进行判断,对文本框中存在的文本进行存档,而新建的文档就是对文本编辑区进行重绘,对原有的内容进行存储和销毁,详细代码如下所示:void CEasyTXTDlg::OnMenuNew(){//新建前对现有文本的的处理isModified = m_Edit.GetModify();//获取文本修改标记CString string;m_Edit.GetWindowText(string);if (isNew && string.IsEmpty())//若是新建文本且文本无内容内容{;}else if(isModified) //如果文本已被修改,分情况讨论{int Choice = MessageBox("当前文本已被修改,想保存吗?","系统提示", MB_YESNO|MB_ICONQUESTION); //弹出消息对话框询问if(Choice==IDYES) //选择“是”{OnMenuSave();//调用保存函数保存文件}}//新建m_Edit.SetSel(0, -1); //全部选中文本内容m_Edit.Clear();//将所有文本删除isNew = TRUE; //标记为新建文本m_Edit.SetModify(FALSE); //文本修改标记设为未修改}打开菜单栏的打开使用的拖入和图标打开,其中使用了MFC中自带的打开对话框,这样的使用和拖入的使用均是使用了自带的函数,其中重点是在运行的过程中对绝对路径的获取以及特定格式文件的打开和提取,对不正确的格式进行massagebox的消息盒子提醒,详细代码如下:void CEasyTXTDlg::OnDropFiles(HDROP hDropInfo){char *lpszFileName=new char[512];int nFileCount,i; nFileCount=::DragQueryFile(hDropInfo,0xFFFFFFFF,NULL,512);for (i=0;i<nFileCount;i++){UINT nChars=::DragQueryFile (hDropInfo,i,&lpszFileName[0],512);CString str(&lpszFileName[0],nChars); //获得文件路径//打开前对现有文本的的处理isModified = m_Edit.GetModify();//获取文本修改标记CString string;m_Edit.GetWindowText(string);if (isNew && string.IsEmpty())//若是新建文本且文本无内容内容{;}else if(isModified) //如果文本已被修改,分情况讨论int Choice = MessageBox("当前文本已被修改,想保存吗?","系统提示",MB_YESNO|MB_ICONQUESTION); //弹出消息对话框询问if(Choice==IDYES) //选择“是”{OnMenuSave();//调用保存函数保存文件}}CString strText="";SavePath = str;int n = SavePath.ReverseFind('.');CString stl = SavePath.Right(SavePath.GetLength() - n - 1);if (stl == "txt" || stl == "TXT" || stl == "c" || stl == "C" || stl == "cpp" || stl == "CPP"|| stl == "h" || stl == "H" || stl == "xml" || stl == "XML" || stl == "html" || stl == "HTML"){CFile file(str,CFile::modeReadWrite); //以读与写方式打开文件//拖入打开m_Edit.SetSel(0, -1); //全部选中文本内容m_Edit.Clear();//将所有文本删除char read[50000];file.Read(read,50000); //读取文件内容for(unsigned i=0;i<file.GetLength();i++){strText += read[i]; //把文件内容赋值给CString变量}file.Close();//关闭文件m_Edit.SetWindowText(strText);isNew = FALSE; //标记为打开文本m_Edit.SetModify(FALSE); //文本修改标记设为修改}else{MessageBox ("不支持的文件类型!","打开错误");}::DragFinish (hDropInfo); //释放内存i=0;delete []lpszFileName;}void CEasyTXTDlg::OpenFile(){CString strCmdLine = GetCommandLine();int totalLen = strCmdLine.GetLength();int i = 0;int index = 0;//循环统计字符个数for (i = 0,index = 0; i < 3; i++,index ++){index = strCmdLine.Find("\"", index); //查找字符串}if (index != 0){for (i = index;i < totalLen - 1;i ++)SavePath += strCmdLine.GetAt(i);int n = SavePath.ReverseFind('.');CString stl = SavePath.Right(SavePath.GetLength() - n - 1);if (stl == "txt" || stl == "TXT" || stl == "c" || stl == "C" || stl == "cpp" || stl == "CPP"|| stl == "h" || stl == "H" || stl == "xml" || stl == "XML" || stl == "html" || stl == "HTML"){CString strText;CFile file(SavePath,CFile::modeReadWrite); //以读与写方式打开文件char read[50000];file.Read(read,50000); //读取文件内容for(unsigned i=0;i<file.GetLength();i++){strText += read[i];//把文件内容赋值给CString变量}file.Close();//关闭文件m_Edit.SetWindowText(strText); //在编辑框中显示文件内容m_Edit.SetModify(FALSE); //文本修改标记设为未修改isNew = FALSE;Invalidate();}else{MessageBox ("不支持的文件类型!","打开错误");m_Edit.SetModify(FALSE); //文本修改标记设为未修改isNew = TRUE;}}else{m_Edit.SetModify(FALSE); //文本修改标记设为未修改isNew = TRUE;}m_Edit.SetSel(0,0);}保存保存使用的是MFC中自带的模块进行的,第一次的保存即为另存为,当文档已经创建以后,文本的保存就改变为把文本编辑区的内容重新写入同一个绝对地址的文本文档中,其中声明和调用的详细代码如下:void CEasyTXTDlg::OnMenuSave(){if (isNew) //对新建且未保存的文本调用“另存为”进行保存{OnMenuSaveas();//新建文本已保存}else//对打开的文件修改后进行保存{CString strText="";char write[50000];CFile file(_T(SavePath),CFile::modeCreate|CFile::modeReadWrite);//以读与写方式创建文件m_Edit.GetWindowText(strText); //获取编辑框中的内容strcpy(write,strText); //将编辑框中的内容赋值给字符串数组file.Write(write,strText.GetLength());//把编辑框中的内容写入文件file.Close(); //关闭文件m_Edit.SetModify(FALSE); //设置修改标记为未修改}m_Edit.SetSel(0,0);}另存为另存为是一种特殊的保存形式,另存为在应用的时候是用户用过FILE等函数寻找一个绝对地址并按照现有格式进行保存,在今后的另存为命令中,不会对相同绝对地址相同文件名的文件进行保存,而是在弹出消息对话框用户确认覆盖操作以后才将原有的文件进行删除操作然后把新内容的文件生成在用户选定的绝对地址下,详细代码如下:void CEasyTXTDlg::OnMenuSaveas(){CFileStatus fs; //文件存在状态CFileDialog dlg(FALSE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, "All Files(*.txt)|*.txt||",AfxGetMainWnd()); //构造“文件另存为”对话框CString strPath,strText="";char write[50000];if(dlg.DoModal() == IDOK) //判断按下“另存为”{strPath = dlg.GetPathName(); //获取文件另存为路径if(strPath.Right(4) != ".txt"){strPath += ".txt"; //设置文件扩展名为txt }if(CFile::GetStatus(_T(strPath),fs)) //如果文件存在{CString info = strPath;info += " 已存在。

相关文档
最新文档