1.课程设计的目的
Java语言是当今流行的网络编程语言,它具有面向对象、跨平台、分布应
用等特点,它贴近自然的语义,而且有利于软件的维护和继承。
此次课程设计的目的在于巩固所学Java语言基本知识,增进Java语言编辑基本功,掌握JDK、Editplus、Eclipse、JCreator等开发工具的运用,拓宽常用类库的应用。使学生通过该教学环节与手段,把所学课程及相关知识加以融会贯通,全面掌握Java语言的编程思想及面向对象程序设计的方法,为今后从事实际工作打下竖实的基础。
2.设计方案论证
2.1概要设计
2.1.1系统功能描述
该系统主要用于实现英汉互译的功能,系统拥有己的数据库,我们可以先选择让系统进行英译汉,还是汉译英,然后在查询杠中输入想要查询的英文单词或汉语意思,系统自动在数据库中查找匹配记录并给出对应的汉语意思或英文单词,若在数据库中没有查找到匹配的记录,则系统会弹出出错提示。同时,系统还提供了添加、修改、删除等功能,允许用户自主的对系统数据库进行添加、修改、删除等操作,便于用户建立自己的词汇库,简便实用。
2.1.2系统开发环境
(1)硬件环境
CPU: Intel (R) Core(TM)2 Duo CPU P7450 @ 2.13GHz 内存:
2G硬盘空间: 250G
(2)软件环境
32位XP操作系统。JDK和Jcreator软件环境。
2.2详细设计
2.2.1程序流程图
功能模块说明:
(1)英译汉功能模块说明:可以实现对英文单词对中文单词的查询功能。用户文本杠中输入要查询的英语单词。若该单词存在于词库中,则会在文件对话杠中显示其词性及中文翻译;若该单词没有存在于词库中,则会弹出"警告",说明"查无此词";若没有输入直接点击"查询",则会弹出"警告",说明"查询对象不能为空"。
(2)汉译英功能模块说明:可以实现对中文单词对英文单词的查询功能。用户可在文本杠中输入要查询的中文单词。若该单词存在于词库中,则会在文件对话杠中显示一个或多个对应的英文;若该单词没有存在于词库中,则会弹出"警告",说明"查无此词";若没有输入直接点击"查询",则会弹出"警告",说明"查询对象不能为空"。
(3)备份词库功能模块说明:可以实现对现有词库的备份,可将当前词库存入用户所设置的任一位位置。
(4)添加词汇功能模块说明:可以实现对词库的添加。用户可自行输入所添
加的
单词及其解释,若添加的是词库中没有的单词,系统在添加成功后有提示"添加成功";若添加的是词库中己有的单词,系统会弹出"警告",说明"此词汇己存在"。
(5)修改词汇功能模块说明:可以实现对词库中己有单词的修改。用户可自行修改词库中的单词的解释,若输入单词不存在于词库中,系统会弹出"警告",说明"不存在此单词"。
(6)删除词汇功能模块说明:可以删除词库中己有的单词。用户可自行删除词库中己有的单词,在删除此单词的同时,其解释也会随之被删除,若输入单词不存在于词库中,系统会弹出"警告",说明"不存在此单词"。
0)其它功能模块说明:在帮助中有"帮助"与"关于"两项,"帮助"中有关于词典的功能说明,"关于"可显示版本信息。
2.2.2程序中自定义类说明
表1动E中涉及的元件表
2.2.3程序中主要方法说明
(1)定义方法actio nP erformed(),内用if语句实现按钮监昕:
public void actio nP erformed(Actio nE vent e)
(2)定义方法删除(),实现删除功能
public void删除o throws SQLException
(3)定义方法添加(),实现添加功能
public void~示加o throws SQLException
(4)定义方法查询,实现查询功能
public void查询o throws SQLException
3.设计结果与分析
3.1程序运行结果
经过编译、执行后可看到运行界面如图2所示
图2运行结果图此时有两个菜单选择:库存和采购操作。
3.1.1库存菜单
它包含四个子菜单:英汉词典、汉英词典、备份词库及退出。打开该词典时默认进入的是英汉词典。如图3所示:
图3库存菜单示意图
(1)英汉词典:在文本杠中输入要查询的英文单词,单击"查询",英文单词
对应的中文解释及其词性便会出现在文件对话杠中,如图4所示: 如果所查单词不存在于词库中,则会弹出"警告",说明"查无此词",如图5所示;如果是没有输入直接点击"查询",则会弹出"警告",说明"查询对象不能为空",如图6所示:
(2)汉英词典:在在文本杠中输入要查询的汉语意思,单击"查询",对应的
英文单i司便会出现在文件对话杠中,如图7所示:
如果所查词不存在于词库中,则会弹出"警告",说明"查无此词";如果是没有输入直接点击"查询",则会弹出"警告",说明"查询对象不能为空",演示与英汉词典类似。
(3)点击备份词库时,会弹出保存文件对话框,此时可将词库拷贝到机算机
里的任一位置。如图8所示。
3.1.2采购操作菜单:
它包含三个子菜单:添加词汇、修改词汇和删除词汇。如图9所示:
图9采购操作菜单示意图
(1)添加词汇:用户可自行输入所添加的单词及其解释,如果添加的是词库
中没有的单词,系统在添加成功后有提示"添加成功",如图10所示。若添加的是词库中己有的单词,系统会弹出"警告",说明"此词汇己存在"。如图11所示。
(2)修改词汇:用户可自行修改词库中的单词的解释,如图12所币1如果输入
单词不存在于词库中,系统会弹出"警告",说明"不存在此单词",如图13所币。
图15删除词汇出错示意图
经测试,该系统各项功能均能使用,各个功能选项与设计所想相符。
3.2尚需解决的问题
(1)本系统虽然允许用户根据自己的需求增减词汇,保存自己的词汇库,但是却无法做到批量导入。
(2)发音问题,本系统还缺少比较重要的一项功能,词汇的发音功能。
(3)查询单词时无法做到自动匹配,比如说输入a时,无法自动寻找所有以a开头的词汇。
4.设计体会
此次课程设计过程中,我遇到了很多问题,也更加了解JAVAo Java是一种网络语言,使Java程序能在网络的任何地方运行,Java解释器生成与体系结构无关的字节码结构的文件格式。Java为了做到结构中立,除生成机器无关的字节码外,还制定了完全统一的语言文本,如Java的基本数据类型不会随目标机的变化而变化,一个整型总是32位,一个长整型总是64位。
为了使Java的应用程序能不依赖于具体的系统, Java语言环境还提供了用于访问底层操作系统功能的类组成的包,当程序使用这些包时,可以确保它能运行在各种支持Java的平台上。
通过对JAVA数据库编程的更多的了解,我也获得了一些调试的经验:通过层层的捕获异常来得知错误的发生。在课程设计中出现的问题对我而言是学习与复习的好机会,是它们使我学会了如何自学、如何查阅资料等,让我学习了很多,也让我对旧的知识点有了更深的理解。
在这不断的调试、改动的过程中也让我明白了养成良好编程习惯的益处。
由于编写程序时容易出错,因此我采用了单个模块单个功能进行调试与测试的
方法。在不断的出错与改错的过程中,我学到了很多关于编程和调试程序的知识,使自己的知识体系得到了一定的完善,也使我对平时所学有了很多的了解
与更深的理解。面对一系列的问题,失败了尝试,再失败再尝试……通过这次
的实践,我发现了自己在编程及对软件开发相关知识的不足,在以后的学习实
践中,我要取长补短,敢想、善间,不断加强自身在专业知识方面的能力,为
以后的学习与工作打下竖实的基础。
5.参考文献
[1]叶核亚. JAVA2程序设计实用教程[M](第2版).北京:电子工业出版社; 2008.4
[2]陈国君、陈磊、陈锡祯、刘洋. Java2程序设计基础[M],第一版.北京:
清华大学出版社, 2006: 324-337
[3]丘仲潘. Java游戏编程[M].北京:科学出版社, 2004.6: 125-132
[4]张大治. Java程序设计实用教程[M].北京:清华大学出版社, 2008.4:
72-81 [5]
6.附录
import java.awt. *;
import java.ne t. *;
import java.sq l. *;
import java.awt. even t.*;
import javax.swing.*;
Import Java.io.*;
import sun. audio. *;
import javax.swing.JOptionPane;
class DataWindow extends JFrame implements ActionListener
{
JFrame topFrame;
JDesktopPane desktop;
FileDialog filedialog_save; //声明文件对话框
JTextField englishtext;
JText Ar ea chinesetext;
JButton bl,b2,b3,b4;
JLabellabel;
JMen uB ar mbar;
JMenu mfile,medit;
JMenu It em edic,cdic,back_data,quit,addedit,modedit,deledit,about; Data Window()
{
super("英汉小词典");
this.setBounds(250,250,600,400);
this.setVisible(true );
getContentPane().add( new JScrollPane( chinesetext));
mbar = new JMen uB ar();
se tJ Men uB ar( mbar);
mba r.setOpaque(true );
mfile = new JMenu(“库存”);
medit = new JMenu("采购操作");
mba r.add( mfile );
mba r.add( medit);
edic = new JMenu It em("英汉词典");
cdic = new JMenu It em("汉英词典");
back_data = new JMen uI tem("备份词库"); quit = new JMenu It em(" 退出");//文件菜单addedit = new JMenu It em("添加"); modedit = new JMen uI tem("修改"); deledit = new JMenu It em("删除");//编辑菜单about = new JMen uI tem("关于...");//帮助菜单mfile.add( edic);
mfile.add( cdic);
mfile.add(back _data);
mfile.addSeparator();
mfile.add(quit); //mfile
medi t.add( addedit);
medi t.add(modedit);
medi t.add(deledit); //medit
edic.addActionListener(this);
cdic.addActionListener(this);
qui t.addActionListener(this);
addedi t.addActionListener(this);
modedi t.addActio nL istener(this);
deledi t.addActionListener(this);
abou t.addActionListener(this);
englishtext = new JTextField(16);
englishtex t.setFont(new Font("",15,15));
chinesetext = new JText Ar ea(8,15);
chinesetex t.setEditable( false);
chinesetex t.setFont( new Font("",25,25));
bl = new JButton("查询");
b2 = new JButton("添加");
b3= new JButton("修改");
b4 = new JButton("删除");
JPanel p1= new JPanel(),p2 = new JPanel();//添加面板
label = new JLabel("输入要查询的英语单词:");
labe l.setFont(new Font("隶书",20,20));
p1.add(label);
pl.add( englishtext);
pl.add(bl);
p2.add(b2);p2.add(b3);p2.add(b4);
this.add(pl,"North");
this.add(p2,"South");
this.add( new JScrollPane( chinesetext),”Center");
b l.addActionListener( this);
b2.addActionListener(this );
b3 .addActionListener( this);
b4 .addActionListener( this);
englishtex t.addActionListener( this);
back _ data.addActionListener( this);
filedialog_save = new FileDialog(this,"保存文件对话框",FileDialog.SAVE); filedialog_ save.addWindow Listener( new Window Adapter()//对话框增加适配器{
public void windowClosing(WindowEvent e)
}
filedialog_save.setVisible( false);
}
} );
addWindowListener( new Window Adapter()
{
public void windowClosing(WindowEvent e)
{ Syste m.exit(0); }
} );
public void actio nP erformed(Actio nE vent e) //实现按钮监昕
{
if( e.getSource()==bl||e.getSource()==englishtext)
{
chinesetex t.setText("");
if( englishtex t.getText(). equals(“”))
{
JOptio nP ane.showMessageDialog(this,"查询对象不能为空!","警告",JOptio nP ane. WARNING_MESSAGE);
}
else{
try{
Listwords();
}
catch(SQLException ee){ }}
}
else if( e.getSource()==b2|| e.getSource()==addedit)
{
AddWin add = new AddWin(); //AddWin是添加窗口的类
}
else if( e.getSource()==b3||e.getSource()==modedit)
{
ModifyWin modi = new ModifyWin();//ModifyWin是修改窗口的类
}
else if( e.getSource()==b4||e.getSource()==deledit)
{
DelWin del = new DelWin(); //D elWin是删除窗口的类
}
else if( e.getSource()==edic) //英汉
{
labe l.setText("输入要查询的英语单词:");
b l.setVisible(true);
}
else if( e.getSource()==cdic) //汉英
{
labe l.setText("输入要查询的汉语意思:");
b l.setVisible(true);
}
else if( e.getSourceO==back _data) //备份
{
File fromfile = new File("english\\english.mdb") ;
FileInputStream fis = null;
filedialog_save.setVisible(true);
try{
fis= new FileInputStream(fromfile);
int bytesRead; //定义变量来存储输入流中读取出来的文件
byte[] buf= new byte[4*1024]; //4K buffer
File to file = new File(filedialog_save.ge tD irectory(),filedialog_save.getFile()); FileOutputStream fos = new FileOutputStream(tofile);
while( (bytesRead=fi s.read(buf))!=-1 )
{
fos. write(buf,0,bytesRead);
}
fos.flush();
fos.close();
fis.close();
}
catch(I OException e2){ }
}
else if( e.getSource()==quit) //退出
{
Syste m.exit(0);
}
else if( e.getSource()==about) //关于
{
final String AboutMsg = "A Electrical Dictionary1.0 \n \n"
+"An application written to show off the function of dictionary.\n\n”+"Written By Edith.\n\n”
+"Copyright (c) 2005 by Edith.All rights Reserved.";
JOptio nP ane.showMessageDialog(topFrame,AboutMsg);
}
}
public void ListwordsO throws SQLException //实现查询功能
{
String cname,ename;
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
Catch(ClassNotFoundException e){}
//建立桥接器
Connection ExlCon=DriverManage r.getConnection("jdbc:odbc:Driver=
{MicroSoftAccess Driver(*.mdb)} ;DBQ=english'\\english.mdb",””,"");
Statement ExlStmt = Ex 1Con. create Statement();
if(labe l.getText().equals("输入要查询的英语单词:"))
{
ResultSet rs = ExlStm t.executeQuery("SELECT * FROM表1 ");
while( rs.next())
{
ename=rs.getString(“单词”);
cname = rs.getString("解释");
if( ename.equals( englishtex t.getText()))
{
chinesetex t.append( cnarne+'\n');
}
}
Ex 1 Con.close();//关闭数据库
if( chinesetex t.getText().equals(""))
{
JOptio nP ane.showMessageDialog(this,"查无此单词!","警告",JOptio nP ane. WARNING_MESSAGE);
}
}
else if(labe l.getTextO.equals("输入要查询的汉语意思:"))
{
ResultSet rs=ExlStrn t.executeQuery("SELECT * FROM表1 WHERE解释LIKE '%"+englishtex t.getText()+"%'");
while(rs.next())
{
enarne = rs.getString("单词");
cnarne = rs.getString("解释");
chinesetex t.append( enarne+'\n');
}
Ex1Con.close(); //关闭数据库
if( chinesetex t.getText().equals(""))
{
JOptionPane.showMessageDialog(this,"查无此单词!","警告",JOptionPane. WARNING_MESSAGE);
}
}
} //end of Liststudent()
}
public class Dic
{
public static void main(String args[])
{
lFrame.setDefaultLookAndFeelDecorated( true);
Data Window window = new DataWindow();
window. validate();
//AddWin add = new AddWin();
}
public void add()
{
}
}