电子词典
1.课程设计的目的
本课程设计利用Java编程开发语言,设计一个电子词典,该词典主要支持用户查询需求,实现英汉互译功能,支持用户自定义词库,能够使用户对词库进行操作,以便用户获得更多资料。通过设计这个小词典,将课堂所学应用于实际生活中,学会运用面向对象开发语言进行简单程序的设计,与此同时也加强了对Java Swing和Java Awt 包的使用和对Java相关知识的巩固。本课程设计也使用了MS Access数据库做数据持久化,不仅丰富了电子词典的内容,同时也加深了对数据库的相关知识的深入了解,这种跨学科的综合设计,锻炼了自己的编程和综合运用知识的能力,为以后的发展打下了良好基础。
2.设计方案论证
2.1项目开发背景
    近几年来外语学习已经变为一种潮流,越来越多的中小学生拥有自己的电子词典。现在的数字电子词典容量不断增大,已发展到可以自由扩充词库,或者从网上下载词库,对词典进行自动更新。电子词典的功能的需求也越来越强大,作为一个计算机专业的学生,希望根据英语学习者的需求来设计一个实用电子词典,以帮助英语学习者们更方便快捷的查询单词、记忆单词、有效自由的对词库进行管理和操作。与此同时也提高一下自己对Java语言的运用和对程序的开发设计能力。
2.2系统需求分析
用户在使用电子词典的时候,有可能会使用到电子词典的查询功能,也有可能使用到对词库的更新功能。通过对用户的需求分析,初步确定该系统的基本需求情况。
(1)用户在打开软件的时候,应该呈现一个友好的查询界面,便于用户操作。
(2)当用户需要查询的时候,软件将提供这个单词的所有信息。
(3)可以自定义单词,使用户可以自动扩充单词库,方便以后使用,并具有针对性。
2.2.1模块功能说明
(1)汉译英功能模块说明:可以实现英文单词对中文词汇的查询功能。当用户输入一个单词,用户可以单击查询按钮,显示这个单词的中文解释,解释出现在文本区。
(2)英译汉功能模块说明:实现将中文词汇翻译成英语。在查询栏中输入中文,点击查询,便出现它的英文解释。
(3)词库的备份模块:此模块可将已有模块备份,保证数据的安全性。
(4)词库的更新模块:此模块有增、删、改等功能。可以根据自己需要,为词库添加相应的英文单词和汉语解释,或者对已有单词的词义进行补充、修改或删除。
(5)帮助功能模块:此模块添加了一些使用该软件的方法,当用户在使用时遇到不清楚的问题时,可以点帮助文档,根据提示进行操作。
2.2.2系统总体结构设计
                              图1系统功能框图
2.2.3系统功能流程图
图2修改功能函数流程图
                            图3添加功能流程图
2.2.4详细设计
(1) 系统中有6个类
系统运行主类:Dic.java
窗口主界面类:DataWindow
添加单词类:AddWin.java
修改单词类:ModifyWin.java
删除单词类:DelWin.java
使用帮助类:HelpFrame.java
(2) 系统运行主类Dic的方法
Main( ):程序入口,建立窗体类DataWindow的对象。
(3) 窗口主界面类DataWindow的方法
  DataWindow( ):构造函数,安排界面布局,设置菜单项和工具按钮。
  actionPerformed( ):执行按钮动作事件。
  Listwords( );实现数据查询功能。
(4) 添加单词类AddWin的方法
  AddWin( ):构造函数,安排界面布局,设置监听按钮。
  actionPerformed( ):执行按钮动作事件,调用添加( )方法。
  添加( ):实现添加数据功能。
(5) 修改单词类ModifyWin的方法
ModifyWin( ):构造函数,安排界面布局,设置监听按钮。
actionPerformed( ):执行按钮动作事件,调用修改( )方法。
修改( ):实现修改数据功能。
(6) 删除单词类DelWin的方法
  DelWin:构造函数,安排界面布局,设置监听按钮。
  actionPerformed( ):执行按钮动作事件,调用删除( )方法。
  删除( ):实现删除数据功能。
2.3设计方法
2.3.1开发环境
    Java开发工具(Java development kit,JDK)是Sun公司所开发的一套Java程序开发工具软件,它是Sun公司的网站免费取得。它与JDK的参考文件同样是编辑Java程序的必备工具。在编写、编译和运行应用程序时用到eclipse。
2.3.2功能模块设计
                                  图4程序主界面
