程序设计_文本编辑器的设计与实现
java课设文本编辑器的设计与实现

淮海工学院计算机工程学院
课程设计报告
设计名称:面向对象课程设计
选题名称:文本编辑器的设计与实现
姓名:学号:
专业班级:
系(院):计算机工程学院
设计时间:2015.6.21~2014.7.4
设计地点:计算机楼机房、教室、宿舍
();
("确定");
("这是一个简单的文本编辑器!");
();
();
();
(200,200,250,150);
();
(20 ,60,220,30);
( ("楷体",16));
();
(100,100,50,30);
();
}
( e)
{
(())
{
();
}
}
}
4.2运行结果显示
如图1:文本编辑器主界面
如图2:文本编辑器文件菜单
如图3:
文本
编辑
器编
辑菜
单
如图4:文本编辑器格式菜单
如图5:文本编辑器帮助菜单
如图6:文本编辑器字体格式和背景
如图7:
文本编。
多文本编辑器设计与实现方案

多文本编辑器设计与实现方案(WORD版完整可编辑,需更多资料请联系)摘要在深入研究当前各种文本编辑软件优劣的前提上,分析软件开发中程序员的实际需求,发现他们有时候并不需要打开系统庞大、启动较慢的集成开发环境来阅读改写代码,只需要通过小型的文本编辑器即可。
然而大多数小型文本编辑器并不能高亮显示代码中的关键字,或者软件本身闭源,不能根据需要改变高亮显示关键字列表,或者软件只有windows版或Linux版平台移植性较差,这并不能满足经常需要在各个软件系统平台之间交叉开发的程序员的需求,甚至影响了他们的工作效率。
本系统运用了平台移植性较好的Qt语言来开发,不同平台之间只需要重新编译即可,且代码易读可重用性良好,程序员只需要修改代码中关键字列表或根据需要自定义自己的高亮显示关键字列表即可,这一软件为程序员阅读改写代码提供了便利。
关键词自定义;多文本编辑器;Qt;高亮显示The Design and Implementation of Multiple Document EditorAbstractIn the further study of the current various text editing software quality on the premise of the analysis of the actual demand of software development programmers, find that they sometimes don't need to open the large system, start the slower integrated development environment to read rewrite code, you just need to through the small text editor. But most small text editor is not highlighted keywords in your code, or closed source software itself, not according to the need to change the highlighted keywords list, or software version only Windows or Linux version of the moving platform plant sex is bad, it doesn't meet often need to cross between different software system platform development demand for programmers, and even affect their work efficiency. This system USES the platform portability better Qt to develop language, you just need to recompile, between the platform and code easy to read good reusability, programmers only need to modify the code in the keywords list or according to the need to customize your highlighted keywords list, this software provides convenience for programmers to read rewriting code.Key words: multiple document editor; plugins; custom highlight目录摘要.......................错误!未定义书签。
VB课程设计-文本编辑器

