基于Java实现(GUI)职员工作量管理系统

工作量统计系统

课程名称Java 面向对象程序设计大作业
题 目工作量统计系统
专业班级
姓 名
学 号

一、概述

在本次专业课实践中我选取到的题目为员工工作量统计系统。该系统分为三个模块,一是实现员工的登录,二是进入到员工的个人界面,并显示,输出员工的个人信息,同时还可以进行输入。第三个模块,则是进入到员工的个人考核界面,对输入的数据进行计算和考核,最终输出结果。因此,在设计程序时,我将程序的 UI 界面设计成了三部分,一是登录所需要的 UI,二是员工个人需要的 UI,三则是考核界面的 UI。然后再设计一个 Worker 类来储存员工的各类信息,然后设计各种计算工作量的类。组成了程序的基本模块。开发环境的选择,则选择了 idea。

二、程序概要设计

程序的总功能模块

程序结构设计以及关键功能

在设计程序时,我为程序设计了 3 个 GUI 类,一个储存信息的员工类,以及 4 个计算类,用来计算不同的系数。首先,将实例化好的员工类用 ArrayList 集合类储存,首先,用户登录正确的账号和密码,进入到员工个人界面后,再填写相应的数据,添加成功之后,进入考核界面,考核界面会显示当前所有需要计算的数据。然后点击计算,会判断考核是否通过,最后导出数据到 Excel 表格。

关键类

MainUi主界面登录菜单 GUI 界面
WorkerUi员工个人信息 GUI 界面
SoureUi考核绩效 GUI 界面
CoutY1计算系数 Y1
CoutY2计算系数 Y2
CoutY3计算系数 Y3
CoutY4计算系数 Y4
Worker员工类 在主页面用 ArrayList 储存

关键方法

MainU().login()位于 Mainui 中的登录方法
actionPerformed(ActionEvent e)监听窗体动作 完成事件相应的方法

三、程序详细设计

主界面进行登录

GUI 设计

因为在主登录界面中,需要提供用户图形化界面进行数据的输入和按钮的监听,所以我将 MainUi 类继承了 JAVA.swing 类同时调用了 ActionListener 监听器的接口。这样可以更方便的去调用和重写一些方法。然后则是通过 Jlabel 和 JTextFiled 和 Jbutton 去填写相应的登录信息和所需要的的按钮,然后分别添加到 Jpanel 容器中,最后再添加到窗口中。

登录信息的判断

在设计好登录界面后则需要对里面的监听器按钮进行具体的信息判断,在点击登录之后.通过 ActionListener 的 ActionPerformed 方法对事件进行监听,对账户的登录名和密码进行匹配,若正确则进入到 WorkerUi 界面,同时,向 WorkerUI 中传入匹配到的员工信息类,同时标记该员工信息类,以便后续数据的调用。

进行用户登录信息的匹配

在向集合类 b 添加了实例化的 Worker 类之后,通过 for 循环遍历该集合类,当获取到与文本框中 id 输入一致的 worker 类后,返回该类,再继续在 ActionListener 监听器中进行账号与密码的匹配,若没有一致的账号 id 则返回 null,GUI 界面显示该账号不存在。

登录进入员工信息界面

从 MainUI 中实例化一个新的 WorkerUI 类,并将传入 workerUI

设置 GUI 设置 gui 界面同时传参

在通过 WorkerUi 的构造方法,将 Mainui 的 worker 员工信息类传入到 WorkerUi 中,就完成了数据的转移,这时就可以在 WorerUi 调用显示相关的数据。如显示出用户的 id 号和姓名等等。

设置监听器让用户输入添加考核相关的数据

当用户点击添加信息时,监听器会对文本框进行判定,只有三个文本框判定结果皆为非空,则会将文本框的三个值赋值给 worker 类,当设计程序时,我遇到了困难,那便是 Jtextfiled 属于 String 类型,但是需要将 Jtextfiled 赋值的类型却属 int 类型,所以需要调用 Integer 类中的 parseInt(String x)方法。将 String 类型转换为 int 类型。接着,就会将文本框的上输入的相关数据赋值到获得的员工信息类上,接着点击“绩效查询”,便会实例化一个新的 Worker 类,新生成一个新的 GUI 界面,在实例化的同时还会传入当前的 Worker 工人信息类作为参数,为后续的考核界面做准备。

进入员工考核界面

进入员工考核界面并显示相关考核信息

因为要显示员工各个模块的具体信息,所以我采用了 Java 中 Swing 组件的 Jtable 去构造一个相关信息的表格,在实例化 Jtable 之后,去往其中传入一个二维数组,在制作表格的时候,我也遇到了一点小问题,那便是关于表格中的数据类型的选择,因为一个员工的属性即具有 int 整形类型,也具有 double 浮点类型,String 字符串型。所以在存放 Jtable 时,我选择了 Object 类作为数据类型,Object 是所有类的父类,那么最大的一个好处就在于:利用 Object 类可以接收全部类的对象(因为向上自动转型)。这样就可以在 Jtable 中存放员工各类的数据。

计算员工的各个考核系数

