JAVA+SQL实训报告--工资管理系统(详细)

时间:2024-02-24 16:01:06

 

 

 

JAVA+SQL实训报告--工资管理系统(详细)

 

 

 

 

   目:          

   别:            

   业:             

学生姓名:                

   号:            

指导教师:                 

 

日期:

 

 

 

 

 

 

 

 

  近年来,随着我国信息技术的飞速发展,计算机应用已逐渐渗透到各个领域。在企业管理领域内,计算机的应用已经十分广泛,各种管理机制与企业运作流程都与计算机紧密结合在一起,计算机的应用进一步完善了企业的管理,提高了企业的现代化管理形象。

  开发职工工资管理系统的目的就是为了帮助财务部门能更好地管理本单位的职工工资,提高工作效率,实现职工工资信息管理的规范化和自动化。

本员工工资管理系统使用JAVA语言编写,采用SQL Server作为数据库,实现了一般工资管理系统对员工工资信息的浏览、删除、修改、查询和统计分析功能,节省了大量的人工操作的工作量,自动完成众多的信息处理,减少了数据出错的几率,加强了工资记录的安全性和完整性。

 

 

关键词:工资管理;统计分析;SQL ServerJAVA

 

 

 

Abstract

 

   In recent years, with the rapid development of information technology in China, computer application has gradually penetrated into various fields. In the field of enterprise management, the application of computer has been very extensive. Various management mechanisms and enterprise operation processes are closely combined with computer. The application of computer further improves the management of enterprises and improves the modern management image of enterprises.

   The purpose of developing the employee salary management system is to help the financial department better manage the employee salary of the unit, improve the work efficiency, and realize the standardization and automation of the employee salary information management.

   The salary management system of the staff is written in Java language and SQL server is used as database. It realizes the functions of browsing, deleting, modifying, querying and statistical analysis of the salary information of the staff in the general salary management system, saves a lot of labor operation workload, automatically completes a lot of information processing, reduces the probability of data error, and strengthens the safety of the salary record And integrity.

 

Key words Salary management; statistical analysis; SQL Server; Java

 

   

 

引言 …………………………………………………………………………………3

1  问题定义………………………………………………………………………3

2  需求分析 ………………………………………………………………………4

2.1 功能定义 ……………………………………………………………………………5

2.2 参与者列表  …………………………………………………………………………5

2.3 用例图 …………………………………………………………………………………6

2.4 数据流图 ………………………………………………………………………………7

3  总体设计 …………………………………………………………………………7

3.1 系统分析 ……………………………………………………………………………7

3.1.1 类图 ………………………………………………………………………………7

3.1.2 序列图 ……………………………………………………………………………8

3.1.3 协作图 ……………………………………………………………………………9

3.2 数据库设计 …………………………………………………………………………11

    3.2.1 需求分析 ………………………………………………………………………11

3.2.1 概念结构设计 …………………………………………………………………11

3.2.2 逻辑结构设计 …………………………………………………………………12

3.2.3 物理结构设计 …………………………………………………………………14

3.2.4 数据库安全性 …………………………………………………………………15

3.2.5 数据库完整性 …………………………………………………………………15

3.2.6 数据库的备份和恢复 …………………………………………………………16

3.2.7 数据库的连接……………………………………………………………………16

4  详细设计 ………………………………………………………………………16

4.1 登录界面设计 ………………………………………………………………………17

4.2 系统管理员界面设计………………………………………………………………18

4.3 员工界面设计 ………………………………………………………………………20

5  测试 ……………………………………………………………………………21

5.1 黑盒测试 ……………………………………………………………………………21

6  结论……………………………………………………………………………………24

参考文献……………………………………………………

附录………………………………………………………

 

 

