东南大学java课程设计(2)

更新时间:2024-01-30 02:23:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

东南大学自动化学院

《JAVA语言》

姓 名:专 业:组 别:设计时间:评定成绩:

课 程 设 计 报 告

徐征宇 学 号: 08009129 自动化 实 验 室: 同组人员: 08009224 陈洪骏 2011 年 8 月 15 日 ——2010 年 9 月 6 日 审阅教师:

1

目 录

系统概述……………………………………………………………3

程序功能分析………………………………………………………3

所做工作……………………………..……………………..4 总结

2

一、 系统概述:

在工业领域以及民用系统中,嵌入式系统占据着主要控制核心的地位,很多功能都由单片机,FPGA,DSP等嵌入式平台实现,但是这些嵌入式平台无法提供友好的用户界面,同时由于平台上EEPROM容量有限无法存储大量的数据,无法满足各个方面的需求。同时也不利于大量数据的分析管理。

于是产生了上位机的概念,通过一台PC机专门完成数据存储,数据分析,提供GUI,传输通信指令的功能,而上位机与控制器之间则是通过通信完成数据以及指令的传送,这样可以很好地弥补现有控制器的各类缺陷,最重要的是提供了一个便于操作的界面,提升用户体验,系统的具体关系图如下: 终端机1终端机2终端机3终端机N ……

由于现阶段我们对于嵌入式平台还不甚了解,所以在本课程中我们只是利用JAVA语言完成上位机的部分功能。由于不存在通信的关系,所以所有的数据只能通过手动输入,然后进行查询管理。

实际上本软件最终的目的已经接近一个数据库管理的软件,重点在于用户界面GUI的设计和使用JAVA管理数据库。

上位机 一、 程序功能分析:

程序功能主要可以分为三个部分:

第一、数据库管理,主要功能有对于数据库信息进行添加,删除,更新。这也就是所谓的数据库的数据管理。有关的管理项有设备编号,设备名称,电压,电流,故障名称,时间。添加的功能就是可以通过手动的方式将各个数据项添加到数据表格中;而数据删除是可以根据一定的条件批量删除数据;数据更新是可以根据搜索条件去更新制定的数据项目。

第二、数据库搜索,可以根据数据搜索的条件,搜索显示满足条件的数据项,同时如果搜索的条件是设备名称或者设备号则统计计算该设备的故障的次数。

第三、由于本软件存在用户登陆,那么必然存在用户管理这么一个问题,用户管理主要有用户注册,可以允许现有用户注册新用户;用户更新,允许现有用户更改用户名与密码;删除用户,允许用户删除制定用户。

以上的内容即是本软件所要实现的基本基本功能。

我们还希望为程序添加其他的增强性的功能,主要功能有两项:

3

第一、用户操作历史记录,主要是希望这个程序可以将每次用户对于数据库的更改输入一个文件,然后用户可以调用这些文件查询;

第二、数据恢复功能,主要是提供用户如果不满意本次修改的结果,可以将数据库恢复到上一次关闭时的状态。

三、所做工作:

本人主要是完成数据库编程的工作,下面通过软件的工作流程来阐述具体功能的实现途径。 首先是软件整体的流程:

开始

输入用户名、密码

提示错误

N正确?

Y 选择功能 NNN选择管理账户?选择管理数据库?选择查询数据库

YY Y

管理账户流程管理数据库流程查询数据库流程

N

是否退出

Y

退出

下面我们根据流程图来具体阐述各个部分的实现方式。

由于本软件牵涉到两个数据表格,一个是用户信息数据表格,其主键设置为username,还有数据项为password。

另一个数据表格就是设备管理的数据库表格,这个数据表格无主键,数据项有:num,

4

name,voltage,current,bugname,bugname。

两个数据表格之间无任何关联,相互独立。 本程序选用ODBC:JDBC桥来完成程序与数据库的链接。

1)用户登陆

