电子词典 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小时内删除。
发表评论