引言  

  随着计算机及网络技术的飞速发展,Internet应用在全球范围内日益普及,当今社会正快速向信息化社会前进,信息自动化的作用也越来越大。员工工资管理系统是现代企业管理工作不可缺少的一部分,是适应现代企业制度要求,推动企业劳动人事管理走向科学化,规范化的必要条件。

  本文主要介绍了员工工资管理系统的整个设计开发过程其主要系统功能包括以下几个模块:系统模块管理(包括登录、用户管理)员工管理(包括添加新员工信息、员工信息查询、员工信息维护)、工资组成项目(包括工资信息的添加、工资信息维护)员工工资的统计分析、退出。体现了清晰的员工工资管理流程 , 完成了基本的员工工资管理要求,是一个典型的信息管理系统。该系统大大地简化了操作流程,提高了企业的工作效率。

 

 

1  问题的定义

  员工工资管理系统是一个通用性较好的人事管理系统,具有运行速度快、安全性高、稳定性好的优点,可以作为企业员工工资管理部门进行工资管理的一种工具。本系统具备完善的员工工资档案管理功能,查询功能等功能。可方便的为企业完成员工工资信息管理员工考评管理等重要工作。

  通过使用员工工资管理系统,使企业的员工工资管理系统化、规范化、自动化、从而达到提高企业管理效率的目的。系统开发的总体任务是使办公人员可以轻松快捷地完成员工工资管理的任务。

  员工工资管理系统主要是对用户、员工、部门、岗位信息的查询,包括对用户信息的添加、修改和查询,系统还可查询员工基本信息,以及对工资项目组成、各级别工资情况的修改和维护。

 

 

 

2  需求分析

2.1 功能定义

 

 

 

 

2-1 工资管理系统层次图                                         

工资管理系统应完成以下功能:

员工信息管理: 实现对员工信息的输入、查询和修改如员工编号工作岗位部门姓名、性别、身份证号入职日期、民族、籍贯、现住址信息)。对于转出、辞职、辞退、退休员工信息的删除。

工资管理:员工工资分为两部分:一部分是基本工资,根据员工的工龄和岗位设置;包括对工资的查询和修改。

 工资规定

   基本工资:4.5k

   岗位:文员(+800行政),技术员(+2000),后勤(+200),会计(+1500财务),销售员(+2000),生产员(+800)

   工龄:不满1年(+0%),1年(+2%),2年(+5%),3年(+8%),3年+(+15%)

   工资=基本工资+岗位补贴+工龄补贴

③统计分析功能:统计当月所要核发的工资总金额,平均工资,以及最高和最低,最高-最低的工资金额。

2.2 参与者列表

  系统管理员对员工信息的管理,包括对员工信息的输入查询修改删除对于转出、辞职、辞退、退休员工信息根据员工的岗位补贴、工龄补贴,完成工资的核算并发放工资。③统计分析当月所要核发的工资总金额,以及最大和最低工资金额。

    员工:系统的主要使用者,登陆系统后,对自己的基本信息的查询和对自己工资的查询。

2.3 用例图

 

 

 

 

2-2 系统管理员用例图

 

 

 

 

 

 

2-3 员工用例图

 

 

 

 

 

 

2-4 工资管理系统用例图

 

 

2.4 数据流图

 

 

 

 

2-5工资管理系统数据流图

 

3  总体设计 

3.1 系统分析

3.1.1 类图

 

 

 

 

3-1 工资管理系统类图

3.1.2 序列图

 

 

 

 

3-2添加员工信息

 

 

 

 

 

3-3 修改员工信息

 

 

 

 

 

3-4 员工查看工资

 

 

 

 

 

 

3-5 统计分析

 

3.1.3 协作图

 

 

 

 

3-6 添加员工信息

 

 

 

 

 

 

3-7 修改员工信息

 

 

 

 

 

3-8 员工查看工资

 

 

 

 

 

3-9 统计分析

 

 

3.2 数据库设计

3.2.1 需求分析

通过对工资管理系统工作过程的内容和数据流图分析,设计如下面的数据项和数据结构。

