JavaFX之班级未交作业统计

时间:2019-09-01
本文章向大家介绍JavaFX之班级未交作业统计,主要包括JavaFX之班级未交作业统计使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

前言

  最近转移了系统平台,用上了Ubuntu1804版本系统,原来用C#写的Windows窗体软件也不能用了,而且自己在班级上每周都需要收作业,所以写了这个软件。这篇博客主要记录这个JavaFX应用的编写过程以及怎么使用,并且不会涉及代码。代码部分在github上面,并且都有详细的中文注释,希望这篇博客能为喜欢JavaFX的伙伴提供一些参考资料。本程序涉及的知识点有一些基础组件和布局的使用,组件用到Label,Button,布局用到StackPane,BorderPane,GridPane,VBox,ScrollPane,还有Excel文件的读取。这个应用程序是使用的MVC模型设计的(这个简单程序没有用到模型model),使用的JDK版本是1.8,使用maven管理项目,IDE使用的是IntelliJ Idea。如果喜欢请帮我Mark个Star,Github链接地址:https://github.com/quanbisen/homeworkstatistic

内容

  内容我把它分为五部分:

  1. 逻辑分析
  2. 功能需求
  3. UI设计
  4. 逻辑处理
  5. 软件测试

  1. 逻辑分析

  在一般情况下,班级每一次的作业都会建立一个文件夹存放每一位同学提交的作业(word文件或文件夹),而且每一位同学提交的文件命名都是有规定的格式,我们老师要求是专业班级+学号+姓名,例如计科16409小涵,其中“计科164”是专业班级,“09”是班级内的学号,”小涵“是姓名,学号在这个班级里是唯一的。这样,要做一个未交作业统计就只需要列出存放作业文件夹内的所有文件或文件夹,然后根据学号与班级的名单进行比对即可得出未交作业的同学,最后把未交作业的同学名单存到作业文件夹的一个.txt文件中即可。

  2. 功能需求

  根据逻辑分析,功能需求应该要有以下:

  • 提供班级名单的导入
  • 提供作业的目录选择
  • 提供统计结果的显示
  • 提供统计结果的保存
  • 提供业务逻辑的提示

  3. UI设计

   整个程序需要用到的组件不多,针对需要做业务逻辑的提示,所以根容器选用了StackPane,在StackPane最低下放置程序的主界面布局GridPane,当需要进行业务逻辑的提示时,就往StackPane上面添加一个Label组件显示业务逻辑的提示信息,提示信息其实是通过播放淡出Fade动画实现的,在动画播放完成后需要把这个提示信息的Label移除,所以主界面的设计主要是设计在GridPane容器上。

  针对功能需求中的班级名单导入和作业目录选择,可以为班级名单导入和作业目录选择各占GridPane的一行,每一行都有各占GridPane的三列,第一列使用Label组件作为提示,第二列使用TextField组件作为选择的路径显示(TextField组件是输入文本框,可以自己输入路径),第三列使用带图片的Label作为路径选择的按钮。设计的效果如下图所示:

   针对功能需求中统计结果的显示和保存,可以为统计结果显示和保存各占GridPane的一行。统计结果的显示占GridPane的三列,第一列使用Label组件作为提示,第二列使用了一个ScrollPane容器包裹VBox容器作为统计结果的显示(有多少位同学没交就往VBox容器添加多少个Label组件作显示),第三列使用了一个Button组件作为统计的触发按钮;统计结果的保存只需要使用一个Label组件设置一些背景样式,占据GridPane的一行,因为这个Label占据了一行,为了居中显示美化,在fxml文件中指定了这一列占据GridPane的三列(GridPane.columnSpan="3")。设计的效果如下图所示:

  程序的最终主界面如下图所示:

  4. 逻辑处理

  整个程序的逻辑处理很简单,可分为四步,分别为选择班级excel文件、选择班级作业目录、进行作业统计和统计完成后进行保存。整个程序的操作流程可用下图描述:

  4.1 选择班级excel文件

  选择班级excel文件的目的是使程序获得班级名单进行匹配的数据源,这个操作的逻辑处理只是获取文件的句柄,并不涉及读取,读取在后面进行统计的时候再执行。所以这一步的需要用到的知识点只有JavaFX文件选择对话框的使用(FileChooser)以及文件选择完成后对TextFiel组件的文本更新操作。具体的流程图如下所示:

  4.2 选择班级作业目录

  选择班级作业目录的目的是可以列出目录下的上交作业来作比对统计,它和选择班级excel文件的逻辑处理大致相同,只是换成了使用JavaFX目录选择对话框(DirectoryChooser),而且不需要设置其它的文件筛选器这些,只需要设置标题方便理解就可以了。在选择了目录后更新TextField组件的文本信息。具体的流程操作如下所示:

  4.3 作业统计

  作业统计是本程序设计的核心,它需要完成的逻辑处理有对选择的excel文件读取、对作业目录下的文件或文件夹进行学号提取、把excel文件读取的班级学生名单学号和作业目录下的文件学号进行比对贴“未交”标签和对贴了“未交”标签的学生进行GUI显示。具体的流程图如下所示:

  • excel文件读取

  excel文件的读取需要用到第三方包,分别是commons-collections-3.2.1、org.apache.poi-3.6、org.apache.poi-ooxml-3.6和org.apache.poi-ooxml-schemas-3.6,详见maven的配置文件pom.xml中的dependencies标签,这里需要注意的是不同版本的包读取excel文件的方法会有差异。读取的逻辑处理可以用以下流程图描述:

  • 作业目录下的文件或文件夹学号提取

  学号提取是根据文件有固定的命名格式,提取文件夹下面的所有学号字符串,如计科16409小涵,只需要提取从第四个字符开始到第六个字符结束即可得到所需的学号信息。其大致的逻辑处理可用以下流程图描述:

  • 学号比对贴标签

  学号比对贴标签还需要把读取到的excel文件行集合提取学号和姓名存储到map数据集,组成<Key,Value>映射,其中Key为学号,Value为姓名。然后使用map中的keySet数据集与目录下的文件提取的fileKeySet进行比对。其大致的逻辑处理可用以下流程图描述:

  • GUI显示贴了“未交”标签的学生

   GUI显示贴了“未交”标签的学生是为贴了标签的学生的信息创建一个Label组件,然后添加到VBox容器即可,最后还有一个提示多少人未交。其大致的逻辑处理可用以下流程图描述:

  4.4 保存

  保存是把VBox容器中的Label信息存储到作业目录下的.txt文件即可。首先创建.txt文件,然后取出VBox容器的组件,遍历提取组件信息写入文件,最后提示文件写入成功。其大致的逻辑处理可用以下流程图描述:

  5. 软件测试

  测试部分这里只列举功能部分测试,UI提示部分就不一一展示了。测试的班级Excel文件内容如下图所示:

  作业文件夹下的文件如下图所示:

  其中学号为04、06和07的同学未交作业。

  下面运行程序,选择班级excel文件路径和作业目录,单击“统计”按钮得到统计结果。

  最后单击保存把信息存储到“未交作业名单.txt”

原文地址:https://www.cnblogs.com/quanbisen/p/11441830.html