Java课程设计--电子词典

       这两周是Java课程设计,自由选题,我选的是电子词典.

       把写的实验报告和源代码发出来,写的比较简单,给有需要的人分享一下.


       课程设计说明书(Word)  下载文件 点击下载此文件
       源代码(IDE为Netbeans)  下载文件 点击下载此文件
       编译后的可执行文件(jar)  下载文件 点击下载此文件


      

      
说明书:

一、课程设计题目

电子词典
摘要  
电子词典是一种将传统的印刷词典转成数码方式、进行快速查询的数字学习工具。电脑词典以轻便易携、查询快捷、功能丰富等特点,成为21世纪学生学习生活、社会人士移动办公的掌上利器。
本系统是一个采用Microsoft Access作为数据库的电子词典,根据用户的输入过程中智能感知接近的单词,并在最终的查询中显示出查询结果。
本系统是采用JAVA作为开发工具NetBeans 6作为开发工具的电子词典,提供了智能感知和查询功能。
关键字: JAVA; 电子词典;



abstract
Electronic dictionary is a traditional printed from digital conversion, a quick search of digital learning tools. Computer dictionary to highly portable, for fast, feature-rich, and other characteristics of the 21st century students to learn life, the community of handheld mobile office tool.
This electronic dictionary is a system using Microsoft Access database , based on user input in the smart sense shows the word close, and the final query results show the query.
This system is used as a development tool JAVA NetBeans 6 as a development tool of the electronic dictionary,provides smart sensing and queries.
Keywords:  JAVA;  Electronic dictionary;




二、系统开发背景
随着国际化的发展,英语变得越来越为重要。随着越来越多的人开始学习英语,一个方便实用的英汉查询工具为人们所渴望。
电子词典是一种将传统的印刷词典转成数码方式、进行快速查询的数字学习工具。使用电子词典查询英语,效率远远高于传统的图书查询,而且解释更为详尽,词库更新更为方便快捷。




三、设计主要目的及意义
软件课程设计是计算机科学与技术专业软件方向的一个重要环节,是语言类课程学习的总结。通过课程设计使我们加深对程序设计的理解,掌握程序开发的基本方法,深化学生面向对象的编程设计思想和新一代程序设计的逻辑思维方式,把课堂上所学到的多个单元串到一起,提高我们在软件设计过程中分析问题和解决问题的实际动手能力,使我们的理论知识和实践技能得到共同发展,最终提高我们解决问题和分析问题的能力。为我们踏上工作岗位之前提供了一次专业研究和项目开发的宝贵实践机会,为今后的工作积累经验。




四、课程设计的过程
1.流程图设计:
流程图如下:


2.结构设计
该程序的结构框图如下所示:


3.窗体设计:
    该程序只有一个窗体。可实现词典设置、智能感知、查询等功能。窗体设计如下:


4.程序代码设计:(代码部分详见附录)


5.运行界面:


五、重点及难点
1、重点:
   (1)查询功能:若有查询的词条则显示结果,若没有就给出提示。
   (2)智能感知功能:在用户输入的过程中,根据已输入部分进行检索,提示相关接近的词条。
   (3)数据库路径:使用相对路径,使得即使程序路径发生改变依然可以使用。
   (4)词典设置:除了英汉查询外,可以另外自定义词典。
2、难点:
    本设计的难点在于实现智能感知功能。智能感知功能即在用户输入的过程中,根据已输入部分进行检索,提示相关接近的词条。首先对用户的输入进行判断,然后给输入框增加一个KeyListener,然后在keyReleased事件发生时,取得输入框的字符串,然后在数据库中进行查询,当遇到与之匹配或者接近的词条则在智能感知区域显示出来。




六、主要结论
    在整个设计过程中,我有一些宝贵的感受和收获,现一并总结如下:在学习JAVA的过程中还不够扎实,学过的东西没能融会贯通,在编写代码的时候不能够信手拈来,熟练应用,而是到处查找资料。