VB课程设计报告——文本编辑器学院名称:学生姓名:专业名称:班级:一、课程设计题目用Visual Basic程序设计语言编写一个简易的文本编辑器要求:有最基本的文本编辑功能,包括复制、剪切、粘贴、字体设置、背景颜色设置、字体颜色设置;同时拥有文本管理功能,包括打开文件、保存文件;以及完整的系统运行退出等功能,所有的操作可选择设定的快捷键。
二、课程设计目的虽然本学期的Visual Basic课程是自学的,相对于课堂学习有些不足,但通过平时的上机实验,初步掌握了VB程序设计的各种方法,学会了编写最基本的VB程序;对于完整的VB程序设计来讲是很不足的,平时掌握的只是单独的窗体(Form)程序编写,以及各种简单控件的使用,没有做到很好连贯性,所以有必要做一次完整的VB程序设计,结合所学的基本知识,使用多个窗体自成一套系统,加上各种控件的综合运用,初步设计一个合格的VB 应用程序;这样在巩固VB所学的同时,更好地学会程序设计的一些思想和方法,对于以后的编程学习或是工作有重要的实践意义。
三、课程设计说明题目为文本编辑器,即是最基本的文本编辑程序,首先必须做好文本编辑器本身的功能,然后对其完善,做成一个完整的小程序功能设计说明:功能是这个文本编辑器的核心内容,也就是程序的作用,它是用来做什么的;本程序就是用来编写文本的,编写过程中要利用到窗体(Form)一个,控件包括:RichTextBox1(超文本框)、CommonDialog(通用对话框),以及InputBox(消息框)、菜单编辑器等,。
要做的工作就是编写代码把这些控件和窗体等结合为一体,使得程序能够成为一体,顺畅运行。
本次设计在按照题目要求的前提下,为了完整地展示一个应用程序,在最初就设计为最基本的文本的编辑器,所以取名为“易记本”,就是简易记事本的简称,然后加入图标,在程序完成之后还进行了大包操作,得到应用程序的安装文件,最后安装在电脑上运行使用。
四.源代码Private Sub Command1_Click()Dim i As IntegerIf Text2.Text <> "123456" Theni = MsgBox("密码错误", 5 + vbExclamation, "警告")If i <> 6 ThenEndElseText2.Text = ""Text2.SetFocusEnd IfEnd IfForm1.HideForm2.ShowEnd SubPrivate Sub Form_Load()Text1.Text = ""Text1.MaxLength = 6Text2.Text = ""Text2.MaxLength = 6Text2.PasswordChar = "*"End SubPrivate Sub Text1_LostFocus()If Not IsNumeric(Text1.Text) Then MsgBox "帐号必须为数字", , "警告" Text1.Text = ""Text1.SetFocusEnd IfEnd SubPrivate Sub Command1_Click()Form2.HideForm3.ShowEnd SubPrivate Sub Command2_Click()Form2.HideForm4.ShowEnd SubPrivate Sub Command3_Click()Form2.HideForm5.ShowEnd SubPrivate Sub Color_Click() CommonDialog1.Action = 3Text1.ForeColor = CommonDialog1.Color End SubPrivate Sub Command1_Click()Form3.HideForm2.ShowEnd SubPrivate Sub Copy_Click()Dim st As Stringst = Text1.SelTextEnd SubPrivate Sub Cut_Click()Dim st As Stringst = Text1.SelTextText1.SelText = ""End SubPrivate Sub Exit_Click()EndEnd SubPrivate Sub Font_Click()CommonDialog1.Flags = cdlCFBoth Or cdlCFEffects CommonDialog1.Action = 4Text1.FontName = CommonDialog1.FileNameText1.FontSize = CommonDialog1.FontSizeText1.FontBold = CommonDialog1.FontBoldText1.FontItalic = CommonDialog1.FontItalicText1.FontStrikethru = CommonDialog1.FontStrikethru Text1.FontUnderline = CommonDialog1.FontUnderline Text1.ForeColor = CommonDialog1.ColorEnd SubSub New_Click()Text1.Text = ""Me.Caption = FileEnd SubSub Open_Click()CommonDialog1.Action = 1Text1.Text = ""Open CommonDialog1.FileName For Input As #1Do While Not EOF(1)Line Input #1, inputdataText1.Text = Text1.Text + inputdata + vbCrLfLoopClose #1End SubPrivate Sub Paste_Click()Text1.SelText = stEnd SubPrivate Sub Print_Click()CommonDialog1.Action = 5For i = 1 To CommonDialog1.CopiesPrinter.Print Text1.TextNext iPrinter.EndDocEnd SubPrivate Sub SaveAs_Click()CommonDialog1.FileName = "vb课设用.txt" CommonDialog1.DefaultExt = "txt"CommonDialog1.Action = 2Open CommonDialog1.FileName For Output As #1 Print #1, Text1.TextEnd SubDim arr As Long, sum As Long, a As IntegerPrivate Sub Command1_Click()a = HScroll1.ValueText1.Text = plus(a)Call isprime(a)End SubPrivate Sub Command2_Click()EndEnd SubPrivate Sub HScroll1_Change()Label2.Caption = HScroll1.ValueEnd SubSub isprime(max As Integer)Dim x As Integer, i As Integer, j As IntegerFor i = 2 To maxx = 0For j = 2 To i - 1If i Mod j = 0 Then x = 1Next jIf x = 0 Then Label2.Caption = Label2.Caption & i & " " Next iEnd SubFunction plus(a As Integer) As LongFor i = 1 To asum = sum + iNext iplus = sumEnd FunctionDim x1 As IntegerDim y1 As IntegerDim x2 As IntegerDim y2 As IntegerDim flag As BooleanPrivate Sub Command1_Click()On Error Resume NextCommonDialog1.CancelError = True CommonDialog1.DialogTitle = "颜色" CommonDialog1.ShowColorIf Err <> 32755 Then Picture1.ForeColor = CommonDialog1.Color End IfEnd SubPrivate Sub Command2_Click()Picture1.ClsEnd SubPrivate Sub Command3_Click()Form5.HideForm6.ShowEnd SubPrivate Sub Option1_Click()Picture1.DrawWidth = 1End SubPrivate Sub Option2_Click()Picture1.DrawWidth = 2End SubPrivate Sub Option3_Click()Picture1.DrawWidth = 4End SubPrivate Sub Option4_Click()Picture1.DrawWidth = 8End SubPrivate Sub Form_Load()Picture1.Scale (0, 0)-(400, 400)flag = FalseEnd SubPrivate Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) flag = Truex1 = Xy1 = YEnd SubPrivate Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) If flag = False ThenExit SubEnd IfIf flag = True Thenx2 = Xy2 = YPicture1.Line (x1, y1)-(x2, y2)x1 = x2y1 = y2End IfEnd SubPrivate Sub Picture1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) flag = FalseEnd SubDim ctP As Single, ctDu() As Single, ctDuS As LongPrivate Sub Command1_Click()Picture1.AutoRedraw = True: ctP = 3.1415926Timer1.Interval = 20: Timer1.Enabled = Not Timer1.EnabledEnd SubPrivate Sub Command2_Click()Form7.HideForm6.ShowEnd SubPrivate Sub Form_Load()Me.Caption = "旋转的椭圆": Command1.Caption = "转/停"Text1.Text = "9 个": Timer1.Enabled = FalseEnd SubPrivate Sub Text1_Change()ctDuS = Val(Text1.Text)If ctDuS > 200 Then Text1.Text = "200"If ctDuS < 1 Then ctDuS = 1ReDim ctDu(0 To ctDuS)End SubPrivate Sub Timer1_Timer()Dim I As LongPicture1.DrawWidth = 3Picture1.ClsFor I = 0 To ctDuSctDu(I) = ctDu(I) + ctP * 0.01 * I / 9If ctDu(I) > ctP * 2 Then ctDu(I) = ctDu(I) - ctP * 2Show1 ctDu(I), &HFFFFFF / (ctDuS + 1) * I * 0.6NextDim x As Single, y As SingleStatic J As SinglePicture1.DrawWidth = 15x0 = Picture1.ScaleWidth * 0.5: y0 = Picture1.ScaleHeight * 0.5 Picture1.PSet (x0, y0), 255x = 1200: y = 0: J = J - 0.05If J < -ctP * 2 Then J = J + ctP * 2Zhuan J, x, yPicture1.PSet (x0 + x, y0 + y), RGB(0, 0, 255)End SubPrivate Sub Show1(ToJ As Single, Se As Long)Dim I As Single, x As Single, y As Single, x0 As Single, y0 As Single Dim a As Single, b As Single, x1 As Single, y1 As SingleIf Picture1.ScaleWidth < Picture1.ScaleHeight Thena = Picture1.ScaleWidth * 0.45Elsea = Picture1.ScaleHeight * 0.45End Ifb = a * 0.25x0 = Picture1.ScaleWidth * 0.5: y0 = Picture1.ScaleHeight * 0.5x = -a: y = 0: Zhuan ToJ, x, yx1 = a: y1 = 0: Zhuan ToJ, x1, y1Picture1.Line (x0 + x, y0 + y)-(x0 + x1, y0 + y1), Sex = 0: y = -b: Zhuan ToJ, x, yx1 = 0: y1 = b: Zhuan ToJ, x1, y1Picture1.Line (x0 + x, y0 + y)-(x0 + x1, y0 + y1), SeFor I = 0 To ctP * 2 Step 0.1x = a * Sin(I): y = b * Cos(I)Zhuan ToJ, x, yPicture1.Line -(x0 + x, y0 + y), SeNextx = a * Sin(I): y = b * Cos(I)Zhuan ToJ, x, yPicture1.Line -(x0 + x, y0 + y), SeEnd SubPrivate Sub Zhuan(ToJ As Single, x As Single, y As Single) Dim S As Single, J As SingleS = Sqr(x ^ 2 + y ^ 2)If S = 0 Then J = 0 Else J = y / SIf Abs(J) >= 1 ThenIf J > 0 Then J = ctP * 0.5 Else J = -ctP * 0.5ElseJ = Atn(J / Sqr(-J * J + 1))End IfIf x < 0 Then J = -ctP - Jx = S * Cos(J + ToJ): y = S * Sin(J + ToJ) End Sub Private Sub Command1_Click()EndEnd Sub五、运行结果六.心得体会通过本次课程设计,使我对VB的认识更加深入了一层,VB主要由两部分组成,一个是Visual 可视化界面设计,另一个是Basic程序设计。
文本编辑器实验报告

