《记事本的设计与功能实现Java课程设计报告.docx》由会员分享,可在线阅读,更多相关《记事本的设计与功能实现Java课程设计报告.docx(32页珍藏版)》请在课桌文档上搜索。
1、领南甯老就面向对上奏方极计课程设计报告题目记事本姓名:学号:专业:一计算机科学与技术一班级:计科指导教师:职称:讲师计算机与电子工程学院2009年6月课程设计评审表姓名学院计算机与电子工程学院学号专业班级计科题目记事本评审意见评审成绩指导教师签名职称评审时间年月日1课程设计过程概述12课程设计题目描述和基本设计要求12.1 课程设计题目描述12.2 基本设计要求13系统需求分析与设计13.1 系统需求分析13.2 其他需求分析23.3 系统设计24各功能模块设计34.1 文本编辑框模块设计34.2 菜单条模块设计34.3 文件模块设计44.4 编辑模块设计64.5 工具模块设计104.6 帮助
2、模块设计104.7 工具条模块设计114.8 异常处理情况说明125系统实现与测试126课程设计总结136.1 遇到的问题及解决办法136.2 心得体会13参考文献14附录14记事本1课程设计过程概述在2009年6月,学院对我们进行了为期两周的JaVa课程培训,要求我们在实验楼二楼网络机房进行了学年度课程设计。这次课程设计的主要目的是结合面向对象程序设计课程,培养我们面向对象软件开发的思维,提高用JaVa编程的实际动手能力并增强大家对面向对象的了解。这次课程设计的主要内容是独立用Java语言开发一个小的应用程序、网络应用程序或者是管理系统,从而深刻体会面向对象软件开发的方法。2课程设计题目描述
3、和基本设计要求2.1 课程设计题目描述我设计的是记事本。主要用到的是图形界面,可以在文本编辑框里进行编辑,在菜单选项里进行打开、保存、另存为、查找、替换、等功能。界面上的按钮有文件、编辑、工具和帮助。还添加有工具条,工具条中有按钮复制、粘贴和全选。2.2 基本设计要求(1)系统安全、灵活、可靠;(2)功能齐全;(3)操作方便、简单,界面友好;3系统需求分析与设计3.1 系统需求分析记事本是一个对可以文字进行简单处理的软件,既简单很容易操作又很方便用户使用,所以要求一般的功能都能满足。本系统能实现在文本框里直接进行编辑,编辑完后可以对文字进行保存和另存为,把文字存储到用户需要的地方。并且可以在编
4、辑过程中可以对文字进行复制、全选、粘贴和剪切,使编辑变得更简洁。另外也可以直接打开计算机里的文本文档。还可以实现在打开的文档里进行查找和替换,查找文档中用户所有所需要的内容,然后再替换为要更改的内容。本系统还有计算器的功能,对数字进行一些简单的四则运算。如果要退出记事本,会提示是否对当前正在编辑的文档进行保存,然后再安全的退出。3.2 其他需求分析(1)性能描述易于操作,打开、保存、查找、替换等功能要方便,要求在点击关闭编辑框的时候有提示是否保存。(2)设计约束开发工具:jdk6.0和命令提示符;能实现用户所定义的各项需求。(3)界面要求以WindoWS窗口形式显示,有一个编辑框可以直接进行文
5、字编辑,菜单栏为文件、编辑、工具和帮助。在文件菜单下有按钮打开、保存、另存为、退出。编辑菜单下有按钮复制、粘贴、全选、剪切。工具菜单下有按钮计算器。帮助菜单下有按钮关于帮助。然后工具条菜单下有单独列出来的按钮复制、粘贴和全选,方便直接进行操作。3.3 系统设计要求记事本用图形界面实现,并能实现编辑、保存、另存为、查找替换等功能。:系统中用到了一些基本类、调用了一些包和继承了一些类,如图1所示。类包继承类.i图1系统类图4各功能模块设计4.1 文本编辑框模块设计文本编辑框(如图2),可以方便用户直接进行编辑,及新建功能:图2文本编辑框4.2 菜单条模块设计创建菜单条,添加按钮:文件、编辑、工具、
6、帮助和工具条功能(如图3)。在TeXtDemO类中,实现这一功能的代码为:publicJMenuBarcreatBar()bar=newJMenuBar();CreatMenU(bar,文件);CreatMenU(bar,编辑);CreatMenU(bar,工具);CreatMenU(bar,帮助);returnbar;菜单条的结构功能如图3所示:图3菜单条的结构功能图4.3 文件模块设计(1)在文件中实现打开功能,界面图形如图4,添加文件中按钮打开的方法为:publicvoidcreatMenu(JMenuBarbar,Stringname)menu=newJMenu(name);if(na
7、me.equals(文件)menu.add(creatltem(打开);)bar.add(menu);图4打开功能界面图(2)在文件中实现保存、另存为功能,其界面图形如图5,添加文件中按钮保存、另存为的方法为:publicvoidcreatMenu(JMenuBarbar,Stringname)menu=newJMenu(name);if(name.equals(“文件)menu.add(creatltem(保存);menu.add(creatltem(另存为);bar.add(menu);图5保存、另存为功能界面图(3)在文件中实现退出功能,其界面图形如图6,添加文件中退出按钮的方法为:pu
8、blicvoidcreatMenu(JMenuBarbar,Stringname)menu=newJMenu(name);if(name.equals(文件)menu.add(creatltem(,ig出);)bar.add(menu);)图6退出功能界面图4.4 编辑模块设计(1)在编辑中实现复制、粘贴功能,其界面图形如图7、8、9、10,添加编辑中复制、粘贴按钮的方法为:publicvoidcreatMenu(JMenuBarbar,Stringname)menu=newJMenu(name);elseif(name.equals(编辑)menu.add(creatltem(n复制);me
9、nu.add(creatltem(粘贴);)bar.add(menu);图7实现复制、粘贴功能界面图1图8实现复制、粘贴功能界面图2图9实现复制、粘贴功能界面图3图10实现复制、粘贴功能界面图4(2)在编辑中实现全选功能,其界面图形如图11、12,添加编辑中全选按钮的方法为:publicvoidcreatMenu(JMenuBarbar,Stringname)menu=newJMenu(name);elseif(name.equals(编辑)menu.add(creatltem(,in);bar.add(menu);图Il实现全选功能界面图1图12实现全选功能界面图2(3)在编辑中实现剪切功能
10、,其界面图形如图13、14,添加编辑中剪切按钮的方法为:publicvoidcreatMenu(JMenuBarbar,Stringname)menu=newJMenu(name);if(name.equals(“文件”)elseif(name.equals(编辑)menu.add(creatltem(剪切);bar.add(menu);图13实现剪切功能界面图1图14实现剪切功能界面图24.5 工具模块设计在工具中实现计算器功能,其界面图形如图15,添加工具中计算器按钮的方法为:publicvoidcreatMenu(JMenuBarbar,Stringname)menu=newJMenu(
11、name);if(name.equals(“文件”).elseif(name.equals(编辑”).elseif(name.equals(工具)menu.add(creatltem(计算器”);)bar.add(menu);S计算器R叵!因编辑查看9帮助2IBaCkSPaceCECB1111lMWBEErrIEnnQHHQHF1M1171M图15实现计算器功能界面图4.6 帮助模块设计在帮助中实现关于帮助功能,其界面图形如图16,添加帮助中关于帮助按钮的方法为:publicvoidcreatMenu(JMenuBarbar,Stringname)menu=newJMenu(name);if(
12、name.equals(“文件”)elseif(name.equals(编辑).ioelseif(name.equals(工具)elseif(name.equals(帮助)menu.add(creatltem(关于帮助);)bar.add(menu);图16实现帮助功能界面图4.7 工具条模块设计在工具条中有复制、粘贴、全选和查找按钮,其在TeXtTOOlBar类中实现添加的方法为:publicJToolBarcreatToolBar()toolbar=newJToolBar();toolbar.add(text.creatButton(,MJ);toolbar.add(text.creatB
13、utton(粘贴);toolbar.add(text.creatButton(,i);toolbar.add(text.creatButton(,SiJc,);returntoolbar;其中查找的界面图形如图17:图17实现查找功能界面图4.8 异常处理情况说明(1)打开、保存文件时的异常处理需要处理的异常:IOEXCePtion(2)复制、粘贴时的异常处理图形界面如图18o图18实现异常处理功能界面图5系统实现与测试使用JDK运行程序时,将主程序TextDemo和其下的三个文件都保存在D盘中。打开一个DC)S窗口,使用命令:javac*.java,将所有的java源程序进行编译。编译窗口如
14、图19o图19编译窗口使用命令:javaTextDemo,运行程序。运行后界面图如图20。图20运行后界面图6课程设计总结6.1 遇到的问题及解决办法在此次课程设计中,我遇到了一些问题,如:对于面向对象的方法了解不够透彻,运用到实际的软件开发中存在着困难;对于JaVa语言,只学习到了一些最基本的知识,这导致编写程序时经常出现一些语法错误,而且要在短时间内用JaVa语言来设计一个具体的系统是一个较大的挑战;自己感觉难以动手,这表明所学的知识不能灵活运用到实际中。并且JaVa的学习过程本身就没有学踏实,经过一个学期后,更加感觉到很陌生。对于以上的问题,自己有清楚的认识,首先必须要对计算机产生兴趣,
15、多阅读相关的书籍,多跟精通此方面的老师和同学交流、像他们学习。还有就是应该多动手编程。6.2 心得体会在这次的学年度课程设计中,综合运用了JaVa语言。用界面实现记事本,并实现其基本功能。通过这次为时二个星期的课程设计,我学到了很多的东西,下面就这在这次课程设计中的心得体会总结如下:在这次课程设计中,主要是运用JaVa语言来编写,并可运用其他的技术。虽然是设计一个简单的记事本,但对我来说也存在很多困难,这让我看到了自己和身边同学的差距,激起我要认真学习的动力。在这个过程中,我学到了很多的知识,同时也非常感谢刘耀老师的帮助与指导。在以后的学习中,我会更加努力的学好专业知识,并将所学知识用于实践当
16、中去,以便牢固掌握知识。参考文献1朱福喜,傅建明.JAVA项目设计与开发范例M.北京:电子工业出版社,2005.2王强,贾素玲.JAVA程序设计M.北京:清华大学出版社,2007.3王文涛,袁海燕.JAVA实用程序设计100例M.北京:人民邮电出版社,2005.4耿祥义.JAVA基础教程M.北京:清华大学出版社,2004.5刘宝林.JAVA程序设计与案例M.北京:高等教育出版社,2006附录记事本主程序TeXtDemO代码:importjava.awt.BorderLayout;importjava.awt.FileDialog;importjava.awt.Toolkit;importjav
17、a.awt.datatransfer.Clipboard;importjava.awt.datatransfer.DataFlavor;importjava.awt.datatransfer.StringSelection;importjava.awt.datatransfer.Transferable;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.awt.event.WindowAdapter;importjava.awt.event.WindowEvent;importjava
18、x.swing.JButton;importjavax.swing.JFrame;importjavax.swing.JOptionPane;importjavax.swing.JPanel;importjavax.swing.JTextArea;/importorg.jvnet.Substance.SubstanceLookAndFeel;/importorg.jvnet.substance.skin.CremeSkin;*记事本的主程序* (0)author Administrator*/创建按钮的方法* param buttonname* retum:按钮*/public JButton
19、 creatButton(String bultonname)JButton button = new JButton(buttonname);向按钮中添加事件button.addActionListener( this);return button;*authorAdministrator*/publicclassTextDemoextendsJFrameimplementsActionListenerprivateJPanelCenterPanel;/中心面板privateTextJMenujmenu=newTeXtJMenU(this);/菜单对象privateTextToolBarto
20、olbar=newTeXtToOIBar(this);工具栏privateJTextAreajta=newJTeXtArea(300,300);工作区privateClipboardCliPbOard;剪切板privateFileDialogSaVeFiIeDialog;保存文件的对话框privateSearchAndReplaceSeraChAndRePlace;查找和替换对象*构造器*/publicTextDemo()/SubstanceLookAndFeel.setSkin(newCremeSkinO);/加载第三方组件init();)publicJTextAreagetJta()ret
21、urnjta;创建中心面板return*/publicJPanelCreatCenterPanelOCenterPaneI=newJPanel();CenterPanel.setLayoul(newBorderLayoutO);CenterPanel.add(jta);returnCenterPanel;)*初始化容器*/publicvoidinit()this.SetTitIe(“记事本”);jta.setLineWrap(true);添加菜单jmenu.setBar();toolbar.setTbolBar();Toolkittoolkit=ToolkiLgetDefaultToolkit
22、O;clipboard=toolkit.getSystemClipboard();this.setSize(500,400);this.add(creatCenterPanel(),BorderLayout.CENTER);this.setLocationRelativeTo(null);this.setDefaultCloseOperation(this.DO_NOTHING_ON_CLOSE);this.addWindowListener(newWindowAdapterOpublicvoidwindowClosing(WindowEvente)intval=JoPIionPane.sho
23、wConfirmDialog(null,是否保存?,退出u,JOptionPane.YES_NO_CANCEL_OPTION);if(val!=JOptionPane.CANCEL_OPTION|val=JOptionPane.NO_OPTION)System.exit(O);elseif(val=JOptionPane.YES_OPTION)saveFile();)1);/this.pack();this.setVisible(true);)* 保存文件* /publicvoidsaveFile()SaveFileDialog=newFileDialog(this,savefile,File
24、Dialog,SAVE);saveFileDialog.show();Siringfilename=saveFileDialog.getDirectory()+saveFileDialog.getFile();System.out.println(filename);newTextJMenu().saveFile(filename);* main()* paramargs* /publicstaticvoidmain(Stringargs)TextDemotest=newTextDemo();)publicvoidactionPerformed(ActionEvente)Stringcmd=e
25、.getActionCommand();if(cmd.equals(“复制)Stringstr=jta.getSelectedText();/获得选中的字符串StringSelectionselection=newStringSelection(Str);clipboard.setContents(selection,null);elseif(cmd.equals(粘贴)Transferablecontents=clipboard.getContents(this);if(contents=二null)return;1Stringstr=n,;try(str=(String)contents.
26、getTransferData(DataFlavor.stringFlavor);catch(Exceptionel)Je)PtiOnPane.showMessageDialog(null,”文件转换出错!);)/替换选中的文件jta.replaceRange(str,jta.getSelectionStart(),jta.getSelectionEnd();elseif(cmd.equals(全选)jta.selectA11();elseif(cmd.equals(“查找)SerachAndReplace=newSearchAndReplace(Ihis);(1) TextJMenu类的代码
27、如下:importjava.awt.FileDialog;importjava.awt.Toolkit;importjava.awt.datatransfer.Clipboard;importjava.awt.datatransfer.DataFIavor;importjava.awt.datatransfer.StringSelection;importjava.awt.datatransfer.Transferable;importjava.awt.datatransfer.UnsupportedFlavorException;importjava.awt.event.ActionEven
28、t;importjava.awt.event.ActionListener;importjava.awt.image.BUfferStrategy;importjava.io.BufferedReader;importjava.io.BufferedWriter;importjava.io.File;importjava.io.FileNotFoundException;importjava.io.FileReader;importjava.io.FileWriter;importjava.io.IOException;importjava.io.Writer;importjavax.swin
29、g.JMenu;importjavax.swing.JMenuBar;importjavax.swing.JMenuItem;importjavax.swing.JOptionPane;*记事本的菜单类*authorAdministrator*/publicclassTextJMenuprivateTextDemotext;privateJMenuBarbar;/菜单条privateJMenumenu;/菜单privateJMenuItemitem;/菜单项privateFileDialogOpenFileDialog;/打开文件的对话框privateFileDialogSaveFileDia
30、log;/保存文件的对话框privateFileDialogSaveAsFileDialog;/另存为文件的对话框Stringfilename;/文件名Clipboardclipboard;/剪切板privateToolkittoolkit;/工具privateBufferedReaderread;读文件privateBufferedWriterOIit;写文件* 无参的构造器* /publicTextJMenuO)* 重载的构造器* paramtext* /publicTextJMenu(TextDemotext)this.text=text;)* 初始化对话框* /publicvoidin
31、it()/获得系统剪切板toolkit=Toolkit.getDefaultToolkit();clipboard=toolkit.getSystemClipboard();OpenFileDialog=newFiIeDiaIog(text,“打开文件,FileDialogLOAD);SaveAsFileDialog=newFileDiak)g(text,保存文件,FileDialogSAVE);SaveFileDialog=newFileDiakg(text,另存为,FileDialog,SAVE);* 创建菜单条的方法* retum:菜单条* /publicJMenuBarcreatBar
32、()bar=newJMenuBar();CreatMenU(bar,文件);CreatMenU(bar,编辑);CreatMenU(bar,工具);CreatMenU(bar,帮助);returnbar;* 添加菜单的方法*parambarparamname* /publicvoidcreatMenu(JMenuBarbar,Stringname)menu=newJMenu(name);if(name.equals(文件又)menu.add(creatltem(新建);menu.add(creatltem(打开);menu.addSeparator();menu.add(creatltem(保
33、存);menu.add(creatltem(另存为);menu.add(creatltem(退出);elseif(name.equals(编辑”)menu.add(creatltem(,复制”);menu.add(creatltem(粘贴);menu.add(creatltem(全选);menu.add(creatltem(WW);elseif(name.equals(工具)menu.add(creatltem(计算器”);elseif(name.equals(帮助)menu.add(creatltem(关于帮助);)bar.add(menu);* 创建菜单项的方法* paramname* (
34、0)return* /publicJMenuItemcreatItem(Stringname)item=newJMenuItem(name);item.addActionListener(newActionListenerOpublicvoidactionPerformed(ActionEvente)Stringcmd=e.getActionCommand();/获得事件if(cmd.equals(“新建)text.getJta().setText(,);elseif(cmd.equals(打开)/显示打开文件的对话框openFileDialog.show();/获得文件名filename=o
35、penFileDialog.getDirectory()+openFileDialog.getFile();System.oul.println(filename);text.getJta().setText(,);readFile(filename);elseif(cmd.equals(保存)saveFileDialog.show();filename=saveFileDialog.getDirectory()+saveFileDialog.getFile();System.out.println(filename);saveFile(filename);elseif(cmd.equals(
36、另存为)saveAsFileDialog.show();filename=saveAsFileDialog.getDirectory()+saveAsFileDialog.getFile();saveFile(filename);elseif(cmd.equals(“全选)text.getJta().selectA11();elseif(cmd.equals(复制)Siringstr=text.getJta().getSelectedText();/获得选中的字符串StringSelectionselection=newStringSelection(Str);clipboard.setCon
37、tents(selection,null);elseif(Cmd.equals。剪切)Stringstr=text.getJta().getSelectedText();StringSelectionselection=newStringSelection(Str);clipboard.setContents(selection,null);/全部替换选中的为空text.getJta().replaceRange(,text.getJta().getSelectionStart(),text.getJta().getSelectionEnd();elseif(Cmd.equals,粘贴)Tra
38、nsferablecontents=clipboard.getContents(this);if(contents=null)return;Stringstr=try(str=(String)contents.getTransferData(DataFlavor.stringFlavor);catch(Exceptionel)Je)PtionPane.showMessageDialog(null,“文件转换出错!);)/替换选中的文件text.getJta().replaceRange(str,text.getJta().getSelectionStart(),text.getJta().ge
39、tSelectionEnd();山,(51(1611忝(“退出)intval=JoPIionPane.showConfirmDialog(nu11,是否保存?”,“退出“,JOplionPane.YES_NCLCANCELJDPTIoN);if(val!=JOptionPane.CANCEL_OPTION)System.exit(O);)elseif(cmd.equals(计算器”)getCalcultor();1);returnitem;*读文件的方法*paramfile:要读的文件的路径*/publicvoidreadFile(Stringfilename)Filefile=newFile
40、(filename);try(read=newBufferedReader(newFileReader(file);Siringstr=null;while(str=read.readLine()!=null)System.out.println(str);text.getJta().append(str);text.getJta().append(n);catch(FileNotFoundExceptione)JOptionPane.showMessageDialog(null,errorfile!);)catch(IOExceptione)e.printStackTrace();final
41、lytry(read.close();catch(IOExceptione)e.printStackTrace();)保存文件的方法paramfilename*/publicvoidsaveFile(Stringfilename)(Filefile=newFile(filename);try(out=newBufferedWriter(newFileWriter(fle);将工作区中的内容写到该文件中Stringstr=text.getJta().getText().toString();out.write(str);catch(IOExceptione)e.printStackTrace()
42、;finallytry(out.flush();catch(IOExceptione)e.printStackTrace();tryout.close();catch(IOExceptione)e.printStackTrace();* 获得系统的计算器* /publicvoidgetCalcultor()Runtimerun=Runtime.getRuntime();tryrun.exec(,CWINDOWSsystem32calc.exen);catch(IOExceptione)e.printStackTrace();* 对容器设置菜单* /publicvoidsetBar()init(
43、);text.setJMenuBar(creatBar();(2) TeXtToOIBar类的代码如下:importjava.awt.BorderLayout;importjavax.swing.JToolBar;publicclassTextToolBarprivateJToolBartoolbar;/工具条privateTextDemotext;* 重载构造方法* /publicTextToolBarOpublicTextToolBar(TextDemotext)this.text=text;* 创建工具条* return* /publicJToolBarCreatToolBar()too
44、lbar=newJToolBar();toolbar.add(textcreatButton(XJ,);toolbar.add(text.creatButton(粘贴);toolbar.add(text.creatButton(,iu);toolbar.add(text.creatButton(,SJJcH);returntoolbar;)publicvoidsetToolBar()text.add(creatToolBar(),BorderLayout.NORTH);(3) SearchAndReplace类的代码如下:importjava.awt.GridLayout;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.awt.event.WindowAda