课程设计的另一个收获是得到了对JAVA这种面向对象语言的初步印象,学到了一些编程的方法。在面向对象的编程方式下,真正实现了把主要精力放在功能的实现上,对封装好的对象只需了解其属性方法即可使用。编程的主要任务是为程序中使用的各种对象的事件编写事件处理程序,从而实现系统功能。
在设计初期,我通过与老师和同学的反复交流,明确了系统要实现的任务。为后期的详细设计奠定了基础。在设计过程中,通过参考其它相似系统确定系统的具体实现及功能的细节改进。同时,指导老师也提出了宝贵的意见。
经过了两周的学习和设计,我终于完成了《电子词典》课程设计,从开始接到设计题目到系统的实现,再到设计说明书的完成,每走一步对我来说都是尝试与挑战。作为一个本科生的课程设计,由于经验的匮乏,难免有许多考虑不周全的地方,如果没有指导老师的督促指导,以及一起工作的同学们的支持,想要完成这个设计是比较困难的。在这次为期两周紧张的软件课程设计中,我们收益非浅,不仅巩固了课堂上学习的知识,而且开阔了眼见。并且真正懂得了软件开发的步骤和含义。
课程设计是大学教育的重要一课,这是对大学期间所学知识的综合运用能力的一次检测。为我们踏上工作岗位之前提供了一次专业研究和项目开发的宝贵实践机会,为今后的工作积累经验。




七、致谢
本课程设计的完成,首先感谢母校——河北工程大学的辛勤培育之恩。
本系统是在刘云与龚柄江两位老师直接指导下完成的,两位老师从论文的选题,设计计划的安排到具体功能的实现,以及说明书的撰写直至定稿的全过程都给予了精心的指导和严格的要求,对本论文的最后完成给予了莫大的帮助。在设计过程中两位云老师在百忙中挤出时间多次给予指导,提出了许多宝贵的修改意见。在这里首先要感谢两位云老师。
其次要感谢贾西雷同学,他们利用自己的宝贵时间帮助我测试程序,并且结合自己的经验,给我提出的宝贵的意见和建议,使我的系统得以进一步的完善。在此也向他们表示由衷的感谢。
然后还要感谢大学以来所有的老师,为我们打下计算机专业知识的基础;同时还要感谢所有的同学们,正是因为有了你们的支持和鼓励。此次课程设计才会顺利完成。




八、参考文献
[1] Kathy Sierra & Bert Bates. Head First Java. 中国电力出版社 2007
[2] Bruce Eckel. Thinking in Java.机械工业出版社. 2008





九、附录:程序清单
package dic;
public class Main {
    public static void main(String[] args) {    
       Frame DicFrame = new Frame();
       DicFrame.setTitle("电子词典");
       DicFrame.setVisible(true);
       DicFrame.setPath();
    }
}