综合性实验文本编辑器一.实验要求1.参考系统的写字板功能,编写一个小型的文字编辑工具;2.该文档编辑器,至少完成以下功能:A、文件操作:新建,打开,保存,退出;B、编辑操作:复制,剪切,黏贴,全选;C、查找与替换:查找,替换;D、格式操作:字体,颜色等。
3.界面设计应考虑美观,操作简便等问题,应有工具栏,右键菜单;二.设计思路1、首先,设计一个整体框架。
文本编辑器有一个主的窗体form1,文件的新建,打开,保存,退出;复制,剪切,黏贴,全选;字体,颜色等都是在这个窗体上进行的。
而这些操作的进行,都需要在richtextbox上进行,并且要允许用户打开多个窗口,所以我又增加了一个窗体newform(父窗体为form1),作为用户新建时调用的窗口。
其次,可以增加一个新的窗体searchform,作为查找、替换字符串的操作窗口。
所以,总的来说,有三个窗体,form1为主窗体,newform是用户在新建时调用的窗体,searchform为用户在操作查找、替换功能时需要调用的窗体。
2、接下来,就是对各个窗体的实现了。
Form1是主窗体,上面有菜单栏,工具栏,可以新建窗口,以及支持右键菜单。
3、Newform是用户新建时调用的。
它主要就是一个窗体中放了一个richtextbox,以及支持右键菜单。
4、Searchform是一个查询、替换窗体。
上面有2个label,2个textbox,3个button。
2个textbox的作用为获取要查找的字符串,已经要替换的字符串。
3个button的作用分别为“查询”、“单个替换”、“全部替换”。
5、此文本编辑器支持新建,打开,保存,退出,复制,剪切,黏贴,全选,查找,替换,字体,颜色以及支持右键菜单。
只要把鼠标放到主窗体上,就可支持右键新建、打开;把鼠标放到richtextbox上时,就可以支持右键复制、黏贴、剪切、关闭。
四则运算核心代码:private void打开ToolStripMenuItem1_Click(object sender, EventArgs e)//打开{//OpenFileDialog openfileDialog = new OpenFileDialog();openFileDialog1.Filter = "纯文本文件(*.txt)|*.txt|所有文件(*.*)|*.*";if (this.openFileDialog1.ShowDialog()== DialogResult.OK){s_FileName= openFileDialog1.FileName;NewForm nf = new NewForm();nf.MdiParent = thi s;nf.Text = s_FileName;using (StreamReader read = new StreamReader(s_FileName)){nf.richTextBox1.Text = read.ReadToEnd();}nf.Show();}}public void savefile()//保存文件{//SaveFileDialog saveFileDialog1 = new SaveFileDialog();saveFileDialog1.Filter = "纯文本文件(*.txt)|*.txt|所有文件(*.*)|*.*";saveFileDialog1.FilterIndex = 0;saveFileDialog1.RestoreDirectory = true;NewForm nf = (NewForm)this.ActiveMdiChild;if (nf == null){MessageBox.Show("没有文档可保存!");return;}if (s_FileName.Length != 0){if (File.Exists(@s_FileName)){StreamWriter sw = null;sw = new StreamWriter(s_FileName);sw.Write(nf.richTextBox1.Text);sw.Flush();sw.Close();return;}}if (saveFileDialog1.ShowDialog() == DialogResult.OK){if (s_FileName.Length != 0){nf.richTextBox1.SaveFile(s_FileName, RichTextBoxStreamType.PlainText);}else{s_FileName = saveFileDialog1.FileName;nf.richTextBox1.SaveFile(s_FileName, RichTextBoxStreamType.PlainText);}}}private void保存ToolStripMenuItem_Click(object sender, EventArgs e)//保存{savefile();}private void查找ToolStripMenuItem_Click(object sender, EventArgs e)//查找替换功能{if (searchform == null){searchform = new searchForm();searchform.SearchAction+=new searchForm.SearchEventHandle(OnSearch);}searchform.Show();}private void OnSearch(){NewForm nf=(NewForm)this.ActiveMdiChild;this.SearchString = searchform.SearchString;start = nf.richTextBox1.Find(SearchString,start,RichTextBoxFinds.MatchCase);if (searchform.two == 1){if (start >= 0){nf.richTextBox1.SelectedText = searchform.ReplaceStr;start += searchform.ReplaceStr.Length;}else{MessageBox.Show("已到文档末尾!");start = 0;}}else if (searchform.three == 1){string replaceall=nf.richTextBox1.Text.Replace(searchform.SearchString, searchform.ReplaceStr);nf.richTextBox1.Text = replaceall;start = 0;}else{if (start >= 0) start += thi s.SearchString.Length;else{MessageBox.Show("已到文档末尾!");start = 0;}}}private void全选ToolStripMenuItem_Click(object sender, EventArgs e)//后退{NewForm nf = (NewForm)this.ActiveMdiChild;nf.richTextBox1.Undo();}private void全选ToolStripMenuItem1_Click(object sender, EventArgs e)//全选{NewForm nf = (NewForm)this.ActiveMdiChild;nf.richTextBox1.SelectAll();}三.程序运行效果图1.开始运行的界面:2、新建文档:3、文本编辑:4、文档保存5、查找:6、替换:4实验总结教你如何用WORD文档(2012-06-27 192246)转载▼标签:杂谈1. 问:WORD 里边怎样设置每页不同的页眉?如何使不同的章节显示的页眉不同?答:分节,每节可以设置不同的页眉。
文本编辑器的程序设计及代码示例

