Java记事本程序课程设计报告IT168文库.docx
《Java记事本程序课程设计报告IT168文库.docx》由会员分享,可在线阅读,更多相关《Java记事本程序课程设计报告IT168文库.docx(32页珍藏版)》请在冰豆网上搜索。
Java记事本程序课程设计报告IT168文库
软件学院
课程设计报告书
课程名称面向对象课程设计
设计题目记事本程序
专业班级软件09-01
学号0920010102
姓名陈冲
指导教师徐娇月
2011年6月
目录
1设计时间1
2设计目的1
3设计任务1
4设计内容1
4.1需求分析1
4.1.1需求说明1
4.1.2功能需求1
4.2概要设计2
4.2.1程序设计思路2
4.2.2程序运行环境及界面2
4.3功能模块设计3
4.3.1功能模块说明图3
4.3.2自定义类及接口说明4
4.3.3类中方法介绍5
4.4异常处理10
4.5程序运行与调试分析10
4.5.1.开始调试10
4.5.2各菜单实现11
4.5.3退出15
5总结与展望16
程序源代码:
17
参考文献24
1设计时间
2011-06-05至2011-06-12
2设计目的
记事本主要是对文字进行编辑处理的软件。
能进行新建、打开、保存等功能。
另外还可以根据用户的需要查找替换相应的文字,实现编辑功能。
通过面向对象程序设计对自己所学过的的知识加以掌握和运用。
巩固面向对象设计理念的理解,熟练Java设计语言的运用。
3设计任务
记事本程序。
要求如下:
(1)使用图形用户界面实现。
(2)必须有菜单、弹出式对话框组件的实现。
(3)能实现文字编辑、保存、另存为、查找、替换功能,其它功能可自行丰富。
(4)系统使用的GUI组件不得少于5种,越全面越好,但要合适(和谐界面)。
提示:
使用文件输入输出流。
4设计内容
4.1需求分析
4.1.1需求说明
现在网络上各种文档编辑器数不胜数,有EmEditor,UEStudio,Word。
功能也是应有尽有,有能改变字体的,有能改变文字颜色的。
但是,这些软件又存在各种各样的瑕疵或问题:
有的文件体积相对于一般文字编辑来说太大;有的功能太繁杂,使初级使用者一时难以掌握。
仅从日常应用方面来说,一个文本编辑器只需一些简单实用的功能就够了。
本程序设计就是依照这样一种使用需要设计了一个简单的实现特定功能的记事本程序。
4.1.2功能需求
本程序要构建的记事本程序参照了Windows操作系统的记事本工具,其功能有以下几个方面:
(1).菜单中有“文件”,“编辑”,“作者”三个主菜单。
(2).“文件”有“新建”“打开”“保存”“退出”四个子菜单:
分别用于新建文件,打开文件,保存文件,退出记事本。
(3).“编辑菜单”有“查找、替换、时间日期”功能。
(4).“作者”菜单中有关于记事本程序的作者信息。
4.2概要设计
4.2.1程序设计思路
Java记事本程序是:
图形界面、流与文件等技术的综合应用。
图形界面的实现:
考虑到简单、实用、高效等特点,大部分选择了awt来完成实现,其中也有swing组件。
文本编辑区就选用了TaxtArea作为主要的部件。
文件操作的实现:
利用了字符文件流FileReader和FileWriter类来实现。
由于Java的特性,可能用任何一个编辑器来编辑,于是就将Windows中的记事本作为模仿对象,根据实现情况删减了其中的一些功能。
在设计类的时候,考虑到简单明了,就用了三个类,一个主类、一个类设计构造函数实现监听接口作为程序的整体框架,一个类设计构造函数实现查找替换功能。
所有的对象和方法都是在默认属性类中创建和实现的,以及为各组件注册事件监听程序也是在默认属性类中实现的。
主类完成对象的实例化及显示。
这们设计的优点是:
条理清晰,容易理解,容易修改。
这样设计的缺点是:
不利于共享类中的方法。
4.2.2程序运行环境及界面
1.操作系统:
WindowsXP
2.开发语言:
JAVA
3.开发工具:
MyEclipse
4.运行界面:
如图4-1所示
图4-1运行界面
4.3功能模块设计
4.3.1功能模块说明图
首先创建一个名为NoteBook的类并继承Frame类实现监听接口作为最底层的容器(具体过程在“4.3.2自定义类及接口说明”作说明)。
菜单栏中有“文件”、“编辑”、“作者”三项菜单,分别添加的相应的项,各实现其功能。
如图4-2所示
图4-2功能模块说明图
4.3.2自定义类及接口说明
1.MyFindDialog类
●继承Dialog类
●实现ActionListene接口
●实现查找替换功能
classMyFindDialogextendsDialogimplementsActionListener{…}
定义查找和替换的标签和文本域
LabellFind=newLabel("查找字符串");
LabellReplace=newLabel("替换字符串");
TextFieldtFind=newTextField(10);
TextFieldtReplace=newTextField(10);
ButtonbFind=newButton("查找");
ButtonbReplace=newButton("替换");
TextAreata;
2.Note类
●继承Frame类
●实现ActionListener接口
●作为程序的整体框架
classNoteextendsFrameimplementsActionListener{…}
定义菜单,菜单项,对话框等。
MenuBarmb=newMenuBar();
Menuitem1=newMenu("文件");
MenuItemsubitem11=newMenuItem("新建",newMenuShortcut(KeyEvent.VK_A,false));
……
MenuItemsubitem23=newMenuItem("时间日期");
Menuitem3=newMenu("作者");
MenuItemsubitem31=newMenuItem("作者信息");
MyFindDialogfindDlg=newMyFindDialog(this,tf);
3.NoteBook类
●主类,完成对象的实例化及显示
publicclassNoteBook{…}
Main方法中实例化newsNote();显示界面。
4.3.3类中方法介绍
1.MyFindDialog类
(1)构造方法:
MyFindDialog(Frameowner,TextAreata)
设计构造函数,带有指定的所有者框架和标题。
方法部分内容如下:
设置大小,并添加类中定义的各个组件。
super(owner,"查找");
this.ta=ta;
setLayout(null);
lFind.setBounds(10,30,80,20);
lReplace.setBounds(10,70,80,20);
……
add(bReplace);
setResizable(false);
bFind.addActionListener(this);
bReplace.addActionListener(this);
实现关闭对话框时的监听。
addWindowListener(newWindowAdapter(){
publicvoidwindowClosing(WindowEvente){
MyFindDialog.this.dispose();
}
});
(2)显示查找和替换的对话框方法:
showFind()和showReplace()
方法部分内容如下:
调用时显示查找对话框,
publicvoidshowFind(){
setTitle("查找");
setSize(280,60);
setVisible(true);
调用时显示查找替换对话框
publicvoidshowReplace(){
setTitle("查找替换");
setSize(280,110);
setVisible(true);
}
(3)查找方法:
privatevoidfind()
方法部分内容如下:
Stringtext=ta.getText();
Stringstr=tFind.getText();
intend=text.length();
intlen=str.length();
intstart=ta.getSelectionEnd();//获取此文本组件中选定文本的结束位置。
if(start==end)start=0;
for(;start<=end-len;start++){
if(text.substring(start,start+len).equals(str)){
ta.setSelectionStart(start);
ta.setSelectionEnd(start+len);
return;
}
}
//若找不到待查字符串,则将光标置于末尾
ta.setSelectionStart(end);
ta.setSelectionEnd(end);
(4)替换方法:
privatevoidreplace()
方法部分内容如下:
Stringstr=tReplace.getText();
if(ta.getSelectedText().equals(tFind.getText()))
//用指定替换文本替换指定开始位置与结束位置之间的文本
ta.replaceRange(str,ta.getSelectionStart(),ta.getSelectionEnd());
elsefind();
}
publicvoidactionPerformed(ActionEvente){
if(e.getSource()==bFind)
find();
elseif(e.getSource()==bReplace)
replace();
}
2.Note类
(1)构造方法:
Note()
方法部分内容如下:
设置标题,大小
super("记事本");
setBounds(100,100,600,400);
添加组件
add(tf);
setMenuBar(mb);
mb.add(item1);
item1.add(subitem11);
添加指定的操作侦听器,以从此菜单项接收操作事件。
subitem11.addActionListener(this);
……
subitem31.addActionListener(this);
setVisible(true);
addWindowListener(newWindowAdapter(){
(2)窗口关闭监听方法:
voidwindowClosing(WindowEvente)
方法部分内容如下:
关闭时提示是否退出。
intoption=JOptionPane.showConfirmDialog(
Note.this,"确定退出程序?
","提示",JOptionPane.YES_NO_CANCEL_OPTION);
if(option==JOptionPane.YES_OPTION)
if(e.getWindow()==Note.this)
{System.exit(0);}
else{return;}
}
});
(3)发生操作时调用该方法:
publicvoidactionPerformed(ActionEvente)
方法部分内容如下:
//---------------新建---------------
if(e.getSource()==subitem11)
{
tf.setText("");
}
//----------------打开----------------
if(e.getSource()==subitem12)
{
……
}
//--------------保存---------------
if(e.getSource()==subitem13)
{
……
}
//---------------另存为--------------
if(e.getSource()==subitem14)
{
……
}
//----------------退出-----------------
if(e.getSource()==subitem15)
{
……
}
//-----------------查找------------------
if(e.getSource()==subitem21){
findDlg.showFind();
}
//-------------------替换-----------------
if(e.getSource()==subitem22){
findDlg.showReplace();
}
//-------------------日期------------------
if(e.getSource()==subitem23)
{
……
}
//----------------------作者----------------
if(e.getSource()==subitem31){
tf.setText("课程名称:
java课程设计"+'\n'+"学院:
软件工程学院"+'\n'+"班级:
嵌入式系09-01班"+'\n'+"姓名:
陈冲"+'\n'+"学号:
0920010102");
}
}
}
3.NoteBook类
主类包含main方法,实例化newsNote();显示界面。
publicstaticvoidmain(Stringargs[]){
newNote();
4.4异常处理
在运行程序代码是有可能会产生异常情况或异常事件,为了避免这种情况,就需要在程序中用到Java异常处理机制。
本程序中选用的异常处理机制是try,catch。
捕获处理异常的第一步是用try选定要监控的异常范围,try后跟随catch代码块捕获异常“ex.printStackTrace();”语句在命令行打印异常信息在程序中出错的位置及原因。
例如“打开”监听中运用到异常处理。
其它的地方于此类似。
try
{
Filefile=jc.getSelectedFile();
FileInputStreamfis=newFileInputStream(file);
byte[]buf=newbyte[10*1024];
intlen=fis.read(buf);
tf.append(newString(buf,0,len));
}catch(Exceptionex)
{
ex.printStackTrace();
}
4.5程序运行与调试分析
4.5.1.开始调试
出现记事本界面并输入几行文字。
如图4-3
图4-3调试运行界面
4.5.2各菜单实现
1.文件菜单。
如图4-4所示
图4-4文件菜单
(1)打开文件界面。
如图4-5
图4-5“打开”对话框
(2)保存文件界面。
如图4-6
图4-6保存对话框
(3)退出程序界面。
如图4-7
图4-7退出对话框
2编辑菜单。
如图4-8
图4-8编辑菜单
(1)查找界面。
如图4-9
图4-9查找对话框
(2)替换界面。
如图4-10
图4-10超找替换对话框
(3)显示当时时间。
如图4-11
图4-11显示实践
3作者菜单。
如图4-12
4-12作者菜单
(1)显示作者信息。
如图4-13
图4-13显示作者信息
4.5.3退出
提示是否确定退出。
如图4-14
图4-14退出程序
5总结与展望
经过差不多一个星期的努力,基本上完成我的Java课程设计—简单的记事本程序,基本上实现了我在需求分析时所预期的功能。
通过这次的课程设计,使将我从书本上学习到的理论知识用到了实践上,从而进一步巩固和丰富了我所学过的知识,让我更深层次地认识到Java及其强大的功能。
同时,做这门课程设计也进一步加强了我的动手能力。
为了完成好这次课程设计,我提前做了较多的准备,一边上网查找相关资料,另一方面查阅相关书籍。
在这过程中也无形中锻炼了我的思维分析、遇到问题及想方设法通过各种途径解决问题的能力。
但是,设计过程中也存在一些问题,例如java程序设计的封装性在个人的设计中没有足以体现,更为理想的是将各个模块封装成类,方便共享调用,但是由于本人知识浅陋以及时间等其他原因,使得这些想法没有实现,这是这次课程设计的一点遗憾。
程序源代码:
importjava.awt.*;
importjava.awt.event.*;
importjava.io.BufferedReader;
importjava.io.BufferedWriter;
importjava.io.File;
importjava.io.FileInputStream;
importjava.io.FileNotFoundException;
importjava.io.FileReader;
importjava.io.FileWriter;
importjava.io.IOException;
importjava.util.Calendar;
importjavax.swing.JFileChooser;
importjavax.swing.JOptionPane;
//查找替换类MyFindDialog
classMyFindDialogextendsDialogimplementsActionListener{
LabellFind=newLabel("查找字符串");
LabellReplace=newLabel("替换字符串");
TextFieldtFind=newTextField(10);
TextFieldtReplace=newTextField(10);
ButtonbFind=newButton("查找");
ButtonbReplace=newButton("替换");
TextAreata;
//构造函数
publicMyFindDialog(Frameowner,TextAreata){
super(owner,"查找");//构造一个初始时不可见、无模式的Dialog,带有指定的所有者框架和标题。
this.ta=ta;
setLayout(null);
lFind.setBounds(10,30,80,20);
lReplace.setBounds(10,70,80,20);
tFind.setBounds(90,30,90,20);
tReplace.setBounds(90,70,90,20);
bFind.setBounds(190,30,80,20);
bReplace.setBounds(190,70,80,20);
add(lFind);
add(tFind);
add(bFind);
add(lReplace);
add(tReplace);
add(bReplace);
setResizable(false);
bFind.addActionListener(this);
bReplace.addActionListener(this);
addWindowListener(newWindowAdapter(){
publicvoidwindowClosing(WindowEvente){
MyFindDialog.this.dispose();
}
});
}//构造函数结束
publicvoidshowFind(){
setTitle("查找");
setSize(280,60);
setVisible(true);
}
publicvoidshowReplace(){
setTitle("查找替换");
setSize(280,110);
setVisible(true);
}
privatevoidfind(){//查找方法
Stringtext=ta.getText();
Stringstr=tFind.getText();
intend=text.length();
intlen=str.length();
intstart=ta.getSelectionEnd();//获取此文本组件中选定文本的结束位置。
if(start==end)start=0;
for(;start<=end-len;start++){
if(text.substring(start,start+len).equals(str)){
ta.setSelectionStart(start);
ta.setSelectionEnd(start+len);
return;
}
}
//若找不到待查字符串,则将光标置于末尾
ta.setSelectionStart(end);
ta.setSelectionEnd(end);
}
/*publicButtongetBFind(){
returnbFind;
}*/
privatevoidreplace(){
Stringstr=tReplace.getText();
if(ta.getSelectedText().equals(tFind.getText()))
//用指定替换文本替换指定开始位置与结束位置之间的文本
ta.replaceRange(str,ta.getSelectionStart(),ta.getSelectionEnd());
elsefind();
}
publicvoidactionPerformed(ActionEvente){
if(e.getSource()==bFind)
find();
elseif(e.getSource()==bReplace)
replace();
}
}
//Note类
classNoteext