(1) 窗口功能说明
窗口共有3个主要部分:菜单栏、工具条、显示栏。
菜单栏:包括文件、编辑、帮助菜单。
工具条:包括输入栏和查询、添加、修改、删除、发生按钮。
显示栏:显示查询单词在词典中的所有解释。
(2) 菜单说明
  文件菜单:包括英汉词典、汉语词典、备份词库、退出功能。
编辑菜单:包括添加词汇、修改词汇、删除词汇功能。
帮助菜单:关于该软件的一些信息。
(3) 工具栏说明
在向输入栏中输入英/中文单词,单击查询按钮,在显示栏中将会显示查所对应词典中的所有解释。发音按钮:发音纯正标准。方便用户更好的记忆朗读单词。添加、修改、删除按钮:可由用户自行添加、修改和删除词库中的词汇。
(4)显示栏说明
显示用户所查询的词义。右击将出现复制、粘贴等命令。方便用复制到其它地方进行其它如打印、学习等操作。
2.4数据库设计
在开始设计电子词典之前,要做一些准备工作,在Microsoft Access 2003中,建立一个数据库,数据库的名字为english数据库,其中包括一张表。
图5 建立Accesss数据库
    图6 表的属性图
   
此英语单词表有两个属性值,分别是单词和解释。其中单词字段为主键,保证输入不可以为空。其类型都是文本类型。其中,单词表示英文单词信息;解释代表汉语解释信息。
                         
表1  英语单词解释表
2.4.1使用JDBC连接数据库
JDBC是Java程序连接数据库的应用程序接口(API)。
JDBC是由一类和接口组成,通过调用这些类和接口所提供的成员方法,我们可以连接各种不同的数据库,进而使用SQL命令对数据库进行查询、插入、删除、更新等操作。Java程序包括Java小程序和应用程序,主要是根据JDBC方法实现对数据库的访问和操作。完成的主要任务有请求与数据库建立连接;向数据库发送SQL请求;为结果集定义存储应用和数据类型;查询结果;错误处理;控制传输;提交关闭连接等操作。
2.4.2JDBC编程要点
(1) 引用java.sql包:import  java.sql.*;
(2) 使用Class.forName()方法加载相应数据库的JDBC驱动程序。
Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver“);
(3) 定义JDBC的URL对象。
(4) 连接数据库。
        Connection  Connection(con URL);
(5) 使用SQL语句对数据库进行操作。
(6) 解除Java与数据库的连接并关闭数据库。
(7) 常用的JDBC类有,DriverManage类,Connection类,Statement类,
PreparedStatement类,ResultSet类。
3.程序运行结果
    图7文件菜单界面
文件菜单:包括英汉词典、汉语词典、备份词库、退出功能。当单击英汉词典时,主界面出现输入查询英语单词;单击汉语词典,显示输入要查询的汉语意思;单击退出,将退出操作;单击备份数据库,将对已有的数据进行备份,以便保证数据的安全。
    图8 英汉词典英译汉
   
英汉词典,可以实现英文单词对中文词汇的查询功能。当用户输入一个单词,用户可以单击查询按钮,显示这个单词的中文解释,解释出现在文本区,但是输入不可以为空。
    图9英汉词典汉译英
实现将中文词汇翻译成英语。在查询栏中输入中文,点击查询,便出现它的英文解释。
   
    图10编辑菜单界面
    编辑菜单:包括添加词汇、修改词汇、删除词汇功能。可以扩充词库,按照自己的需要,完善词库,也可对原有的信息进行修改、补充等操作。
    图11删除界面 
    单击主界面的删除按钮,出现删除界面,在输入单词栏中填上要删除的单词,然后单击提交按钮。如果要退出,也可以点击取消,退出删除界面,回到主界面。
                               
图12 修改界面
单击主界面的修改按钮,出现修改界面,在输入单词栏中填上要修改的单词,下面写上它的汉语解释,然后单击提交按钮。如果输入有误,也可以点击取消,退出修改界面。
                                           
    图13添加单词界面
单击主界面的添加按钮,出现添加单词界面,在输入单词栏中填上要添加的单词,下面写上它的汉语解释,然后单击提交按钮。如果输入有误或要退出,也可以点击取消,退出添加单词界面,回到主界面。
    图14 帮助菜单界面
帮助菜单包括帮助和关于两个选项。此模块添加了一些使用该软件的方法,当用户在使用时遇到不清楚的问题时,可以点帮助文档,根据提示进行操作。
    图15 关于界面
   