①员工信息,包括的数据项有:员工编号、工作岗位、部门、姓名、性别、身份证号、入职日期、民族、籍贯、现住址信息等。

②工资单信息,包括的数据项有:员工编号,姓名,工资金额,工龄。

 

3.2.1 概念结构设计

 

 

 

 

3-10 员工实体

 

 

 

 

 

 

3-11工资单实体

 

 

 

 

 

 

3-12 统计分析实体

 

 

 

 

 

 

3-13 工资管理系统E-R图

 

3.2.2 逻辑结构设计

在此工资管理系统数据库中设计了三个个表,分别为 ygdata (员工信息表), gzdata( 工资单表 ),tjdata( 统计分析表 )其详细信息入下表:

 

根据设计好的E-R在数据库中创建数据表ygdata。如表1所示。

 

列名

  数据类型

  可否为空

说明

员工编号

char(15)

Not null

员工编号(主键)

姓名

char(10)

Null

姓名

性别

char(10)

Null

性别

身份证号

char(20)

Null

身份证号

入职日期

date

Null

入职日期

所在部门

char(20)

Null

所在部门

工作岗位

char(10)

Null

工作岗位

民族

char(10)

Null

民族

籍贯

char(20)

Null

籍贯

现住址

char(30)

Null

现住址

权限

Char(5)

Not null

01

1  员工信息表

 

 

根据设计好的E-R在数据库中创建数据表gzdata。如表2所示。

 

  列名

  数据类型

  可否为空

  说明

员工编号

char(15)

Not null

员工编号(主键)

姓名

char(10)

Null

姓名

基本工资

float

Null

基本工资

岗位补贴

float

Null

岗位补贴

工龄补贴

float

Null

工龄补贴

工资总金额

float

Null

工资金额

月份

Char(10)

Not null

月份(主键)

2  工资单数据表

 

 

 

根据设计好的E-R在数据库中创建数据表tjdata。如表3所示。

 

  列名

  数据类型

  可否为空

  说明

当前月份

char(15)

Not null

当前(主键)

最高工资

float

Null

最高工资

最低工资

float

Null

最低工资

平均工资

float

Null

平均工资

最高-最低

float

Null

最高-最低

所发总工资

float

Null

所发总工资

3 统计分析表

 

3.2.3 物理结构设计

使用DDL(Data definition language,数据定义语言)

1) 计算员工当月工资总金额

update gzdata

set 工资总金额=(select 基本工资+岗位补贴+工龄补贴

from gzdata

where 员工编号=\'1002\')

where 员工编号=\'1002\'

 

2) 显示所有员工信息

select * from ygdata WHERE 员工编号=\'num\'   order by 月份

 

3) 显示所有员工工资

select * from gzdata

 

4) 查询员工信息

select * FROM ygdata WHERE 员工编号=\'b_1\'

 

5) 查询员工工资

select * FROM gzdata WHERE 员工编号=\'b_1\' and 月份=\'b_2\'

 

6) 添加员工信息

insert

into ygdata values(\'b_1\',\'b_2\',\'b_3\',\'b_4\',\'b_5\',\'b_6\',\'b_7\',\'b_8\',\'b_9\',\'b_10\',\'b_11\')

 

7) 添加员工工资

insert into gzdata values(\'b_1\',\'b_2\',\'b_3\',\'b_4\',\'b_5\',\'b_6\',\'b_7\');

 

8) 删除员工信息

DELETE FROM ygdata WHERE 员工编号=\'b_1\'

 

9) 删除员工工资信息

DELETE FROM gzdata WHERE 员工编号=\' b_1 \'and 月份=\'b_2\'

 

3.2.4 数据库安全性

数据库的安全性是指保护数据库,以防止不合法的使用所造成的数据泄漏、更改或破坏。由于数据库中存放关在量的重要数据,并且为各种用户所共享,数据的安全显得格外重要。在一般的计算机中,安全措施是逐级设置的:

