王春辉 孙阳 黄耀烨 杨灵军 邱悦章 张文健 徐梦竹
摘 要: 为了让研究团队在内部更加方便地进行实验数据的输入、共享、导出等处理,在Windows 10操作系统下利用Java语言设计开发出一款数据管理类桌面应用程序软件。该软件分为登陆系统和功能系统两部分,满足了用户团队的基本需求,为他们对西北干旱荒漠化地区的区域环境研究提供了一定的技术支持。
关键词: 数据处理;桌面应用程序;Java
中图分类号: TP317 文献标识码: A DOI:10.3969/j.issn.1003-6970.2020.10.022
本文著錄格式:王春辉,孙阳,黄耀烨,等. 基于java的荒漠治理数据管理软件的设计与开发[J]. 软件,2020,41(10):9294+125
【Abstract】: In order to facilitate the research team to input, share, export and other processing of experimental data, a data management desktop application software is designed and developed by using java language under Windows 10 operating system. The software is divided into two parts: landing system and functional system, which meet the basic needs of the user team and provide some technical support for them to study the regional environment in the arid and desertification area of Northwest China.
【Key words】: Data processing; Desktop applications; Java
0 引言
西北干旱荒漠区位于国家生态安全格局“两屏三带”的北方防沙带,是国家“一带一路”的重点建设区域,由于该区干旱风大、植被退化、土地沙化严重,所以生态系统极其脆弱。为研究西北干旱荒漠区煤炭开发对区域生态影响规律,构建矿区受损生态系统恢复与重建技术体系,研究团队一直在当地收集数据并进行分析。本软件供科研团队内部使用,研究人员将使用科研仪器测得的数据进行输入、更新、管理、共享,实现对研究区域环境的检测,从而为改善当地环境,提高生态建设做出贡献。
1 开发技术概述
1.1 编程语言与开发环境
Java语言是一门基础的编程语言,具有面向对象、平台独立等多个优势,在软件开发中得到了广泛的应用。Java提供了丰富的工具包,方便了开发者的使用,增强了功能的设计。本软件采用Windows 10操作系统下的Eclipse作为开发平台,开发环境为JDK1.8。
1.2 开发的关键技术
(1)JavaFx
JavaFX是一个功能强大的图形和多媒体处理工具包,便于开发者来设计、创建、测试、调试和部署桌面应用程序。JavaFX的UI设计功能强大,可以通过纯Java代码进行UI界面的设计,也可以通过FXML语言进行设计,设计完成后编译为后缀为“fxml”文件供后端调用。FXML是基于XML的一种声明性标记语言,用来定义应用的用户口,后端通过声明相应控件的用户口与FXML文件中的控件进行配对,完成调用,大大增加了UI界面设计的方便性,简洁性和可视性[1]。
(2)Java Swing
Swing是一个Java设计的GUI工具包,是Java基础类的一部分,提供了许多优质的屏幕显示器件,如表、分割窗格等[2]。Swing使用纯Java代码写成,其组件采用MVC的设计,实现了GUI组件的显示逻辑和数据逻辑的分离,提供了更多的灵活性。
(3)Java POI
POI是“Poor Obfuscation Implementation”的首字母缩写,意为“简洁版的模糊实现”。它是用Java语言编写的免费开源的跨平台的 Java API,提供API给Java程式对Microsoft Office格式档案读和写的功能,允许开发成员使用Java程序创建、修改、显示和设计Microsoft Office文件[3]。
(4)MySQL数据库
MySQL是一个可用于各种流行操作系统平台的关系数据库系统,它具有客户机/服务器体系结构的分布式数据库管理系统,使用结构化查询语言(SQL)进行数据库管理[4]。本软件的开发初期,使用本地MySQL进行软件数据管理的调试,软件开发成功后,进行云端数据库的连接,使数据文件实现联网共享。
2 软件设计实现
本软件是一款面向科研团队内部使用的数据管理软件,分为登陆系统和功能系统两部分,软件流程图如图1所示。登陆系统中,用户注册成功后,即可登陆功能界面,若用户忘记密码,则可以通过注册邮箱和注册用户名找回密码。用户分为两类,一类为学生,主要负责数据的输入与更新;另一类为老师,老师通过负责课题的不同进行分类,主要负责数据文件的管理。功能系统中,用户登陆成功进入功能页面后,学生可以根据不同的课题进行相应的数据的输入和导出本地文件,并且可以查看自己输入保存的数据文件和对自己已经输入的数据文件进行更新。老师可以查看自己负责课题下的所有数据文件,并可以进行数据的更新,数据文件的删除和本地导出。
2.1 登陆系统
登陆系统分为三个部分,分别是用户注册、用户登陆、密码找回。三个子功能界面可以相互进行跳转。
(1)用户注册
用户注册需要填写以下信息:用户名、密码、确认密码、邮箱和身份。若注册用户的身份为老师,则需要对自己负责的课题进行选择,若为学生,则不需要。若注册信息出现不符合要求的填写,如:用户名重复、两次输入密码不一致等,会进行相应的提示。
(2)用户登陆
用户登陆需要填写以下信息:用户名和密码。通过对已经注册的信息进行检索,当用户名和密码一致时,用户登陆成功,同时把登陆成功的用户名传递到功能系统的主界面进行调用。当用户名和密码出现错误时,进行相应的提示。界面之间的传值使用了HashMap,首先在类中定义一个HashMap表用于存储用户名。当登陆信息无误时,将相应的用户名写入表中,并在功能系统读出保存的用户名,即实现了界面之间值的传递。
(3)密码找回
当用户忘记密码时,可以通过用户名和邮箱找回密码,并进行相应的提示。若用户名和邮箱也忘记时,可以通过管理员登陆数据库后台进行查看。
2.2 功能系统
功能系统中,根据用户身份的不同,用户在数据查看和功能使用上会有不同的权限。
(1)功能系统主界面
主界面起导航作用,其界面如图2所示。在界面的上半部分,输入你要创建的数据文件的文件名,输入数据文件拟定的行数和列数(行数和列数在数据文件输入界面可进行修改),选定数据文件属于的课题,点击“创建表单”即可完成创建并跳转到数据输入界面。在界面的下半部分,在文本框输入数据文件名称即可查看相应的数据。首先点击“查看数据文件”,界面右方的“Filenameob”表中会出现你有权查看的数据文件,然后将数据文件名填写到文本框中,点击“显示数据文件”,即可看到相应的数据。
(2)数据文件创建
创建文件成功后,点击“数据上传”将输入的数据上传到数據库,点击“数据导出”后可以将数据以“xls”为后缀的文件保存到本地。点击“增加一行”与“增加一列”,表格分别增加一行与一列。点击“删除该行”,表格将删除选定的行。点击“删除该列”,表格将删除最后一列。
(3)数据文件更新
查看数据文件时,可实现“数据文件创建”中所有的操作,从而实现对数据的更新。如果你是学生用户,在对数据进行添加、删除、修改等处理后,点击“数据更新”即实现对数据文件的更新。如果你是老师用户,在学生用户可进行操作的基础上上,点击“删除该文件”还可以实现对该数据文件的删除。数据文件查看界面如图3。
3 开发难点总结
在项目策划过程中,拟采用JavaFX进行所有界面的编写和后端的开发。项目开发过程中,发现JavaFX对于表格的创建不如Java Swing更适合本软件的开发,其不同在于有关数据表单的处理。JavaFX在数据显示方面更具方便性,但不便于创建空表单和数据输入。Java Swing可以使用Table控件的相关类动态地创建空表单和显示数据,并可以在空表格中自由地输入数据,更加适合本软件功能界面的开发。
3.1 数据本地导出
开发过程中,数据本地导出使用了两种方法。第一种是使用字符缓冲输出流BufferedWrite进行写操作,首先创建一个字符缓冲输出流对象,然后通过“write”方法将表格中的数据写到Excel表中,代码调试中,发现写出的文件为空文件,故放弃该种方法。第二种是使用POI,POI实现了其对象与Excel中元素的一一对应,“HSSFWorkbook”对应于Ecxel文件,“HSSFSheet”对应于Ecxel文件中的一张表,“HSSFRow”对应于表中的列,“HSSFCell”对应于表中的单元格。依次创建好相应的对象后,将表格中的数据通过“setCellValue”写入即可。除此以外,POI还提供了设置表格样式的方法,功能更加丰富[5]。 数据文件导出如图4所示。
3.2 动态表格的创建
JavaFX创建一个表格的方式有两种,一是通过FXML语言,创建 “TableView”控件,在对应的Controller类实现控件接口对接并且写入数据;二是通过纯Java代码,先编写一个表格控件,再填充数据。其缺点主要有三个方面:(1)若表格中不含有数据,则不会显示任何单元格。(2)只能通过定义表头来确定相应的列数,表格的行数会随着封装“TableView”的窗口的大小变化而变化。(3)无法随机地在任意单元格进行数据输入。而Java Swing中在创建表格方面,实现了上述需求。首先创建一个Jtable对象,然后给创建的Jtable对象绑定一个DefaultTableModel类。DefaultTableModel中提供了丰富的表格处理方法,可设置表格的行数和列数,简单方便地实现了动态表格的创建,实现了基本需求。如果要进行数据显示,则需要在行数和列数的基础上,创建两个相应大小的数据数组匹配表格的表头和数据。在数组中添加相应的数据,将数组绑定在创建DefaultTableModel对象中,即可实现数据可视化。
3.3 动态量数据的上传
本软件使用的是MySql数据库,在数据上传及数据更新时遇到两个主要问题。一是数据表的创建,因为列数是可以改变的,所以在数据库中创建数据表时无法通过一条通用语句实现。解决方式是先使用CREATE TABLE语句创建一个只有一列的数据表,然后根据表格的列数循环使用ALTER语句进行数据表的更新,每一次更新即添加一列,直到创建好相应的数据表。二是数据的上传,向MySql插入数据通常采用INSERT语句,但INSERT语句只能一行一行地插入数据且每一行的数据是固定的。当表格的列数改变时,INSERT语句中的数据个数不能匹配,会出现新增数据列的数据在数据库为空的情况。解决办法是使用ResultSet结果集,ResultSet向数据库插入数据时也是一行一行进行插入,与INSERT方法不同的是,ResuleSet可使用updateString方法对每一行中数据一个一个地进行写入而非一次性写入,实现了每一行数据量动态地改变[6]。在一行的数据写入完成后即插入本行数据到数据表,再进行下一行数据的更新,直到写入所有数据。
4 结束语
本软件较好地实现了数据输入、数据共享和数据导出等功能,满足了用户的基本需求。但还需要进一步的改进和完善:一是数据输入方面,在手动输入的基础上实现数据文件的导入;二是该软件仅支持在Windows 64位系统上运行,较为单一。下面将进行相应的完善,使软件的受众和应用更广[7]。
参考文献
[1]郭强. JavaFX中列表视图的应用与研究[J]. 数字技术与应用, 2018, 36(1): 106+108.
[2]葛萌, 欧阳宏基. JTable组件在Swing开发中的应用研究[J]. 信息技术, 2015(11): 80-82+86.
[3]刘新磊, 王琪琛, 邱天昱. 基于Java+POI的教师监考任务信息检索系统设计[J]. 电脑编程技巧与维护, 2018(12): 102-104.
[4]肖奇军, 郑达成, 方楷生, 等. 基于Java的家电维修应用软件设计和实现[J]. 机电工程技术, 2019, 48(11): 138-140.
[5]朱文君, 黄国权. 基于Java反射机制的POI实现Excel数据导入/导出[J]. 计算机时代, 2015(1): 38-39+47.
[6]王海文. 基于Java数组的JDBC ResultSet结果集处理的研究[J]. 硅谷, 2011(24): 103-104.
[7]张婉贞, 吴萃, 肖佳宇. 基于Java 程序的现代城市地铁查询系统设计[J]. 软件, 2016, 37(3): 47-50.