资源描述
课 程 设 计 报 告
课程设计名称 Java程序设计
专 业
班 级
学 号
姓 名
指导老师
成 绩
年月日
目录
一、设计任务和要求 1
1.1 设计任务和要求 1
1.2 选题目标和意义 1
二、需求分析 2
2.1 用户需求分析 2
2.2 开发环境分析 3
三、系统设计 4
3.1 系统总体设计 4
3.2 功效模块设计 4
3.3 类设计 5
3.4 数据库设计 7
四、程序实现 9
4.1 程序步骤图 9
4.2 关键算法和技术实现 11
4.3 类和数据结构实现 20
五、测试运行 20
5.1 系统测试方案 20
5.2 运行结果分析 21
六、设计体会 25
一、设计任务和要求
1.1 设计任务和要求
经过本课程设计实践,达成以下目标:
(1)培养学生严谨务实工作态度,并在老师指导下,提升分析问题和处理问题能力,促进理论联络实际学风养成。
(2)巩固和加深对面向对象程序设计基础概念、基础理论和实现技术了解。
(3)掌握Java开发关键环境和工具,掌握面向对象常见控件使用方法。
(4)初步掌握面向对象系统分析和设计基础方法和步骤,并能针对简单实际应用问题进行初步地分析和设计。
(5)掌握Java编程语言,并针对具体应用问题进行编程实现。
(6)经过撰写课程设计论文,锻炼学生科技论文写作能力。
电子英汉词典
功效要求:能够编辑词典库中信息,能够实现英译汉,汉译英(要考虑一词多义)。
该系统关键用于实现英汉互译功效,先选择是英译汉还是汉译英然后再查询框中查询,该系统会自动弹出匹配信息
1.2 选题目标和意义
我选择电子英汉互译词典这一课题目标在于巩固所学JAVA语言编辑基础功,掌握Jdk,Editplus,Eclipse,Jcreator等开发工具利用,拓宽常见类库应用。Java语言是当今流行网络编程语言,它含有面向对象,跨平台,分布应用等特点,它贴近自然语言,而且有利于软件维护和继承。我们经过该教学步骤和手段,把所学课程及相关知识加以融会贯通,全方面掌握JAVA语言编程思想及面向对象程序设计方法,为以后从事实际工作打下坚实基础。
二、需求分析
2.1 用户需求分析
用户需求分析:英汉词典作为一个常见学习工具,是我们常常要使用。该系统能完成一个简单电子词功效。该系统关键用于实现英汉互译功效,系统拥有自己数据库。
英译汉功效:我们能够先选择让系统进行英译汉功效,然后在查找框中输入想要查询英文单词,系统将自动在数据库中查找匹配统计并给出相对应汉语意思。
汉译英功效:我们能够在系统中选择汉译英功效,然后在查找框中输入想要查询汉语意思,系统将自动在数据库中查找匹配统计并给出相对应英文单词。
备份词库功效:我们能够将现有词库做一份备份文件存入另一空间,以备文件丢失时使用。
词汇添加功效:用户能够添加词库内没有单词及其解释。添加成功后该单词将在次库内保留,方便下次查询。
词汇修改功效;用户能够实现对词库中已经有单词及其解释修改。修改后结果将保留在词库中。
词汇删除功效;用户可自行删除词库中已经有单词,同时次单词解释也将被一同删除。
其它功效:另外,系统还含有帮助和相关等功效,用来辅助用户更方便简练使用电子词典。
电子英汉词典
文件
编辑
其它
英汉词典
汉英词典
备份词库
退出系统
添加词汇
修改词汇
删除词汇
帮助
相关
2.2 开发环境分析
系统需求分析:本系统是一个采取Microsoft Access作为数据库,用JAVA作为开发工具英汉电子词典,内有英汉词典、汉英词典和备份词库。它不仅可实现英译汉、汉译英基础翻译功效,还能够让用户依据自己需要添加、修改、删除词库,形成自己词库。
(1)硬件环境
Cpu: Intel (R) Core(TM)2 Duo Cpu
内存:2G 硬盘空间:250G
(2)软件环境
32位XP操作系统。JDK和Jcreator软件环境。
三、系统设计
3.1 系统总体设计
电子英汉词典系统包含三个大方面:文件,编辑,其它。
文件菜单中包含英译汉,汉译英备份词库。这也是电子词典最关键功效。
编辑菜单中包含添加词汇,修改词汇,删除词汇功效。
其它菜单中包含帮助和相关。
系统总体设计图以下:
英汉电子词典
文件
编辑
英汉词典
汉英词典
退
出
备份词库
添加词汇
删除词汇
修改词汇
其它
帮
助
关
于
程序共有五个子函数和一个主函数。
(1)search是查找函数,用户经过系统提醒输入要查找单词,只要单词库中含有此单词便能找到对应汉字或英文解释,这个查找函数使用是从头到尾线性查找法,即使查找效率在数据很大时候是无法容忍,但因为这里包含数据量很小,使用线性查找对系统性能上没有很大影响。
(2)add是增加函数,用户能够经过此函数来增加单词库单词数量
(3)modify是修改函数,程序提醒用户输入要修改单词,使用线性查找方法找到对应单词。假如找到,则提醒输入新单词及其解释。
(4)delete是删除函数,程序提醒用户输入要删除单词,使用线性查找方法找到对应单词,假如找到,提醒用户确定删除,在得到确定后即删除这个单词统计。
(5)主程序经过无限循环来接收输入命令,而且依据命令调用对应函数处理。
3.2 功效模块设计
(1)英译汉功效模块说明:能够实现对英文单词查询功效。用户文本框中输入要查询英文单词。若该单词存在于词库中,则会在文件对话框中显示其词性及汉字翻译;若该单词没有存在于词库中,则会弹出警告,说明查无此词。
(2)汉译英功效模块说明:能够实现对汉字单词查询功效。用户文本框中输入要查询汉字单词。若该单词存在于词库中,则会在文件对话框中显示其一个或多个对应英文单词;若该单词没有存在于词库中,则会弹出警告,说明查无此词。
(3)备份词库功效模块说明:能够实现对现有词库备份,可将目前词库存入用户所设置任意位置。
(4)添加词汇功效模块说明:能够实现对词库添加。用户可自行输入所添加单词及其解释,若添加是词库中没有单词,系统在添加成功后提醒添加成功。若添加是词库中已经有单词,系统会弹出警告,说明此词汇已存在。
(5)修改词汇功效模块:能够实现对词库中已经有单词修改。用户可自行修改词库中单词及其解释。若输入单词不存在于词库中,系统会弹出警告,说明不存在此单词。
(6)删除词汇功效模块:能够删除词库中已经有单词。用户可自行删除词库中已经有单词,再删除此单词同时,其解释也会随之被删除,如输入单词不存在于词库中,系统用会弹出警告,说明不存在此单词。
(7)其它功效模块:在其它中有帮助和相关两项。帮助中是有相关词典功效说明,相关中可显示版本信息。
3.3 类设计
关键类设计:
1. Loading类
Loading类关键是要实现登陆界面和按钮监视器实施动作事件,和数据库连接。
方法
功效
Loading()
安排登陆界面布局
LianJie()
连接数据库
Chaxun()
实施登陆按钮动作事件
DengLiPan()
判定文本框是否为空
2. Register类
Register类关键是实现注册界面和按钮监视器实施动作事件,和数据库连接。
方法
功效
Register()
安排注册界面布局
LianJie()
连接数据库
Chaxun()
实施确定按钮动作事件
DengLiPan()
判定文本框是否为空
3. Kellu类
Kellu类为窗口主界面类,包含菜单栏,工具栏,显示栏,添加监视器实施动作事件。
方法
功效
Kehu()
安排界面布局,设置菜单项和工具按钮
action Performed()
实施按钮动作事件
valueChanged()
下拉列表监听事件
4. ChaXun类
ChaXun类细腻那两个结构方法,分别是实现英汉,汉英查询功效。
方法
功效
JingQunEnglishCha()
英译汉查询
JingQunChineseCha()
汉译英查询
5.Add类
Add类实现单词添加功效
方法
功效
Add()
设置“添加”窗口界面
AddCha()
实现和数据库连接
6. Update类
Update类,功效经过单击主窗口界面更新按钮弹出更新小窗口,输入更新单词,对对应解释进行更新。
方法
功效
Add()
设置“添加”窗口界面
AddCha()
实现和数据库连接
7. delect类
delect类,功效经过单击主窗口界面删除按钮弹出删除小窗口,输入删除单词进行删除。
方法
功效
delect()
设置“删除”窗口界面
delectcha()
实现和数据库连接
8. help类
hele类,功效经过单击主窗口界面帮助菜单下帮助选项又弹出帮助窗口,经过网页显示单词想过说明,经过单击页面上超链接来显示另一网页。
方法
功效
Help()
设置帮助窗口界面
Hyperlinkupdate()
显示新URL资源
9. Guanyu类
Guanyu类功效经过单击主窗口界面帮助菜单下相关弹出相关窗口,显示词典使用说明。
方法
功效
Guanyu()
设置相关窗口界面
界面设计思想
创建窗体,设计菜单。定义菜单条JMenu mfile(文件)、medit(编辑)、mhelp(帮助),菜单子项JMenuItem edic(英汉词典)、cdic(汉英词典)、back_data(备份词库)、quit(退出)、addedit(添加词汇)、modedi(修改词汇)、deledit(删除词汇)、hhelp(帮助)、about(相关)。经过add( )方法将菜单子项添加到菜单中,并注册监听者。定义一个文件对话框filedialog_save,并为之增加适配器。自定义一个面板,实现GUI元素布局。
3.4 数据库设计
Java数据库连接(JDBC)由一组用 Java 编程语言编写类和接口组成。JDBC为工具/数据库开发人员提供了一个标准 API,使她们能够用纯Java API 来编写数据库应用程序。然而各个开发商接口并不完全相同,所以开发环境改变会带来一定配置改变。本系统采取是Access数据库连接方法。
英译汉词汇表
字段名
字段类型
长度
备注
yingwudanci
char
30
可为空
yinbiao
char
10
可为空
cixing
char
10
可为空
jieshi
char
50
可为空
各功效模块E-R图以下:
(1)文件模块子E-R图
文件模块中关键目标就是要完成英汉互译功效。其中包含英译汉功效模块,汉译英模块功效,备份词库模块功效
文件
英译汉
汉译英
备份词库
退出
(2)编辑模块子E-R图
编辑模块关键目标就是要进行单词添加修改和删除功效。
编辑
添加词汇
修改词汇
删除词汇
(3)其它模块子E-R图
其它模块关键目标就是在用户碰到问题时,在其它中有“帮助”和“相关”两项,“帮助”中有相关词典功效说明,“相关”可显示版本信息。 其它
帮助
相关
四、程序实现
4.1 程序步骤图
分析电子词典总体情况,划分系统边界,识别系统数据起源和去处,确定外部实体,得出系统顶层数据步骤图;然后划分出多个关键信息管理功效,本系统关键数据工作流包含以下多个方面:英汉词典,汉英词典,备份词库,添加词汇,修改词汇,帮助。
明确各功效之间联络,绘制出数据步骤图,以下图所表示: 开始
显示菜单
输入选项
输入单词
输入词性
输入音标
输入汉字
输入显示信息
输入删除单词
判定
循环体
查找
判定
显示无法找到
显示删除成功
显示查询选项
输入英文单词
输入汉字意思
判定
判定
循环体
循环体
计算
判定
显示无法找到
显示查找信息
判定
显示无法找到
显示查找信息
结束
计算
4.2 关键算法和技术实现
菜单窗口
class DataWindow extends JFrame implements ActionListener
try{
fis = new FileInputStream(fromfile);
int bytesRead; //定义变量来存放输入流中读取出来文件
byte[] buf = new byte[4*1024]; //4K buffer
File tofile = new File(filedialog_save.getDirectory(),filedialog_save.getFile());
FileOutputStream fos = new FileOutputStream(tofile);
while((bytesRead = fis.read(buf))!=-1)
{
fos.write(buf,0,bytesRead);
}
fos.flush();
fos.close();
fis.close();
}
catch(IOException e2){ }
}
public void Listwords() throws SQLException //实现查询功效
{
String cname,ename;
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundException e){}
//建立桥接器
Connection Ex1Con = DriverManager.getConnection("jdbc:odbc:03","","");
Statement Ex1Stmt = Ex1Con.createStatement();
if(label.getText().equals("输入要查询英语单词:"))
{
ResultSet rs = Ex1Stmt.executeQuery("SELECT * FROM 表1");
while( rs.next())
{
ename = rs.getString("单词");
cname = rs.getString("解释");
if(ename.equals(englishtext.getText()))
{
chinesetext.append(cname+'\n');
}
}
public class Dic
{
public static void main(String args[])
{
JFrame.setDefaultLookAndFeelDecorated(true);
DataWindow window = new DataWindow();
window.validate();
// AddWin add = new AddWin();
}
public void add()
{
}
}
单词添加
public class AddWin extends JFrame implements ActionListener {
JTextField 添加汉语解释_文本条,添加英语单词_文本条;
JButton addbtn,cancelbtn;
Connection Con=null;
Statement Stmt=null;
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==addbtn)
{
if(添加英语单词_文本条.getText().equals("")||
添加汉语解释_文本条.getText().equals(""))
{
JOptionPane.showMessageDialog(this,"添加单词或解释不能为空!","警告",
JOptionPane.WARNING_MESSAGE);
}
// 判定输入框不能为空
else{
try{
添加();
}
catch(SQLException ee){}
}
}
else if(e.getSource()==cancelbtn)
{
dispose();
}
}
while((boo=rs.next())==true)
{
ename=rs.getString("单词");
cname=rs.getString("解释");
if(ename.equals(添加英语单词_文本条.getText()))
{
JOptionPane.showMessageDialog(this,"此词汇已存在!","警告",
JOptionPane.WARNING_MESSAGE);
break;
}
}
if(boo==false)
{
String s1="'"+添加英语单词_文本条.getText().trim()+"'",s2="'"+添加汉语解释_文本条.getText().trim()+"'";
String temp="INSERT INTO 表1 VALUES ("+s1+","+s2+")";
Stmt.executeUpdate(temp);
JOptionPane.showMessageDialog(this,"添加成功!","恭喜",
JOptionPane.WARNING_MESSAGE);
dispose();
}
Con.close();
}
}
单词删除
class DelWin extends JFrame implements ActionListener {
JTextField 删除单词_文本条;
JButton delbtn,cancelbtn;
Connection Con = null;
Statement Stmt = null;
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==delbtn)
{
if(删除单词_文本条.getText().equals(""))
{
JOptionPane.showMessageDialog(this,"删除单词不能为空!","警告",
JOptionPane.WARNING_MESSAGE);
}
// 判定输入框不能为空
else
{
try{
删除();
}
catch(SQLException ee){}
}
}
else if(e.getSource()==cancelbtn)
{
dispose();
}
}
while((boo=rs.next())==true)
{
ename=rs.getString("单词");
cname=rs.getString("解释");
if(ename.equals(删除单词_文本条.getText()))
{
String s1="'"+删除单词_文本条.getText().trim()+"'";
String temp="DELETE FROM 表1 WHERE 单词="+s1;
Stmt.executeUpdate(temp);
JOptionPane.showMessageDialog(this,"成功删除统计!","恭喜",
JOptionPane.WARNING_MESSAGE);
dispose();
break;
}
}
单词修改
class ModifyWin extends JFrame implements ActionListener
{
JTextField 修改英语单词_文本条,修改汉语解释_文本条;
JButton modifybtn,cancelbtn;
Connection Con=null;
Statement Stmt=null;
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==modifybtn)
{
if(修改英语单词_文本条.getText().equals("")||
修改汉语解释_文本条.getText().equals(""))
{
JOptionPane.showMessageDialog(this,"修改单词或解释不能为空!","警告",
JOptionPane.WARNING_MESSAGE);
}
// 判定输入框不能为空
else
{
try{
修改();
}
catch(SQLException ee){}
}
}
else if(e.getSource()==cancelbtn)
{
dispose();
}
}
if(ename.equals(修改英语单词_文本条.getText()))
{
String s1="'"+修改英语单词_文本条.getText().trim()+"'",s2="'"+修改汉语解释_文本条.getText().trim()+"'";
String temp="UPDATE 表1 SET 解释="+s2+" WHERE 单词 = "+s1;
Stmt.executeUpdate(temp);
JOptionPane.showMessageDialog(this,"统计修改成功!","恭喜",
JOptionPane.WARNING_MESSAGE);
dispose();
break;
}
}
帮助
public class HelpFrame extends JFrame {
public HelpFrame() {
super("Help");
setBounds( 120, 50, 275, 260);
HtmlPane html = new HtmlPane();
setContentPane(html);
}
public static void main(String[] args)
{
HelpFrame help=new HelpFrame();
help.setVisible(true);
System.out.println("Hello World!");
}
}
class HtmlPane extends JScrollPane implements HyperlinkListener {
JEditorPane html;
public void run() {
if (url == null) {
html.setCursor(cursor);
Container parent = html.getParent();
parent.repaint();
} else {
Document doc = html.getDocument();
try {
html.setPage(url);
} catch (IOException ioe) {
html.setDocument(doc);
getToolkit().beep();
} finally {
url = null;
SwingUtilities.invokeLater(this);
}
}
}
4.3 类和数据结构实现
本系统采取是Access数据库连接方法,Access数据库使用ODBC直连 方法以下:
加载驱动程序:
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver") ;
和数据库建立连接:
String url="jdbc:odbc:Driver={MicroSoft Access Driver (*.mdb)};DBQ="+application.getRealPath("/Data/ReportDemo.mdb");
Connection conn = DriverManager.getConnection(url,"","");
创建JDBC Statement对象:
Statement stmtNew=conn.createStatement() ;
注意:首先要配置数据源:
控制面版->管理工具->数据源->系统DSN->添加->选择Microsort Access Drive(*.mdb)->完成->写个数据源名(随意)->选择->找到你access文件->确定,接下来再进行你操作。
五、测试运行
5.1 系统测试方案
1,电子词典功效测试:运行程序,弹出电子词典运行窗口。若没有显示出来,则程序错误。
2,电子词典查询功效测试:运行程序后,在单词框内输入要查询单词,单击查询按钮,若显示出所查单词意思,则程序运行成功。若点击无反应,则程序错误。
3,电子词典添加功效测试:运行程序后,点击添加按钮,弹出添加运行窗口,若没有弹出,则程序错误。若成功在单词框内输入要添加单词,点击完成按钮,若弹出成功窗口,则程序正确,反之则程序错误。
4,电子词典修改功效测试:运行程序后,点击修改按钮,弹出修改运行窗口,若没有弹出,则程序错误。若成功在单词框内输入要修改单词,点击完成按钮,若弹出成功窗口,则程序正确,反之则程序错误。
5,电子词典删除功效测试:运行程序后,点击删除按钮,弹出删除运行窗口,若没有弹出,则程序错误。若成功在单词框内输入要删除单词,点击完成按钮,若弹出成功窗口,则程序正确,反之则程序错误。
5.2 运行结果分析
(1)此窗口为菜单窗口,用户可在此窗口内选择应用内容。其汉字件目录中包含:英汉词典,汉英词典,备份文库。编辑目录中包含:单词添加,修改删除。 图5.2.1
图5.2.1菜单界面运行图
(2)用户可在窗口内输入要查询单词,输入完成后点击查询将出现次单词解释及其词性。如输入单词不存在词库中,则显示查无此单词。图5.2.2和5.2.3
图5.2.2单词查询图
图5.2.3单词查询运行图
(3)若用户需要在词库中添加新单词,则选择单词添加。用户可输入想要添加单词及其解释和词性。单击确定后,次单词保留在词库中。图5.2.4
图5.2.4 单词添加运行图
(4)用户想要修改词库中已存在单词,可选择单词修改。用户可对该单词及其解释进行修改。修改并保留后单击确定,系统将提醒用户统计修改成功。图5.2.5
图5.2.5单词修改运行图
(5)想要删除词库中已存在单词,可选择单词删除。输入想要删除单词,点击确定后,此单词及其解释一并删除。删除后,系统提醒用户单词删除成功。图5.2.6
图5.2.6单词删除运行图
(6)用户可点击帮助来愈加好了解电子词典功效及其使用方法。图5.2.7
图5.2.7帮助菜单运行图
六、设计体会
此次课程设计是相关电子英汉词典系统设计,在这个过程中,我碰到了很多问题,也愈加了解JAVA。Java和C++语言很相近,但Java比C++简单,它抛弃了C++中部分不是绝对必需功效,如头文件、预处理文件、指针、结构、运算符重载、多重继承和自动强迫同型。 Java实现了自动垃圾搜集,简化了内存管理工作。这使程序设计愈加简便,同时降低了犯错可能。
Java提供了简单类机制和动态构架模型。对象中封装了它状态变量和方法,很好地实现了模块化和信息隐藏;而类则提供了一类对象原型,经过继承和重载机制,子类能够使用或重新定义父类或超类所提供方法,从而既实现了代码复用,又提供了一个动态处理方案。
除此之外,此次课程设计还让我对JAVA独立性有了更多认识。
Java是一个网络语言,为使Java程序能在网络任何地方运行,Java解释器生成和体系结构无关字节码结构文件格式。Java为了做到结构中立,除生成机器无关字节码外,还制订了完全统一语言文本,如Java基础数据类型不会随目标机改变而改变,一个整型总是32位,一个长整型总是64位。
为了使Java应用程序能不依靠于具体系统,Java语言环境还提供了用于访问底层操作系统功效类组成包,当程序使用这些包时,能够确保它能运行在多种支持Java平台上。
在课程设计最终,我大部分时间花在了和数据库连接上,也学到了更多知识。
JDBC是实施SQL语句Java API。JDBC本身是一个产品商标名,但它也可被看作为"Java Database Connecivity(Java数据库连接)"。它由一组用Java语言编写类和接口组成。JDBC已成为一个供工具/数据库开发者使用标准API,用户能够用纯Java API来编写数据库应用。使用JDBC能够很轻易地把SQL语句传送到任何关系型数据库中。换言之,用户无须为访问Sybase数据库写一个程序,又为访问Oracle数据库写另一个程序。你能够用JDBC API写出唯一程序,它能够将SQL语句发送到对应任何一个数据库。Java和JDBC结合,使程序员能够只写一次数据库应用软件后,就能在多种数据库系统上运行。
经过对JAVA数据库编程更多了解,我也取得了部分调试经验:经过层层捕捉异常来得悉错误发生。在课程设计中出现问题对我而言是学习和复习好机会,是它们使我学会了怎样自学、怎样查阅资料等,让我学习了很多,也让我对旧知识点有了更深了解。
在这不停调试、改动过程中也让我明白了养成良好编程习惯益处。因为编写程序时轻易犯错,所以我采取了单个模块单个功效进行调试和测试方法。在不停犯错和改错过程中,我学到了很多相关编程和调试程序知识,使自己知识体系得到了一定完善,也使我对平时所学有了很多了解和更深了解。面对一系列问题,失败了尝试,再失败再尝试……经过这次实践,我发觉了自己在编程及对软件开发相关知识不足,在以后学习实践中,我要取长补短,敢想善问,不停加强本身在专业知识方面能力,为以后学习和工作打下坚实基础。
指导老师签字:
年 月 日
展开阅读全文