在完成表格的制作之后,则需要在表格中显示员工的四个工作系数,所以我分别 4 个不同的计算员工工作量的类,在制作 Jtable 的时候,同时将这些计算的类实例化,并调用里面的计算方法,将从 workerUI 中获取到的 worker 员工信息类的属性作为参数。计算相应的工作量。最后返回相应的数据。

计算考核工作量并显示结果

同样是利用监听器中的 actionPerformed 方法,当点击计算按钮时,则会调用该类中的 jud()方法。判断数据是否达标,若不达标,则会通过 showMessageDialog 提示报警信息,并调用 add()方法提示当前还差的工作量。反之则会显示通过。

将员工的数据导入到 Excel 表格

同时是先获取到从 WorkerUI 中获得的员工信息类,获取到之后,我通过 Java 中 poi 的 HSSFWorkbook 类来制作表格。之后则是添加表头,设定表格样式,然后便可以想表格添加相应的数据,最后则通过输出流导出到 Excel 中。在设计好导出方法后,在监听器中添加一个导出的响应事件。点击该导出按钮,则会进行数据的导出。

疑难问题的解决

  • 如何完成不同 GUI 界面中数据的传输
    在 GUI 界面中进行数据的传输,这是在这次大作业中,我所遇到的最大的问题,一开始由于初次接触 Java 的 GUI,我不是很适应将 Java 中类的数据传递和图形界面结合在一起,再加上题目要求的员工具有如此多的属性,还要将数据分别代入进行计算工作量的计算。再加上一开始对于整体的题目框架没有做好足够的分析,写到哪里算哪里,导致后续的程序也有些臃肿。一开始,我设计了三个 GUI 界面,但是我的思维没有转过弯来,以为三个界面的 GUI 是彼此独立的,所以没有想到在实例化的时候,去往新的 UI 界面附带一个参数,这个参数便是 Worker 员工信息类,而是将所有的调用资源的方法全部集中在了 MainUi 中,导致程序会出现 bug,在编写程序到中期的时候,我同时也重温了自己在上学期学习的 Java 基础知识,我才想到了可以将在实例化新 GUI 界面时,可以去编写构造方法,然后传参,将自己存储信息的类作为参数不断传递,这样的话,就可以完成数据之间的传递了。

  • 如何完成数据的导出
    在思考如何将程序导出外部的 Excel 表格时,我也遇到了问题,因为将数据导出到外部 Excel 表格的话,需要引用第三方的 jar 包,利用 poi 中的 HSSFWorkbook 对象来新建一个 Excel 文件,并对数据进行导出,所以我在网上下载了第三方的 jar 包并导入,通过 arraList 存储对象,并进行数据的编写和导出.
  • 数据存储的选择
    因为 Worker 员工信息类具有非常多的属性,而且一个系统中可能会有多个员工信息,采用数组储存会非常的麻烦,所以我采用了 ArrayList 集合类,一种有序列表,去对员工类进行数据的存储,因此,在实例化了员工类之后,再将该员工类添加到该 ArrayList 中,该集合类不仅会自动扩容,还可以通过该列表自带的 add(),get()等方法去获取需要的员工信息类,进而调用相关的数据。

四、程序测试

登录界面和异常处理

用户名或密码错误

用户不存在错误

员工个人界面

信息的添加和异常处理

员工考核界面

数据的导出 Excel

在登录界面需要输入正确的 id 和密码,如果检测到文本框空则会报错,同时检测到该用户不存在,也会报错提醒,检测账号。

在进入到员工个人信息界面后,也要进行相应的数据补充,才可以进入到绩效考核界面,要不然程序也会抛出异常并显示提醒。

在进入到员工考核界面后,就可以进行相应的功能操作了

五、小结

在完成了程序的编写之后,该程序的优点应该是基本符合题目要求,并且在此基础上实现了扩展的功能,比如可以将数据导出到外部的 Excel 文件当中,采用 ArrayList 集合类去存储数据。但是程序的缺点也非常的明显,一开始没有详细为程序的结构和框架做好规划,以及不懂得如何将数据进行传递和调用并且和 GUI 界面结合在一起。导致后面即使想到了更好的设计方法,也使得程序变得非常臃肿,可读性差,没有将一些类去划分,而是集中在一个 UI 界面,同时代码的命名为了自己的方便不够规范,这在未来的开发都是十分致命的,即使最后编写出了程序,程序的可扩展性也会非常差。所以,通过这次的大作业的练习。我重新锻炼了自己 Java 中面向对象的思维,其实 Java 中的 GUI 图形界面,本质和我日常编写的类没有任何区别。它只是让我更加方便开发的工具,通过实例化 Swing 中各种各样不同的组件类,再像平时一样向这些实例化的组件去添加数据,放置参数,本质都是一样的,不需要去考虑内部,只需要去考虑如何调用,就可以编写出图形界面。同时,通过思考扩展功能的实现,我也学会了去引用 jar 包让程序实现更多的功能,提高了自己的代码能力,在未来的学习中,我一定会加强自己在设计结构上的思维能力,提高自己代码命名规范,进一步提高自己的能力

参考文献

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神仙别闹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值