数据库的安全控制的一般方法有:用户标识和鉴定,存取控制,审计,数据加密,视图的保护。本系统采用用户标识和鉴定,存取控制通过进入本系统必须输入账号与密码从而识别所拥有的权限。

 

3.2.5 数据库完整性

由数据库管理的完整性约束和数据库触发器来实现。

 

3.2.6 数据库的备份和恢复

为了保证数据库在遭受意外或有意外破坏的情况下,系统得以恢复,系统需要设置备份功能。数据库的恢复使用转储方法进行。

 

3.2.7 数据库的连接

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

System.out.println("加载驱动成功!");

Connection con = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;DatabaseName=db_gz","sa","123456");

System.out.println("连接数据库成功!");

 

Class.forName是用来动态加载和创建Class对象

获取连接数据库的Connection对象

 

数据库连接及操作类一般包含连接数据库的方法getConnection()、执行查询executeQuery()、执行更新操作的方法executeUpdate()、关闭数据库连接的方法close()。

 

 

4  详细设计

4.1 登录界面设计

登录模块是工资管理系统的入口,在运行本系统是首先经过登录界面的验证,输入正确的用户名和密码才可登录到系统中,通过用户与密码的验证保证了数据的安全,并且通过该用户所拥有的的权限打开不同的界面。

1)在DL()类中,导入所需的类包,关键代码如下:

       import java.awt.EventQueue;

import java.awt.GridLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.Statement;

import javax.swing.ImageIcon;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

import javax.swing.JPasswordField;

import javax.swing.JTextField;

 

 

2)定义一个GL类继承JFrame类,再定义一个构造函数,设计好登录窗体的布局,字符的显示方式,窗体大小等

对窗口的属性进行修改

setTitle("工资管理管理系统");     

getContentPane()取得FrameContentPane,初始化一个容器,用来在容器上添加一些控件

getContentPane().setLayout(null);  

setSize(500, 350); --设置窗口的大小

setResizable(false);--设置窗体不可改变大小

setLocationRelativeTo(null);---窗口将置于屏幕的*

 

  以下是在窗口中创建组件JLabelJButtonJTextField JPasswordField

final JLabel label_1 = new JLabel();   //final 以防任何继承类修改它的含义

label_1.setText("账号:");

label_1.setBounds(130, 60, 53, 27);

getContentPane().add(label_1);

 

final JLabel label_2 = new JLabel();

label_2.setText("密码:");

label_2.setBounds(130, 110, 53, 27);

getContentPane().add(label_2);

 

final JTextField zh= new JTextField(10);

zh.setBounds(180, 60, 180, 27);

getContentPane().add(zh);

 

final JPasswordField mm= new JPasswordField(15);

mm.setBounds(180, 110, 180, 27);

getContentPane().add(mm);

 

final JButton button = new JButton();

button.setText("登录");

button.setBounds(110, 200, 100, 30);

getContentPane().add(button);button_1.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e){}}

这个函数是为按键button_1设置一个监听函数

 

3)登录时进行用户密码的验证是在数据库中完成的,通过查询数据库的operator里的字段是否匹配,登录验证才能成功。在Database类中创建验证的方法。关键代码如下:

try{

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

System.out.println("加载驱动成功!");

Connection con = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;DatabaseName=db_gz","sa","123456");

System.out.println("连接数据库成功!");

Statement stmt_1=con.createStatement();

Statement stmt_2=con.createStatement();

String sql_1 = "select * FROM ygdata WHERE 员工编号=\'"+ user +"\' and 员工编号=\'"+password +"\'" ;

String sql_2 = "select * FROM ygdata WHERE 员工编号=\'"+ user +"\' and 权限=\'1\' ";

ResultSet rs_1=stmt_1.executeQuery(sql_1);

ResultSet rs_2=stmt_2.executeQuery(sql_2);

if (rs_1.next()) {

JOptionPane.showMessageDialog(this, "成功登录", "提示",JOptionPane.INFORMATION_MESSAGE);

this.dispose();

if (rs_2.next()) {

// 如果数据校验成功,显示系统管理员界面

UI_2  ui_2=new UI_2();

}

else {

// 否则,显示员工界面

UI_1  u=new UI_1(user);  

}}

else {

JOptionPane.showMessageDialog(this, "帐号或密码错误!", "警告",JOptionPane.WARNING_MESSAGE);

mm.setText("");

zh.requestFocus();   // 密码框选中

}}

