JAVA+SQL实训报告--工资管理系统(详细)
题 目:
系 别:
专 业:
学生姓名:
学 号:
指导教师:
日期:
摘 要
近年来,随着我国信息技术的飞速发展,计算机应用已逐渐渗透到各个领域。在企业管理领域内,计算机的应用已经十分广泛,各种管理机制与企业运作流程都与计算机紧密结合在一起,计算机的应用进一步完善了企业的管理,提高了企业的现代化管理形象。
开发职工工资管理系统的目的就是为了帮助财务部门能更好地管理本单位的职工工资,提高工作效率,实现职工工资信息管理的规范化和自动化。
本员工工资管理系统使用JAVA语言编写,采用SQL Server作为数据库,实现了一般工资管理系统对员工工资信息的浏览、删除、修改、查询和统计分析功能,节省了大量的人工操作的工作量,自动完成众多的信息处理,减少了数据出错的几率,加强了工资记录的安全性和完整性。
关键词:工资管理;统计分析;SQL Server;JAVA
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.2 概念结构设计
图3-10 员工实体
图3-11工资单实体
图3-12 统计分析实体
图3-13 工资管理系统E-R图
3.2.3 逻辑结构设计
在此工资管理系统数据库中设计了三个个表,分别为 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 |
0或1 |
表 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()取得Frame的ContentPane,初始化一个容器,用来在容器上添加一些控件
getContentPane().setLayout(null);
setSize(500, 350); --设置窗口的大小
setResizable(false);--设置窗体不可改变大小
setLocationRelativeTo(null);---窗口将置于屏幕的中央
以下是在窗口中创建组件JLabel、JButton、JTextField 、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 测试
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 统计分析界面
6 结论
在一个软件开发过程中,最重要的是需求分析,软件是给用户来使用的,所以用户就是上帝,如何合理有效地跟用户进行沟通,然后把需求与软件结合起来,最终形成一个确定的需求文档,这是最重要的。
在这次实训设计的过程中,更加深入了解了对分层设计思想的认识。从一开始的基层到业务逻辑层,然后通过监听器连接到界面上,最终成为一个满足需求的软件,这就是MVC开发模式。虽然一开始感觉到分层很复杂,但是做了几个类后,逐渐有了思路,也进一步加深了对java面向对象概念的认识。在这次项目中,我体会并感受到了一个项目开发的流程,除了在技术上有一定的提高以外,更重要的是形成了分层的思想与面向对象的思想。
参考文献
[1] 王珊.数据库系统概论(第5版).高等教育出版社,2014
[2] 耿祥义.Java2实用教程(第5版).清华出版社,2017
[3]白伟明. 实战突击Java项目开发案例. 电子工业出版社. 2015
附 录
部分源代码:
(1)DL()
(2)UI_2()
(3)UI_1()
(4)UI_2_IM()