文本编辑器的程序设计及代码示例在计算机科学领域,文本编辑器是一种用于编辑文本文件的应用程序。
它允许用户创建、修改和保存文本文件,并提供了一系列功能来方便用户进行编辑操作。
本文将介绍文本编辑器的程序设计原理,以及示范几个常见的代码示例。
一、程序设计原理文本编辑器的程序设计需要考虑以下几个方面:1. 用户界面设计:一个好的文本编辑器应具备直观友好的用户界面,提供各种操作选项和快捷键,使用户能够轻松地进行文本编辑。
2. 文本处理功能:文本编辑器应具备基本的文本处理功能,如插入和删除文本、查找和替换、拷贝和粘贴等。
这些功能需要通过合适的数据结构和算法来实现。
3. 文本格式化:文本编辑器应支持对文本进行格式化操作,如自动对齐、缩进、换行等。
4. 多标签支持:多标签功能允许用户同时打开多个文本文件,并在它们之间切换。
这要求程序设计中能够有效地管理多个文本文件的打开、关闭和切换。
二、代码示例下面是几个简单的代码示例,用于展示文本编辑器的一些基本功能。
1. 创建文本文件```pythondef create_file(filename):# 创建一个新的文本文件file = open(filename, "w")file.close()```2. 打开文本文件```pythondef open_file(filename):# 打开文本文件并返回文件对象 file = open(filename, "r")return file```3. 插入文本```pythondef insert_text(file, position, text): # 在指定位置插入文本file.seek(position)content = file.read()file.seek(position)file.write(text + content)```4. 删除文本```pythondef delete_text(file, start, end):# 删除指定位置的文本file.seek(start)content = file.read()file.seek(start)file.write(content[:end - start])```5. 查找和替换文本```pythondef find_replace(file, old_text, new_text):# 在文本中查找指定内容并替换file.seek(0)content = file.read()new_content = content.replace(old_text, new_text)file.seek(0)file.write(new_content)```6. 关闭文本文件```pythondef close_file(file):# 关闭文本文件file.close()```三、总结通过以上代码示例,我们展示了文本编辑器的一些基本功能,包括创建文件、打开文件、插入和删除文本、查找和替换文本以及关闭文件。
数据结构-课程设计--简易文本编辑器

