文本编辑器课程设计报告
VB课程设计报告---文本编辑器

VB课程设计报告——文本编辑器学院名称:计算机学院学生姓名:专业名称:计算机科学与技术班级:一、课程设计题目用Visual Basic程序设计语言编写一个简易的文本编辑器要求:有最基本的文本编辑功能,包括复制、剪切、粘贴、字体设置、背景颜色设置、字体颜色设置;同时拥有文本管理功能,包括打开文件、保存文件;以及完整的系统运行退出等功能,所有的操作可选择设定的快捷键。
二、课程设计目的(1)目标:实现类似与WINDOWS平台下的记事本程序。
(2)涉及功能:新建、打开、保存、另存为、退出、编辑、撤销、复制、粘贴、剪切、删除、查找、全选、打印、格式、字体、颜色、查看、状态栏、帮助、关于等三、课程设计说明1创建应用程序界面2设置属性3编写代码4保存应用程序5调试,运行应用程序6生成可执行文件四、源代码Dim filecount As IntegerDim inputdata As StringDim TargetPosition As IntegerDim pos As IntegerDim targey As StringDim neirong As StringPrivate Sub A_Click()On Error Resume Nextcmndlg1.Filter = "文本文件|*.txt"cmndlg1.CancelError = Truecmndlg1.Action = 2Open cmndlg1.FileName For Output As #1Print #1, Text1.TextClose #1End SubPrivate Sub C_Click()End SubPrivate Sub D_Click()End SubPrivate Sub Form_Load()Text1.Text = ""Text1.Left = 0Text1.Top = 550Text1.Width = Form1.ScaleWidthText1.Height = Form1.ScaleHeightmnucut.Enabled = Falsemnucopy.Enabled = Falsemnudelete.Enabled = Falsemnuselectall.Enabled = Falsemnupaste.Enabled = Truemnuleft.Checked = TrueEnd SubPrivate Sub Form_Resize()'如果窗体不处于最小化text1状态,改变text1大小以适应窗体大小变化If Form1.WindowState <> 1 ThenText1.Width = Form1.Width - 120If Form1.Height < 1200 ThenForm1.Height = 1200End IfText1.Height = Form1.Height - 1350End IfEnd SubPrivate Sub Form_Unload(Cancel As Integer)Dim msg As IntegerIf Text1.Text <> neirong Thenmsg = MsgBox(" 内容已被修改,是否保存文件", 48 + vbYesNoCancel, "提示")If msg = vbYes ThenOn Error GoTo Errcmndlg1.DialogTitle = "保存文件"cmndlg1.Filter = "文本文件|*.txt"cmndlg1.CancelError = Truecmndlg1.ShowSaveOpen cmndlg1.FileName For Output As #1Print #1, Text1.TextClose #1Err:If Err.Number = cdlCancel ThenCancel = TrueEnd IfElseIf msg = vbNo ThenEndElseIf msg = vbCancel ThenCancel = TrueEnd IfElseEndEnd IfEnd SubPrivate Sub mnucopy_Click() '复制利用SetText 方法,将选中的文本放入剪贴板上Clipboard.SetText Text1.SelTextPrivate Sub mnucut_Click() '剪切Clipboard.SetText Text1.SelTextText1.SelText = ""End SubPrivate Sub mnudelete_Click() '删除Text1.SelText = ""End SubPrivate Sub mnuedit_Click() '编辑菜单项代码' 如果文本框中没有选中的内容,则剪切\复制\删除和粘贴菜单无效,否则有效If Text1.SelLength <> 0 Thenmnucut.Enabled = Truemnucopy.Enabled = Truemnudelete.Enabled = Truemnupaste.Enabled = TrueElsemnucut.Enabled = Falsemnucopy.Enabled = Falsemnudelete.Enabled = FalseEnd IfEnd SubPrivate Sub mnuexit_Click() '退出EndEnd SubPrivate Sub mnufind_Click() '查找FindText 1mnuNext.Enabled = TrueEnd SubPrivate Sub mnufont_Click() '字体On Error GoTo A:cmndlg1.Flags = cdlCFBoth Or cdlCFEffectscmndlg1.ShowFontIf cmndlg1.FontName > "" ThenText1.FontName = cmndlg1.FontNameText1.FontSize = cmndlg1.FontSizeText1.FontBold = cmndlg1.FontBoldText1.FontItalic = cmndlg1.FontItalicText1.FontStrikethru = cmndlg1.FontStrikethru Text1.FontUnderline = cmndlg1.FontUnderline Text1.FontBold = cmndlg1.FontBoldText1.ForeColor = cmndlg1.ColorA:If Err.Number < 0 ThenExit SubEnd IfEnd SubPrivate Sub mnufontcolor_Click() '字体颜色cmndlg1.ShowColorText1.ForeColor = cmndlg1.ColorEnd SubPrivate Sub mnuleft_Click() '左对齐Text1.Alignment = 0mnuleft.Checked = Truemnuright(1).Checked = Falsemnuright(2).Checked = FalseEnd SubPrivate Sub mnunew_Click() '新建Text1.Text = ""End SubPrivate Sub FindTex(ByVal start_at As Integer) targey = targeypos = InStr(start_at, Text1.Text, targey)If pos > 0 Then '找到了匹配字符串TargetPosition = posText1.SelStart = TargetPosition - 1'选中找到的字符串Text1.SelLength = Len(targey)Text1.SetFocusElse '没有找到匹配的字符串MsgBox "没找到匹配的字符串", 48, "提示"Text1.SetFocusEnd IfEnd SubPrivate Sub mnuNext_Click() '查找下一个FindTex TargetPosition + 1End SubPrivate Sub mnuopen_Click() '打开Dim inputdata As StringOn Error GoTo nofilecmndlg1.Filter = "文本文件|*.txt"cmndlg1.CancelError = Truecmndlg1.ShowOpenText1.Text = ""If cmndlg1.FileName <> "" ThenOpen cmndlg1.FileName For Input As #1Do While Not EOF(1)Line Input #1, inputdataText1.Text = Text1.Text & inputdata & vbCrLoopClose #1End IfExit Subnofile:If Err.Number = 32755 Then Exit SubEnd SubPrivate Sub FindText(ByVal start_at As Integer)'获取用户输入的要查找的字符串targey = InputBox("请输入要查找的内容", "查找")pos = InStr(start_at, Text1.Text, targey)If pos > 0 Then '找到了匹配字符串TargetPosition = posForm1.Text1.SelStart = TargetPosition - 1'选中找到的字符串Form1.Text1.SelLength = Len(targey)Form1.Text1.SetFocusElse '没有找到匹配的字符串MsgBox "没找到匹配的字符串", 48, "提示"Form1.Text1.SetFocusEnd IfEnd SubPrivate Sub mnupaste_Click() '粘贴用GetText1 方法,将剪切板中的内容粘贴到光标所在位置Text1.SelText = Clipboard.GetText()End SubPrivate Sub mnuprint_Click() '打印On Error Resume Nextcmndlg1.ShowPrinterPrinter.Copies = cmndlg1.CopiesPrinter.Print Text1.TextEnd SubPrivate Sub mnuright_Click(Index As Integer) '右对齐\居中菜单代码Select Case IndexCase 1Text1.Alignment = 1mnuleft.Checked = Falsemnuright(1).Checked = Truemnuright(2).Checked = FalseCase 2Text1.Alignment = 2mnuleft.Checked = Falsemnuright(1).Checked = Falsemnuright(2).Checked = TrueEnd SelectEnd SubPrivate Sub mnusave_Click() '保存On Error Resume Nextcmndlg1.DialogTitle = "保存文件"cmndlg1.Filter = "文本文件|*.txt"cmndlg1.CancelError = Truecmndlg1.ShowSaveOpen cmndlg1.FileName For Output As #1Print #1, Text1.TextClose #1End SubPrivate Sub mnuselectall_Click() '全选Text1.SelStart = 0Text1.SelLength = Len(Text1.Text)End SubPrivate Sub Text1_Change()If Text1.Text = "" Thenmnufind.Enabled = FalsemnuNext.Enabled = FalseElsemnufind.Enabled = Truemnuselectall.Enabled = TrueEnd IfEnd SubPrivate Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button) Select Case ButtonCase "新建"Call mnunew_ClickCase "打开"Call mnuopen_ClickCase "剪切"Call mnucut_ClickCase "复制"Call mnucopy_ClickCase "粘贴"Call mnupaste_ClickCase "保存"Call mnusave_ClickCase "查找"Call mnufind_ClickEnd SelectEnd SubPrivate Sub tre_Click()Shell ("notepad 使用说明.txt")End SubPrivate Sub xufeng_Click()Form2.Visible = TrueEnd Sub五、运行结果保存功能查找功能打开功能颜色修改功能字体修改功能七、心得体会作为一名计算机专业的学生,在接触了C语言、数据结构与C++课程后,对计算机语言有了一定的兴趣,于是在这个学期我毫不犹豫的选择了VB课程(算法与程序设计)。
文本编辑器报告

