目
录
一、系统开发概述… 1
二、系统规划… 1
三、需求分析… 2
3.1 用户需求说明… 2
3.1.1 数据需求… 2
3.1.2 事务需求… 2
3.2 系统需求说明… 2
四、数据库逻辑设计… 2
4.1 ER图… 2
4.2 数据字典… 2
4.3 关系表… 2
五、数据库物理设计… 2
5.1 索引… 2
5.2 视图… 2
5.3 安全机制… 2
六、应用程序设计… 3
6.1 功能模块… 3
6.2 界面设计… 3
6.3 事务设计… 3
七、测试和运行… 3
八、总结… 3
附. 参考文献… 3
一、系统开发概述
项目背景:
随着科学的进步,一些公司不断发展壮大,急需一套完整的企业工资管理系统,帮助公司的财务管理部部门提高效率,实现企业工资管理的系统化、规范化和自动化。越来愈多的人力资源投入也是对于日益扩大的公司一种很大的限制,企业成本也需降低。
编写目的:
1.对数据库技术有了初步的理解和具体的应用,对于数据库的知识需要具体的加以应用,将知识系统化。
2.考察数据库分析创建能力,锻炼团队团结合作意识。
系统实现的意义:
信息时代计算机技术的发展给整个社会的生活、工作方式带来了一次革命。传统意义上的企事业工资管理的形式和内涵都在发生着本质的变化。以前那种一个会计、一个帐本的工资管理形式已经被计算机及财务软件所代替。计算机以及相关软件的介入使得企事业的工资管理变的科学化、透明化、简单化。因此,根据不同企事业的自身特
点开发适合自己的工资管理软件是非常有必要的。本文设计的指导思想是一切为用户着想,界面简洁,操作尽量简单明了。
二、系统规划
设计任务:
任务选题:企业篇之员工工资管理系统(涉及:部门信息、员工信息、工资信息、津贴、加班工资、代扣款项等实体。)
需求分析(课题组成员通力合作,力求需求分析的全面、有效!)。
数据库设计(数据涵盖系统的数据需求,关系模式均达到3NF,性能优化自己思考)。
数据完整性(分析关键表中的关键数据,制定自己的完整性约束规则!)。
安全性(必须具有基本的用户及其权限的控制手段!)。
视图(从操作的方便性、数据的安全性、数据的逻辑独立性等方面综合考虑!)。
触发器(根据对应用的理解,是否采用触发器?带来的好处?)。
存储过程(在充分理解系统业务处理的前提下,作出自己的判断,要运用得当!)。
索引(需结合数据量的估算、应用的特点等,做出合理的设计)。
系统功能(在需求分析的基础上尽可能全面一些!)。
用户界面友好性(多从用户的角度考虑!)
要求:
分组:按课题组方式开发,每组3~4人,组长一名,角色划分、任务分配。
数据库平台:Oracle、MS SQL Seiver、MySQL.
开发平台:NET、J2EE、PHP.
软件架构:B/S、C/S.
软件环境及工具:
软件架构: C/S.
开发工具:Eclipse, sql sever2008
三、需求分析
3.1 用户需求说明
3.1.1 数据需求
员工号
char(8) 主码:stanum(staff number)
员工姓名 varchar(10) :staname (staff name)
员工性别 char(2) 性别只能为男女 : stasex(staff sex)
职务名称 varchar(14) 小于等于7个汉字
:notp(name of the position)
职务编号 char(4) : dtnum(duty number)
工龄 numeric(2,0) 范围1~99:wyear(working year)
工资等级 numeric(2,0) 范围1~10:wbk(wage bracket)
部门号 char(4)
部门名称 varchar(14):depname(department number)
经理员工号:char(8) mgnum
经理名称:varchar(10) mgname
出勤天数 numeric(2,0) 范围0~30 atd(attendance day)
加班天数
numeric(2,0) 范围0~30 otd(overtime day)
迟到天数 numeric(2,0) 范围0~30 tdd(tardy day)
基本工资 int :bw(basic wage)
津贴 float:allo(allowance)
代扣款项 float:whop(withholding of payment)
奖金 float:pm(prize money)
用户名
char(8) :users_name
密码 varchar(10) : passwords
权限 numeric(2,0) 范围1~10:aut(authority)
3.1.2 事务需求
(1)、基本工资的设定
(2)、津贴的设定
对于加班人群设有夜班津贴。
(3)、计算出月工资
每月应发工资=基本工资+其余工资(奖金+加班工资+请假+迟到+津贴)-代扣款项,每月实发工资等于实发工资=应发工资-五险一金个人缴纳部分-应缴个人所得税(工资薪金所得
-“五险一金”-扣除数)×适用税率-速算扣除数)。
(4)、录入员工工资信息
员工工资信息由管理员录入。
(5)、添加员工工资信息
员工信息由管理员进行添加,管理员通过操作,向数据库中插入增加一个员工信息
(6)、更改员工工资信息
3.2 系统需求说明
系统需求功能框架图:
四、数据库逻辑设计
4.1 ER图
4.2 数据字典
编号
数据项名
数据项含义
类型
说明
1
stanum
员工号
char(8)
判断员工最基本的定义
2
staname
员工姓名
varchar(10)
3
stasex
员工性别
char(2)
只能输入男、女
4
dtnum
职务编号
char(4)
5
wyear
工龄
numeric(2,0)
6
wbk
工资等级
numeric(2,0)
以工资等级判断员工的
基本工资多少
7
depnum
部门号
char(4)
判断部门最基本的定义
8
depname
部门名称
varchar(14)
9
mgnum
经理员工号
char(8)
10
mgname
经理名称
varchar(10)
11
atd
出勤天数
numeric(2,0)
最大天数为30天
12
otd
加班天数
numeric(2,0)
最大天数为30天
13
tdd
迟到天数
numeric(2,0)
最大天数为30天
14
notp
职务名称
varchar(30)
15
bw
基本工资
int
16
allo
津贴
float
17
whop
代扣款项
float
18
pm
奖金
float
19
users_name
用户名
char(8)
20
passwords
密码
varchar(10)
21
aut
权限
numeric(2,0)
范围1~10
4.3 关系表
员工信息表:staff(stanum,staname,stasex,dtnum,wyear,wbk)主码:stanum
部门信息表:department(depnum,depname,mgnum,mgname) 主码:depnum
考勤情况表:attendance(stanum,atd,otd,tdd) 主码:stanum
职务信息表:duty(dtnum,notp) 主码:dtnum
工资计算表:wage(stanum,bw,allo,whop,pm) 主码:stanum
用户信息表:users(users_name,passwords,aut,stanum) 主码:users_name
五、数据库物理设计
5.1 索引
5.2 安全机制
触发器:
1.对考勤情况表(attendence),建立触发器
insert_att,当迟到天数大于出勤天数时,不允许插入。
create trigger att_insert
on attendance for insert
as
begin
if exists(select*from inserted
where
atd tran end 2.对考勤情况表(attendence),建立触发器 create trigger att_update on attendance for update as begin atd tran end 3.对工资计算表(wage),建立触发器 wage_update,当代扣款项大于基本工资时,不允许更新。 create trigger wage_update on wage for update as begin if exists(select*from deleted allo tran end 存储过程: 1.存储查询工资表信息 c_wage_info 2.存储创建新用户 dbo.new_users 3.存储删除员工 delete_stanum 4.存储创建新员工 c_new_staff 六、应用程序设计 6.1 功能模块 系统功能实现流程图: (1) 输入员工的基本信息。包括:员工编号、姓名、性别、出生年月、参加工作时间、所属部门、职务、职称、政治面貌、婚姻状况等基本信息。 (2)输入员工的工资信息。包括:基本工资、岗位工资、住房补贴、津贴、住房公积金、养老保险。 (3) 输入员工的部门信息。包括:部门编号、部门名称、部门负责人、部门人数。 2.数据修改删除功能 1、修改和删除员工的基本信息。当单位人员的信息发生变化,如职称的改变,工作部门变动,或调离本单位等,系统应能修改员工信息,或删除。 2、修改和删除员工的工资信息。员工升职加薪、工资普调是企业中的常见事情,这就需要系统能方便地对员工工资进行个别及批量的修改;如员工调离本单位,就应当从员工信息表中删除这个员工信息,将其工资信息中相应的数据删除。 3、修改和删除部门信息。当撤销一个部门时,应能从部门信息标中将其删除。而当一个部门的名称发生改变时,系统中所有该部门的名称应做一致的改变。 3.工资管理功能 (1)工资计算 在进行工资计算之前,管理员需要根据各部分的工作确定基本工资的发放、其余工资和代扣款的确定,根据不同职称,不同部分划分不同工资水平,每月应发工资=基本工资+其余工资(奖金+加班工资+请假+迟到+津贴)-代扣款项,每月实发工资等于实发工资=应发工资-五险一金个人缴纳部分-应缴个人所得税(工资薪金所得 -“五险一金”-扣除数)×适用税率-速算扣除数)。在计算获得实际工资以后,通过邮件把工资发至每个人的邮箱,系统通过生成银行转成凭据为员工统一进行银行转账代发统一办理。 (2)工资统计分析 对员工工资数据计算完后,同时要将工资信息统计分析,如汇总统计,工资项目明细数,据的汇总等,又分为对员工个人工资统计分析、部门工资统计分析、月份工资统计分析、季度工资统计分析、 4.工资查询功能 在客户端的查询模块中,我们的员工可以进行查询自己的工资,但是不可以查询其他的员工工资;在不同级别的人系统会根据权限进行划分不同的功能,不同级别的人不能越权查询,否则越界提示。在查询中,员工登录会进行人数统计,当查询人数大于系统允许人数时,系统阻止新用户查询,让新用户等待,避免系统快速响应的特点。 5.报表生成与打印 员工在领取工资时,系统自动生成工资条并发到员工的邮箱:个人工资组成及应发工资和实发工资;在员工领取工资时候自动更新信息,自动形成部门的月报表、季报表,年终报告以供后续工作需要。 6.系统维护 用户在使用时需要完成初始化设置:即录取员工信息、岗位、工资标准,形成工资系统,便于以后计算。系统在用户第一次登录时需要完成密码修改,在员工系统进入时,会自动记录数据用户数目,超过系统容量自动让用户等待。在工资系统使用时,每个月自动形成日志,方便后续工作进行,在月末时自动形成月度报告,在系统运行时,数据库管理员还可以进行对数据的修改。 6.2 界面设计 员工信息功能界面:主要包括员工信息功能,工资信息功能。 员工信息查询窗口界面:业务逻辑是根据当前登录的员工的员工号进行查询,并显示。 员工信息修改窗口界面:员工可以修改自己的用户名及其密码。 6.3 事务设计 (1)、基本工资的设定 (2)、津贴的设定 对于加班人群设有夜班津贴。 (3)、计算出月工资 每月应发工资=基本工资+其余工资(奖金+加班工资+请假+迟到+津贴)-代扣款项,每月实发工资等于实发工资=应发工资-五险一金个人缴纳部分-应缴个人所得税(工资薪金所得 (4)、录入员工工资信息 员工工资信息由管理员录入。 员工号 职务名称 基本工资 津贴 代扣款项 奖金 20180001 人力资源部部门经理 8000 2000 1000 1500 20180002 开发部门部门经理 8000 2000 1000 1500 20180003 需求分析部门经理 8000 2000 1000 1500 20180004 食堂部门经理 8000 2000 1000 1500 20180005 保安部门经理 8000 2000 1000 1500 20180006 运维部门经理 8000 2000 1000 1500 20180007 营销部门经理 8000 2000 1000 1500 20180008 人力资源员工 5000 1200 400 1200 20180009 人力资源员工 5000 1200 400 1200 20180010 人力资源员工 5000 1200 400 1200 20180011 人力资源员工 5000 1200 400 1200 20180012 人力资源员工 5000 1200 400 1200 20180013 开发部门员工—C++ 7000 3000 1200 1100 20180014 开发部门员工—C++ 7000 3000 1200 1100 20180015 开发部门员工—C++ 7000 3000 1200 1100 20180016 开发部门员工—Java 6500 3000 1200 1100 (5)、添加员工工资信息 (6)、更改员工工资信息 七、测试和运行 介绍系统的测试情况,可提供几个测试用例。 可选:生成大数据量的仿真数据,进行性能测试的情况。 八、总结 课程设计经验体会: 这次的课程设计会让我记忆深刻,一方面因为由于本次疫情的原因,我们不能返校,只能在线上做实验,另一方面,我深切地感受到了团队协作的精神,在课程设计期间,我们每次做课设任务之前都会提前讨论要去做什么,在进行期间,我们一直开着语音,进行交流讨论,有问题的地方,我们会及时讨论,及时解决,集思广益,使课设任务更加高效,我们使用一上午的时间进行了数据库的建设,而后几次,我们分别进行了界面设计,数据库连接,以及修改问题改善不足。此次课程设计虽是在线上,但是我们仍然克服困难,积极主动交流,解决问题,这种团队协作精神使我们效率更高。 系统的特色: 我们的整个数据库系统达到3nf范式,满足了系统的要求,同时我们对于一些事物的操作建立了触发器和存储过程,当不满足一些条件时,拒绝对于数据库的操作,充分满足了数据库系统的安全型设计,另外我们整个系统逻辑功能清楚明了,不繁琐,易上手。 系统的不足: 我们的系统依然存在一些不足,在进行课设答辩时,也发现了问题,经过老师的耐心讲解和指导,我们发现了一些问题,例如,数据库没建立索引,数据查询效率低等等问题,后来经过我们的讨论以及修改,完善了整个系统,建立了索引,解决了问题。 附. 系统实现源码 begin
raiserror('不允许插入',16,8)
rollback
end
insert_att,当迟到天数大于出勤天数时,不允许更新。if exists(select*from deleted where
begin
raiserror('不允许更新',16,8)
rollback
end
where
begin
raiserror('不允许更新',16,8)
rollback
end
年工资分析统计。统计分析结果可以以柱状图、饼状图的方式显示统计结果。以很直观明了的方式最后通过报表的方式反馈到高级管理人员处,这时,在数据库中要形成员工个人工资信息统计表、部门工资信息统计表。
-“五险一金”-扣除数)×适用税率-速算扣除数)。员工信息由管理员进行添加,管理员通过操作,向数据库中插入增加一个员工信息。
对于员工工资信息,只能由管理员进行修改,这是对于数据库安全的设计。
//1.Login.java (登录界面)
package wagemanager;
import java.awt.Color;
import java.awt.Font;
import java.awt.Image;
import java.awt.event.*;
import javax.swing.*;
import java.sql.*;
public class login_windows extends JFrame{
public
void create_login(login_windows l1) {
setTitle("欢迎使用公司工资管理系统");
setLayout(null);
this.getContentPane().setBackground(Color.white);
JButton
button1 = new JButton("管理员");
JButton
button2 = new JButton("用 户");
JButton
button3 = new JButton("登 录");
button3.setEnabled(false);
setSize(500,
400);
setLocation(500,
300);
JTextField
users_name = new JTextField();
JPasswordField
password = new JPasswordField();
users_name.setEnabled(false);
password.setEnabled(false);
JLabel
users = new JLabel("用户名:");
JLabel
pass = new JLabel("密 码:");
JLabel
s1 = new JLabel("栾 森");
JLabel
s2 = new JLabel("钱康宇");
JLabel
s3 = new JLabel("刘铭源");
JLabel
s4 = new JLabel("张纪超");
s1.setFont(new
Font (Font.DIALOG, Font.BOLD, 12));
s2.setFont(new
Font (Font.DIALOG, Font.BOLD, 12));
s3.setFont(new
Font (Font.DIALOG, Font.BOLD, 12));
s4.setFont(new
Font (Font.DIALOG, Font.BOLD, 12));
s1.setForeground(Color.white);
s2.setForeground(Color.white);
s3.setForeground(Color.white);
s4.setForeground(Color.white);
users.setForeground(Color.white);
pass.setForeground(Color.white);
ImageIcon
pic = new ImageIcon("e:\\图片\\科技背景.jpg");
JLabel
L2 = new JLabel(pic);
pic.setImage(pic.getImage().getScaledInstance(500,
400,Image.SCALE_DEFAULT));
L2.setBounds(0,
0, pic.getIconWidth(), pic.getIconHeight());
s1.setBounds(375,
310, 60, 20);
s2.setBounds(375,
330, 60, 20);
s3.setBounds(430,
310, 60, 20);
s4.setBounds(430,
330, 60, 20);
users.setBounds(85,
185, 70, 30);
pass.setBounds(85,
230, 70, 30);
users_name.setBounds(155,
180, 230, 30);
password.setBounds(155,
230, 230, 30);
button1.setBounds(100,
100, 100, 30);
button2.setBounds(275,
100, 100, 30);
button3.setBounds(200,
285, 100, 30);
add(users_name);
add(password);
add(button1);//管理员
add(button2);//员工
add(button3);
add(users);
add(pass);
add(s1);
add(s2);
add(s3);
add(s4);
add(L2);
setVisible(true);
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
button2.addActionListener(new
ActionListener() {
public
void actionPerformed(ActionEvent e) {
button3.setEnabled(true);
users_name.setEnabled(true);
password.setEnabled(true);
button3.addActionListener(new
ActionListener() {
@Override
public
void actionPerformed(ActionEvent e) {
String
driverName="com.microsoft.sqlserver.jdbc.SQLServerDriver";
String
dbURL="jdbc:sqlserver://localhost:1433;DatabaseName=课设";
String
userName="sa";String userPwd="188754752";
try{
Class.forName(driverName);
//System.out.println("加载驱动成功!");
}catch(Exception
es){
es.printStackTrace();System.out.println("加载驱动失败!");
}
String
u1 = users_name.getText();
char[]
p1 = password.getPassword();
String
pp = String.valueOf(p1);
String
sta_name = null;
//System.out.println(u1);
//System.out.println(p1);
try(Connection
dbConn=DriverManager.getConnection(dbURL,userName,userPwd)){
try(Statement
st = dbConn.createStatement()){
try
(ResultSet rs = st.executeQuery("SELECT users_name,passwords,stanum FROM
users WHERE users_name="+"'"+u1+"'"+"and
passwords="+"'"+pp+"'"+" ")){
//System.out.println(p1);
while(rs.next())
{
if(rs.getString(1).equals(u1)
&& rs.getString(2).equals(pp)) {
windows
w1 = new windows();
w1.create();
l1.dispose();
sta_name
= rs.getString(3);
w1.get1(sta_name);
//System.out.println(sta_name);
}
}
// System.out.println(pp);
}
}
//System.out.println("连接数据库成功!");
dbConn.close();
}catch(Exception
es){
es.printStackTrace();System.out.print("SQL
Server连接失败!");
}
}
});
}
});
button1.addActionListener(new
ActionListener() {
public
void actionPerformed(ActionEvent e) {
button3.setEnabled(true);
users_name.setEnabled(true);
password.setEnabled(true);
button3.addActionListener(new
ActionListener() {
@Override
public
void actionPerformed(ActionEvent e) {
String
driverName="com. microsoft.sqlserver.jdbc.SQLServerDriver";
String
dbURL="jdbc:sqlserver://localhost:1433;DatabaseName=课设";
String
userName="sa";String userPwd="188754752";
try{
Class.forName(driverName);
//System.out.println("加载驱动成功!");
}catch(Exception
es){
es.printStackTrace();System.out.println("加载驱动失败!");
}
String
u1 = users_name.getText();
char[]
p1 = password.getPassword();
String
pp = String.valueOf(p1);
String
sta_name = null;
//System.out.println(u1);
//System.out.println(p1);
try(Connection
dbConn=DriverManager.getConnection(dbURL,userName,userPwd)){
try(Statement
st = dbConn.createStatement()){
try
(ResultSet rs = st.executeQuery("SELECT users_name,passwords,stanum FROM
users WHERE users_name='y0000048' and passwords='1234567890' ")){
//System.out.println(p1);
while(rs.next())
{
if(rs.getString(1).equals(u1)
&& rs.getString(2).equals(pp)) {
admin
ad = new admin();
ad.create_admin();
l1.dispose();
sta_name
= rs.getString(3);
//ad.get1(sta_name);
//System.out.println(sta_name);
}
else{
//System.out.println("11111");
}
}
// System.out.println(pp);
}
}
//System.out.println("连接数据库成功!");
dbConn.close();
}catch(Exception
es){
es.printStackTrace();System.out.print("SQL
Server连接失败!");
}
}
});
}
});
}
public
static void main(String[] args) {
login_windows
l1 = new login_windows();
l1.create_login(l1);
}
}
2.Admin.java (管理员功能界面)
package wagemanager;
import java.sql.*;
import java.text.MessageFormat;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.table.DefaultTableModel;
import javax.swing.*;
public class admin extends JFrame{
String
stanu = null;
public
void create_admin() {
setTitle("管理员");
JLabel
L1 = new JLabel("管 理
员 界 面");
L1.setFont(new
Font (Font.DIALOG, Font.BOLD, 25));
L1.setForeground(Color.white);
//this.getContentPane().setBackground(Color.blue);
//背景
ImageIcon
pic = new ImageIcon("e:\\图片\\科技背景.jpg");
JLabel
L2 = new JLabel(pic);
pic.setImage(pic.getImage().getScaledInstance(500,
400,Image.SCALE_DEFAULT));
L2.setBounds(0,
0, pic.getIconWidth(), pic.getIconHeight());
ImageIcon
wage = new ImageIcon("e:\\图片\\工资.jpg");
wage.setImage(wage.getImage().getScaledInstance(75,
75,Image.SCALE_DEFAULT));
JLabel wage_pic = new JLabel(wage);
wage_pic.setBounds(100,
250, 75, 75);
ImageIcon
sta = new ImageIcon("e:\\图片\\员工.jpg");
sta.setImage(sta.getImage().getScaledInstance(75,
75,Image.SCALE_DEFAULT));
JLabel
sta_pic = new JLabel(sta);
sta_pic.setBounds(100,
150, 75, 75);
JButton
button1 = new JButton("员工管理");
JButton
button2 = new JButton("工资管理");
Container
c = getContentPane();
setLayout(null);
button1.setBounds(200,
150, 200, 75);
button2.setBounds(200,
250, 200, 75);
L1.setBounds(145,
50, 275, 75);
add(button1);
add(button2);
add(wage_pic);
add(sta_pic);
add(L1);
add(L2);
setSize(500,
400);
setLocation(500,
300);
setVisible(true);
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
button1.addActionListener(new
ActionListener() {
@Override
public
void actionPerformed(ActionEvent arg0) {
admin_sta
ads1 = new admin_sta();
ads1.create_adsta();
}
});
button2.addActionListener(new
ActionListener() {
@Override
public
void actionPerformed(ActionEvent arg0) {
admin_wage
adw1 = new admin_wage();
adw1.create_adwage();
}
});
}
public
static void main(String[] args) {
admin
a1 = new admin();
a1.create_admin();
}
}
3.Admin_sta.java&&admin_wage.java(管理员之员工信息和员工工资管理)
package
wagemanager;
import
java.awt.*;
import
java.awt.event.ActionEvent;
import
java.awt.event.ActionListener;
import
java.sql.*;
import
javax.swing.*;
import
javax.swing.table.*;
public class
admin_sta extends JFrame{
public void
create_adsta() {
JFrame
windows2 = new JFrame("管理员工窗");
windows2.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
windows2.setSize(500,
400);
windows2.setLocation(500,
300);
Container
co = windows2.getContentPane();
//
JPanel p = new JPanel();
co.setLayout(null);
ImageIcon
pic = new ImageIcon("e:\\图片\\科技背景.jpg");
JLabel
L2 = new JLabel(pic);
pic.setImage(pic.getImage().getScaledInstance(500,
400,Image.SCALE_DEFAULT));
L2.setBounds(0,
0, pic.getIconWidth(), pic.getIconHeight());
JButton
b1 = new JButton("查询员工信息");
JButton
b2 = new JButton("修改员工信息");
JButton
b3 = new JButton("增加员工信息");
JButton
b4 = new JButton("删除员工信息");
b1.setBounds(60,
50, 150, 30);
b2.setBounds(260,
50, 150, 30);
b3.setBounds(60,
100, 150, 30);
b4.setBounds(260,
100, 150, 30);
co.add(b1);
co.add(b2);
co.add(b3);
co.add(b4);
co.add(L2);
windows2.setVisible(true);
b1.addActionListener(new ActionListener() {
@Override
public
void actionPerformed(ActionEvent e) {
JFrame
w2 = new JFrame("查询员工信息");
w2.setBounds(500,
300, 600, 445);
w2.setLayout(null);
DefaultTableModel
model=new DefaultTableModel();
JTable
table=new JTable(model);
JScrollPane
jsp=new JScrollPane(table);
jsp.setBounds(0,
0, 585, 400);
w2.add(jsp);
String
driverName="com.microsoft.sqlserver.jdbc.SQLServerDriver";
String
dbURL="jdbc:sqlserver://localhost:1433;DatabaseName=课设";
String
userName="sa";String userPwd="188754752";
try{
Class.forName(driverName);
//System.out.println("加载驱动成功!");
}catch(Exception
ea){
ea.printStackTrace();System.out.println("加载驱动失败!");
}
try(Connection
dbConn=DriverManager.getConnection(dbURL,userName,userPwd)){
try(Statement
st = dbConn.createStatement()){
try
(ResultSet rs = st.executeQuery("SELECT * FROM staff")){
ResultSetMetaData
rsmd=rs.getMetaData();
int numb=rsmd.getColumnCount();
for(int i=1;i<=numb;i++){
model.addColumn(rsmd.getColumnName(i));
}
String[] row=new String[numb];
while(rs.next())
{
//将查询到的每行数据赋入数组内
for(int
i=0;i<numb;i++)
row[i]=rs.getString(i+1);
model.addRow(row);
}
//System.out.println(bw);
}
}
//System.out.println("连接数据库成功!");
dbConn.close();
}catch(Exception
ea){
ea.printStackTrace();System.out.print("SQL
Server连接失败!");
}
w2.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
w2.setVisible(true);
}
});
b2.addActionListener(new ActionListener() {
@Override
public
void actionPerformed(ActionEvent e) {
sta_change
stach = new sta_change();
stach.create_stacha();
}
});
b3.addActionListener(new ActionListener() {
@Override
public
void actionPerformed(ActionEvent e) {
sta_add
s1 = new sta_add();
s1.create_sta_add();
}
});
b4.addActionListener(new ActionListener() {
@Override
public
void actionPerformed(ActionEvent e) {
sta_delete
d1 = new sta_delete();
d1.create_stadel();
}
});
}
public
static void main(String[] args) {
admin_sta
ad = new admin_sta();
ad.create_adsta();
}
}
package
wagemanager;
import
java.awt.*;
import
java.awt.event.ActionEvent;
import
java.awt.event.ActionListener;
import
java.sql.*;
import
javax.swing.*;
import
javax.swing.table.*;
public class
admin_wage extends JFrame{
public void
create_adwage() {
setSize(500,
400);
setLocation(500,
300);
setLayout(null);
ImageIcon
pic = new ImageIcon("e:\\图片\\科技背景.jpg");
JLabel
L2 = new JLabel(pic);
pic.setImage(pic.getImage().getScaledInstance(500,
400,Image.SCALE_DEFAULT));
L2.setBounds(0,
0, pic.getIconWidth(), pic.getIconHeight());
JButton
click = new JButton("查询工资");
JButton
change = new JButton("修改工资");
click.setBounds(150,
100, 200, 75);
change.setBounds(150,
210, 200, 75);
add(click);
add(change);
add(L2);
setVisible(true);
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
click.addActionListener(new
ActionListener() {
@Override
public
void actionPerformed(ActionEvent e) {
JFrame
w2 = new JFrame("查询工资");
w2.setBounds(500,
300, 600, 445);
w2.setLayout(null);
DefaultTableModel
model=new DefaultTableModel();
JTable
table=new JTable(model);
JScrollPane
jsp=new JScrollPane(table);
jsp.setBounds(0,
0, 585, 400);
w2.add(jsp);
String
driverName="com.microsoft.sqlserver.jdbc.SQLServerDriver";
String
dbURL="jdbc:sqlserver://localhost:1433;DatabaseName=课设";
String
userName="sa";String userPwd="188754752";
try{
Class.forName(driverName);
//System.out.println("加载驱动成功!");
}catch(Exception
ea){
ea.printStackTrace();System.out.println("加载驱动失败!");
}
try(Connection
dbConn=DriverManager.getConnection(dbURL,userName,userPwd)){
try(Statement
st = dbConn.createStatement()){
try
(ResultSet rs = st.executeQuery("SELECT * FROM wage")){
ResultSetMetaData
rsmd=rs.getMetaData();
int numb=rsmd.getColumnCount();
for(int i=1;i<=numb;i++){
model.addColumn(rsmd.getColumnName(i));
}
String[] row=new String[numb];
while(rs.next())
{
//将查询到的每行数据赋入数组内
for(int
i=0;i<numb;i++)
row[i]=rs.getString(i+1);
model.addRow(row);
}
//System.out.println(bw);
}
}
//System.out.println("连接数据库成功!");
dbConn.close();
}catch(Exception
ea){
ea.printStackTrace();System.out.print("SQL
Server连接失败!");
}
w2.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
w2.setVisible(true);
}
});
change.addActionListener(new
ActionListener() {
@Override
public
void actionPerformed(ActionEvent e) {
JFrame
wch = new JFrame("修改工资");
wch.setBounds(500,
300, 500, 400);
wch.setLayout(null);
JTextField
t1 = new JTextField(10);
JTextField
t2 = new JTextField(10);
JTextField
t3 = new JTextField(10);
JTextField
t4 = new JTextField(10);
JTextField
t5 = new JTextField(10);
JLabel
lab1 = new JLabel("员 工 号:");
JLabel
lab2 = new JLabel("基本工资:");
JLabel
lab3 = new JLabel("津 贴:");
JLabel
lab4 = new JLabel("代扣款项:");
JLabel
lab5 = new JLabel("奖 金:");
JButton
jb0 = new JButton("修 改");
ImageIcon
pic = new ImageIcon("e:\\图片\\科技背景.jpg");
JLabel L_5 = new JLabel(pic);
pic.setImage(pic.getImage().getScaledInstance(500,
400,Image.SCALE_DEFAULT));
L_5.setBounds(0,
0, pic.getIconWidth(), pic.getIconHeight());
lab1.setForeground(Color.white);
lab2.setForeground(Color.white);
lab3.setForeground(Color.white);
lab4.setForeground(Color.white);
lab5.setForeground(Color.white);
lab1.setBounds(85,
20, 100, 20);
lab2.setBounds(85,
60, 100, 20);
lab3.setBounds(85,
100, 100, 20);
lab4.setBounds(85,
140, 100, 20);
lab5.setBounds(85,
180, 100, 20);
t1.setBounds(140,
20, 200, 20);
t2.setBounds(140,
60, 200, 20);
t3.setBounds(140,
100, 200, 20);
t4.setBounds(140,
140, 200, 20);
t5.setBounds(140,
180, 200, 20);
jb0.setBounds(160,
300, 120, 20);
wch.add(t1);
wch.add(t2);
wch.add(t3);
wch.add(t4);
wch.add(t5);
wch.add(lab1);
wch.add(lab2);
wch.add(lab3);
wch.add(lab4);
wch.add(lab5);
wch.add(jb0);
wch.add(L_5);
wch.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
wch.setVisible(true);
jb0.addActionListener(new
ActionListener() {
@Override
public
void actionPerformed(ActionEvent e) {
try
{
String
driverName = "com.microsoft.sqlserver.jdbc.SQLServerDriver";// 连接数据库
String
dbURL = "jdbc:sqlserver://localhost:1433;DatabaseName=课设";
String
userName = "sa";
String
userPwd = "188754752";
String
usr = t1.getText();
Class.forName(driverName);
try
{
Connection
dbConn = DriverManager.getConnection(dbURL, userName, userPwd);
int
count2 = 0;
int
count3 = 0;
int
count4 = 0;
int
count5 = 0;
if(!t2.getText().trim().equals(""))
{
String
sql3 = "update wage set bw = ?
where stanum="+ usr + "";
PreparedStatement
ps3 = dbConn.prepareStatement(sql3);
ps3.setString(1,
t2.getText());
count2
= ps3.executeUpdate();
}
if(!t3.getText().trim().equals(""))
{
String sql4 = "update wage set
allo = ? where stanum="+ usr + "";
PreparedStatement
ps4 = dbConn.prepareStatement(sql4);
ps4.setString(1,
t3.getText());
count3
= ps4.executeUpdate();
}
if(!t4.getText().trim().equals(""))
{
String
sql5 = "update wage set whop = ?
where stanum="+ usr + "";
PreparedStatement
ps5 = dbConn.prepareStatement(sql5);
ps5.setString(1,
t4.getText());
count4
= ps5.executeUpdate();
}
if(!t5.getText().trim().equals(""))
{
String
sql6 = "update wage set pm = ?
where stanum="+ usr + "";
PreparedStatement
ps6 = dbConn.prepareStatement(sql6);
ps6.setString(1,
t5.getText());
count5
= ps6.executeUpdate();
}
if
(count2 > 0) {
System.out.println("基本工资修改成功");
}if(count3
> 0) {
System.out.println("津贴修改成功");
}if(count4
>0) {
System.out.println("代扣款项修改成功");
}if(count5>0)
{
System.out.println("奖金修改成功");
}
if(!(count2
> 0||count3 > 0||count4 > 0||count5 > 0)) {
System.out.println("修改失败");
JOptionPane.showMessageDialog(null,
"修改失败!",
"错误",
JOptionPane.ERROR_MESSAGE);
}
dbConn.close();
}
catch (SQLException e1) {
e1.printStackTrace();
//
System.out.println("加载驱动成功!");
JOptionPane.showMessageDialog(null,
"数据库连接失败!",
"错误",
JOptionPane.ERROR_MESSAGE);
}
} catch (Exception ex) {
ex.printStackTrace();
System.out.println("加载驱动失败!");
JOptionPane.showMessageDialog(null,
"加载驱动失败!",
"错误",
JOptionPane.ERROR_MESSAGE);
}
}
});
}
});
}
public
static void main(String[] args) {
//
}
}
4.Sta_add&&&sta_change &&stadelete.java(员工功能具体实现)
package wagemanager;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import java.sql.*;
public class sta_add extends JFrame{
public
void create_sta_add() {
setSize(500,
400);
setLocation(500,
300);
setLayout(null);
ImageIcon
pic = new ImageIcon("e:\\图片\\科技背景.jpg");
JLabel
L2 = new JLabel(pic);
pic.setImage(pic.getImage().getScaledInstance(500,
400,Image.SCALE_DEFAULT));
L2.setBounds(0,
0, pic.getIconWidth(), pic.getIconHeight());
JTextField
stanum = new JTextField();
JTextField
staname = new JTextField();
JTextField
stasex = new JTextField();
JTextField
dtnum = new JTextField();
JTextField
wyear = new JTextField();
JTextField
wbk = new JTextField();
JTextField
depnum = new JTextField();
JTextField
bw = new JTextField();
JTextField
allo = new JTextField();
JTextField
whop = new JTextField();
JTextField
pm = new JTextField();
JLabel
stanu = new JLabel("员 工
号:");
JLabel
stana = new JLabel("员工姓名:");
JLabel
stase = new JLabel("员工性别:");
JLabel
dtnu = new JLabel ("职务编号:");
JLabel
wyea = new JLabel ("工 龄:");
JLabel
wb = new JLabel ("工资等级:");
JLabel
depnu = new JLabel("部 门
号:");
JLabel
bw_1 = new JLabel("基本工资:");
JLabel
allo_1 = new JLabel("津 贴:");
JLabel
whop_1 = new JLabel("代扣款项:");
JLabel
pm_1 = new JLabel("奖 金:");
JButton
addbtn = new JButton("增加员工");
stanu.setForeground(Color.white);
stana.setForeground(Color.white);
stase.setForeground(Color.white);
dtnu.setForeground(Color.white);
wyea.setForeground(Color.white);
wb.setForeground(Color.white);
depnu.setForeground(Color.white);
bw_1.setForeground(Color.white);
allo_1.setForeground(Color.white);
whop_1.setForeground(Color.white);
pm_1.setForeground(Color.white);
stanu.setBounds(90,
20, 60, 20);
stana.setBounds(90,
45, 60, 20);
stase.setBounds(90,
70, 60, 20);
dtnu.setBounds(90,
95, 60, 20);
wyea.setBounds(90,
120, 60, 20);
wb.setBounds(90,
145, 60, 20);
depnu.setBounds(90,
170, 60, 20);
bw_1.setBounds(90,
195, 60, 20);
allo_1.setBounds(90,
220, 60, 20);
whop_1.setBounds(90,
245, 60, 20);
pm_1.setBounds(90,
270, 60, 20);
stanum.setBounds(150,
20, 220, 20);
staname.setBounds(150,
45, 220, 20);
stasex.setBounds(150,
70, 220, 20);
dtnum.setBounds(150,
95, 220, 20);
wyear.setBounds(150,
120, 220, 20);
wbk.setBounds(150,
145, 220, 20);
depnum.setBounds(150,
170, 220, 20);
bw.setBounds(150,
195, 220, 20);
allo.setBounds(150,
220, 220, 20);
whop.setBounds(150,
245, 220, 20);
pm.setBounds(150,
270, 220, 20);
addbtn.setBounds(190,
300, 90, 30);
add(stanum);
add(staname);
add(stasex);
add(dtnum);
add(wyear);
add(wbk);
add(depnum);
add(stanu);
add(stana);
add(stase);
add(dtnu);
add(wyea);
add(wb);
add(depnu);
add(bw);
add(allo);
add(whop);
add(pm);
add(bw_1);
add(allo_1);
add(whop_1);
add(pm_1);
add(addbtn);
add(L2);
//stadd.setBounds(x,
y, width, height);
setVisible(true);
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
addbtn.addActionListener(new
ActionListener() {
@Override
public
void actionPerformed(ActionEvent e) {
String
driverName="com.microsoft.sqlserver.jdbc.SQLServerDriver";
String
dbURL="jdbc:sqlserver://localhost:1433;DatabaseName=课设";
String
userName="sa";String userPwd="188754752";
try{
Class.forName(driverName);
//System.out.println("加载驱动成功!");
}catch(Exception
ea){
ea.printStackTrace();System.out.println("加载驱动失败!");
}
try(Connection
dbConn=DriverManager.getConnection(dbURL,userName,userPwd)){
try(PreparedStatement
st = dbConn.prepareStatement("insert into staff
values(?,?,?,?,?,?,?)")){
st.setString(1,
stanum.getText());
st.setString(2,
staname.getText());
st.setString(3,
stasex.getText());
st.setString(4,
dtnum.getText());
st.setString(5,
wyear.getText());
st.setString(6,
wbk.getText());
st.setString(7,
depnum.getText());
st.executeUpdate();
}
try(PreparedStatement
st = dbConn.prepareStatement("insert into wage values(?,?,?,?,?)")){
st.setString(1,
stanum.getText());
st.setString(2,
bw.getText());
st.setString(3,
allo.getText());
st.setString(4,
whop.getText());
st.setString(5,
pm.getText());
st.executeUpdate();
}
//System.out.println("连接数据库成功!");
dbConn.close();
}catch(Exception
ea){
ea.printStackTrace();System.out.print("SQL
Server连接失败!");
}
}
});
}
}
package wagemanager;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowStateListener;
import java.security.PKCS12Attribute;
import java.sql.*;
import java.util.Vector;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
public class sta_change extends JFrame{
public void create_stacha() {
setTitle("员工信息");
Container
c1 = getContentPane();
setLayout(null);
setSize(500,
400);
setLocation(500,
300);
setVisible(true);
ImageIcon
pic = new ImageIcon("e:\\图片\\科技背景.jpg");
JLabel
L2 = new JLabel(pic);
pic.setImage(pic.getImage().getScaledInstance(500,
400,Image.SCALE_DEFAULT));
L2.setBounds(0,
0, pic.getIconWidth(), pic.getIconHeight());
JButton
button1 = new JButton("修改");
JTextField
t1 = new JTextField(null);
JTextField
t2 = new JTextField(null);
//JTextField
t3 = new JTextField(20);
//JTextField
t4 = new JTextField(20);
JTextField
t5 = new JTextField(null);
//JTextField
t6 = new JTextField(20);
JTextField
t7 = new JTextField(null);
JTextField
t8 = new JTextField(null);
JLabel
lab1 = new JLabel("员 工 号:");
JLabel
lab2 = new JLabel("员工姓名:");
//JLabel
lab3 = new JLabel("员工性别:");
//JLabel
lab4 = new JLabel("职务名称:");
JLabel
lab5 = new JLabel("职务编号:");
//JLabel
lab6 = new JLabel("工 龄:");
JLabel
lab7 = new JLabel("工资等级:");
JLabel
lab8 = new JLabel("部 门
号:");
lab1.setForeground(Color.white);
lab2.setForeground(Color.white);
lab5.setForeground(Color.white);
lab7.setForeground(Color.white);
lab8.setForeground(Color.white);
lab1.setBounds(85,
20, 200, 20);
lab2.setBounds(85,
60, 200, 20);
//lab3.setBounds(85,
80, 200, 20);
//lab4.setBounds(85,
80, 200, 20);
lab5.setBounds(85,
100, 200, 20);
//lab6.setBounds(85,
170, 200, 20);
lab7.setBounds(85,
140, 200, 20);
lab8.setBounds(85,
180, 200, 20);
button1.setBounds(160,
250, 120, 20);
t1.setBounds(140,
20, 200, 20);
t2.setBounds(140,
60, 200, 20);
//t3.setBounds(140,
80, 200, 20);
//t4.setBounds(140,
80, 200, 20);
t5.setBounds(140,
100, 200, 20);
//t6.setBounds(140,
170, 200, 20);
t7.setBounds(140,
140, 200, 20);
t8.setBounds(140,
180, 200, 20);
c1.add(t1);
c1.add(t2);
//c1.add(t3);
//c1.add(t4);
c1.add(t5);
//c1.add(t6);
c1.add(t7);
c1.add(t8);
c1.add(lab1);
c1.add(lab2);
//c1.add(lab3);
//c1.add(lab4);
c1.add(lab5);
//c1.add(lab6);
c1.add(lab7);
c1.add(lab8);
c1.add(button1);
c1.add(L2);
button1.addActionListener(new
ActionListener() {
@Override
public
void actionPerformed(ActionEvent e) {
try
{
String
driverName = "com.microsoft.sqlserver.jdbc.SQLServerDriver";// 连接数据库
String
dbURL = "jdbc:sqlserver://localhost:1433;DatabaseName=课设";
String
userName = "sa";
String
userPwd = "188754752";
String
usr = t1.getText();
Class.forName(driverName);
try
{
Connection
dbConn = DriverManager.getConnection(dbURL, userName, userPwd);
int
count2 = 0;
int
count4 = 0;
int
count5 = 0;
int
count6 = 0;
if(!t2.getText().trim().equals(""))
{
String
sql2 = "update staff set staname =
? where stanum="+ usr +
"";
PreparedStatement
ps2 = dbConn.prepareStatement(sql2);
ps2.setString(1,
t2.getText());
count2
= ps2.executeUpdate();
}
if(!t5.getText().trim().equals(""))
{
String
sql4 = "update staff set dtnum = ?
where stanum="+ usr + "";
PreparedStatement
ps4 = dbConn.prepareStatement(sql4);
ps4.setString(1,
t5.getText());
count4
= ps4.executeUpdate();
}
if(!t7.getText().trim().equals(""))
{
String
sql5 = "update staff set wbk = ?
where stanum="+ usr + "";
PreparedStatement
ps5 = dbConn.prepareStatement(sql5);
ps5.setString(1,
t7.getText());
count5
= ps5.executeUpdate();
}
if(!t8.getText().trim().equals(""))
{
String
sql6 = "update staff set depnum = ?
where stanum="+ usr + "";
PreparedStatement
ps6 = dbConn.prepareStatement(sql6);
ps6.setString(1,
t8.getText());
count6
= ps6.executeUpdate();
}
if
(count2 > 0) {
System.out.println("员工姓名修改成功");
}
if(count4
> 0) {
System.out.println("职务编号修改成功");
}
if(count5
> 0) {
System.out.println("工资等级修改成功");
}
if(count6
> 0) {
System.out.println("部门号修改成功");
}
if(!(count2
> 0||count4 > 0||count5 > 0||count6 > 0)){
System.out.println("修改失败");
JOptionPane.showMessageDialog(null,
"修改失败!",
"错误",
JOptionPane.ERROR_MESSAGE);
}
dbConn.close();
}
catch (SQLException e1) {
e1.printStackTrace();
//
System.out.println("加载驱动成功!");
JOptionPane.showMessageDialog(null,
"数据库连接失败!",
"错误",
JOptionPane.ERROR_MESSAGE);
}
}
catch (Exception ex) {
ex.printStackTrace();
System.out.println("加载驱动失败!");
JOptionPane.showMessageDialog(null,
"加载驱动失败!",
"错误",
JOptionPane.ERROR_MESSAGE);
}
}
});
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
}
public
static void main(String[] args) {
sta_change
ss = new sta_change();
ss.create_stacha();
}
}
package wagemanager;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import java.sql.*;
public class sta_delete extends JFrame{
public
void create_stadel() {
setSize(500,
400);
setLocation(500,
300);
setLayout(null);
ImageIcon
pic = new ImageIcon("e:\\图片\\科技背景.jpg");
JLabel
L2 = new JLabel(pic);
pic.setImage(pic.getImage().getScaledInstance(500,
400,Image.SCALE_DEFAULT));
L2.setBounds(0,
0, pic.getIconWidth(), pic.getIconHeight());
JLabel
dellab = new JLabel("请输入想要删除员工的员工号");
dellab.setFont(new
Font (Font.DIALOG, Font.BOLD, 14));
dellab.setForeground(Color.white);
JButton
delbtn = new JButton("删除");
JTextField
del = new JTextField();
dellab.setBounds(150,
60, 200, 40);
del.setBounds(150,
100, 200, 30);
delbtn.setBounds(200,
180, 100, 30);
add(dellab);
add(del);
add(delbtn);
add(L2);
setVisible(true);
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
delbtn.addActionListener(new
ActionListener() {
@Override
public
void actionPerformed(ActionEvent e) {
String
driverName="com.microsoft.sqlserver.jdbc.SQLServerDriver";
String
dbURL="jdbc:sqlserver://localhost:1433;DatabaseName=课设";
String
userName="sa";String userPwd="188754752";
try{
Class.forName(driverName);
//System.out.println("加载驱动成功!");
}catch(Exception
ea){
ea.printStackTrace();System.out.println("加载驱动失败!");
}
try(Connection
dbConn=DriverManager.getConnection(dbURL,userName,userPwd)){
try(PreparedStatement
st = dbConn.prepareStatement("delete from staff where stanum =
"+del.getText()+"")){
st.executeUpdate();
}
//System.out.println("连接数据库成功!");
try(PreparedStatement
st = dbConn.prepareStatement("delete from wage where stanum =
"+del.getText()+"")){
st.executeUpdate();
}
dbConn.close();
}catch(Exception
ea){
ea.printStackTrace();System.out.print("SQL
Server连接失败!");
}
}
});
}
}