package dic;
import java.awt.event.*;
import java.sql.*;
import java.io.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*;
public class Frame extends javax.swing.JFrame {
    public Frame() {
        initComponents();
    }
        private void initComponents() {

        SearchPanel = new javax.swing.JPanel();
        SearchTextField = new javax.swing.JTextField();
        SearchButton = new javax.swing.JButton();
        MainPanel = new javax.swing.JPanel();
        ResaultLabel = new javax.swing.JLabel();
        MenuBar = new javax.swing.JMenuBar();
        OptionMenu = new javax.swing.JMenu();
       setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        SearchTextField.setText("请输入查询内容");
        SearchTextField.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                SearchTextFieldKeyReleased(evt);
            }
        });
        SearchTextField.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                SearchTextFieldMouseClicked(evt);
            }
        });

        SearchButton.setText("查询");
        SearchButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                SearchButtonActionPerformed(evt);
            }
        });

        org.jdesktop.layout.GroupLayout SearchPanelLayout = new org.jdesktop.layout.GroupLayout(SearchPanel);
        SearchPanel.setLayout(SearchPanelLayout);
        SearchPanelLayout.setHorizontalGroup(
            SearchPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(SearchPanelLayout.createSequentialGroup()
                .addContainerGap()
                .add(SearchTextField, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 287, Short.MAX_VALUE)
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
                .add(SearchButton, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 89, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                .add(14, 14, 14))
        );
        SearchPanelLayout.setVerticalGroup(
            SearchPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
            .add(SearchTextField, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 28, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
            .add(SearchButton, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 28, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
        );

        ResaultLabel.setBackground(new java.awt.Color(255, 255, 255));

        org.jdesktop.layout.GroupLayout MainPanelLayout = new org.jdesktop.layout.GroupLayout(MainPanel);
        MainPanel.setLayout(MainPanelLayout);
        MainPanelLayout.setHorizontalGroup(
            MainPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(org.jdesktop.layout.GroupLayout.TRAILING, MainPanelLayout.createSequentialGroup()
                .addContainerGap(36, Short.MAX_VALUE)
                .add(ResaultLabel, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 364, Short.MAX_VALUE)
                .addContainerGap())
        );
        MainPanelLayout.setVerticalGroup(
            MainPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(MainPanelLayout.createSequentialGroup()
                .addContainerGap()
                .add(ResaultLabel, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 174, Short.MAX_VALUE)
                .addContainerGap(76, Short.MAX_VALUE))
        );

        OptionMenu.setText("设置词典");
        OptionMenu.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                OptionMenuMouseClicked(evt);
            }
        });
        MenuBar.add(OptionMenu);

        setJMenuBar(MenuBar);

        org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(SearchPanel, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            .add(MainPanel, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(layout.createSequentialGroup()
                .add(SearchPanel, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
                .add(MainPanel, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>                        

    private void SearchTextFieldMouseClicked(java.awt.event.MouseEvent evt) {                                            
        if (SearchTextField.getText().equals("请输入查询内容")){
            SearchTextField.setText("");
        }
    }                                            

    private void OptionMenuMouseClicked(java.awt.event.MouseEvent evt) {                                        
        chooser();
    }                                      

    private void SearchButtonActionPerformed(java.awt.event.ActionEvent evt) {                                            
        if (!SearchTextField.getText().equals("")) {
                setConn(SearchTextField.getText());
            }
    }                                            

    private void SearchTextFieldKeyReleased(java.awt.event.KeyEvent evt) {                                            
        if (!SearchTextField.getText().equals("")) {
                searchConn(SearchTextField.getText());
            }
    }                                          
    
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
            Frame DFrame =  new Frame();
            DFrame.setVisible(true);
            }
        });
    }
    
    void setConn(String Stext){
        //查询方法
        String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
        String dbURL = "jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ="+dbPath;
        Connection con = null;
        Statement stm = null;
        try{
            Class.forName(driver);
            con = DriverManager.getConnection(dbURL);  
            stm = con.createStatement();
            ResultSet rst1 = stm.executeQuery("Select*from english");
            while(rst1.next()){
                if(rst1.getString(1).trim().equals(Stext)){
                    ResaultLabel.setText(rst1.getString(2));
                }
                if (ResaultLabel.getText().equals("")){
                    ResaultLabel.setText("抱歉,没有找到");
                }
            }
            con.close();
        }
        catch(Exception e){
            JOptionPane OptionPane = new JOptionPane() ;
            OptionPane.showMessageDialog(null,"请选择正确的词典文件");
            e.printStackTrace();
        }
    }
    
    void searchConn(String Stext){
        //智能感知
//        File A=new File("..\\data\\english.mdb");
//        String filePath=A.getAbsolutePath();
        String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
        String dbURL = "jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ="+dbPath;
        Connection con = null;
        Statement stm = null;
        try{
            Class.forName(driver);
            con = DriverManager.getConnection(dbURL);  
            stm = con.createStatement();
            ResultSet rst1 = stm.executeQuery("Select*from english");
            String Rtext = "";
            String Htext = "";
            int i = 0;
            while(rst1.next()){
                 String temp = rst1.getString(1);
                  if (Rtext.length()<70){
                    if (temp.length() >= Stext.length() && temp.substring(0, Stext.length()).equals(Stext) ){
                        Rtext = Rtext + "<br>"+temp ;
                        Htext = "<html>"+Rtext+"</html>";
                    }
                  }          
              }
            ResaultLabel.setText(Htext);
            con.close();
        }
        catch(Exception e){
            JOptionPane OptionPane = new JOptionPane() ;
            OptionPane.showMessageDialog(null,"请选择正确的词典文件");
            e.printStackTrace();
        }
    }

     void chooser(){
        JFileChooser fc = new JFileChooser(getPath());
        fc.setDialogTitle("请选择词典文件");
        fc.showOpenDialog(this);
        if (fc.getSelectedFile()!= null){
          File B = fc.getSelectedFile();
          dbPath=B.getAbsolutePath();
        }
      }
    
      void setPath(){
         dbPath = getPath()+"//english.mdb";
     }

     String getPath(){
        String filePath = "";
        try {
            File directory = new File(".");
            filePath = directory.getCanonicalPath();
        } catch (IOException ex) {
        }
            return filePath;
     }
    static String dbPath = "";
    private javax.swing.JPanel MainPanel;
    private javax.swing.JMenuBar MenuBar;
    private javax.swing.JMenu OptionMenu;
    private javax.swing.JLabel ResaultLabel;
    private javax.swing.JButton SearchButton;
    private javax.swing.JPanel SearchPanel;
    private javax.swing.JTextField SearchTextField;
}






[本日志由 zdave 于 2008-07-04 04:57 PM 编辑]
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: Java 课程设计
评论: 0 | 引用: 0 | 查看次数: -
发表评论
昵 称:
密 码: 游客发言不需要密码.
内 容:
验证码: 验证码
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.