catch(Exception e){

e.printStackTrace();

System.out.println("连接数据库失败!");

}

 

 

4.2 系统管理员界面设计

系统管理员界面设计了四个按钮(分别是管理员工信息、管理员工工资信息、统计分析以及退出系统)

UI_2()类中定义,关键代码如下

首先在窗口中创建组件四个JButton设置他们的基础属性(窗口名称,大小)。以及通过addActionListener(new ActionListener()设置按钮的监听函数

final JButton button = new JButton();    //定义一个JButton对象

    button.setText("管理员工信息");   //设置窗口属性

    button.setBounds(175, 30, 150, 50);  //设置窗口大小

getContentPane().add(button);     //向容器中添加该按钮

当用户选择一个菜单时,会引发一个动作事件,需要给每个菜单项添加监听器,重写ActionListener接口中的actionPreformed()方法。例如:

    button.addActionListener(new ActionListener(){    //设置该按钮的监听函数

    public void actionPerformed(ActionEvent e) {

     dispose();    //关闭该窗口

     UI_2_IM  UI2=new UI_2_IM();    //定义一个UI_2_IM的对象

    }});

    

以下的代码格式和第一个按钮的定义差不多

   

    final JButton button1 = new JButton();

    button1.setText("管理员工工资信息");

    button1.setBounds(175, 120, 150, 50);

    getContentPane().add(button1);

    button1.addActionListener(new ActionListener(){

    public void actionPerformed(ActionEvent e) {

     dispose();

     UI_2_GZ  UI2=new UI_2_GZ();

    }});

    

    

    final JButton button2 = new JButton();

    button2.setText("统计分析");

    button2.setBounds(175, 210, 150, 50);

    getContentPane().add(button2);

    button2.addActionListener(new ActionListener(){

    @Override

    public void actionPerformed(ActionEvent e) {

     dispose();

     UI_2_FX u=new UI_2_FX();

    }});

    

    final JButton button4 = new JButton();

button4.setText("退出系统");

button4.setBounds(175, 300, 150, 50);

getContentPane().add(button4);

button4.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e) {

dispose();

}});

 

4.3 员工界面设计

员工界面设计了三个按钮(分别是查看个人信息、查看工资信息以及返回登录界面)

UI_1()类中定义,关键代码如下

首先在窗口中创建组件四个JButton设置他们的基础属性(窗口名称,大小)。以及通过addActionListener(new ActionListener()设置按钮的监听函数

final JButton button = new JButton();  //定义一个JButton对象

    button.setText("查看个人信息");     //设置窗口属性

    button.setBounds(175, 30, 150, 50);  //设置窗口大小

getContentPane().add(button);   //向容器中添加该按钮

当用户选择一个菜单时,会引发一个动作事件,需要给每个菜单项添加监听器,重写ActionListener接口中的actionPreformed()方法。例如:

    button.addActionListener(new ActionListener(){   //设置该按钮的监听函数

    public void actionPerformed(ActionEvent e) { 

     dispose();   //关闭该窗口

     UI_1_xinxi u=new UI_1_xinxi(1,num);   //定义一个UI_2_IM的对象

    }});

    

以下的代码格式和第一个按钮的定义差不多

    

    final JButton button1 = new JButton();

    button1.setText("查看工资信息");

    button1.setBounds(175, 130, 150, 50);

    getContentPane().add(button1);

    button1.addActionListener(new ActionListener(){

    public void actionPerformed(ActionEvent e) {

 

     dispose();

     UI_1_xinxi u=new UI_1_xinxi(0,num);

    } });

    

    final JButton button4 = new JButton();

button4.setText("返回登录界面");

button4.setBounds(175, 230, 150, 50);

getContentPane().add(button4);

button4.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e) {

dispose();

DL d=new DL();

d.setVisible(true);

}});

    

 

 

 

