JAVA+SQL實訓報告--工資管理系統(詳細)java
題 目: sql
系 別: 數據庫
專 業: api
學生姓名: 安全
學 號: 網絡
指導教師: 數據結構
日期:併發
摘 要app
近年來,隨着我國信息技術的飛速發展,計算機應用已逐漸滲透到各個領域。在企業管理領域內,計算機的應用已經十分普遍,各類管理機制與企業運做流程都與計算機緊密結合在一塊兒,計算機的應用進一步完善了企業的管理,提升了企業的現代化管理形象。數據庫設計
開發職工工資管理系統的目的就是爲了幫助財務部門能更好地管理本單位的職工工資,提升工做效率,實現職工工資信息管理的規範化和自動化。
本員工工資管理系統使用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 |
100一、1001.... |
添加成功 |
數據庫中已有該員工信息 |
Test2 |
1十一、 、111... |
添加成功 |
有選項未填 |
Test3 |
1十一、1十一、1111... |
添加成功 |
添加成功 |
(3)測試刪除員工信息:點擊刪除按鈕後,查詢數據庫中是否已有該員工信息,有的話就將該條員工信息插入數據庫中,沒有的話就跳出提示框-數據庫中沒有該員工信息。
圖6-3 刪除員工信息界面
測試用例 |
輸入 |
預計輸出 |
實際輸出 |
Test1 |
1 |
刪除成功 |
數據庫中沒有該員工信息 |
Test2 |
1111 |
刪除成功 |
刪除成功 |
(4)測試修改員工信息:首先在員工編號選項中輸入員工編號進行查詢並將信息顯示在其餘選項中,點擊想要修改的內容並進行修改,修改完畢後點擊修改,則跳出提示框-提示成功修改員工信息。
圖6-4 修改員工信息界面
測試用例 |
輸入 |
預計輸出 |
實際輸出 |
Test1 |
1009 |
查詢成功 |
查詢成功 |
Test2 |
100九、1十一、1十一、… |
成功修改員工信息 |
成功修改員工信息 |
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()