用户一开始就会进入一个登陆的见面,需要输入有效地用户名与密码,用户名与密码通过TextArea的FocusListener获取,用login的ActionPerform的程序去搜索数据库中的用户名与密码,如果存在相同的项,则允许登入主界面否则提示错误,让用户返回重新登陆。关键代码如下:

Connection con=DriverManager.getConnection(connectDB); Statement stmt=con.createStatement();

rs=stmt.executeQuery(\建立连接 while((rs.next())&&(flag==1))//用于读取数据 { String name=rs.getString(1); //获得数据库第一列 String sex=rs.getString(2); // System.out.println(\姓名:\输出信息 // System.out.println(\性别:\ // System.out.println(login_username); boolean result1=name.equals(login_username); boolean result2=sex.equals(login_password);

if(result1&&result2){System.out.println(\login_frame.show();login.setVisible(false);}

}//flag作为标志位,发现完全符合则推出循环 if(flag==1){logfal.setVisible(true);}

右图为登陆失败的提示界面,允许返回登陆界面操作。

2)用户管理:

由于需要用到登陆的界面,那么必然牵涉到用户管理的问题。用户管理就与数据库息息相关。 首先是用户添加,与登陆界面类似,通过FocusListener完成数据信息的获取后,用sql的insert语句写入数据库。具体代码如下: try { Class.forName(\ } catch(ClassNotFoundException e1) { System.out.println(\ } try { Connection con=DriverManager.getConnection(connectDB); Statement stmt=con.createStatement();

5

rs=stmt.executeQuery(\String query1=\INTO member VALUES('\)\

//用于写入数据

stmt.executeUpdate(query1); stmt.close(); con.close(); login_user_add_suc.setVisible(true); } catch(SQLException e2) { System.out.println(\ }

用户删除与添加类似只是sql语句有所变化:

rs=stmt.executeQuery(\String query2=\FROM member WHERE username='\

password='\删除数据 stmt.executeUpdate(query2);

如图,为添加用户与删除用户成功的显示结果

6

同样用户更新只是sql语句的区别而已。 rs=stmt.executeQuery(\

String query2=\member SET username='\WHERE username='\更新数据 stmt.executeUpdate(query2);

String query1=\WHERE password='\stmt.executeUpdate(query1);

3)数据库管理

数据库管理与用户管理相类似。都是具有数据库添加、删除、更新的功能,其sql语句类似,只是要在具体的实现流程上有所区别

添加数据:在这里与用户管理里的程序类似,不再重复代码,只是验证一下结果

可以看到,结果还是很有效地、很正确,并且在后面的文本域中显示了操作历史。

7

删除数据库:同样在这里不重复代码,只是验证一下结果。

可以看到符合条件的项目均已删除。

更新数据:同样验证结果:

这里在不同的选择条件下用到不同的语句 会有较多的选择判断:

操作前 操作后

if(login_change_edit_intsolution==0)//条件项 { switch(login_change_edit_intupdate)//更新项 {

case 1: query3=\TE eqmember SET name='\WHERE num='\; case 2: query3=\num='\; case 3: query3=\num='\; case 4: query3=\eqmember SET bugname='\WHERE num='\;

case 5: query3=\TE eqmember SET bugtime='\WHERE num='\;

default:query3=\TE eqmember SET num='\WHERE

8

num='\; break; } } ……

4)数据库查询

数据库查询语句主要是sql中的SELECT语句,由于本软件支持条件可选查询,所以需要对于choice控件的选择值进行判断。

同时本程序对于选择编号以及名称进行的查询提供统计故障次数的功能,实现方式就是遍历数据库,判断符合条件的字段后,叠加计数,流程图代码如下:

开始累加计数清零读取数据故障字段为空?YN累积计数加一N数据读取完毕?Y结束 try { login_search_text.setText(\ //用于计算故障累计次数 Connection con=DriverManager.getConnection(connectDB); Statement stmt=con.createStatement(); switch(login_serach_index) {

case 1:rs=stmt.executeQuery(\num,name,voltage,current,bugname,bugtime FROM eqmember WHERE name='\

case 2:rs=stmt.executeQuery(\num,name,voltage,current,bugname,bugtime FROM eqmember WHERE voltage='\

case 3:rs=stmt.executeQuery(\num,name,voltage,current,bugname,bugtime FROM eqmember WHERE current='\

9

case 4:rs=stmt.executeQuery(\num,name,voltage,current,bugname,bugtime FROM eqmember WHERE bugname='\

case 5:rs=stmt.executeQuery(\num,name,voltage,current,bugname,bugtime FROM eqmember WHERE butime='\

default:rs=stmt.executeQuery(\num,name,voltage,current,bugname,bugtime FROM eqmember WHERE num='\ } login_search_text.append(\查询结果:\\n\ login_search_text.append(\设备编号\设备名称\电压\电流\故障名称\故障时间\\n\ while(rs.next())//用于读取数据 { String num_search=rs.getString(\获得数据库第一列 String name_search=rs.getString(\ String current_search=rs.getString(\ String voltage_search=rs.getString(\ String bugname_search=rs.getString(\ String bugtime_search=rs.getString(\

login_search_text.append(num_search+\h+\ if((login_serach_index==1)||(login_serach_index==0)) { boolean com1=bugname_search.equals(\ boolean com2=bugname_search.equals(\ boolean com3=bugname_search.equals(\无\ if((!com1)&&(!com2)&&(!com3)) { bugaccu=bugaccu+1;//获得计数次数 }

如下为测试结果,可以看到该过程判断出累计的故障次数:

10

增加功能分析:

用户操作历史记录:

主要想法是在每次推出程序的时候将选项界面的文本区的数据读出后输入到文件中,用于需要记录所有的操作记录,就必须用到随机文件访问,每次可以访问到文件的尾部,然后写入新的数据,下面是具体代码:

try{

RandomAccessFile myRAFile=new RandomAccessFile(\ myRAFile.seek(myRAFile.length()); String FinalH=login_username;

FinalH=FinalH+login_change_data.getText()+\ myRAFile.writeUTF(FinalH); myRAFile.close(); }

catch(IOException e1){ System.out.println(e1); }

比较可惜,可能是随机访问的问题,读回的数据出现了少量乱码。

恢复数据功能:

本功能主要作用是在用户觉得本次使用程序对于数据库的更改不甚满意的话可以恢复数据到上一次关闭程序的状态。

主要想法是建立一个用于备份的数据表,在每次退出程序的时候都将该表的内容清楚后写入设备表的内容,当用户需要恢复时从备份的数据表读回即可。 关键代码如下: try

{ Connection con=DriverManager.getConnection(connectDB); Statement stmt=con.createStatement();

String querydl=\清空备份数据 stmt.executeUpdate(querydl); stmt.close();

11

con.close();

}catch(SQLException e2){ System.out.println(\ } try { Connection con=DriverManager.getConnection(connectDB); Statement stmt=con.createStatement(); String querybc=\ FROM eqmember\用于写入数据

stmt.executeUpdate(querybc); stmt.close(); con.close(); }

catch(SQLException e2){ System.out.println(\ }//备份用代码,恢复时只需进行你操作即可。

四、总结:

在本次JAVA设计中本人主要是担任数据库的编程任务,基本数据库的功能,比如添加、更新、删除,查询做得都比较完善,基本功能都可以实现。

在增强功能中,我较好地实现了数据库恢复的功能,可以让用户取消先前不满意的操作,比较遗憾的是我没能解决用户操作历史记录中乱码的问题,还需要进一步的研究。可能是在文件随机访问时产生的问题

参考文献:

【1】 Java程序设计(第二版) 辛运帏等编著 【2】 Java典型应用彻查1000例 贾蓉生等编著

12

本文来源:https://www.bwwdw.com/article/201w.html

Top