得分:
课程设计报告
2013 年 6 月 20 日
目 录
工资管理系统--职工考勤管理系统
姓 名
班 级
学 号
课 程 名 称 数 据 库 原 理 及 应 用
指 导 教 师 乔 平 安
1. 工 资 管 理 系 统 需 求 分 析 …………………………1
功 能 需 求 ………………………………………1
功 能 划 分 ……………………………………1
功 能 描 述 ……………………………………1
性 能 需 求 ………………………………………1
数 据 流 图 ………………………………………2
数 据 字 典 ………………………………………5
数 据 流 的 描 述 ………………………………5
处 理 逻 辑 的 描 述 ……………………………6
数 据 存 储 的 描 述 ……………………………6
2.总 体 设 计 ……………………………………………7
数 据 库 概 念 设 计 …………………………………7
功 能 模 块 …………………………………………8
3.系 统 详 细 设 计 ………………………………………9
数 据 库 逻 辑 设 计 …………………………………9
各 模 块 功 能 ……………………………………10
职 工 信 息 管 理 系 统 …………………………10
职 工 工 资 管 理 系 统 …………………………10
职 工 津 贴 管 理 系 统 …………………………10
职 工 考 勤 管 理 系 统 …………………………10
4.系 统 实 现 ……………………………………………11
界 面 截 图 …………………………………………11
主 界 面 及 工 资 基 本 信 息 界 面 ………………11
登 录 界 面 ……………………………………12
系 统 主 界 面 …………………………………13
考 勤 信 息 录 入 ,修 改 ,删 除 ,查 询 界 面 ……14
设 计 代 码 ………………………………………15
1、 需求分析
功能需求
功能划分
(1)、员工考勤情况表;及时反映员工的出勤,以及缺勤扣款情
况
(2)、员工津贴表,反映员工的加班时间,加班类别、加班天数、津
贴情况等;
(3)、员工基本信息表,反映员工的基本信息,反映员工的工种、等
级,基本工资等信息;
(4)、员工月工资表,计算月工资,生成打印清单。
(5)、银行表,用于员工工资的发放。
(6)、后勤部门表;反映员工的水电扣款信息等
功能描述
(1)、员工每个工种基本工资的设定
(2)、加班津贴管理,根据加班时间和类型给予不同的加班津贴;
(3)、按照不同工种的基本工资情况、员工的考勤情况产生员工
的每月的月工资;
(4)、员工年终奖金的生成,员工的年终奖金计算公式=(员工
本年度的工资总和+津贴的总和)/12;
(5)、企业工资报表。能够查询单个员工的工资情况、每个部门的
工资情况、按月的工资统计,并能够打印;
(6)、系统维护功能;
性能需求
此工资管理系统对工资数据精度的计算能在默认情况之下精确到小数点后
3 位小数,即是精确到分的计算。但在用户使用过程中,能自行根据实际情况进
行小数计算精度的设定,最大能允许保留小数点后 5 位的精度。在时间特性上,
当用户发出命令请求时的服务器的响应时间、对数据更新处理、工资数据的查询
检索等上,同样要求系统响应时间不会超过 秒时间。系统支持多种操作系统
的运行环境,多不同操作系统,不同文件格式的磁盘上的数据均能实现信息的互
通,及共享。当服务器移植到其他的系统平台,如:Linux 平台下时,同样能和
其他的系统进行数据存取同步,不会出现系统之间互不兼容的情况,系统支持多
系统之间的互连互通,系统有巨大的强健性。
数据流图
根据工资管理要求及用户需求调查分析,得到以下数据流图
图 第一层数据流图
图 职工信息的载入
数据库操作
操作数据
系统操作
工资信息
考勤信息
进入基本界
面
职工信息
津贴管理
修改职工信息
删除职工记录
输入职工基本信息
职工表
添加操作
修改操作
删除操作
用户
查询操作职工号
图 工资的信息载入
图 考勤的信息载入
修改工资信息
删除工资信息
输入工资基本信息
工资表
添加操作
修改操作
删除操作
查询操作
修改考勤信息
删除考勤信息
输入考勤基本信息
考勤表
添加操作
修改操作
删除操作
查询操作
用户
图 津贴的信息载入
图 信息查询及管理的流程图
修改津贴信息
删除津贴信息
输入津贴基本信息
津贴表
添加操作
修改操作
删除操作
查询操作
用户
职工管理员进
入系统
进入员工(工资,考勤,
津贴)表
职工表
工资表
考勤表
津贴表
进行录入,修改,删除,查
询操作
数据字典
工资管理系统各实体及联系的数据字典
数据流的描述
数据流的编号:D001
数据流的名称:员工基本信息
简述:与员工有关的基本信息
数据流来源:员工基本信息表
数据流去向:员工,部门
数据流组成:员工编号+姓名+性别+年龄+部门+进入公司时间+住址
数据流的编号:D002
数据流的名称:工资结构信息
简述:查询工资时所包含的相关信息
数据流来源:工资信息表
数据流去向:员工
数据流组成:员工编号+加班加班+出差工资+迟到早退+矿工工资+应发工
资+实发工资
数据流的编号:D003
数据流的名称:职务部门信息
简述:查询员工职务部门信息
数据流来源:职务部门信息表
数据流去向:员工
数据流组成:员工编号+职务+部门
数据流的编号:D004
数据流的名称:员工变动信息
简述:查询员工变动情况
数据流来源:员工变动信息表
数据流去向:员工
数据流组成:员工编号+原职务+原部门+现职务+现部门
处理逻辑的描述
处理逻辑编号:p001
处理逻辑名称:工资统计
简述:对工资进行统计、计算
输入的数据流:基本工资信息
处理描述:根据职工的职位及其他相应情况计算出工资
输出的数据流:工资信息
处理逻辑编号:p002
处理逻辑名称:员工信息处理
简述:对员工信息进行处理
输入的数据流:员工信息
处理描述:根据员工的基本信息进行各种操作
输出的数据流:员工信息
处理逻辑编号:p003
处理逻辑名称:变动处理
简述:对员工的变动情况进行处理
输入的数据流:员工变动信息
处理描述:可进行添加、修改和删除等操作
输出的数据流:员工变动信息
数据存储的描述
数据存储编号:F001
数据存储名称:员工基本信息表
简述:员工的基本信息
数据存储组成:员工编号+姓名+性别+年龄+部门+进入公司时间+住址
关键字:员工编号
相关联的处理:P002
数据存储编号:F002
数据存储名称:基本工资表
简述:员工的工资信息
数据存储组成:员工编号+加班加班+出差工资+迟到早退+矿工工资
关键字:员工编号
相关联的处理:P001
数据存储编号:F003
数据存储名称:变动信息表
简述:员工的变动信息
数据存储组成:员工编号+原职务+原部门+现职务+现部门
关键字:员工编号
相关联的处理:P002,P003
2.总体设计
数据库概念设计
有了数据流图,用 E-R 图来说明工资信息管理系统的数据库概念模式,如图
1 n
m
n
1 n
m
n
1 n
图 实体之间关系 E-R 图
功能模块
员工
领取 工资
领取 津贴
考勤
影
响
影
响
职工号
姓名
工龄
部门岗位
职工号
基本工资
个人所得税
医疗保险
职工号
缺勤天数
缺勤类别
时间
职工号
年终奖金
加班奖金 其他奖金
电话号码
密码
缺勤扣除
3.系统详细设计
数据库逻辑设计
将以上 E-R 转换成如下关系模式
员工(职工号,姓名,工龄,部门岗位,电话号码,密码)
工资(职工号,个人所得税,基本工资,医疗保险,缺勤扣除)
考勤(职工号,缺勤天数,缺勤类别,时间)
津贴(职工号,年终奖金,加班奖金,其他奖金)
其中,标有下划线的字段表示为该数据表的主码,即主关键字。在上面的实
体以及实体之间关系的基础上,形成数据库中的表格以及各个表格之间的关系。
工资信息管理系统数据库中各个表格的设计结果如下面的几个表格所示。每
个表格表示在数据库中的一个表。
表一:员工信息表:
列名 数据类型 可否取空 备注说明
no Char ( 8 ) NOT NULL 职工号(主键)
name Char(10) NOT NULL 职工姓名
gw Char(20) NOT NULL 部门岗位
gl Smallint NOT NULL 工龄
hm Char(11) NULL 电话号码
mi Smallint NOT NULL 登录密码
工资管理系统
系
统
模
块
工
资
生
成
模
块
津
贴
管
理
模
块
考
勤
管
理
模
块
员
工
管
理
模
块
表二:工资表:
列名 数据类型 可否取空 备注说明
no Char ( 8 ) NOT NULL 职工号(主键)
Jb money NOT NULL 基本工资
yl money NULL 医疗保险
Sw money NULL 个人所得税
kc money NULL 缺勤扣除
Jt money NULL 津贴
yz money NOT NULL 月总工资
表三:员工考勤信息表
列名 数据类型 可否取空 备注说明
no Char ( 8 ) NOT NULL 职工号(主键)
ts Int(4) NULL 缺勤天数
lb Char(30) NULL 缺勤类别
Sj Char(10) NULL 缺勤时间
表四:津贴信息表
列名 数据类型 可否为空 备注说明
no Char ( 8 ) NOT NULL 职工号(主键)
Jiaban money NULL 月加班奖金
nz money NULL 年终奖金
qt money NULL 其他奖金
各模块功能
职工信息管理系统
功能为:财务部门相关人员录入、修改、删除、查询员工个人信息;员工本
人能通过用户名和密码查询自己的信息以及修改自己的密码;
职工工资管理系统
功能为:根据工资生成公式,按照员工的考勤情况及各种表现按月生成相应
的工资;财务部门相关人员能录入、修改、删除、查询每个月每个员工的工资信
息以及工资汇总;员工本人能查询自己的工资信息以及工资汇总;
职工津贴管理系统
功能为:财务部门相关人员录入、修改、删除、查询职工津贴信息;职工本
人能查询自己的津贴;
职工考勤管理系统
功能为:后勤管理人员录入、修改、删除、查询职工考勤信息;职工本人能
查询自己的考勤情况。
采用模块化设计思想,可以大大提高设计的效率,并且可以最大限度地减少不必
要的错误。
4.系统实现
界面截图
主界面及工资基本信息界面
登录界面
系统主界面
考勤信息录入,修改,删除,查询界面
设计代码
Java 源 程 序 :
import .*;
import .*;
import .*;
import .*;
import .*;
import .*;
import l .*;
import .*;
import .*;
class DB_LS implements ActionListener{
JFrame frame=new JFrame("欢 迎 进 入 LS 工 资 管 理 系 统 ");
JLabel label=new JLabel("09 网 络 2_54_李 胜 ",);
JButton button1=new JButton("进 入 系 统 ");
JButton button2=new JButton("退 出 系 统 ");
ImageIcon im=new ImageIcon("");
JLabel a1=new JLabel(im);
void Create(){
JPanel pcontentPane=(JPanel)();
JPanel pcontentPane1=new JPanel();
(label);
(new FlowLayout());
(button1);
(button2);
(new Label(" ")) ;
(a1);
();
(true);
(this);
(this);
(_ON_CLOSE);
();
(200,100,550,600);
(true);
}
public stat ic void main(String[] args){
DB_LS dome=new DB_LS();
();
}
public void actionPerformed(ActionEvent e){
if((())){
DL dl=new DL();
dl .create();
}
i f((())){//退 出
(0);
}
}
}
class DL implements ActionListener{
JFrame frame=new JFrame("职 工 /管 理 员 登 陆 ");
JLabel label1=new JLabel("用 户 名 ");
JLabel label2=new JLabel("密 码 ");
JButton logonButton1=new JButton("管 理 员 登 录 ");
JButton logonButton2=new JButton("职 工 登 录 ");
JButton cancelButton=new JButton("退 出 ");
JTextField t1=new JTextField(0);
JTextField t2=new JTextField(0);
ImageIcon im=new ImageIcon("");
JLabel a2=new JLabel(im);
JTextField username=new JTextField(9);
JPasswordField password=new JPasswordField(9);
void create(){
JPanel p=(JPanel)();
JPanel p1=new JPanel();
(new FlowLayout());
(label1);
(5,5);
(4,8);
(username);
(100,200);
(800,800);
(label2);
(50,20);
(40,80);
(password);
(100,20);
(80,120);
(logonButton1);
(new JLabel(" "));
(logonButton2);
(new JLabel(" "));
(cancelButton);
(new JLabel(" "));
(a2);
(t1);
(t2);
();
(true);
(this);
(this);
(this);
(_ON_CLOSE);
();
(200,100,750,550);
(true);
}
public void actionPerformed(ActionEvent e){
i f( (())&&(() .equals(
"123")==true)&&(() .equals("123")==true)){
GZGLZJM gz=new GZGLZJM();
();
}
else{(null ," 对 不 起 , 你 输
入 的 密 码 错 误 !");
};
if( (())&&(() .equ
als(())==true)&&(() .equals(())=
=true)){
XK xk=new XK();
();
Connection con;
Statement sql;
ResultSet rs;
Vector vector=new Vector();
t ry {
("");
} catch (ClassNotFoundException e1) {
("" + e1);
}
try {
con = ("jdbc:odbc:123", "",
"");
sql =
(ResultSet .TYPE_SCROLL_SENSITIVE,ResultSet
.CONCUR_READ_ONLY);
sql .executeQuery("SELECT Gno,mm FROM Y WHERE
Gno="+() +"AND mm="+());
}catch (SQLException e1) {
(e1);
}
}
if((())){
(0);
}
}
}
class GZGLZJM extends JFrame implements ActionListener{
JFrame f=new JFrame("工 资 管 理 系 统 ");
JButton b1=new JButton("津 贴 管 理 ");
JButton b2=new JButton("总 查 询 ");
JButton b3=new JButton("工 资 管 理 ");
JButton b4=new JButton("后 勤 管 理 ");
JButton b6=new JButton("员 工 个 人 信 息 管 理 ");
JButton b5=new JButton("返 回 ");
ImageIcon im=new ImageIcon("");
JLabel a3=new JLabel(im);
void create(){
JPanel p=(JPanel)f .getContentPane();
JPanel p1=new JPanel();
(new FlowLayout());
(b1);
(new JLabel(" ")) ;
(b6);
(new JLabel(" ")) ;
(b3);
(new JLabel(" ")) ;
(b4);
(new JLabel(" ")) ;
(b2);
(new JLabel(" ")) ;
(b5);
(a3);
();
(true);
(this);
(this);
(this);
(this);
(this);
(this);
f .setBounds(200,100,800,600);
f .setVisible(true);
}
public void actionPerformed(ActionEvent e){
i f((())){//返 回
DL d=new DL();
f .dispose();
}
if((())){//津 贴 管 理
JTGL jt=new JTGL();
j t .create();
}
if((())){//员 工 个 人 信 息 管 理
YGGL yg=new YGGL();
();
}
if((())){//查 询
XK xk=new XK();
();
}
if((())){//后 勤 管 理
KQGL kq=new KQGL();
();
}
if((())){//工 资 管 理
GZGL gz=new GZGL();
();
}
}
}
class KQGL implements ActionListener{
JFrame f=new JFrame("录 入 修 改 删 除 考 勤 信 息 ");
JButton b1=new JButton("录 入 ");
JButton b2=new JButton("修 改 ");
JButton b3=new JButton("删 除 ");
JButton b4=new JButton("查 询 所 有 ");
JButton b5=new JButton("返 回 ");
JTextField tf1=new JTextField(4);
JTextField tf2=new JTextField(4);
JTextField tf3=new JTextField(4);
JTextField tf4=new JTextField(4);
JTextField tf5=new JTextField(6);
JButton b6=new JButton("查 询 单 人 考 勤 ");
String[] cloum={"职 工 号 ","缺 勤 天 数 ","缺 勤 类 别 ","缺 勤 时 间 "};
Object[][] row=new Object[50][4];
JTable table=new JTable(row,cloum);
JScrollPane scrollpane=new JScrollPane(table);
JSpli tPane spli tpane=new
JSplitPane(_SPLIT);
void create()
{
JPanel p=(JPanel)f .getContentPane();
(new FlowLayout());
/ /(scrollpane);
(spli tpane);
JPanel p1=new JPanel();
(b1);
(b2);
(b3);
(b4);
(b6);
(b5);
JPanel p2=new JPanel();
();
(scrollpane);
JPanel p3=new JPanel();
(new FlowLayout());
(new JLabel(""));
(new JLabel("职 工 号 "));
(tf1);
(new JLabel("缺 勤 天 数 "));
(tf2);
(new JLabel("缺 勤 类 别 "));
(tf3);
(new JLabel(""));
(new JLabel("缺 勤 时 间 "));
(tf4);
(new JLabel(" 在 此 处 输 入 职 工 号 点 击 查 询 删
除 "));
(tf5);
spli (p1,spli );
spli (p2,spli );
spli (50);
();
(this);
(this);
(this);
(this);
(this);
(this);
f .setBounds(200,100,500,600);
f .setResizable(true);/ /可 以 调 整 界 面 大 小
f .setVisible(true);
}
public void actionPerformed(ActionEvent e){
i f((())){ / /添 加
Connection con;
Statement sql;
ResultSet rs;
try {
("");
} catch (ClassNotFoundException e1) {
("" + e1);
}
try {
con =
("jdbc:odbc:123", "", "");
sql = ();
String insertStr = "INSERT INTO K VALUES " +
"(" + " '" + () + " '" + "," + ()+"," + " '"
+()+" '" + ","+()+")";
sql .executeUpdate(insertStr);
();
} catch (SQLException e1) {
(e1);
}
}
if((())){//修 改
Connection con;
Statement sql;
ResultSet rs;
try {
("");
} catch (ClassNotFoundException e1) {
("" + e1);
}
try {
con =
("jdbc:odbc:123", "", "");
sql = ();
sql .executeUpdate("UPDATE K SET
ts="+()+"WHERE Kno="+()+"");
sql .executeUpdate("UPDATE K SET
lb="+()+"WHERE Kno="+()+"");
sql .executeUpdate("UPDATE K SET
sj="+()+"WHERE Kno="+()+"");
();
} catch (SQLException e1) {
(e1);
}
}
i f((())){//删 除
Connection con;
Statement sql;
ResultSet rs;
try {
("");
} catch (ClassNotFoundException e1) {
("" + e1);
}
try {
con =
("jdbc:odbc:123", "", "");
sql =
(ResultSet .TYPE_SCROLL_SENSITIVE,ResultSet
.CONCUR_READ_ONLY);
sql .executeUpdate("DELETE FROM K WHERE
Kno="+());
();
} catch (SQLException e1) {
(e1);
}
}
i f((())){//查 询 全 部
Connection con;
Statement sql;
ResultSet rs;
Vector vector=new Vector();
t ry {
("");
} catch (ClassNotFoundException e1) {
("" + e1);
}
try {
con = ("jdbc:odbc:123", "sa",
"");
sql =
(ResultSet .TYPE_SCROLL_SENSITIVE,ResultSet
.CONCUR_READ_ONLY);
if((())){
for(int i=0;i<50;i++)
for(int j=0;j<4;j++)
("", i , j ) ;
rs = sql .executeQuery("SELECT * FROM K
ORDER BY Kno DESC");
int k=-1;
while(()) {
++k;
String Kno = (1);
String ts = (2);
String lb = (3);
String sj = (4);
(Kno,k,0);
(ts,k,1);
(lb,k,2);
(sj ,k,3);
}
}
}catch (SQLException e1) {
(e1);
}
}
if((())){ / /查 询 关 键 字
Connection con;
Statement sql;
ResultSet rs;
Vector vector=new Vector();
t ry {
("");
} catch (ClassNotFoundException e1) {
("" + e1);
}
try {
con = ("jdbc:odbc:123", "sa",
"");
sql =
(ResultSet .TYPE_SCROLL_SENSITIVE,ResultSet
.CONCUR_READ_ONLY);
if((())){
for(int i=0;i<50;i++)
for(int j=0;j<4;j++)
("", i , j ) ;
rs = sql .executeQuery("SELECT * FROM
K WHERE Kno="+());
int k=-1;
while (rs .next()) {
++k;
String Kno = (1);
String ts = (2);
String lb = (3);
String sj = (4);
(Kno,k,0);
(ts,k,1);
(lb,k,2);
(sj ,k,3);
}
}
}catch (SQLException e1) {
(e1);
}
}
i f((())){//返 回
DL dl=new DL();
f .dispose();
}
}
}