《数据结构》课程设计班级: 10计本2班姓名:邓寅森学号: 2010305202指导教师:杨老师完成日期: 2011年12月计算机科学与技术系课程设计评分表课程名称: 数据结构 简易文本编辑器教师签名:日期:一、需求分析1.1 问题描述传统的纸质文档已经不能满足大家的需求,有容易丢失、查找不方便等缺点。
计算机信息管理为人们的生活、工作提供了方便,提高了效率。
“简易文本编辑器”是为了帮助老师、同学或其他一些需要使用文本编辑的人员进行管理和分析的一种计算机应用程序。
1.2 基本任务通过用户调查分析及实际需求,系统需要实现如下基本任务:(1)输入数据信息建立文本;(2)查询文本中满足要求的信息;(3)插入新的信息到文本中;(4)删除不再需要的文本信息;(5) 查看所有的文本信息。
二、概要设计为了完成需求分析的基本任务,主要从以下3个方面进行设计:2.1 主界面设计为了实现简易文本编辑器的各项功能,设计了一个含有多个菜单项的主控菜单模块以操作系统的各项功能,以方便用户使用系统。
系统进入菜单运行界面如图所示:简易文本编辑器主菜单2.2 数据结构设计系统采用线性表的顺序存储结构表示和存储“简易文本编辑器”中的信息。
实现文本的输入,删除,插入,查找,显示功能。
2.3 系统功能设计运行程序,提示进入菜单,按“回车键”进入主菜单,再可以在主菜单上进行各项操作。
每次进入菜单,选择“1键”新建文本,然后才可以进行其他操作,或者按“0键”选择退出。
三、模块设计3.1 模块设计系统主要包含主程序模块和其它操作模块。
其调用关系如图所示。
模块调用示意图3.2 系统子模块及其功能设计本系统共设计了16个子模块,各程序的函数名及功能说明如下:1、/*由模式串nextval值*/void GetNextval(SqVString T,int nextval[])2、/*模式匹配KMP算法*/int KMPIndex(SqVString S,int pos,int next[],SqVString T)3、/*初始化串*/void InitString(SqVString *S,char *str)4、/*串插入*/int StrInsert(SqVString *S,int pos,SqVString T)5、/*串删除*/int StrDelete(SqVString *S,int pos,int len)6、/*求子串*/int SubStr(SqVString S,int pos,int len,SqVString *T)7、/*串连接*/int Concat(SqVString *S,SqVString T)8、/*串赋值*/int StrAssign(SqVString *S,char *value)9、void InputString() //新建10、void DeleteString()//删除11、void DeleteSubstring()//删除12、void InsertSubstring()//查找13、void DisplayString()//显示14、void cd()//进入界面15、void ts()//主菜单16、void tc()//退出3.3 系统模块之间的调用关系系统的16个子模块之间的主要调用关系所示:系统函数调用关系图四、详细设计4.1 数据结构设计系统采用线性表的顺序存储结构存储通讯录信息。
C语言实现文本编辑器

C语言实现文本编辑器本文将介绍使用C语言实现一个简单的文本编辑器的基本原理和实现步骤。
通过此编辑器,用户可以打开、编辑、保存和关闭文本文件,并且具备基本的文本编辑功能,如插入、删除、查找和替换文本等。
一、编辑器界面设计为了实现一个简单易用的文本编辑器,我们可以设计一个基于命令行界面的编辑器。
用户可以通过文本命令来操作编辑器,从而实现基本的编辑功能。
二、文件的打开和保存在C语言中,我们可以使用标准文件操作函数来实现文件的打开和保存。
用户可以通过指定文件路径来打开或保存文件。
打开文件时,程序会读取文件内容,并将其显示在编辑器界面中;保存文件时,程序会将编辑器内的文本内容写入目标文件中。
三、基本文本编辑功能1. 插入文本用户可以使用插入命令将文本内容插入到当前光标位置之前或之后。
程序会根据插入位置的不同,调整光标的位置,并显示插入后的文本内容。
2. 删除文本用户可以使用删除命令删除当前光标位置处的文本内容。
程序会删除光标所在位置的字符,并相应地调整文本的显示和光标的位置。
3. 搜索文本用户可以使用搜索命令来查找特定的文本内容。
程序会从当前光标位置开始搜索,并根据搜索结果将光标移动到匹配文本的位置。
4. 替换文本用户可以使用替换命令将指定的文本内容替换为新的内容。
程序会搜索文本中的所有匹配项,并将其替换为新的内容。
四、其他功能扩展除了基本的文本编辑功能外,我们还可以对编辑器进行功能扩展,以提升用户体验和编辑效率。
一些可能的扩展功能包括:1. 撤销和重做功能:允许用户撤销和重做操作,以便回退或恢复文本编辑的历史记录。
2. 多窗口编辑:支持同时打开和编辑多个文本文件的功能,提供多窗口切换和管理。
3. 自动保存与恢复:定时自动保存编辑的文本内容,并在下次启动时自动恢复上次编辑的状态。
4. 语法高亮:根据文本类型,对关键字、注释、字符串等进行特殊标记显示,提升代码可读性。
五、总结通过使用C语言,我们可以实现一个简单但功能完善的文本编辑器。
java课程设计报告-java课程设计