此界面显示关于此软件的一些信息,供用户参阅。
4.设计体会
通过本次设计,进一步深化了课堂上所学的知识,深刻理解Java语言的重要概念及其面向对象的特点,熟练的应用面向对象的思想和设计方法解决实际问题。巩固所学java语言基本知识,增进Java语言编辑基本功,掌握JDK、eclipse等开发工具的运用,拓展常用类库的应用,把所学课程及相关知识加以融会贯通。除此之外,对于图形用户界面的设计,从课本的Awt包扩展到Swing包,利用Swing编程设计漂亮的图形用户界面,增加了一些新的的效果。在此次设计中,预先设计的所有功能均能实现,而且执行效果较好。但是,由于时间有限,此电子词典的功能还不够完善。例如可以增加背单词功能,英文单词游戏等功能,由于时间和能力有限,其他功能待日后完善。
在此次课程设计中,自己解决问题的能力得到了提高。由于课堂所学有限,不足以解决实际问题,所以在设计过程中遇到的问题,参阅了大量的书目和借助网络,再加上老师的指导,最终问题都得到了解决。这为以后进行复杂的程序设计奠定了很好的基础,同时也培养了自己获得信息、总结信息,以及综合运用所学知识的能力。
5.参考文献
[1] 胡宋军.Java2编程技术与实例[M]. 北京: 人民邮电出版社, 2004.5:95-125
[2] 岩洪亮等.JAVA课程设计教程[M].北京:北京电子工业出版社,2004.5: 26-42
[3] 刘志铭,孙明丽等.数据库系统开发案例精选[M].北京:清华大学出版社,2005.6:235-263
[4] 王国辉, 吕海涛.数据库系统开发案例[M]. 北京:人民邮电出版社, 2007.3:106-177
[5] 陈国君, 陈锡祯. Java2程序设计基础[M]. 北京:清华大学出版社, 2006.1:316-338
[6] 袁海燕. Java实用程序设计100例[M]. 北京:人民邮电出版社, 2005.6:210-224
6.附录
主要代码:
import java.awt.*;
import java.*;
import java.sql.*;
import java.awt.event.*;
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;
  JTextArea  chinesetext;
  JButton b1,b2,b3,b4,b5;
  JLabel label;
  JMenuBar mbar;
  JMenu mfile,medit,mhelp;
  JMenuItem edic,cdic,back_data,quit,addedit,modedit,deledit,hhelp,about;
  DataWindow()
  {
      super("英汉小词典");
      this.setBounds(250,250,600,400);
      this.setVisible(true);
      getContentPane().add(new JScrollPane(chinesetext));
      mbar=new JMenuBar();
      setJMenuBar(mbar);
      mbar.setOpaque(true);
      mfile=new JMenu("文本");
      medit=new JMenu("编辑");
      mhelp=new JMenu("帮助");
      mbar.add(mfile);
      mbar.add(medit);
      mbar.add(mhelp);
      edic=new JMenuItem("英汉词典");
      cdic=new JMenuItem("汉英词典");
      back_data=new JMenuItem("备份词典");
      quit=new JMenuItem("退出"); //文件菜单
      addedit=new JMenuItem("添加词汇");
      modedit=new JMenuItem("修改词汇");
      deledit=new JMenuItem("删除词汇");//编辑菜单
      hhelp=new JMenuItem("帮助");
      about=new JMenuItem("关于....");  //帮助菜单
      mfile.add(edic);
      mfile.add(cdic);
      mfile.add(back_data);
      mfile.addSeparator();
      mfile.add(quit);
      medit.add(addedit);
      medit.add(modedit);
      medit.add(deledit);
      mhelp.add(hhelp);
      mhelp.add(about);
      edic.addActionListener(this);
      cdic.addActionListener(this);
      quit.addActionListener(this);
      addedit.addActionListener(this);
      modedit.addActionListener(this);
      deledit.addActionListener(this);
    hhelp.addActionListener(this);
    about.addActionListener(this);
    englishtext=new JTextField(16);
    englishtext.setFont(new Font("",15,15));
    chinesetext=new JTextArea(8,15);
    chinesetext.setEditable(false);
    chinesetext.setFont(new Font("",25,25));
    b1=new JButton("查询");
    b2=new JButton("添加");
    b3=new JButton("修改");
    b4=new JButton("删除");
    b5=new JButton("");
    JPanel p1=new JPanel();
    JPanel p2=new JPanel(); //添加面板
    label=new JLabel("输入要查询的英语单词");
    label.setFont(new Font("隶书",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");
    this.add(p2,"South");
    this.add(new JScrollPane(chinesetext),"Center");
    b1.addActionListener(this);
    b2.addActionListener(this);
    b3.addActionListener(this);
    b4.addActionListener(this);
    b5.addActionListener(this);
    englishtext.addActionListener(this);
    back_data.addActionListener(this);
    filedialog_save=new FileDialog(this,"保存文件对话框",FileDialog.SAVE);//定义"保存文件对话框"
    filedialog_save.addWindowListener(new WindowAdapter()
    {
      public void windowClosing(WindowEvent e)
      {
          filedialog_save.setVisible(false);
      }
    });
    addWindowListener(new WindowAdapter()
    {
      public void windowClosing(WindowEvent e)
      {
          it(0);
      }
    });
  }
  public void actionPerformed(ActionEvent e) //实现按钮监听事件
  {
      Source()==b1||e.getSource()==englishtext) //如果是"查询"
      {
        chinesetext.setText("");
        Text().equals(""))
        {
            JOptionPane.showMessageDialog(this,"查询对象不能为空","警告",JOptionPane.WARNING_MESSAGE);
        }
        else
        {
            try{Listwords();}
            catch(SQLException ee) { }
        }
    }
    else Source()==b2||e.getSource()==addedit) //如果是"添加"
    {
      new AddWin(); //AddWin是添加窗口的类
    }
    else Source()==b3||e.getSource()==modedit) //如果是"修改"
    {
      new ModifyWin(); //ModifyWin是修改窗口的类
    }
    else Source()==b4||e.getSource()==deledit)
    {
      new DelWin(); //DelWin是删除窗口的类
    }
    else Source()==b5) //如果是语音文件,则读出单词
    {
      Text()!=null)
      {
            try
            {
              InputStream is=getClass().getResource("sound//"+Text().trim()+".wav").openStream();
              //AudioPlayer.player.start(is);
            }
            catch(IOException e1){}
      }
    }
    else Source()==edic)//英汉
    {
      label.setText("输入要查询的英语单词:");
      b1.setVisible(true);
      b5.setVisible(true);
    }
    else Source()==cdic) //汉英
    {
      label.setText("输入要查询的汉语意思:");
      b1.setVisible(true);
      b5.setVisible(true);
    }
    else Source()==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]; //定义4KB容量的buffer数组
          File tofile=new File(Directory(),File());//建立新文件对象
          FileOutputStream fos=new FileOutputStream(tofile);//建立文件输出流
          while((ad(buf))!=-1)//写入文件(备份文件)
          {
            fos.write(buf,0,bytesRead);制作查询类小程序
          }
          fos.flush();
          fos.close();
          fis.close();
      }
      catch(IOException e2){ }
    }
    else Source()==quit) //退出
    {
      it(0);   
    }
    else Source()==about) //关于
    {
      final String AboutMsg="A Electrical Dictionary 1.0\n\n"+"An application written to show off the function of dictionary.\n\n"+"\n\n"+"Copyright(c) 2005.";
      JOptionPane.showMessageDialog(topFrame,AboutMsg);
    }
    else Source()==hhelp)
    {
      JInternalFrame help=new HelpFrame();
      help.setVisible(true);
    }
  }
 
  public void Listwords() throws SQLException //实现查询功能
  {
      String cname,ename;
      try
      {
        Class.forName("sun.jdbc,odbc,JdbcOdbcDriver");
      }
      catch(ClassNotFoundException e){} //建立桥接
      Connection Connection("jdbc:odbc:Driver={MicroSoft Access Driver(english*.mdb)};DBQ=E:\\电子词典明明\\english.mdb","","");
    Statement ateStatement();
    Text().equals("输入要查询的英语单词:"))
    {
      ResultSet uteQuery("SELECT *FROM T_1");
      ())
      {
          String("单词");
          String("解释");
          if(ename.Text()))
          {
            chinesetext.append(cname+'\n');
          }
      }
      ExlCon.close();//关闭数据库
      Text().equals(""))
      {
          JOptionPane.showMessageDialog(this,"查无此单词!","警告",
          JOptionPane.WARNING_MESSAGE);
      }
    }
    else Text().equals("输入要查询的汉语意思:"))
    {
      ResultSet uteQuery("SELECT *FROM T_1 WHRER 解释 LIKE'%'" +Text()+"%");
      ())
      {
          String("单词");
          String("解释");
          chinesetext.append(ename+'\n');
      }
      ExlCon.close();//关闭数据库
      Text().equals(""))
      {
          JOptionPane.showMessageDialog(this,"查无此单词!","警告",
          JOptionPane.WARNING_MESSAGE);
      }
    }
  }
}
public class Dic
{
  public static void main(String args[])
  {
      JFrame.setDefaultLookAndFeelDecorated(true);
      DataWindow window=new DataWindow();
      window.validate();
  }
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。