数据结构与算法分析课程设计报告项目名称:文本编辑器提交文档学生姓名:王熙提交文档学生学号: 1143111289教师评阅成绩:教师评阅意见:..提交报告时间:年月日1.实验题目:(1)利用List数据结构实现一个文本编辑器。
(2)熟练掌握List数据结构的逻辑结构、存储结构、基本操作。
(3)灵活运用List数据结构的各种基本操作。
(4)熟练掌握如何编辑、编译、链接和运行一个C++程序。
2实验要求:(1)创建一个友好的用户界面:所有操作在控制台实现,由用户输入操作命令,结果显示在控制台窗口;自己定义相应操作的命令字符(一般为单个字符),并给出用户提示。
用户可以输入h(或H)表示要求帮助,此时应显示所有的操作命令及其含义,也可在程序一运行给出显示所有的操作命令及其含义。
(2)能打开/新建一个文本文件,将其内容读入输入缓冲区。
输入缓冲区用List ADT,具体存储结构及实现单链表,双向链表均可)一行做为一个自选,可用顺序表,也可用链表(链表用数组元素(顺序表)或一个结点(链表)。
(3)能对当前文件内容进行编辑,包括:显示当前文件内容,任意行定位并显示、插入一行、一行, 替换当前行、统计文件行数及字符数,查找指定的某个子串、替换某个子串等保存当前文件、重新读入一个文件,退出系统。
3实验环境:软件环境:windows7环境下的VC++6.0;硬件环境:Intel(R) Core(TM) i5-2450M CPU @2.50GHz 4.0GB内存64位操作系统4..算法描述:程序流程图开始提示用户选择操作:打开、新建、定位、插入、删除、替换、统计、保存、退出根据选择进行相应操作否选择退出?是结束类的层次结构,每个类的设计, 包括数据成员和成员函数组成.class Link : public node{private:node* head;node* tail;node* fence;int leftcnt;int rightcnt;public:Link(){init();}~Link() {removeall(); //destructor}void clear(){removeall();init();}bool insert(int num,const string& item);bool deleteoneline(int num);bool append(const string& item);bool remove(string& it);bool changeline(int num,string& str);bool changeonelinecharacter(int num,string& str);bool findinallstring(string& str);bool setStart();bool setEnd();void prev();void next1(){if (fence!=tail) { //don't move fence if right empty fence=fence->next;rightcnt--;leftcnt++;}}int leftlength() const{return leftcnt;} int rightlength() const{return rightcnt;} int longlength() ;bool displayoneline();bool findappointstring(string str);bool setpos(int pos);bool getValue(string& it) const {if(rightlength()==0)return false;it=fence->next->element;return true;}void print() const;void init() ;void removeall() {while(head != NULL){fence = head;head = head->next;delete fence;}}void save_to_file(string filename);void read_from_infile(string filename); };class node{public:string element;node* pre;node* next;public:node(){element = "";pre = NULL;next = NULL;}~node(){}};●测试程序说明(1)、新建一个文件;(2)、输入前三行,分别是aaa , bbb , ccc;(3)、删除第二行;(4)、第二行插入bbb;(5)、第二行替换为kkk;(6)、统计总行数;(7)、将内容保存;5.源程序清单:●添加必要的注释Main.cpp#include "editor.h"int main(){Link item1;char sign='h';string filename1,filename2,str,str2;int num;cout<<"*****************************************************"<<endl<<" 欢迎使用文本编辑器"<<endl<<"*****************************************************"<<endl;cout<<"请输入文件名<eg. file_in.txt>:";cin>>filename1;item1.setStart();item1.setEnd();item1.read_from_infile(filename1);system("CLS");do{switch(sign) {case '?':case 'h':cout<<"*****************************************************************"<<endl;cout <<" 操作步骤"<<endl;cout << " a:只替换某行的某个子字符串 c:改变一行的内容 " << endl<< " d:删除指定的一行 f:根据输入的字符串查找行" <<endl<< " g:显示指定的一行i:插入一行" <<endl<< " r:读取文件k:保存文件"<<endl<< " o:查找子串 q:退出程序"<<endl<< " m:新建文件v:查看所有"<<endl<< " w:当前内容写入另外一个文件x:清屏"<<endl<< " l:总行数"<<endl<<"*****************************************************************"<<endl;break;case'x':system("CLS");break;case'o':cout<<"输入你想查找的子串:";cin>>str;item1.findinallstring(str);break;case'a':cout<<"请问你想修改第几行?: ";cin>>num;cout<<"请输入你要修改的子串";cin>>str;item1.changeonelinecharacter(num,str);break;case'c':cout<<"请问你想修改第几行?:";cin>>num;cout<<"请输入新字符串内容:";cin>>str;item1.changeline(num,str);break;case'd':cout<<"请问你想删掉第几行?:";cin>>num;item1.deleteoneline(num);item1.print();break;case'f':cout<<"请输入你想查找的字符串:"<<endl;cin>>str;item1.findappointstring(str);break;case'g':cout<<"请输入行序号:"<<endl;cin>>num;item1.setpos(num);item1.displayoneline();break;case'i':cout<<"请问你想插在第几行后面:";cin>>num;cout<<"请输入你要插入的字符串:";cin>>str;item1.insert(num,str);item1.print();break;case'l':item1.longlength();break;case'r':{item1.clear();item1.read_from_infile(filename1);item1.print();}break;case'v':item1.print();break;case'w':cout<<"请输入文件名<eg. file_in.txt>:";cin>>filename2;item1.save_to_file(filename2);break;case'k':item1.save_to_file(filename1);break;case'm':char newfile[30];cout<<"请输入新建文件名:"<<endl;cin>>newfile;break;default:cout<<"\n*** 不合法输入 ***\n"<<endl;}cout<<"please input command:";cin>>sign;}while (sign!='q');return 0;}Editor..h#ifndef _EDITOR_H_#define _EDITOR_H_#include <iostream>#include <iomanip>#include <string>using namespace std;#include "node.h"//Double-linked list link node with freelist support class Link : public node{private:node* head;node* tail;node* fence;int leftcnt;int rightcnt;public:Link(){init();}~Link() {removeall(); //destructor}void clear(){removeall();init();}bool insert(int num,const string& item);bool deleteoneline(int num);bool append(const string& item);bool remove(string& it);bool changeline(int num,string& str);bool changeonelinecharacter(int num,string& str);bool findinallstring(string& str);bool setStart();bool setEnd();void prev();void next1(){if (fence!=tail) { //don't move fence if right empty fence=fence->next;rightcnt--;leftcnt++;}}int leftlength() const{return leftcnt;}int rightlength() const{return rightcnt;}int longlength() ;bool displayoneline();bool findappointstring(string str);bool setpos(int pos);bool getV alue(string& it) const {if(rightlength()==0)return false;it=fence->next->element;return true;}void print() const;void init() ;void removeall() {while(head != NULL){fence = head;head = head->next;delete fence;}}//input the data to the inputfile.void save_to_file(string filename);//read the data from the filevoid read_from_infile(string filename);};#endifEditor.cpp#include "editor.h"#include <fstream>using namespace std;/************************************************************************/ /* set start of the link *//************************************************************************/ bool Link::setStart(){fence=head;rightcnt+=leftcnt;leftcnt=0;return true;}/************************************************************************/ /* set end of the link *//************************************************************************/ bool Link::setEnd(){tail = fence;leftcnt+=rightcnt;rightcnt=0;return true;}/************************************************************************//* init the link *//************************************************************************/ void Link::init(){fence=tail=head=new node;leftcnt=rightcnt=0;}/************************************************************************/ /* display the data to the screen. *//************************************************************************/ void Link::read_from_infile(string filename){string elem[100];int count = 0;ifstream infile(filename.c_str(),ios::in);if (!infile) {cout<<"open error!"<<endl;exit(1);}char ch;while ((ch=infile.get()) != EOF) {if(ch != '\n'){elem[count] = elem[count] + ch;}else{append(elem[count]);count++;}}append(elem[count]);cout<<endl;infile.close();}/************************************************************************/ /* input the data to the file. *//************************************************************************/ void Link::save_to_file(string filename){node* temp;temp=head->next;ofstream outfile(filename.c_str(), ios::out);while (temp!=NULL) {outfile<<temp->element<<endl;temp=temp->next;}outfile.close();}/************************************************************************/ /* the insert member function is according the num to *//*find the fence the insert to the next of the fence *//************************************************************************/ bool Link::insert(int num,const string& item){setpos(num);node* temp=new node;temp->element=item;if (fence->next!=NULL) {temp->next=fence->next;fence->next->pre=temp;fence->next=temp;temp->pre=fence;}else {fence->next=temp;temp->pre=fence;tail=fence->next;}rightcnt++;return true;}/************************************************************************/ /* append string to end of the list *//* the list is doubly linked list *//************************************************************************/ bool Link::append(const string&item){node* p;p=tail;tail=tail->next=new node;tail->element = item;tail->pre = p;rightcnt++; //Added to rightreturn true;}/************************************************************************/ /* remove and return first string in right partition *//************************************************************************/ bool Link::remove(string& it){if (fence->next==NULL) { //empty rightreturn false;}it=fence->next->element; //remember valuenode* itemp=fence->next; //remem link nodeif (itemp->next!=NULL) {itemp->next->pre=fence;}elsetail=fence; //reset tailfence->next=itemp->next; //remove from the listdelete itemp; //reclaim spacerightcnt--; //remove from rightreturn true;}/************************************************************************/ /* move fence one stepleft ,no change if left is empty *//************************************************************************/ void Link::prev(){if (fence!=head) { //cannot back up from list headfence=fence->pre;leftcnt--;rightcnt++;}}/************************************************************************/ /* according you enter the number to find the fence *//************************************************************************/ bool Link::setpos(int pos){fence=head;if (pos<0) {fence = head;}else if (pos>rightcnt+leftcnt) {for(int j=0; j<rightcnt+leftcnt; j++)fence = fence->next;}else{for (int i=0;i<pos;i++) {fence=fence->next;}}return true;}/************************************************************************/ /* print the all the node in the list *//************************************************************************/ void Link::print() const{node* temp;int num=0;temp=head;while (temp!=tail->next) {if (num>0) {cout<<num<<" . ";}cout<< temp->element <<" "<<endl;temp=temp->next;num++;}cout<<endl;}/************************************************************************/ /* to calculate the file include the number of the row *//* to calculate the number of the character *//************************************************************************/ int Link::longlength(){string actfor;node* temp;int length=-1,num=0;temp=head;while (temp!=NULL) {actfor=temp->element;num=num+actfor.length();length++;temp=temp->next;}cout<<"the file length is"<<length<<endl;cout<<"the number of the character is:"<<num<<endl;return length;}/************************************************************************/ /* display one line *//************************************************************************/ bool Link::displayoneline(){if (fence!=NULL && fence!=head) {cout<<fence->element<<endl;}else{cout<<"the present line is empty."<<endl;}return true;}/************************************************************************/ /* according your enter string to find the line number *//* print the find number *//************************************************************************/ bool Link::findappointstring(string str){node* temp;int num=0;bool bo=true;temp=head->next;while (temp!=NULL) {num++;if (temp->element==str) {cout<<"找到了!"<<endl;cout<<"字符串在第"<<num<<" 行"<<endl;cout<<"the appointed is :"<<temp->element<<endl;bo=false;}temp=temp->next;}if (bo) {cout<<"抱歉!未找到!"<<endl;}return true;}/************************************************************************/ /* delete one line according you enter the line number *//************************************************************************/ bool Link::deleteoneline(int num)num=num-1;setpos(num);node* q;// if (fence->next==NULL) {// fence->next=NULL;// delete fence->next;// }if (fence==tail) {q=tail;tail=fence->pre;delete q;}else{node* p;p = fence->next;fence->next=fence->next->next;fence->next->pre=fence;delete p;}return true;}/************************************************************************/ /* according you enter line number to find the line *//*replace the find line to you enter string *//************************************************************************/ bool Link::changeline(int num,string& str){setpos(num);fence->element=str;return true;}/************************************************************************/ /* change appointed line's character *//************************************************************************/ bool Link::changeonelinecharacter(int num,string& str){char m[256];char n[256];char z[256];int len=0;string str2;node* temp;setpos(num);temp=fence;strcpy(m,str.c_str());strcpy(n,temp->element.c_str());num=temp->element.find(m,0);if (temp->element.find(m,0) != string::npos) {cout<<"请输入修改后的字符串(必须与上面查的字符串长度相等):";cin>>str2;while (str.length() != str2.length()) {cout<<"错误!长度不一致!"<<endl;cout<<"请再次输入:"<<endl;cout<<"请输入修改后的字符串(必须与上面查的字符串长度相等):";cin>>str2;}len=str2.length();strcpy(z,str2.c_str());for (int j=0;j<len;j++) {n[num]=z[j];temp->element=n;num++;}cout<<"修改成功!"<<endl;}elsecout<<"未找到相应子串."<<endl;return true;}/************************************************************************/ /* find the postation in the file and print it out *//************************************************************************/ bool Link::findinallstring(string& str){char m[256];char n[256];int num=0;node* temp;temp=head;strcpy(m,str.c_str());while (temp->next!=NULL) {temp=temp->next;num++;if (temp->element.find(m,0) != string::npos) {cout<<"在第"<<num<<" 行"<<endl;}elsecout<<"不在第"<<num<<" 行"<<endl;}return true;}void creatfile(){char newfile[30];cout<<"请输入新建文件名:"<<endl;cin>>newfile;fopen(newfile,"w+");}Node.h#ifndef _NODE_H_#define _NODE_H_class node{public:string element;node* pre;node* next;public:node(){element = "";pre = NULL;next = NULL;}~node(){}};#endif6.运行结果:●测试数据选择aaa bbb ccc kkk●测试结果分析能够完完成对字符串的定位、插入、删除、查找、替换和显示等操作。
面向对象课程设计报告-文本编辑器

《面向对象程序设计》课程设计报告题目:java文本编辑器院(系):专业班级:学生姓名:学号:指导教师:20 14 年 12 月 29 日至20 15 年 1 月 9 日面向对象程序设计课程设计任务书目录1需求与总体设计 (4)1.1总体功能图 (4)1.2 总体设计思路 (4)(1)文件菜单 (4)(2)编辑菜单 (4)(3)右键菜单 (4)1.3 总体模块图 (5)1.4简要类图 (5)2详细设计 (6)2.1各类的功能及关键代码设计和类图表示 (6)(1)首先创建一个公共的类名为Bjq (6)(2)创建一个空的菜单条并添加两个菜单项(文件、编辑) (7)(3)先设计一个匿名内部类,为文件、编辑菜单添加其它下拉子菜单 (7)(4)右键快捷菜单的字体子菜单的创建 (8)(5)为鼠标创建监听器。
用于用鼠标点击右键时出现快捷菜单:复制、粘贴、字体大小、字体颜色。
(9)(6)为窗体添加监听器 (9)(7)设计main方法:为整个程序的开始提供了入口 (9)2.2程序流程图 (10)2.3 详细类图 (12)3编码实现 (12)3.1程序实现代码 (12)4系统测试 (19)4.1错误处理 (19)4.2主要的测试截图 (19)1. 程序运行界面 (19)2. 编辑菜单及其复制粘贴功能 (20)3. 右键菜单及其功能效果 (21)4. 文件菜单及其功能界面 (23)总结 (26)1需求与总体设计1.1总体功能图图1.01.2 总体设计思路在本程序中,设计了一个菜单栏和文本内容区。
要想记事本完成需求分析中相应的功能,还必须添加事件监听器。
事件监听器不仅要添加在菜单栏和内容输入区,还需加在容器中。
本程序中Act Listener实现了Action Listener接口,用来监听并处理所有菜单项和内容输入区为事件源的事件。
另外,还用来Window Listener来监听处理容器关闭触发的事件,Window Listener继承了Windows Adapter类并覆盖了Windows Closing方法。
文本编辑器课程设计

文本编辑器课程设计一、课程目标知识目标:1. 理解文本编辑器的基本功能与操作,掌握常见的文本编辑命令;2. 学会使用文本编辑器进行文档的创建、编辑、保存和打印;3. 了解文本编辑器的不同类型,如记事本、Word等,并掌握它们的特点与适用场景。
技能目标:1. 能够熟练运用文本编辑器进行文字输入、排版和格式设置;2. 学会使用文本编辑器的查找与替换功能,提高文本处理效率;3. 掌握文本编辑器的拼写检查、语法检查功能,提升写作质量。
情感态度价值观目标:1. 培养学生对文本编辑器的兴趣,激发他们主动探索和使用新工具的积极性;2. 培养学生的信息素养,使他们认识到文本编辑器在日常生活和学习中的重要性;3. 引导学生养成良好的文本编辑习惯,注重文档的美观与规范,提升个人形象。
本课程针对年级:小学四年级课程性质:信息技术课程学生特点:四年级学生对电脑操作已有一定的基础,对新事物充满好奇心,但操作熟练程度和文本编辑能力有限。
教学要求:1. 结合学生特点,课程内容应以实践操作为主,注重培养学生的动手能力;2. 教学过程中,教师应充分调动学生的积极性,鼓励他们主动探索和尝试;3. 教学评价应以学生实际操作能力和学习态度为主要标准,关注学生的学习过程和成果。
二、教学内容1. 文本编辑器简介:介绍文本编辑器的概念、作用和常见类型,如记事本、Word等。
- 教材章节:第一章 认识文本编辑器- 内容列举:文本编辑器的定义、功能、分类及其适用场景。
2. 文本编辑器基本操作:学习文本输入、选取、删除、复制、粘贴等基本操作。
- 教材章节:第二章 文本编辑器的基本操作- 内容列举:文字输入、基本编辑命令、撤销与重做。
3. 文档格式设置:学习字体、字号、颜色、对齐方式等格式设置。
- 教材章节:第三章 文档格式设置- 内容列举:字体设置、段落设置、页面布局。
4. 文档高级功能:掌握查找与替换、拼写检查、语法检查等功能。
- 教材章节:第四章 文档高级功能- 内容列举:查找与替换、拼写检查、语法检查。
数据结构课程设计之文本编辑器

##大学数据结构课程设计报告题目:简易文本编辑器院(系):计算机工程学院学生姓名:班级:学号:____起迄日期: 2011年6月20日至2011年6月30日指导教师:2010—2011年度第 2 学期一、需求分析1.问题描述:简易文本编辑器主要是针对文字编辑处理,对于如何编辑一个简易文本编辑器程序我们可以利用线性表示实现其功能,线性表便于插入删除查找功能,而文本编辑器需要用到这些功能,因此可以利用线性表实现。
对于文本编辑器应该具有插入、删除、查找等功能,并且可以显示所有输入数据,可正确存盘、取盘,正确显示编辑的文字长度。
2.基本功能:简易文本编辑器应该具有的功能:图形菜单界面:位置查找:数据查找:显示所有输入数据:插入:删除文本信息:可正确存盘、取盘:正确显示长度:3.输入输出:输入数据,数据类型为整形,且输入的字符或数字不多于100个,输出为输出输入的数据,输出输入数据的长度,输出插入元素及插入后的数据,输出查找元素的,输出的数据均为整形。
二、概要设计1.设计思路:首先构造一个线性表, 然后利用线性表的存储结构顺序存储方式,实现文本的编辑添加查找删除.2.数据结构设计:程序采取了线性结构利用顺序存储的方法,采用该结构的原因是线性表利于存储、插入、删除、查找、修改等功能,使用它可以使程序运行简单方便。
定义程序中用到的抽象数据类型;抽象数据类型线性表的定义如下:ADT SqList{数据对象:D={ai | ai∈data,i=1,2,3……,n,n≥0}数据关系:R1={<ai-1,ai>| ai-1,ai∈D,i=1,2,3,……,n}基本操作:InitList(*L)操作结果:构造一个空的线性表L。
GetLength(L)初始条件:线性表L已存在。
操作结果:返回L中数据元素的个数。
GetElem( L, i,*e)初始条件:线性表L已存在,1≤i≤L.Length.操作结果:查找指定的某元素i,并将值赋给e,用e 输出。
制作一个文本编辑器-java课程设计报告

制作一个文本编辑器-java课程设计报告封面《Java语言程序设计》课程设计报告设计题目:制作一个文本编辑器分院:电信分院班级:姓名:学号:指导教师:黄建华实验地点:三教机六课设时间:2009-12-20——2009-12-25二OO九年十二月二十五日《Java语言程序设计课程设计》目录一、设计思路…………………………………………… (2)二、设计过程…………………………………………… (3)三、测试结果…………………………………………… (12)四、心得体会…………………………………………… (13)五、程序代码…………………………………………… (14)一、设计思路(一)设计概念要制作一个文本编辑器,首先得理清思路,要做一个什么样的文本编辑器,做成的编辑器要求要实现哪些功能,要实现这些功能分别需要用到什么方法以及怎样组织编辑器的框架结构等等问题。
现把我的设计思路简要介绍如下:1、明确设计要求首先要创建了一个窗体,标题为“×××设计的文本编辑器”,设计要求是要编辑文件和编辑这两个菜单项,要求在文件菜单项上添加新建、打开、保存、退出四个下拉子菜单,要求当用户单击新建时就可以新建一个空白文档;当单击打开时可以从已有的目录下打开需要打开的文本文件,在原有文件中可以选择要打开的文件;当单击保存时可以出现保存的路径,选择自己要保存到的路径将文件保存到指定的文件夹中;单击退出菜单时退出文件的下拉菜单。
在编辑菜单下的子菜单复制,可以进行对文本的复制。
在文本区内要求当单击鼠标右键时可以弹出菜单,要求有两个子菜单为复制和字体,通过单击字体菜单可以实现对字体改变。
而且在窗体的右上方有三个按钮可以实现最小化、最大化、和关闭。
而且用户也可以根据自己的需要改变窗体的大小。
2、确定设计思路即设计步骤(必须想到要用到哪几个方面的程序、包、方法、以及基本的程序语言)(1)创建一个窗体,包括构造一个文本域为编辑器各种功能的实现提供一个伸展平台;(2)新建一个空的菜单条,然后添加菜单项(文件菜单和编辑菜单);(3)设计程序在菜单项下添加子菜单,文本菜单对应新建、打开、保存和退出,编辑菜单包括的子菜单为复制和粘贴;(4)添加右键快捷弹出式菜单,包括复制、字体等菜单项。
VB文本编辑器设计报告

课程设计报告课程:Visual Basic 程序设计课题:文本编辑器(易记本)专业:计算机信息管理班级:学号:姓名:@一路偏向北教师:2011-12-23一、课程设计目的通过一学期的Visual Basic 程序设计学习,以及平时的上机实验,初步掌握了VB程序设计的各种方法,学会了编写最基本的VB程序;对于完整的VB程序设计来讲是很不足的,平时掌握的只是单独的窗体(Form)程序编写,以及各种简单控件的使用,没有做到很好连贯性,所以有必要做一次完整的VB程序设计,结合所学的基本知识,使用多个窗体自成一套系统,加上各种控件的综合运用,初步设计一个合格的VB应用程序;这样在巩固VB所学的同时,更好地学会程序设计的一些思想和方法,对于以后的编程学习或是工作有重要的实践意义。
二、题目及简介文本编辑器模仿Windows自带的本文编辑器,要求:做到有下拉式菜单栏,有最基本的文本编辑功能,包括复制、剪切、粘贴、全选、查找;同时拥有文本的管理功能,其中包括新建文本、打开、保存;以及完整的运行退出等系统应用功能,所有操作可选择设定快捷键,更快更方便地使用程序,同时对于一个小程序而言,可给出基本的使用说明以及相关信息。
提示:注意使用消息框,以及使用右击弹出式菜单,注意程序的完整性可可用性。
三、设计说明题目为文本编辑器,即是最基本的文本编辑程序,首先必须做好文本编辑器本身的功能,然后对其完善,做成一个完整的小程序功能设计说明:功能是这个文本编辑器的核心内容,也就是程序的作用,它是用来做什么的;本程序就是用来编写文本的,编写过程中要利用到窗体(Form)一个,控件包括:RichTextBox1(超文本框)、CommonDialog(通用对话框),以及InputBox(消息框)、菜单编辑器等,。
要做的工作就是编写代码把这些控件和窗体等结合为一体,使得程序能够成为一体,顺畅运行。
本次设计在按照题目要求的前提下,为了完整地展示一个应用程序,在最初就设计为最基本的文本的编辑器,所以取名为“易记本”,就是简易记事本的简称,然后加入图标,在程序完成之后还进行了大包操作,得到应用程序的安装文件,最后安装在电脑上运行使用。
文本编辑器 java课程设计实验报告 完整 预览显示不全 含全部代码

淮 海 工 学 院 计算机工程学院课程设计报告设计名称: 选题名称: 姓 名: 面向对象课程设计文本编辑器的设计与实现学号:专业班级: 系 (院) : 设计时间: 设计地点: 计算机工程学院 2010.6.21~2010.7.2 软件实验室、教室指导教师评语:成绩:签名:年 月 日面向对象课程设计报告第2页,共24页1.设计要求设计一个类似于 Windows 记事本(Notepad)的 Java 程序。
可以打开、新建、保存一个文本文件;对 选中的文本进行各种编辑操作(设置字体、字号、字型、对齐方式、背景、前景色、复制、粘贴、剪切、 查找、替换等) ;在文本中能够插入对象。
2.总体设计打开文 件保存另存为查找 红色 复制 字 体 颜 色退出编 辑蓝色剪切文 本 编 辑 器宋体绿色 粘贴字仿宋体楷体字 形粗体 斜体 常规字 号面向对象课程设计报告第3页,共24页3.详细设计JTextArea textarea;//建立文本 JRadioButtonMenuItem rbmi_red,rbmi_blue,rbmi_green;//鼠标右击改变颜色JMenuItem menuitem_copy,menuitem_cut,menuitem_paste,menuitem_seek;//复制, 剪切,粘贴 JMenuItem menuitem_song,menuitem_fang,menuitem_kai;//字体变量 JMenuItem menuitem_normal,menuitem_bold,menuitem_italic;//字形变量 JMenuItem menuitem_12,menuitem_24,menuitem_36;//字号变量 JMenuItem menuitem_exit,menuitem_infor; JPopupMenu popupmenu;//文本快捷键 JMenuItem menuitem_red,menuitem_green,menuitem_blue;//颜色变量 JDialog dialog;//调用对话框 JButton button_seek;//查找 JTextField textfield_seek; JLabel label_seek,label_infor;4.代码调试面向对象课程设计报告 程序代码: import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.io.*; import javax.swing.JColorChooser; import javax.swing.event.*; public class Notepad extends第4页,共24页JFrameimplementsActionListener,ItemListener,MouseListener { File file; JTextArea textarea; JRadioButtonMenuItem rbmi_red,rbmi_blue,rbmi_green;JMenuItem menuitem_copy,menuitem_cut,menuitem_paste,menuitem_seek; JMenuItem menuitem_song,menuitem_fang,menuitem_kai;//字体变量 JMenuItem menuitem_normal,menuitem_bold,menuitem_italic;//字形变量 JMenuItem menuitem_12,menuitem_24,menuitem_36;//字号变量 JMenuItem menuitem_exit,menuitem_infor; JMenuItem menuitem_zidingyi; JPopupMenu popupmenu; JMenuItem menuitem_red,menuitem_green,menuitem_blue; JDialog dialog; JButton button_seek; JTextField textfield_seek; JLabel label_seek,label_infor; String seek;public Notepad() { super("文本编辑器"); this.setSize(600,400); this.setLocation(250,150); this.setDefaultCloseOperation(HIDE_ON_CLOSE); textarea = new JTextArea();面向对象课程设计报告 Container ss=this.getContentPane();第5页,共24页JScrollPane dd=new JScrollPane(textarea); ss.add(dd); this.textarea.addMouseListener(this); this.addMenu(); this.setVisible(true); this.Dialog(); this.file = null; } public Notepad(String filename) { this(); if (filename!=null) { this.file = new File(filename); this.setTitle(filename); this.textarea.setText(this.readFromFile()); } } public Notepad(File file) { this(); if (file!=null) { this.file = file; this.setTitle(this.file.getName()); this.textarea.setText(this.readFromFile()); } } public void Dialog() { dialog=new JDialog(this,"查找",true); dialog.setLayout(new FlowLayout()); //建立对话框的方法面向对象课程设计报告 dialog.setSize(200,90); label_seek=new JLabel("关键字"); dialog.add(label_seek); textfield_seek=new JTextField(10); dialog.add(textfield_seek); button_seek=new JButton("查找"); dialog.add(button_seek); button_seek.addActionListener(this); } public void addMenu() { JMenuBar menubar = new JMenuBar(); this.setJMenuBar(menubar); JMenu menu_file = new JMenu("文件"); menubar.add(menu_file);第6页,共24页//文件菜单JMenuItem menuitem_open = new JMenuItem("打开"); menu_file.add(menuitem_open); menuitem_open.addActionListener(this); JMenuItem menuitem_save = new JMenuItem("保存"); menu_file.add(menuitem_save); menuitem_save.addActionListener(this); JMenuItem menuitem_saveas = new JMenuItem("另存为"); menu_file.add(menuitem_saveas); menuitem_saveas.addActionListener(this); menuitem_exit=new JMenuItem("退出" ); menu_file.add(menuitem_exit); menuitem_exit.addActionListener(this); JMenu menu_editor=new JMenu("编辑");//编辑菜单 menubar.add(menu_editor); menuitem_seek=new JMenuItem("查找"); menu_editor.add(menuitem_seek); menuitem_seek.addActionListener(this); menuitem_copy=new JMenuItem("复制");面向对象课程设计报告 menuitem_copy.addActionListener(this); menu_editor.add(menuitem_copy); menuitem_cut=new JMenuItem("剪切"); menu_editor.add(menuitem_cut); menuitem_cut.addActionListener(this); menuitem_paste=new JMenuItem("粘贴"); menu_editor.add(menuitem_paste); menuitem_paste.addActionListener(this);第7页,共24页JMenuItem menu_color=new JMenu("颜色");//颜色菜单 menu_editor.add(menu_color); ButtonGroup buttongroup=new ButtonGroup();rbmi_red=new JRadioButtonMenuItem("红",true); buttongroup.add(rbmi_red); menu_color.add(rbmi_red); rbmi_red.addItemListener(this); rbmi_blue=new JRadioButtonMenuItem("蓝",true); buttongroup.add(rbmi_blue); menu_color.add(rbmi_blue); rbmi_blue.addItemListener(this); rbmi_green=new JRadioButtonMenuItem("绿",true); buttongroup.add(rbmi_green); menu_color.add(rbmi_green); rbmi_green.addItemListener(this); JMenu menu_font=new JMenu("设置字体");//设置字体菜单 menubar.add(menu_font); menuitem_song=new JMenuItem("宋体"); menu_font.add(menuitem_song); menuitem_song.addActionListener(this); menuitem_fang=new JMenuItem("仿宋"); menu_font.add(menuitem_fang); menuitem_fang.addActionListener(this); menuitem_kai=new JMenuItem("楷体"); menu_font.add(menuitem_kai);面向对象课程设计报告 menuitem_kai.addActionListener(this);第8页,共24页JMenu menu_style=new JMenu("设置字形");//设置字形菜单 menubar.add(menu_style); menuitem_bold=new JMenuItem("粗体"); menu_style.add(menuitem_bold); menuitem_bold.addActionListener(this); menuitem_italic=new JMenuItem("斜体"); menu_style.add(menuitem_italic); menuitem_italic.addActionListener(this); menuitem_normal=new JMenuItem("常规"); menu_style.add(menuitem_normal); menuitem_normal.addActionListener(this); JMenu menu_size=new JMenu("设置字号"); menubar.add(menu_size); menuitem_12=new JMenuItem("12"); menu_size.add(menuitem_12); menuitem_12.addActionListener(this); menuitem_24=new JMenuItem("24"); menu_size.add(menuitem_24); menuitem_24.addActionListener(this); menuitem_36=new JMenuItem("36"); menu_size.add(menuitem_36); menuitem_36.addActionListener(this); popupmenu=new JPopupMenu(); JMenuItem menuitem_red=new JMenuItem("红色"); popupmenu.add(menuitem_red); menuitem_red.addActionListener(this); JMenuItem menuitem_green=new JMenuItem("绿色"); popupmenu.add(menuitem_green); menuitem_green.addActionListener(this); menuitem_blue=new JMenuItem("蓝色"); popupmenu.add(menuitem_blue); menuitem_blue.addActionListener(this); //快捷菜单 //设置字号菜单面向对象课程设计报告 textarea.add(popupmenu); }第 9 页,共 24 //向文本区内添加快捷菜单页public void writeToFile(String lines) { try {//写文件FileWriter fout = new FileWriter(this.file); fout.write(lines+"\r\n"); fout.close(); } catch (IOException ioex) { return; } } public String readFromFile() { try { FileReader fin = new FileReader(this.file); BufferedReader bin = new BufferedReader(fin); String aline="", lines=""; do { aline = bin.readLine(); if (aline!=null) lines += aline + "\r\n"; } while (aline!=null); bin.close(); fin.close(); return lines; } catch (IOException ioex) //读文件面向对象课程设计报告 { return null; } } public boolean openDialog() {第10页,共24页//打开对话框FileDialog filedialog = new FileDialog(this,"Open",FileDialog.LOAD); filedialog.setVisible(true); if ((filedialog.getDirectory()!=null) && (filedialog.getFile()!=null)) { this.file filedialog.getFile()); return true; } else return false; } public boolean saveDialog() { FileDialog filedialog = new FileDialog(this,"SaveAs",FileDialog.SAVE); filedialog.setFile(this.file.getName()); filedialog.setVisible(true); if ((filedialog.getDirectory()!=null) && (filedialog.getFile()!=null)) { this.file = new File(filedialog.getDirectory(), //保存对话框 = new File(filedialog.getDirectory(),filedialog.getFile()+".txt"); return true; } else return false; } public void actionPerformed(ActionEvent e) { //事件处理面向对象课程设计报告 if(e.getActionCommand()=="打开") { if (this.openDialog()) {第11页,共24页this.setTitle(this.file.getName()); this.textarea.setText(this.readFromFile()); } } if(e.getActionCommand()=="保存" && this.file!=null) { this.writeToFile(this.textarea.getText()); } if(e.getActionCommand()==" e.getActionCommand()=="另存为") { if (this.saveDialog()) { this.writeToFile(this.textarea.getText()); this.setTitle(this.file.getName()); } } if(e.getActionCommand()=="退出") { System.exit(0); } if(e.getSource()==menuitem_copy) { textarea.copy(); } if(e.getSource()==menuitem_paste) { textarea.paste(); } //编辑菜单的事件处理 保 存 " && this.file==null ||面向对象课程设计报告 if(e.getSource()==menuitem_cut) { textarea.cut(); } if(e.getSource()==menuitem_red) { textarea.setForeground(Color.red); } if(e.getSource()==menuitem_blue) { textarea.setForeground(Color.blue); } if(e.getSource()==menuitem_green) { textarea.setForeground(Color.green); } Font font=textarea.getFont(); int style=font.getStyle(); if(e.getSource()==menuitem_song) { textarea.setFont(new第12页,共24页//颜色菜单的事件处理//设置字体变量java.awt.Font("宋体",java.awt.Font.PLAIN,font.getSize())); } if(e.getSource()==menuitem_fang) { textarea.setFont(new java.awt.Font(" 仿 宋",java.awt.Font.PLAIN,font.getSize())); } if(e.getSource()==menuitem_kai) { textarea.setFont(new java.awt.Font(" 楷 体",java.awt.Font.PLAIN,font.getSize()));面向对象课程设计报告 } if(e.getSource()==menuitem_bold) { style=style^1;第13页,共24页//设置字形菜单的事件处理textarea.setFont(new java.awt.Font("",style,font.getSize())); } if(e.getSource()==menuitem_italic) { style=style^2; textarea.setFont(new java.awt.Font("",style,font.getSize())); } if(e.getSource()==menuitem_normal) { style=style^3; textarea.setFont(new java.awt.Font("",style,font.getSize())); } if(e.getSource()==menuitem_12) { textarea.setFont(new java.awt.Font(font.getName(),style,12)); } if(e.getSource()==menuitem_24) { textarea.setFont(new java.awt.Font(font.getName(),style,24)); } if(e.getSource()==menuitem_36) { textarea.setFont(new java.awt.Font(font.getName(),style,36)); } if(e.getSource()==menuitem_seek) { dialog.setVisible(true); } seek=textarea.getText(); //查找菜单项的处理事件面向对象课程设计报告 第 String tseek=textfield_seek.getText(); if(e.getSource()==button_seek) { int i=textfield_seek.getText().length(); int j=seek.indexOf(tseek); textarea.setSelectionStart(j); textarea.setSelectionEnd(i+j); textfield_seek.setText(""); } } public void itemStateChanged(ItemEvent e) { if(e.getSource()==rbmi_red) { textarea.setForeground(java.awt.Color.red); } if(e.getSource()==rbmi_blue) { textarea.setForeground(java.awt.Color.blue); } if(e.getSource()==rbmi_green) { textarea.setForeground(java.awt.Color.green); } } public void mouseClicked(MouseEvent mec) { if (mec.getModifiers()==mec.BUTTON3_MASK)14页,共24页//ItemListener 事件处理方法//鼠标处理事件popupmenu.show(textarea,mec.getX(),mec.getY()); } public void mousePressed(MouseEvent mep) public void mouseReleased(MouseEvent mer) public void mouseEntered(MouseEvent mee) { { { } } }面向对象课程设计报告 public void mouseExited(MouseEvent mex) public void mouseDragged(MouseEvent med) public static void main(String arg[]) { new Notepad("文本编辑器"); } }第 { {15 页,共 } }24页//main 方法编译代码实现各种功能:打开任意目录下一文本文件:文件目录下“另存为”功能:面向对象课程设计报告第16页,共24页编辑目录下“查找”功能:编辑目录下“复制” “剪切” “粘贴”功能:面向对象课程设计报告第17页,共24页面向对象课程设计报告第18页,共24页字体设置功能:面向对象课程设计报告第19页,共24页编辑目录下“颜色“功能:设置字型功能:面向对象课程设计报告第20页,共24页设置字号功能:面向对象课程设计报告第21页,共24页运行完毕,可关闭窗口退出程序或点击文件目录下的“退出”功能面向对象课程设计报告第22页,共24页5. 软件发布面向对象课程设计报告 首先制作 Manifest 文件,代码如下; Manifest-Version:1.0 Mani-Class: notepad Created-Boy:1.6(Sun Microsystems Inc.) 保存为 Manifest.mf,保存在 D:\java 打开 CMD 在 DOS 下生成 jar 文件:第23页,共24页D:\java\jar cmf Notepad.jar Manifest.mf notepad.class 生成 JAR 文件,双击运行。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
. I Java课程设计报告题目:文本编辑器班级:学号:姓名:成绩:日期:年月日目录一、综合设计的目的与要求 (3)二、综合设计正文 (3)1.系统分析 (3)1.1系统开发背景、开发围、建设目标与必要性开发 (3)1.2需求分析 (3)2.系统设计 (3)2.1功能设计 (3)2.2系统运行环境与开发工具 (4)3 .系统实施 (4)3.1源程序 (4)3.2.系统测试及部分截图 (12)三、综合设计总结或结论 (13)四、参考文献 (13)《文本编辑器》一、综合设计的目的与要求要求在学生能够较熟练使用java程序设计语言进行软件代码的编写,同时还要具备较好的项目分析的能力,加深对相关课程基本容的理解。
同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统的练习。
二、综合设计正文1 系统分析1.1系统开发背景、开发围、建设目标与必要性随着计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。
当然对文本编辑操作仍然占据着重要地位,记事本是简单便捷的文本编辑器,可实现对文本编辑操作的基本功能。
1.2需求分析程序设计主要分为两大部分:简单GUI设计和程序功能设计。
通过GUI设计实现图形用户界面,提供图形菜单,方便用户操作。
使用Java语言编写一个能够对输入文字进行操作,具有合理的界面,能够在界面中实现右键快捷方式,对文档容进行编辑操作,并且能够顺利退出的程序。
通过设计和实现一个具有基本功能的文本编辑器,提高我们对Java语言设计的掌握能力,理论联系实际,进一步提高软件开发技术,从而培养我们分析、解决问题的能力。
2 系统设计2.1功能设计根据系统自带的文档编辑器的特征设计,包括如下的功能模块:一、整体结构框架包括:菜单栏和文档编辑区二、每个框架分别包含不同的子框架,各个模块的具体框架:1.菜单栏:文件、编辑、工具、帮助2.菜单栏中各个子菜单功能文件:新建、打开、保存、另存为、退出编辑:剪切、复制、粘贴工具:查找、替换3.子菜单功能的实现主要的几个功能介绍1)打开与另存为:两个窗体调用系统函数直接利用,注意格式的选择2)查找:查找容、查找、查找下一个4.文本编辑区监视文本容是否改变、监听光标所在位置2.2系统运行环境与开发工具开发环境与工具:jdk2.0 Eclipse SDK3 系统实施3.1 源程序import javax.swing.*;import java.awt.*;import java.io.*;import java.awt.event.*;public class TxtEditor extends JFrame implements ActionListener{String file_name;String file_dir;String tempString;//上次保存后的文件名和地址String fileName = "";JPanel x=new JPanel();JTextArea wen=new JTextArea(20,50);JMenuItem ziti=new JMenuItem("字体");JMenuItem a=new JMenuItem("普通");//定义菜单项JMenuItem xin=new JMenuItem("新建");JMenuItem open=new JMenuItem("打开");JMenuItem save=new JMenuItem("保存");JMenuItem lsave=new JMenuItem("另存为");JMenuItem tui=new JMenuItem("退出");JMenuItem cut=new JMenuItem("剪切");JMenuItem copy=new JMenuItem("复制");JMenuItem cast=new JMenuItem("粘贴");JMenuItem delete=new JMenuItem("删除");JMenuItem b=new JMenuItem("粗体");JMenuItem c=new JMenuItem("斜体");TxtEditor(){super ("文本编辑器");//对话框setBounds(250,100,700,450);setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e) {int option= JOptionPane.showConfirmDialog(TxtEditor.this, "确定要退出吗... ", "系统和你对话",JOptionPane.YES_NO_OPTION);if(option==JOptionPane.YES_OPTION)if(e.getWindow() == TxtEditor.this){System.exit(0);}else{return;}}});//热键设置xin.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,ActionEvent.CTRL_MA SK));open.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,ActionEvent.CTRL_ MASK));save.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,ActionEvent.CTRL_M ASK));cut.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,ActionEvent.CTRL_M ASK));copy.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,ActionEvent.CTRL_ MASK));cast.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V,ActionEvent.CTRL_M ASK));//定义面板// x.add(add(new JScrollPane (wen));//);//滚动条wen.setFont(new Font("楷体" , Font.PLAIN ,20)); // wen.setBackground(Color.blue);// add(x);//菜单栏的创建JMenuBar cai=new JMenuBar();this.setJMenuBar(cai);cai.setOpaque(true);JMenu jian=new JMenu("文件");jian.add(xin);jian.add(open);jian.add(save);jian.add(lsave);jian.addSeparator( );jian.add(tui);cai.add(jian);JMenu bian= new JMenu("编辑");bian.add(cut);bian.add(copy);bian.add(cast);bian.add(delete);cai.add(bian);JMenu geshi = new JMenu ("格式");JMenu optionsMenu=new JMenu("字体"); geshi.add(optionsMenu);optionsMenu.add(a);optionsMenu.add(b);optionsMenu.add(c);cai.add(geshi);//增加监听器xin.addActionListener(this);open.addActionListener(this);save.addActionListener(this);lsave.addActionListener(this);tui.addActionListener(this);cut.addActionListener(this);copy.addActionListener(this);cast.addActionListener(this);delete.addActionListener(this);ziti.addActionListener(this);a.addActionListener(this);b.addActionListener(this);c.addActionListener(this);// 文本框锁定//this.setResizable(false);}//重写方法public void actionPerformed(ActionEvent e){String actionCommand=e.getActionCommand();if(e.getSource()instanceof JMenu);{if(e.getSource()==xin){newfile();}else if(e.getSource()==open){openfile();}else if(e.getSource()==save){savefile();}else if(e.getSource()==lsave){lsavefile();}else if(e.getSource()==cut){cutfile();}else if(e.getSource()==copy){copyfile();}else if(e.getSource()==cast){castfile();}else if(e.getSource()==delete){deletefile();}else if(e.getSource()==a){afile();}else if(e.getSource()==b){bfile();}else if(e.getSource()==c){cfile();}else if("退出".equals(actionCommand))System.exit(0);}}// 方法定义public void newfile(){savefile();wen.setText(null);fileName = "";}//打开public void openfile(){String fileName = null;FileDialog df = new FileDialog(this,"打开文件",FileDialog.LOAD);df.setVisible(true);//建立新文件File f = new File( df.getDirectory()+df.getFile() );//得到文件名fileName = df.getDirectory()+df.getFile();//用此文件的长度建立一个字符数组(特别标注)char ch[] = new char [(int)f.length()];//异常处理try{//读出数据,并存入字符数组ch中BufferedReader bw = new BufferedReader( new FileReader(f) );bw.read(ch);bw.close();}catch( FileNotFoundException fe ){System.out.println("file not found");System.exit(0);catch( IOException ie){System.out.println("IO error");System.exit(0);}String s =new String (ch);wen.setText(s);}//保存public void savefile(){if( fileName.equals("") ){FileDialog df = new FileDialog(this,"保存文件",FileDialog.SAVE);df.addWindowListener( new WindowAdapter(){ public void windowClosing(WindowEvent ee){System.exit(0);}});df.setVisible(true);String s = wen.getText();try{File f = new File( df.getDirectory()+df.getFile());fileName = df.getDirectory()+df.getFile();BufferedWriter bw = new BufferedWriter( new FileWriter (f));bw.write(s , 0 , s.length());bw.close();}catch(FileNotFoundException fe_){System.out.println("file not found");System.exit(0);}catch( IOException ie_){System.out.println(" IO error");System.exit(0);}}//如果文件已经保存过else{String s = wen.getText();try{File f = new File( fileName );BufferedWriter bw = new BufferedWriter( new FileWriter (f));bw.write(s , 0 , s.length());bw.close();}catch(FileNotFoundException fe_){System.out.println("file not found");System.exit(0);}catch( IOException ie_){System.out.println(" IO error");System.exit(0);}}}//另存为public void lsavefile(){FileDialog df = new FileDialog(this,"另存为",FileDialog.SAVE);df.addWindowListener( new WindowAdapter(){public void windowClosing(WindowEvent ee){System.exit(0);}});df.setVisible(true);String s = wen.getText();try{File f = new File( df.getDirectory()+df.getFile());BufferedWriter bw = new BufferedWriter( new FileWriter (f));bw.write(s , 0 , s.length());bw.close();}catch(FileNotFoundException fe_){System.out.println("file not found");System.exit(0);}catch( IOException ie_){System.out.println(" IO error");System.exit(0);}}//剪切public void cutfile(){tempString = wen.getSelectedText();StringBuffer tmp = new StringBuffer ( wen.getText());int start = wen.getSelectionStart();int len = wen.getSelectedText().length();tmp.delete( start , start+len);wen.setText(tmp.toString());}//复制public void copyfile(){tempString = wen.getSelectedText();}//粘贴public void castfile(){StringBuffer tmp = new StringBuffer ( wen.getText());//得到要粘贴的位置int start = wen.getSelectionStart();tmp.insert(start , tempString);//用新文本设置原文本wen.setText(tmp.toString());}//删除public void deletefile(){StringBuffer tmp = new StringBuffer ( wen.getText());int start = wen.getSelectionStart();int len = wen.getSelectedText().length();tmp.delete( start , start+len);wen.setText(tmp.toString());}//字体public void afile(){wen.setFont(new Font("楷体", Font.PLAIN ,wen.getFont().getSize()) );//普通文字}public void bfile(){wen.setFont(new Font("楷体" , Font.BOLD ,wen.getFont().getSize()) );//粗体文字}public void cfile(){wen.setFont(new Font("楷体" , Font.ITALIC ,wen.getFont().getSize()) );//斜体文字}public static void main(String[] args) {TxtEditor w=new TxtEditor();w.pack();w.setVisible(true);}}3.2系统测试及部分截图4 系统测试三、综合设计总结或结论虽然这次试验比较简单,但是做起来还是比较吃力,由此可见,我在java学习上还不够透彻和明白。