Java 课程设计报告题目:文本编辑器班级:学号:姓名:成绩:日期:年月日目录一、综合设计的目的与要求⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯3二、综合设计正文⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯31. 系统分析⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯31.1系统开发背景、开发范围、建设目标与必要性开发⋯⋯⋯⋯⋯⋯⋯⋯31.2需求分析⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯32.系统设计⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯32.1功能设计⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯32.2系统运行环境与开发工具⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯43 . 系统实施⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯4 3.1 源程序⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯43.2 .系统测试及部分截图⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯12三、综合设计总结或结论⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯13四、参考文献⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯13《文本编辑器》一、综合设计的目的与要求要求在学生能够较熟练使用java 程序设计语言进行软件代码的编写,同时还要具备较好的项目分析的能力,加深对相关课程基本内容的理解。
同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统的练习。
二、综合设计正文1系统分析1.1系统开发背景、开发范围、建设目标与必要性随着计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。
当然对文本编辑操作仍然占据着重要地位,记事本是简单便捷的文本编辑器,可实现对文本编辑操作的基本功能。
1.2需求分析程序设计主要分为两大部分:简单 GUI 设计和程序功能设计。
通过 GUI 设计实现图形用户界面,提供图形菜单,方便用户操作。
使用Java 语言编写一个能够对输入文字进行操作,具有合理的界面,能够在界面中实现右键快捷方式,对文档内容进行编辑操作,并且能够顺利退出的程序。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
程序设计报告(2014/2015学年第一学期)题目:文档编辑器的设计与实现专业组长学号姓名组员学号姓名指导教师指导单位日期文档编辑器的设计与实现一课题内容与要求文档编辑器系统是对一个文本内容进行各种常规操作,例如:插入、删除、查找、替换等功能。
通过此课题,熟练掌握文本文件的操作及用字符数组来实现字符串操作的功能。
基本要求:(1)首先文件标准化处理:如果句子有前导空格和后导空格,则删除这些空格,单词与单词之间只保留一个空格。
(2)统计功能:可方便地统计出文档中所有出现次数最多和最少的字符串。
(3)查找与替换功能:能够查找任意一个字符串在文档中出现的次数,并可以选择全部或有选择地将其替换为另一个字符串。
(4)显示功能:编辑完成后可以显示编辑后的文档。
(5)抽取功能:根据要求将文件中的某一类字符抽取,并存入另外的文件,如抽取所有的数字、抽取所有的字母等。
(1)提供可操作的主菜单:输出个菜单,用于显示若干个可选的功能选项。
根据输入的选项来运行不同的功能,运行不同的函数。
(2)进行文本信息的载入:选择输入方式,输入文本内容,提供可操作文本。
(3)统计数据功能:输出第二子菜单,用于显示若干个可选的功能选项。
根据输入的选项来运行不同的功能,运行不同的函数。
(4)编辑数据功能:输出个菜单,用于显示若干个可选的功能选项。
根据输入的选项来运行查找、删除、插入、显示当前文本等不同的功能,运行不同的函数。
(5)退出程序:退出当前程序。
三概要设计本程序共有11个函数1、HeadWord() 标题函数,即一个输出标题,永远出现在程序的最顶端。
2、CreatWord() 文本输入函数,实现对文本的内容进行输入;3、PrintWord() 当前文本内容输出函数,实现文本内容输出;4、CountWord() 文章内容统计函数,文本内容进行统计,包括对文本内容中的大写字母、小写字母、数字、标点符号、空格以及文章所有字数的个数的统计;5、SearchWord() 文章内容查找函数,实现查找部分;6、DeleteWord() 文章内容删除函数,实现删除部分;7、InsertWord() 文章内容插入函数,实现插入部分;8、Bmenu() 第二子菜单函数,实现子菜单功能;9、AboutWord() 显示作者信息的函数;10、menu() 主菜单函数,实现可操作菜单;11、main()主函数。
(1)查找功能:图二:查找功能图图三:插入功能图图四:删除功能图图五:统计功能图四源程序代码#include<stdio.h>#include<malloc.h>#include<string>#include<iostream>#include<stdlib.h>#include<conio.h>#include<fstream>using namespace std;#define Link_Size 100int NUM,C,N;typedef struct list{char data[80];int length;struct list *next;struct list *pre;int row;} LinkList;LinkList *head;void HeadWord(){// system("cls");cout<<"\t\t****************************************************\n"; cout<<"\t\t**** 欢迎使用简单的文本编辑器****\n"; cout<<"\t\t****************************************************\n"; }LinkList *LoadWord(){LinkList *temp;char ch;int i,j;head->next=(LinkList *)malloc(sizeof(LinkList));head->pre=NULL;temp=head->next;temp->pre=NULL;temp->length=0;for(i=0;i<80;i++)temp->data[i]='\0';cout<<"继续上次输入(输入#号结束):\n";for(j=0;j<Link_Size;j++){for(i=0;i<80;i++){ch=getchar();temp->data[i]=ch;temp->length++;if(ch=='#'){NUM=j;break;}}if(ch=='#'){temp->length=i;temp->next=NULL;break;}temp->next=(LinkList *)malloc(sizeof(LinkList)) ;temp->next->pre=temp;temp=temp->next;for(i=0;i<80;i++)temp->data[i]='\0';}ofstream ocout;ocout.open("f://text.txt",ios::app);ocout<<temp->data;ocout.close();LinkList *temp;char ch; temp->row=NUM+1;system("cls");return temp;}LinkList *CreatWord(){int i,j;head->next=(LinkList *)malloc(sizeof(LinkList));head->pre=NULL;temp=head->next;temp->pre=NULL;temp->length=0;for(i=0;i<80;i++)temp->data[i]='\0';cout<<"开始创建文本,请输入文章(输入#号结束):\n"; for(j=0;j<Link_Size;j++){for(i=0;i<80;i++){ch=getchar();temp->data[i]=ch;temp->length++;if(ch=='#'){NUM=j;break;}}if(ch=='#'){temp->length=i;temp->next=NULL;break;}temp->next=(LinkList *)malloc(sizeof(LinkList)) ;temp->next->pre=temp;temp=temp->next;for(i=0;i<80;i++)temp->data[i]='\0';}ofstream ocout;ocout.open("f://text.txt");ocout<<temp->data;ocout.close();temp->row=NUM+1;system("cls");return temp;}void PrintWord(){ifstream icin;icin.open("f://text.txt");char tt[100]={0};icin.getline(tt,100,0);cout<<tt<<endl;}void CountWord(){LinkList *temp;char ch;int i,j,t;int WORD=0,word=0,space=0,num=0,punct=0,sum=0;temp=head->next;for(j=0;j<=NUM;j++){for(i=0;(i<80)&&(temp->data[i])!='#';i++){ch=temp->data[i];if((ch>='A')&&(ch<='Z'))WORD++;else if((ch>='a')&&(ch<='z'))word++;else if((ch>='0')&&(ch<='9'))num++;else if(ch==' ')space++;else if(ch==33||ch==34||ch==39||ch==44||ch==46||ch==58||ch==59||ch==63){punct++;}}sum=WORD+word+num;}while(1){cout<<"\n";HeadWord();cout<<"\t\t****************************************************\n"; cout<<"\t\t**** 文章内容统计菜单****\n"; cout<<"\t\t****************************************************\n"; cout<<"\t\t**** 1、文章中大写字母的个数****\n"; cout<<"\t\t**** 2、文章中小写字母的个数****\n"; cout<<"\t\t**** 3、文章中数字的个数****\n"; cout<<"\t\t**** 4、文章中标点符号的个数****\n"; cout<<"\t\t**** 5、文章中空格的个数****\n"; cout<<"\t\t**** 6、文章中所有字数****\n"; cout<<"\t\t**** 7、退出返回主菜单****\n"; cout<<"\t\t**** 8、直接退出本系统****\n"; cout<<"\t\t****************************************************\n"; cout<<"\t\t请选择需统计项目:";cin>>t;switch(t){case 1:system("cls");HeadWord();cout<<"文章中大写字母的个数:"<<WORD<<endl;cout<<"按回车键继续·····";getchar();getchar();system("cls");break;case 2:system("cls");HeadWord();cout<<"文章中小写字母的个数:"<<word<<endl;cout<<"按回车键继续·····";getchar();getchar();system("cls");break;case 3:system("cls");HeadWord();cout<<"文章中数字的个数:"<<num<<endl;cout<<"按回车键继续·····";getchar();getchar();system("cls");break;case 4:system("cls");HeadWord();cout<<"文章中标点符号的个数:"<<punct<<endl;cout<<"按回车键继续·····";getchar();getchar();system("cls");break;case 5:system("cls");HeadWord();cout<<"文章中空格的个数:"<<space<<endl;cout<<"按回车键继续·····";getchar();getchar();system("cls");break;case 6:system("cls");HeadWord();cout<<"文章中所有字数:"<<sum<<endl;cout<<"按回车键继续·····";getchar();getchar();system("cls");break;}if(t==7){system("cls"); break;}if(t==8) exit(0);}}void SearchWord(char *str1,LinkList* temp){char Data[20] ;int i,j,k=0,sum=0;int l=1;temp=head->next;strcpy(Data,str1);for(i=0;i<=NUM;i++){for(j=0;j<80;j++){if((temp->data[j])==Data[k]) k++;else if(Data[k]!='\0'){j=j-k;k=0;}if(Data[k]=='\0'){sum++;j=j-k+1;cout<<"\t\t\t第"<<l<<"次出现在第"<<i+1<<"行第"<<j+1<<"列\n";k=0;continue;}}temp=temp->next;}cout<<"\t\t\t字符串总共出现次数为:"<<sum<<endl;C=sum;N=i*80+j;}void DeleteWord(char *str2){ char Data[20];LinkList *temp,*term;int i,j,k,m,y,num;strcpy(Data,str2);for(y=0;y<C;y++){num=80;k=0,m=0;temp=head;for(i=0;i<=NUM;i++){term=temp;temp=temp->next;for(j=0;j<80;j++){if((temp->data[j])==Data[k]) k++;else if(Data[k]!='\0') {j=j-k;k=0;}if(Data[k]=='\0'){num=j;break;}}if(num<80) break;}for(;i<=NUM;i++){for(;j<80;j++)if(j+1<k){term->data[80-k+num]=temp->data[j+1];}elsetemp->data[j-k+1]=temp->data[j+1];}term=temp;temp=temp->next;j=0;}}}LinkList * InsertWord(LinkList *temp){char Data[20];int h,l;cout<<"\t\t请输入要插入的字符或字符串:"<<endl;getchar();gets(Data);printf("\n\t\t当前文章内容为:");PrintWord();printf("\n\t\t请输入要插入的行:");scanf("%d",&h);printf("\n\t\t请输入要插入的列:");scanf("%d",&l);int i=(h-1)*80+l;LinkList *a;int n=strlen(Data);int m ;int insertRow=i/80+1;int row=temp->row;int j;if(insertRow==row){for(m=temp->length-1;m>=(i%80)&&n>0;m--)temp->data[m+n]=temp->data[m];for(m=(i%80),j=0;m<n+(i%80);m++,j++){temp->data[m]=Data[j];}}else{int r=0;for(int p=insertRow; p<row;p++){if(p == insertRow)r=0;elser=n;for(m=temp->length-1-r;m>=0&&n>0;m--)temp->data[m+n]=temp->data[m];a=temp;temp = temp->pre;temp->length = 80;for(m = temp->length-n,j=0;m<temp->length;m++,j++)a->data[j]=temp->data[m];}for(m=temp->length-n-1;m>=(i%80);m--)temp->data[m+n]=temp->data[m];for(m=(i%80),j=0;m<(i%80)+n;m++,j++)temp->data[m] =Data[j];}return temp;}void Bmenu(LinkList *temp){char str1[20];char str2[20];int a;do{HeadWord();cout<<"\n\t\t****************************************************\n"; cout<<"\t\t**** 文章内容处理菜单****\n";cout<<"\t\t****************************************************\n"; cout<<"\t\t**** 1、查找文章中的字符或者字符串****\n"; cout<<"\t\t**** 2、删除文章中的字符或者字符串****\n"; cout<<"\t\t**** 3、向文章中插入字符或者字符串****\n"; cout<<"\t\t**** 4、显示当前文章内容****\n"; cout<<"\t\t**** 5、返回主菜单****\n"; cout<<"\t\t**** 6、直接退出系统****\n"; cout<<"\t\t****************************************************\n"; cout<<"\t\t 请选择:";cin>>a;switch(a){case 1:system("cls");HeadWord();cout<<"\t\t\t请输入您需要查找的字符或字符串:";getchar();gets(str1);SearchWord(str1,temp);cout<<"按回车键继续·····";getchar();getchar();system("cls");break;case 2:system("cls");HeadWord();cout<<"\t\t\t请输入您需要删除的字符或字符串:";getchar();gets(str2);SearchWord(str2,temp);DeleteWord(str2);cout<<"\t\t\t删除%s 后的文章为:"<<str2<<endl;PrintWord();cout<<"按回车键继续·····";getchar();getchar();system("cls");break;case 3:system("cls");HeadWord();InsertWord(temp);cout<<"\t\t\t插入字符或字符串后文章为:";PrintWord();cout<<"按回车键继续·····";getchar();getchar();system("cls");break;case 4:system("cls");HeadWord();PrintWord();cout<<"按回车键继续·····";getchar();getchar();system("cls");break;}if(a==5){system("cls");break;}if(a==6) exit(0);}while(1);}void AboutWord(){cout<<"\n\n\t\t 关于\n";cout<<"\t\t****************************************************\n";cout<<"\t\t** 谢谢使用**\n";cout<<"\t\t****************************************************\n";cout<<"\n";}void menu(LinkList *temp){int t;do{HeadWord();printf("\n");cout<<"\t\t****************************************************\n";cout<<"\t\t**** 主菜单****\n";cout<<"\t\t****************************************************\n";cout<<"\t\t**** 1、文章内容输入****\n";cout<<"\t\t**** 2、显示当前文章内容****\n";cout<<"\t\t**** 3、进入文章内容统计菜单****\n";cout<<"\t\t**** 4、进入文章内容处理菜单****\n";cout<<"\t\t**** 5、关于****\n";cout<<"\t\t**** 6、退出文本编辑器****\n";cout<<"\t\t****************************************************\n";cout<<"\t\t**** 注:第一次运行本程序时请选择1号功能****\n";cout<<"\t\t****************************************************\n";cout<<" \t\t 请选择:";cin>>t;if((t>6)&&(t<1)){cout<<"对不起,无此功能,请输入正确的功能序号!\n";}elseswitch(t){case 1:system("cls");cout<<"\t\t************继续上次输入还是重新输入?*************"<<endl;cout<<"\t\t*******1:继续输入***********2:重新输入*********\n";int s;cin>>s;switch(s){case 1:HeadWord();temp=LoadWord();break;case 2:HeadWord();temp=CreatWord();break;}case 2:system("cls");PrintWord();printf("\n");cout<<"按回车键继续·····";getchar();getchar();system("cls");break;case 3:system("cls");CountWord();break;case 4:system("cls");Bmenu(temp);break;case 5:system("cls");HeadWord();AboutWord();cout<<"按回车键继续·····";getchar();getchar();system("cls");break;}if(t==6) break;}while(1);}int main(){head=(LinkList *)malloc(sizeof(LinkList));LinkList *temp;menu(temp);return 0;}五测试结果及数据分析运行程序后,主菜单如图所示:图2 主菜单欲输入文本,输入1,按Enter键,出现下图:图3 选择输入方式:1:继续输入;2:重新输入输入2,按Enter键,出现下图:图4 创建文本输入文章内容,以#号键结束,按Enter键,出现下图:图5 主菜单输入3,按Enter键,进入文章内容统计菜单,如下图:图6 文章内容统计菜单输入1,按Enter键,出现下图:图7 输出文章中大写字母个数按Enter键继续,输入2出现下图:图8输出文章中小写字母个数按Enter键继续,出现下图:图9 输入3,按Enter键继续,出现下图:图10 输出文章中数字个数按Enter键继续,出现下图:图11 输入4,按Enter键继续,出现下图:图12 输出文章中标点符号的个数按Enter键继续,出现下图:图13 输入5,按Enter键继续,出现下图:图14 输出文章中空格个数按Enter键继续,输入6,出现下图:图15 输出文章中所有字数按Enter键继续,出现下图:图16主菜单,输入4按Enter键继续,进入文章内容处理菜单,出现下图:图17 输入1,按Enter键继续,出现下图:图18 输入o,按Enter键继续,进行查找,出现下图:图19 输出查找结果按Enter键继续,出现下图:图20 输入2按Enter键继续,出现下图:图21 输入要删除的字符或字符串按Enter键继续,出现下图:图22 输出删除结果按Enter键继续,出现下图:图23 输入要插入的字符或字符串按Enter键继续,出现下图:图24 输入所要插入的位置按Enter键继续,出现下图:图25 输出插入结果六调试过程中问题(1)输入输出问题:由于要将数据存到文件中,输入输出就不同于直接输入输出,c++的输出读到空格便会停止,用getline函数解决;(2)追加输入问题:用ocout.open("f://text.txt")输入会覆盖掉以前的内容,如果不想覆盖以前内容,通过加参数实现,即ocout.open("f://text.txt",ios::app),在两个功能设子菜单供选择;(3)循环结束问题:break与exit(0)功能在某些情况下相似,某些情况下却只能选其一,否则运行就有问题;(4)选择问题:当选择要操作的功能时,若选择数字超过列表范围,就会出现未知错误,需增设超出范围就返回的功能,例如用switch语句可以较容易解决;(5)数组空间问题:若预设空间过小,则输入长文本和进行插入等复杂操作时就会很容易出问题,预设空间过大又会造成空间浪费,如何取舍成为关键;七课程的设计与总结在本次实验中,我们选取的课题是文档编辑器的设计与实现,设计该程序的目的主要是对一个文本内容进行一些常规操作,例如:插入,删除,查找,替换等功能,以此来熟练掌握对文本文件及字符数组的操作来实现字符串操作的功能。