JAVA设计实现电子词典.docx
《JAVA设计实现电子词典.docx》由会员分享,可在线阅读,更多相关《JAVA设计实现电子词典.docx(17页珍藏版)》请在冰豆网上搜索。
JAVA设计实现电子词典
目录
摘要
两周的课程设计实训我做的是用Java基本程序编写一个简单的电子词典,该程序是一个图形界面连接数据库的英汉字典,其界面主要采用了awt包,程序实现了电子词典的基本功能有:
查询、修改,添加词汇并保存修改,添加后的词汇,通过自己的实际动手操作,进一步加深了对Java的理解,电子词典的完成我还了解了市场的需求,培养了自己的学习兴趣。
关键字:
Java图形界面,Access数据库,actionPerformed()接口方法,ActionEvent事件
1需求分析
我们的课题是电子词典功能的实现,电子词典作为一种学习工具,有着不可估量的市场前景。
作为一名学生,我们在学习英语的时候会经常碰到很多的生词,有时,为了读懂一篇文章,经常是读文章用一小时,但是其中却有半个小时都在翻阅英语字典。
所以我们小组为了解决这一问题,才将选材方向定位于电子词典的功能实现,主要的目的就是为同学们解决这一问题。
在做电子词典功能实现的时候,我们主要从以下几个方面入手,即:
查询,添加,修改,
在这几个功能模块上,我们首先提供了一个查询界面,即使用者需要输入要查询的关键字,点击确定按钮,屏幕上就会出现其对应的答案。
在做这个模块的时候,我们主要解决了JAVA与数据库的链接问题,进而实现其功能。
解决了同学们在学习英语过程中遇到的困难,满足了市场的需求。
2.概要设计
2.1设计思路
本系统在单词查阅方面主要完成了英译汉功能;在系统性能方面主要完成了单词库的添加、修改、删除,退出功能等。
2.1.1系统总体功能模块图
本系统总体功能模块图如下所示:
英汉词典
文件
汉英词典
备份词库
退出
电子词典
添加词汇
修改词汇
编辑
删除词汇
图形界面的实现:
考虑到简单、实用、高效等特点,就选择了AWT来完成实现,在选择组件上,文本编辑区就选用了TaxtArea,TextField,Button作为主要的部件,文本框上使用ActionEvent事件,文本区上实现TextEvent事件,实现接口方法用到了actionPerformeredf方法
在设计类的时候,要实现三个系统性能功能,就用了三个类,一个主类和一个默认属性类作为程序的整体框架,所有的对象和方法都是在默认属性类中创建和实现的,以及为各组件注册事件监听程序也是在默认属性类中实现的。
主类完成对象的实例化及显示。
这们设计的优点是:
条理清晰,容易理解,容易修改。
这样设计的缺点是:
不利于共享类中的方法。
数据库的创建,用Access创建数据库,库的名称叫做english,表的名称也叫做english,.为了将图形界面与数据库建立连接首先要创建一个ODBC数据源。
数据库连接的建立包括两个步骤:
首先要加载相应数据库的JDBC驱动程序;然后建立连接。
3.详细设计
3.1主界面功能
该模块的主要功能为:
使用户可以在一个界面下调用各功能模块。
即放便用户使用又方便用户的学习,而且不但可以通过菜单栏调用各功能模块,还可以通过按钮调用,主界面主要由两个面版,四个按钮,一个文本框,一个文本区,一个标签和一个菜单栏组成。
在文本框中输入要查询的数据。
文本区中显示查询的结果。
主要方法包括:
DataWindow()为构造方法,创建用户添加词汇界面;与actionPerformed()为接口方法,处理ActionEvent事件。
设计好的主界面去如图所示
3.2英译汉功能
该模块的主要功能为:
当用记遇到陌生的单词或记不清解释的单词时,用户可以通过本功能查找,还通过本模块完成单词的再一次记忆。
此功能模块主要是针对已经存在于单词库中的单词,通过编辑菜单中的英汉词典功能,在主界面的文本框中输入要查询的单词,单击查询按钮进行查询。
结果显示在主界面的文本区中。
3.3汉译英功能
该模块的主要功能为:
当用户进行汉译英翻译时难难免遇到不会的词或记不请的记。
这时用记就可以通过本功能实现词汇的查找。
它不但可以查到想要查的词还可以找到和该词相关的单词。
3.4数据库创建与连接
数据库表设计
字段名
字段类型
长度
单词
文本
50
解释
文本
50
打开控制面板选择:
“管理工具”——“数据源(ODBC)”——“用户DNS”——“添加”选择相应的数据库驱动MicrosoftAccessDriver(*.mdb),数据源的名称为english,然后选择数据库,确定。
建立JDBC—ODBC桥接器:
Class.forName()方法的执行,将创建数据库驱动的实例并注册到驱动管理器。
在某种数据库的驱动程序加载后,就可以建立与该DBMS的连接了。
定义如下:
Class.forName(”sun.jdbc.odbc.JdbcOdbcDriver”);
创建数据库连接这个步骤中要使数据库驱动连接到相应的DBMS。
连接的建立通过使用DriverManager类中的static方法getConnection(),该方法的定义如下Con=DriverManager.getConnection(“jdbc:
odbc:
english”,””,””);
4.主要程序源代码
classDataWindowextendsJFrameimplementsActionListener//子类继承父类事件监听器作为接口
{JFrametopFrame;//声明窗口
JDesktopPanedesktop;
FileDialogfiledialog_save;//声明文件对话框
JTextFieldenglishtext;//声明一个文本框
JTextAreachinesetext;//声明一个文本区
JButtonb1,b2,b3,b4;//定义按钮
JLabellabel;//定义标签
JMenuBarmbar;
JMenumfile,medit,mhelp;//菜单项
JMenuItemedic,cdic,back_data,quit,addedit,modedit,deledit,hhelp,about;
DataWindow()//方法的创建
{
super("英汉小词典");//子类继承父类的构造方法
this.setBounds(250,250,600,400);
this.setVisible(true);
getContentPane().add(newJScrollPane(chinesetext));
mbar=newJMenuBar();
setJMenuBar(mbar);
mbar.setOpaque(true);
mfile=newJMenu("文件");//创建文件菜单
medit=newJMenu("编辑");
mhelp=newJMenu("帮助");
mbar.add(mfile);mbar.add(medit);mbar.add(mhelp);
edic=newJMenuItem("英汉词典");
cdic=newJMenuItem("汉英词典");
back_data=newJMenuItem("备份词库");
quit=newJMenuItem("退出");//文件菜单
addedit=newJMenuItem("添加词汇");
modedit=newJMenuItem("修改词汇");
deledit=newJMenuItem("删除词汇");//编辑菜单
mfile.add(edic);//将菜单项添加到菜单
mfile.add(cdic);
mfile.add(back_data);
mfile.addSeparator();
mfile.add(quit);//mfile
medit.add(addedit);
medit.add(modedit);
medit.add(deledit);//medit
mhelp.add(hhelp);
mhelp.add(about);//mhelp
edic.addActionListener(this);//将edic作为事件监听器添加到当前窗口
cdic.addActionListener(this);
quit.addActionListener(this);
addedit.addActionListener(this);
modedit.addActionListener(this);
deledit.addActionListener(this);
hhelp.addActionListener(this);
about.addActionListener(this);
englishtext=newJTextField(16);
englishtext.setFont(newFont("",15,15));//设置字体
chinesetext=newJTextArea(8,15);
chinesetext.setEditable(false);//文本区内不能编辑
chinesetext.setFont(newFont("",25,25));
b1=newJButton("查询");//创建查询按钮对象
b2=newJButton("添加");
b3=newJButton("修改");
b4=newJButton("刪除");
JPanelp1=newJPanel(),p2=newJPanel();//添加面板
label=newJLabel("输入要查询的英语单词:
");//声明新标签
label.setFont(newFont("隶书",20,20));
p1.add(label);//将标签添加到面板中
p1.add(englishtext);p1.add(b1);p1.add(b5);
p2.add(b2);p2.add(b3);p2.add(b4);
this.add(p1,"North");//面板布局1的位置
this.add(p2,"South");//面板布局2的位置
this.add(newJScrollPane(chinesetext),"Center");//文本区在中心
b1.addActionListener(this);//
b2.addActionListener(this);
b3.addActionListener(this);
b4.addActionListener(this);
englishtext.addActionListener(this);
back_data.addActionListener(this);
filedialog_save=newFileDialog(this,"保存文件对话框",FileDialog.SAVE);
filedialog_save.addWindowListener(newWindowAdapter()//对话框增加适配器
{
publicvoidwindowClosing(WindowEvente)
{
filedialog_save.setVisible(false);
}
});
addWindowListener(newWindowAdapter()//监听器增加适配器
{
publicvoidwindowClosing(WindowEvente)
{System.exit(0);}//窗口的关闭
});
}
publicvoidactionPerformed(ActionEvente)//实现按钮监听
{
if(e.getSource()==b1||e.getSource()==englishtext)
{
chinesetext.setText("");
if(englishtext.getText().equals(""))
{
JOptionPane.showMessageDialog(this,"查询对象不能为空!
","警告",
JOptionPane.WARNING_MESSAGE);//警告信息
}
else{
try{Listwords();}
catch(SQLExceptionee){}
}
}
elseif(e.getSource()==b2||e.getSource()==addedit)
{
AddWinadd=newAddWin();//AddWin是添加窗口的类
}
elseif(e.getSource()==b3||e.getSource()==modedit)
{
ModifyWinmodi=newModifyWin();//ModifyWin是修改窗口的类
}
elseif(e.getSource()==b4||e.getSource()==deledit)
{
DelWindel=newDelWin();//DelWin是删除窗口的类
}
}
elseif(e.getSource()==edic)//英汉
{
label.setText("输入要查询的英语单词:
");
b1.setVisible(true);
b5.setVisible(true);
}
elseif(e.getSource()==cdic)//汉英
{
label.setText("输入要查询的汉语意思:
");
b1.setVisible(true);
b5.setVisible(true);
}
elseif(e.getSource()==back_data)//备份
{
Filefromfile=newFile("english\\english.mdb");
FileInputStreamfis=null;
filedialog_save.setVisible(true);
try{
fis=newFileInputStream(fromfile);
intbytesRead;//定义变量来存储输入流中读取出来的文件
byte[]buf=newbyte[4*1024];//4Kbuffer
Filetofile=newFile(filedialog_save.getDirectory(),filedialog_save.getFile());
FileOutputStreamfos=newFileOutputStream(tofile);
while((bytesRead=fis.read(buf))!
=-1)
{
fos.write(buf,0,bytesRead);
}
fos.flush();
fos.close();
fis.close();
}
catch(IOExceptione2){}
}
elseif(e.getSource()==quit)//退出
{
System.exit(0);
}
}
publicvoidListwords()throwsSQLException//实现查询功能
{Stringcname,ename;
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundExceptione){}
//建立桥接器
ConnectionEx1Con=DriverManager.getConnection("jdbc:
odbc:
english","","");//("jdbc:
odbcDriver={MicroSoftAccessDriver(*.mdb)};DBQ=english\\english.mdb","","");//连接数据源
StatementEx1Stmt=Ex1Con.createStatement();//对象调用方法
if(label.getText().equals("输入要查询的英语单词:
"))
{
ResultSetrs=Ex1Stmt.executeQuery("SELECT*FROM表1");
while(rs.next())
{
ename=rs.getString("单词");
cname=rs.getString("解释");
if(ename.equals(englishtext.getText()))
{
chinesetext.append(cname+'\n');
}
}
Ex1Con.close();//关闭数据库
if(chinesetext.getText().equals(""))
{
JOptionPane.showMessageDialog(this,"查无此单词!
","警告",
JOptionPane.WARNING_MESSAGE);
}
}
elseif(label.getText().equals("输入要查询的汉语意思:
"))
{
ResultSetrs=Ex1Stmt.executeQuery("SELECT*FROM表1WHERE解释LIKE'%"+englishtext.getText()+"%'");
while(rs.next())
{
ename=rs.getString("单词");
cname=rs.getString("解释");
chinesetext.append(ename+'\n');
}
Ex1Con.close();//关闭数据库
if(chinesetext.getText().equals(""))
{
JOptionPane.showMessageDialog(this,"查无此单词!
","警告",
JOptionPane.WARNING_MESSAGE);
}
}
}//endofListstudent()
}
publicclassDic
{publicstaticvoidmain(Stringargs[])
{JFrame.setDefaultLookAndFeelDecorated(true);
DataWindowwindow=newDataWindow();
window.validate();
//AddWinadd=newAddWin();
}
publicvoidadd()
{
}
}
5.调试程序
在程序调试中最大的问题就是数据库连接着一部分,由于对数据库的知识比较陌生,所以调试起来遇到了很多麻烦和问题,简单总结如下:
(1)数据库的廉洁就分为驱动连接和桥连接,这里容易混淆,需要将其区分开来,建议用驱动加载更好一些。
(2)注意关闭数据库连接,要注意在关闭连接时先释放Statement对象,这一点也容易忽略。
(3)在加载数据库驱动程序中,该方法可能抛出ClassNotFoundException异常,所以在调用该方法时要注意进行异常处理。
(4)注意Java程序的层次结构,以及注意事项。
(5)注意在连接数据库的时间数据源和表的名称是否与数据库的一致,还有路径的选择的要正确,还有就是数据库的用户名和密码一般不用设置,正确连接数据库的代码如下:
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundExceptione){}
//建立桥接器
ConnectionEx1Con=DriverManager.getConnection("jdbc:
odbc:
english","","");//("jdbc:
odbc:
Driver={MicroSoftAccessDriver(*.mdb)};DBQ=english\\english.mdb","","");
6.结论
课程设计的收获是得到了对JAVA这种面向对象语言的初步印象,学到了一些编程的方法。
在面向对象的编程方式下,真正实现了把主要精力放在功能的实现上,对封装好的对象只需了解其属性方法即可使用。
编程的主要任务是为程序中使用的各种对象的事件编写事件处理程序,从而实现系统功能。
7.参考文献
[1]张海藩.软件工程导论.北京:
清华大学出版社,2003
[2]卢潇.软件工程.北京:
清华大学出版社,2005
[3]王要武.管理系统.北京:
电子工业出版社,2003
[4]耿秋义.JAVA2实用教程.北京:
清华大学出版社,2006
[5]宋昆,李严.SQLServer数据库开发实例解析.北京:
机械工业出版社,2006