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#编写“文本编辑器”实验报告实验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#简易文本编辑器实训报告
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++课程设计简易文本编辑器
目录第一章课程设计目的和要求 (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 课程设计报告。
一、课程目标知识目标: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语言课程设计实验报告第一章基础掌握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 课程设计书面报告一、课程目标知识目标: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引言目前社会上文字编辑系统发展飞快,文本编辑软件在人们的日常生活和学习、科研、生产等各个方面有着重要的应用。
c课程设计报告
c 课程设计报告一、教学目标本课程的教学目标是让学生掌握XX学科的基本概念、原理和方法,能够运用所学知识解决实际问题。
具体目标如下:1.知识目标:学生能够准确理解并掌握XX学科的基本概念、原理和方法,了解学科的发展趋势和应用领域。
2.技能目标:学生能够运用所学知识解决实际问题,具备一定的实践操作能力,能够运用科学的方法进行探究和分析。
3.情感态度价值观目标:学生对XX学科产生浓厚的兴趣,培养科学思维和创新精神,增强社会责任感和使命感。
二、教学内容根据课程目标,本课程的教学内容主要包括以下几个方面:1.XX学科的基本概念:介绍XX学科的基本定义、特点和分类,使学生建立对学科的整体认识。
2.XX学科的基本原理:讲解XX学科的核心原理,引导学生理解并掌握原理的含义和应用。
3.XX学科的方法和技术:介绍XX学科常用的工作方法和技能,培养学生运用方法解决问题的能力。
4.学科应用案例分析:分析XX学科在实际应用中的案例,帮助学生了解学科的价值和意义。
三、教学方法为了实现课程目标,本课程将采用以下教学方法:1.讲授法:教师通过讲解、演示等方式,向学生传授知识,引导学生理解并掌握基本概念和原理。
2.讨论法:学生进行小组讨论,促进学生之间的交流与合作,培养学生的批判性思维和问题解决能力。
3.案例分析法:分析实际案例,让学生了解XX学科在实际中的应用,提高学生的实践能力。
4.实验法:学生进行实验操作,培养学生的实践能力和科学探究精神。
四、教学资源为了支持教学内容和教学方法的实施,本课程将运用以下教学资源:1.教材:选用权威、实用的教材,为学生提供系统、全面的学习材料。
2.参考书:推荐相关的参考书籍,丰富学生的知识体系。
3.多媒体资料:利用多媒体技术,制作课件、教案等教学资料,提高教学效果。
4.实验设备:准备必要的实验设备,为学生提供实践操作的机会。
五、教学评估本课程的评估方式包括平时表现、作业和考试等,旨在全面客观地评价学生的学习成果。
C++实训——文本编辑器报告
实训题目:文本编辑器1 系统设计1.1 设计要求1.1.1 设计任务设计一个基于对话框的文本编辑器,实现文本的创建、编辑、显示及保存功能。
1.1.2 性能指标要求按照题目要求完成程序源码编写、调试及关键代码注释。
能够设置字体格式。
1.2 设计思路及设计框图1.2.1设计思路通过Visual C++6.0内自带的控件进行编程,产生一个基于对话框的文本编辑器。
该编辑器带有菜单栏、编辑区。
(1)文件模块:提供保存、另存为、打开、退出功能。
(2)编辑模块:提供撤销、剪切、复制、粘贴、清空、全选功能。
(3)格式模块:提供设置字体、背景颜色功能。
(4)帮助模块:版权声明。
1.2.2总体设计框图2 各个模块程序的设计及相应流程图2.1 新建工程通过Visual C++6.0内自带的控件进行编程,产生一个基于对话框的文本编辑器。
2.2图标设计设计IDR_MAINFRAME图案,修改后如下2.3 菜单栏设计右击VC6.0菜单栏Insert下的Resource,插入一个菜单栏,如下。
这里已经建好。
只是演示步骤。
以下为菜单相关名称与函数下拉菜单名命令名命令ID 对应消息函数名文件(&F) 打开(&O)...\tCtrl+O ID_FILE_OPEN OnFileOpen保存(&S)\tCtrl+S ID_FILE_SA VE OnFileSave另存为(&A)...ID_FILE_SA VE_AS OnFileSaveAs退出(&X)ID_APP_EXIT OnAppExit编辑(&E) 撤消(&U)\tCtrl+Z ID_EDIT_UNDO OnEditUndo 剪切(&T)\tCtrl+X ID_EDIT_CUT OnEditCut复制(&C)\tCtrl+C ID_EDIT_COPY OnEditCopy 粘贴(&P)\tCtrl+V ID_EDIT_PASTE OnEditPaste 清空(&R)ID_EDIT_CLEAR OnEditClear全选(&A)\tCtrl+A ID_EDIT_SELECTALLOnEditSelectall格式(&S)字体(&F)...ID_SET_FONT OnSetFont背景颜色(&B)...ID_SET_BACKCOLOROnSetBackcolor帮助(&H)关于文档编辑器(&A)...IDS_ABOUTBOX OnAboutbox 快捷键工程内容如下2.4 菜单栏载入打开IDD_WENBEN_DIALOG对话框属性,在常规标签页下的菜单对话框内添加菜单栏的ID,即IDR_MENU1。
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 简单课程设计报告一、课程目标知识目标:1. 让学生掌握学科基本概念,如数学中的基础运算规则、语文中的词语用法等,根据具体学科和年级进行深入讲解,确保学生能够准确理解和运用。
2. 引导学生理解课程内容中的关键知识点,如历史事件的发展脉络、科学实验的基本原理等,使他们在课程结束后能够总结并复述所学内容。
技能目标:1. 培养学生运用学科知识解决问题的能力,如数学题目的解答、语文阅读理解等,强调实际应用和方法的灵活性。
2. 提高学生的合作与交流能力,通过小组讨论、课堂互动等形式,使学生学会倾听、表达和协作。
情感态度价值观目标:1. 培养学生对学科的兴趣和热情,通过生动有趣的教学案例,让学生感受到学科的魅力,提高学习积极性。
2. 引导学生树立正确的价值观,如诚信、勤奋、尊重等,结合学科内容和实际生活,培养学生具有良好的道德品质。
本课程将针对学科性质、学生特点和教学要求,将课程目标分解为具体的学习成果。
例如,在数学课程中,针对小学三年级的学生,将基础运算规则的掌握程度作为学习成果;在语文课程中,针对初中一年级的学生,将以阅读理解和文学鉴赏能力作为衡量标准。
在教学设计和评估过程中,注重学生实际操作和实践,确保课程目标的实现。
二、教学内容根据课程目标,教学内容的选择和组织遵循科学性和系统性原则。
以下为具体教学内容安排:数学学科:1. 教材章节:第三章《分数的初步认识》内容列举:分数的定义、分数的比较、分数的加减法运算、分数在实际生活中的应用。
2. 教学进度:4课时语文学科:1. 教材章节:第二单元《秋天的雨》内容列举:课文阅读、词语解释、修辞手法分析、写作技巧、课文背后的文化内涵。
2. 教学进度:5课时历史学科:1. 教材章节:第一章《中国古代史》内容列举:史前时期、夏商周、春秋战国、秦汉、三国两晋南北朝等重要历史时期的代表性事件。
2. 教学进度:6课时科学学科:1. 教材章节:第四章《力的作用》内容列举:力的概念、力的作用效果、力的测量、牛顿三定律、力的应用。
c课程设计报告范文
c 课程设计报告范文一、教学目标本章节的教学目标分为三个部分:知识目标、技能目标和情感态度价值观目标。
1.知识目标:通过本章节的学习,学生需要掌握XXX(具体知识内容),能够理解并运用XXX(具体知识内容)。
2.技能目标:学生能够运用XXX(具体技能)进行XXX(具体操作),提高XXX(具体能力)。
3.情感态度价值观目标:通过本章节的学习,学生能够培养对XXX(学科或知识领域)的兴趣和热情,提高对XXX(学科或知识领域)的认识和理解,培养XXX(价值观或态度)。
二、教学内容根据课程目标,本章节的教学内容主要包括XXX(具体内容),这些内容将按照以下顺序进行讲解:1.XXX(第一部分内容)2.XXX(第二部分内容)3.XXX(第三部分内容)三、教学方法为了达到本章节的教学目标,将采用以下教学方法:1.讲授法:通过教师的讲解,学生能够了解和掌握XXX(具体知识内容)。
2.讨论法:通过小组讨论,学生能够深入理解和探讨XXX(具体知识内容)。
3.案例分析法:通过分析具体案例,学生能够将理论知识运用到实际问题中。
4.实验法:通过实验操作,学生能够直观地观察和理解XXX(具体知识内容)。
四、教学资源为了支持本章节的教学内容和教学方法的实施,将选择和准备以下教学资源:1.教材:XXX(教材名称),用于引导学生学习和掌握XXX(具体知识内容)。
2.参考书:XXX(参考书名称),为学生提供更多的学习资料和参考。
3.多媒体资料:XXX(多媒体资料名称),用于辅助讲解和展示XXX(具体知识内容)。
4.实验设备:XXX(实验设备名称),用于进行实验操作,让学生直观地观察和理解XXX(具体知识内容)。
五、教学评估本章节的教学评估将采用多种方式,以全面、客观地评价学生的学习成果。
1.平时表现:通过观察学生在课堂上的参与程度、提问回答等情况,评估其对知识的理解和运用能力。
2.作业:布置与章节内容相关的作业,要求学生独立完成,评估其对知识的掌握程度和运用能力。
简单文本编辑器-数据结构与算法课程设计报告.doc
计算机科学与技术系课程设计报告2009 ~2010 学年第二学期课程数据结构与算法课程设计名称简单文本编辑器学生姓名学号专业班级指导教师2010 年6 月实验题目:简单的文本编辑器1、题目及要求名称:简单的文本编辑器内容:输入一页文字,程序可以统计出文字、数字、空格的个数。
静态存储一页文章,每行最多不超过80个字符,共N行。
要求:(1)分别统计出其中英文字母数和空格数及整篇文章总字数;(2)统计某一字符串在文章中出现的次数,并输出该次数;(3)删除某一字符或者子串,并将后面的字符前移。
(4)插入某一字符或者子串。
(5)查找某一字符或者子串。
存储结构使用线性表,分别用几个子函数实现相应的功能;输入数据的形式和范围:可以输入大写、小写的英文字母、任何数字及标点符号。
输出形式:(1)分行输出用户输入的各行字符;(2)分4行输出"全部字母数"、"数字个数"、"空格个数"、"文章总字数"(3)输出删除某一字符串后的文章。
2、对题目的大概理解:本程序应实现以下功能:(1)文章内容的输入:包括字母、标点符号、数字、空格等;(2)文章内容的统计:包括文章中大写字母、小写字母、数字、标点符号、空格以及文章所有字数的个数的统计;(3)文章内容的处理:包括对文章内容的查找、删除以及对指定位置进行插入操作,其中在查找的过程中统计出该字符或字符串在文章中出现的次数;1、问题分析本程序是对一段英文文章的内容进行处理,存储方式采用链式存储,没有文件操作,故本程序对其文本内容的所有操作都是在链表中进行的。
对于文本的输入,采用头插法将文本信息存储到链表已申请好的存储空间中,在此部分设计中最大的问题在于输入文章过程中输入的字符数大于80时如何换行;对于文本内容的统计,使用循环对已存储的文章进行匹配,大写字母数、小写字母数、空格数、数字数直接通过比较即可得到,标点符号通过ASCⅡ比较即可得到;对于文本内容的处理,查找部分仍是使用循环对已存储的文章进行匹配,判断需要查找的字符或者字符串是否与文章中某部分内容相同,如果存在相同的记录相同的个数及位置并输出个数及位置。
c简单课程设计报告
c 简单课程设计报告一、教学目标本课程的教学目标是使学生掌握C语言的基本语法和编程方法,培养学生运用C语言进行程序设计的能力。
具体来说,知识目标包括:了解C语言的基本语法、数据类型、运算符、控制结构等;技能目标包括:能够使用C语言编写简单的程序,解决实际问题;情感态度价值观目标包括:培养学生对计算机编程的兴趣,提高学生独立思考和解决问题的能力。
二、教学内容根据课程目标,教学内容主要包括C语言的基本语法、数据类型、运算符、控制结构等。
具体安排如下:1.第一章:C语言概述,介绍C语言的发展历程、特点和基本语法。
2.第二章:数据类型和运算符,讲解整型、浮点型、字符型数据以及相应的运算符。
3.第三章:控制结构,包括条件语句、循环语句等。
4.第四章:函数,介绍函数的定义、声明和调用,以及常用的库函数。
5.第五章:数组和字符串,讲解一维数组、多维数组以及字符串的操作。
6.第六章:指针,介绍指针的概念、运算以及指针与数组、函数的关系。
7.第七章:结构体和联合体,讲解结构体、联合体的定义和应用。
8.第八章:文件操作,介绍文件的概念、文件的打开与关闭、文件的读写等。
三、教学方法为了激发学生的学习兴趣和主动性,本课程将采用多种教学方法,如讲授法、讨论法、案例分析法、实验法等。
在教学过程中,注重理论与实践相结合,使学生在实际编程中掌握C语言的知识。
同时,鼓励学生参与课堂讨论,培养学生的团队协作能力和独立思考能力。
四、教学资源为了支持教学内容和教学方法的实施,丰富学生的学习体验,我们将选择和准备以下教学资源:1.教材:《C程序设计语言》(K&R)或《C Primer Plus》。
2.参考书:《C语言程序设计教程》(谭浩强)、《C语言实战教程》(刘未鹏)。
3.多媒体资料:教学PPT、视频教程、在线编程练习题等。
4.实验设备:计算机、编程环境(如Visual Studio、Code::Blocks等)。
通过以上教学资源,为学生提供全面、多样的学习材料,帮助他们更好地掌握C语言编程技能。
最新《C语言程序设计》综合性实验实验报告
最新《C语言程序设计》综合性实验实验报告实验目的:1. 巩固和加深对C语言程序设计基础知识的理解。
2. 掌握C语言的基本编程技巧和程序调试方法。
3. 提高解决实际问题的编程能力,培养综合运用C语言进行程序设计的能力。
实验内容:1. 实现一个基本的学生信息管理系统,包括学生信息的录入、查询、修改和删除功能。
2. 设计并编写一个简单的文本编辑器,支持文本的增删改查操作。
3. 开发一个计算器程序,能够进行基本的四则运算以及复杂运算如指数、开方等。
4. 利用C语言的文件操作功能,实现文件的读写操作,并对文件内容进行处理。
实验环境:- 操作系统:Windows 10- 编程工具:Code::Blocks IDE- 编译器:GCC 9.3.0实验步骤:1. 学生信息管理系统:- 设计学生信息的数据结构,包括学号、姓名、年龄、成绩等。
- 使用数组或链表存储学生信息。
- 实现用户界面,提供简单的文本菜单供用户选择操作。
- 对学生信息进行增删改查的函数实现。
- 测试程序,确保所有功能正常运行。
2. 简单文本编辑器:- 设计文本编辑器的基本功能,如打开文件、保存文件、文本输入输出等。
- 实现文本的插入、删除、查找和替换功能。
- 提供友好的用户界面,支持命令行操作。
- 对程序进行单元测试,确保文本编辑的准确性和稳定性。
3. 计算器程序:- 设计计算器的用户界面,支持用户输入运算表达式。
- 实现基本的四则运算功能。
- 扩展支持指数、开方等复杂运算。
- 对计算器进行测试,验证计算结果的准确性。
4. 文件处理程序:- 实现文件的打开、读取、写入和关闭功能。
- 设计文件内容处理功能,如统计文件中的单词数量、查找特定字符串等。
- 编写用户友好的命令行界面,方便用户操作。
- 对文件处理程序进行全面测试,确保文件操作的安全性和可靠性。
实验结果:通过本次综合性实验,成功实现了学生信息管理系统、文本编辑器、计算器和文件处理程序。
所有程序均通过了功能测试和性能测试,满足了实验的基本要求。
简单文本编辑器-设计报告
简易文本编辑器●需求分析该简易文本编辑器具有图形菜单界面,包括打开,查找,替换(等长,不等长),插入(插串,文本块的插入)、块移动(行块,列块移动),删除,显示文本信息,保存文本信息等等功能并可正确存盘、取盘,正确显示总行数。
●概要设计为实现数据的有序存储,该编辑器用字符数组来存储输入的信息。
数组是数据结构中线性表的一种,它是用一块地址连续的存储空间依次存储线性表的元素。
其特点为:在顺序表上逻辑关系相邻的俩个元素在物理位置上也相邻;在顺序表上可以随即存取表中的元素。
在编辑器的主界面中应有如下提示信息(包括功能的完成的基本思想):1) 清空以前的文本信息:将用数组存的数据内容全部置为0;2) 显示当前文本信息:遍历用数组存入的信息,并输入到外部显示器上;3) 编辑信息:通过对数组的直接输入操作得到字符数组,这要求数组有绝对大的空间,而且每一次的输入完毕必须有相应的数组下表地址的记录,应此建立一个全局变量ntext记录;4) 查找信息:通过循环在数组中找到所需要的信息;5) 替换文本信息:首先在数组中查找要被替换的信息,如果找到该信息,提示输入要替换的信息内容,否则提示未找到要被替换的信息;6) 插入文本信息:首先在数组中查找要插入点,如果找到该插入点,提示输入插入信息,确认插入信息后,提示选择向前插入信息还是向后插入信息,如果未找到插入点,显示未找到要插入的位置;7) 移动文本信息:首先在数组中查找要移动的信息,如果找到该信息,提示是进行列移动还是进行行移动,否则提示未找到要移动的信息;8) 删除文本信息:首先在数组中查找要删除的信息,如果找到该信息,提示是否确认删除该信息,通过确认来删除信息,如果未找到要删除的信息,提示未找到该信息;9) 退出编辑器:通过确认是否保存安全退出。
10)程序中主要的函数为:子串查找在朱串的位置,程序如下:int strindex(char text[],char t[],int i2,int l) //查找要操作的数据的位置(模式匹配){int i1=l,j=0;while (i1<ntext&&j<i2){if (text[i1]==t[j]) //继续匹配下一个字符{j++;i1++;//主串和子串依次匹配下一个字符}else //主串、子串指针回溯重新开始下一次匹配{i1=i1-j+1; //主串从下一个位置开始匹配j=0;//子串从头开始匹配}}if (j>=i2){return(i1-i2);} //返回匹配的第一个字符的下标elsereturn(-1); //模式匹配不成功}详细设计1.包括的头文件#include "stdafx.h"#include <stdio.h>#include <stdlib.h>#include <time.h>#include <string.h>#define MAX 10000#define _CRT_SECURE_NO_DEPRECATE //在vs中取消warning的警告2.相关函数原型void menu();void shuru(char text[]);void bc(char text[]);void dakai(char text[]);void dayin(char text[]);void chazhao(char text[],int l);void tihan(char text[],int l);int strindex(char text[],char t[],int i2,int l);void shanchu(char p[],int l);void cs(char text[]);void charu(char text[],int l);void tuichu(int status);char text[MAX]=""; //文本编辑域char name[20]=""; //文件保存的位置int status=0; //显示是否保存过的状态int ntext; //文本编辑的位置3./*打开文件模块*/void dakai(char text[]){system("cls");FILE *fp;char pd,ch;char name[30];int i=0;printf("输入A:确定打开文件(未保存的数据将会丢失) M:返回主菜单");fflush(stdin);pd=getchar();if (pd=='A'||pd=='a'){printf("请输入要打开文件名字(例如c:\\a.txt)");scanf("%s",name);while ((fp=fopen(name,"r"))==NULL){printf("\n打开文件失败,请重新输入要打开的文件名:");scanf("%s",name);}cs(text);while(!feof(fp)){ch=fgetc(fp);text[i]=ch;i++;}text[i]='\0';ntext=i;fclose(fp);printf("\n文件读取成功\n文件内容为\n");dayin(text);}if (pd=='M'||pd=='m')menu();}4./*保存模块*/void bc(char text[]){system("cls");FILE *fp;char pd;char tmp;int i;printf("\n输入【A】保存;任意键返回主菜单不保存\n");fflush(stdin);pd=getchar();if (!(pd=='A'||pd=='a')){menu();}else{if(name[20]==NULL){printf("\n请输入保存文件名(例如: c:\\a.txt):");scanf("%s",name);}while ((fp=fopen(name,"w+"))==NULL){printf("文件不存在,请重新输入文件名:");scanf("%s",name);}printf("\nA:确定;B:取消:");while(scanf("%c",&tmp)!=EOF){if (tmp=='A' || tmp=='a'){for(i=0;i<ntext;i++)fprintf(fp,"%c",text[i]);fclose(fp);status=1;printf("\n文件保存成功\n");break;}if (tmp=='B' || tmp=='b'){break;}}}}5./*初始化模块*/void cs(char text[]){int i;for (i=0;i<ntext;i++){text[i]='\0';}ntext=0;status=0;}int strindex(char text[],char t[],int i2,int l) //查找要操作的数据的位置(模式匹配) {int i1=l,j=0;while (i1<ntext&&j<i2){if (text[i1]==t[j]) //继续匹配下一个字符{j++;i1++;//主串和子串依次匹配下一个字符}else //主串、子串指针回溯重新开始下一次匹配{i1=i1-j+1; //主串从下一个位置开始匹配j=0;//子串从头开始匹配}}if (j>=i2){return(i1-i2);} //返回匹配的第一个字符的下标elsereturn(-1); //模式匹配不成功}6./*菜单显示模块*/void menu(){system("cls");time_t timep;time (&timep);printf("%s",ctime(&timep));printf("\n\n\n\n\n\n\n\n\n\t\t\tWelcom to use our TXT edition system!\n");printf("\n\n\t\t\t 欢迎您使用文本编辑器软件!\n");printf("\n\n\n\n\n\n\n\n\npress Enter to continue...\n");getchar();loop:system("cls");printf("\n\n\n\n\t\t******************简易文本编辑器*****************\n\n");printf("\t\t\t\t----0.清空内容--\n");printf("\t\t\t\t----1.打开文件--\n");if (ntext==0){printf("\t\t\t\t----2.输入内容--\n");}else {printf("\t\t\t\t----2.继续输入--\n");}printf("\t\t\t\t----3.查找------\n");printf("\t\t\t\t----4.插入------\n");printf("\t\t\t\t----5.删除------\n");printf("\t\t\t\t----6.替换------\n");printf("\t\t\t\t----7.显示内容--\n");printf("\t\t\t\t----8.保存------\n");printf("\t\t\t\t----9.退出------\n");printf("\n\t\t*********************选项************************\n");printf("\n\t\t\t\t输入选项0-9:");char n;fflush(stdin);n=getchar();if(n>='0'&&n<='9'){switch (n){case '0': cs(text);break;case '1': dakai(text);break;case '2': shuru(text);break;case '3': chazhao(text,0);break;case '4': charu(text,1);break;case '5': shanchu(text,0);break;case '6': tihan(text,0);break;case '7': dayin(text);break;case '8': bc(text);break;case '9': tuichu(status);default : break;}}else{printf("\n输入有误,请重新输入:");fflush(stdin);n=getchar();}system("pause");goto loop;}7./*查找*/void chazhao(char text[],int l){system("cls");int i,t,a=-1;char pattern[20],bd,pd;printf("原文为:\n");dayin(text);printf("请输入您要查找的内容");scanf("%s",pattern);printf("您查找的内容是:%s\n",pattern);t=strlen(pattern);loop:a=strindex(text,pattern,t,l);if (a!=-1){l=a+t;}int hs=1,ls=0;for (i=0;i<=a;i++){ls++;if (text[i]=='\n'){hs++;ls=0;}}if (a==-1){printf("查找到结尾没有找到\n输入【R】将重头查找;任意键返回主菜单");l=0;fflush(stdin);pd=getchar();}else{printf("已经找到在第%d行第%d列,输入【R】继续查找下一处;任意键返回主菜单",hs,ls);fflush(stdin);bd=getchar();if (bd=='R'||bd=='r')goto loop;}if (pd=='R'||pd=='r'){l=0;chazhao(text,l);}}8./*显示模块*/void dayin(char text[]){system("cls");printf("现在文本的内容为:\n");printf("%s\n",text);int hs=1,i;for (i=0;i<ntext;i++){if (text[i]=='\n'){hs++;}}printf("\n文本共有%d行\n",hs);}9./*输入模块*/void shuru(char text[]){system("cls");printf("请输入内容(输入@结束输入并返回主菜单):\n");printf("%s",text);char c;int i=ntext,j=ntext;fflush(stdin);while ((c=getchar())!='@'){text[i]=c;i++;ntext=i;continue;}int cout=0,zf=0,h=1,hs=1,zfs=0;for(;cout<ntext;cout++){zf++;if(text[cout]=='\n'){h++;zf--;}if(text[cout]==' ')zf--;}for(cout=j;cout<ntext;cout++){zfs++;if(text[cout]=='\n'){hs++;zfs--;}if(text[cout]==' ')zfs--;}printf("统计:文本一共有%d个字符,%d行,本次输入了%d个字符,%d行\n",zf,h,zfs,hs);}10./*删除*/void shanchu(char p[],int l){int i,a=-1,t2=0;char x[20],px,pd,pdx,c;system("cls");printf("%s",p);printf("\n输入【A】执行查找删除内容;任意键返回主菜单:");fflush(stdin);px=getchar();if (px=='a'||px=='A'){printf("\n输入您要删除的内容,以@结束:");fflush(stdin);while ((c=getchar())!='@'){if (c=='@'){break;}else{x[t2]=c;t2++;continue;}}loop:a=strindex(p,x,t2,l);int hs=1,ls=0;for (i=0;i<=a;i++){ls++;if (p[i]=='\n'){hs++; ls=0;}}if (a==-1){printf("已查找结束,您要删除的内容不存在\n输入【R】重新输入要删除的内容;其他键将返回主菜单:");l=0;fflush(stdin);pdx=getchar();}else{printf("你要删除的内容在第%d行第%d列\n 输入【A】确定删除;输入【B】寻找下个词;其他键将返回主菜单:",hs,ls);fflush(stdin);pd=getchar();l=t2+a;if (pd=='a'||pd=='A'){for(i=a;i<ntext;i++){p[i]=p[i+t2];}ntext=ntext-t2;printf("删除成功,删除后的内容为:\n%s\n",text);}else if (pd=='b'||pd=='B')goto loop;}if(pdx=='r'||pdx=='R')shanchu(text,l);}}11./*插入*/void charu(char text[],int l) //向文本中插入内容{system("cls");int i=0,t=0,t2=0,a=-1,b;char cr[20]="",pd,x[500],c,d;printf("\n当前文本信息为:\n");printf("%s",text);printf("\n输入您要在哪个内容前插入,以@结束:");fflush(stdin);while ((c=getchar())!='@') //用一个数组接收要插入在哪个内容之前{if (c=='@'){break;}else{cr[t]=c;t++;continue;}}loop:a=strindex(text,cr,t,l); //查找并返回要插入的位置点int hs=1,ls=0;for (b=0;b<a;b++){ls++;if (text[b]=='\n'){hs++;ls=0;}}if (a==-1){printf("\n查找到结尾没有找到插入点,输入【R】查找其他;按其他键返回菜单:\n");l=0;fflush(stdin);d=getchar();fflush(stdin);}else{printf("\n您要插入的位置是第%d行,第%d列之前\n【A】.不是此位置向后继续找插入点\n【B】.在此位置插入\n按其他键返回菜单\n请选择:",hs,ls+1);fflush(stdin);pd=getchar();if (pd=='a'||pd=='A'){l=a+t;goto loop;}else if (pd=='b'||pd=='B'){printf("\n\n输入您要插入的内容,以@结束:");fflush(stdin);while ((c=getchar())!='@'){if (c=='@'){break;}else{x[t2]=c;t2++;continue;}}for (i=ntext;i>=a;i--){text[i+t2]=text[i];}for (i=0;i<t2;i++){text[i+a]=x[i];}ntext=ntext+t2;printf("\n当前文本信息为:\n");for (i=0;i<=ntext-1;i++)printf("%c",text[i]);printf("\n文本插入成功\n");fflush(stdin);getchar();}}if (d=='r'||d=='R'){l=0;charu(text,l);}status=0;}12./*替换*/void tihan(char p[],int l) //内容替换{int t=0,t1=0,i,a,b;char c,th[20],d,d1,bth[20];int i2;system("cls");printf("\n当前文本信息为:\n");for (i2=0;i2<=ntext-1;i2++)printf("%c",p[i2]);printf("\n输入要被替换的内容,以@结束:");fflush(stdin);while ((c=getchar())!='@') //t指替换前内容的长度{if (c=='@'){break;}else{bth[t]=c;t++;continue;}}loop:a=strindex(p,bth,t,l); //查找要被替换的内容的位置int hs=1,ls=0;for (b=0;b<a;b++){ls++;if (p[b]=='\n'){hs++;ls=0;}}if (a==-1){printf("\n查找到结尾没有找到要被替换的内容\n输入【R】查找其他内容,按其他键返回主菜单键\n");l=0;d=getchar();fflush(stdin);}else{printf("\n\n已经找到要查找的数据在第%d行第%d列\n输入【A】继续向后查找相同内容\n输入其他键将进行替换操作\n请选择:",hs,ls+1);fflush(stdin);l=t+a;char pd;pd=getchar();if (pd!='a'&&pd!='A'){printf("\n是否要替换该内容?\nA:替换给内容;其他键返回主菜单\n请选择:");fflush(stdin);d1=getchar();if (d1=='a'||d1=='A'){printf("\n输入要替换的内容,以@结束:");fflush(stdin);while ((c=getchar())!='@') //t1指替换后的内容长度{if (c=='@'){break;}else{th[t1]=c;t1++;continue;}}if (t==t1) //将要被替换的内容和替换后的内容进行长度比较{for (i=0;i<t1;i++)p[i+a]=th[i];}else{if (t>t1){for (i=0;i<t1;i++){p[i+a]=th[i];}for (i=a+t1;i<ntext;i++){p[i]=p[i+t-t1];}ntext=ntext+t1-t;}else{for (i=ntext;i>=a;i--){p[i+t1-t]=p[i];}for (i=0;i<t1;i++){p[i+a]=th[i];}ntext=ntext+t1-t;}}printf("替换成功");printf("\n当前文本信息为:\n");for (i2=0;i2<=ntext-1;i2++)printf("%c",p[i2]);getchar();status=0;}}elsegoto loop;}if(d=='r'||d=='R')tihan(text,l);}13./*退出*/void tuichu(int status){char pd;if(status)exit(0);elseprintf("还未保存文件,确定退出?(Q.直接退出;Y.保存后退出");fflush(stdin);pd=getchar();if(!(pd=='Q'||pd=='q'))bc(text);exit(0);}int main(){menu();return (0);}调试分析1.界面设计2.界面设计2主界面的设计如图,比较单调。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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 += " 已存在。