测试

5.1 黑盒测试

 

 1)测试登录:当数据库中无此登录信息时,显示账号或密码错误,否则登陆成功。

 

 

 

 

 

 

 

 

 

 

 

6-1 登录界面

 

测试用例

输入

预计输出

实际输出

Test1

111

登陆成功

账号或密码错误

Test2

  

登陆成功

账号不能为空

 

 

 

2)测试添加员工信息:当有选项为空时,跳出提示框-有选项未填;否则查询数据库中是否已有该员工信息,有的话就跳出提示框-数据库中已有该员工信息,没有的话就将该条员工信息插入数据库中

 

 

 

 

6-2 添加员工信息界面

 

测试用例

输入

预计输出

实际输出

Test1

1001、1001....

添加成功

数据库中已有该员工信息

Test2

111、 、111...  

添加成功

有选项未填

Test3

111、111、1111...

添加成功

添加成功

 

 

3)测试删除员工信息:点击删除按钮后,查询数据库中是否已有该员工信息,有的话就将该条员工信息插入数据库中,没有的话就跳出提示框-数据库中没有该员工信息。

 

 

 

 

6-3 删除员工信息界面

测试用例

输入

预计输出

实际输出

Test1

1

删除成功

数据库中没有该员工信息

Test2

1111  

删除成功

删除成功

 

 

4)测试修改员工信息:首先在员工编号选项中输入员工编号进行查询并将信息显示在其他选项中,点击想要修改的内容并进行修改,修改完毕后点击修改,则跳出提示框-提示成功修改员工信息。

 

 

 

            6-4 修改员工信息界面

 

 

测试用例

输入

预计输出

实际输出

Test1

1009

查询成功

查询成功

Test2

1009、111、111、…

成功修改员工信息

成功修改员工信息

Test3

 

 

 

 

 

 

 

 

(5)至于员工工资信息管理的操作也跟员工信息管理的操作差不多,基本上逻辑都是一样的,就除了所管理的信息内容有所差别,以下是二者的比较:

 

 

 

6-5员工工资管理界面

 

6)测试统计分析:统计分析的内容并不多,就是将工资的最大、最小、最大-最小、平均工资等信息显示在表格中,也没有什么好测试的。

 

 

 

6-4 统计分析界面

 

 

结论

在一个软件开发过程中,最重要的是需求分析,软件是给用户来使用的,所以用户就是上帝,如何合理有效地跟用户进行沟通,然后把需求与软件结合起来,最终形成一个确定的需求文档,这是最重要的。

在这次实训设计的过程中,更加深入了解了对分层设计思想的认识。从一开始的基层到业务逻辑层,然后通过监听器连接到界面上,最终成为一个满足需求的软件,这就是MVC开发模式。虽然一开始感觉到分层很复杂,但是做了几个类后,逐渐有了思路,也进一步加深了对java面向对象概念的认识。在这次项目中,我体会并感受到了一个项目开发的流程,除了在技术上有一定的提高以外,更重要的是形成了分层的思想与面向对象的思想。

 

 

 

 

 

参考文献

[1]  王珊.数据库系统概论(第5版).高等教育出版社,2014

[2]  耿祥义.Java2实用教程(第5版).清华出版社,2017

[3]白伟明. 实战突击Java项目开发案例. 电子工业出版社. 2015

 

 

 

 

 

部分源代码:

1)DL()

 

 

 

 

2UI_2()

 

 

 

 

3UI_1()

 

 

 

 

4UI_2_IM()