资源描述
数
据
库
课
程
设
计
报
告
设计题目:工资管理系统
学 院:数学与计算机学院
专 业:计算机科学与技术(软件工程)
班 级:软件12
指引教师:李竹林
组 员:徐振国(02) 张奇卫(03)
小构成员及分工
成员
分工
编写代码及测试运营
概念设计
物理构造设计
需求分析
需求分析
需求分析
需求分析
目录
1.引言 4
1.1编写目 4
1.2项目背景 4
1.3参照资料 4
2.需求分析 5
2.1功能分析、 5
2.2 顶层图 5
2.3数据流程图 5
2.4 数据字典分析 6
3.数据库概念设计 7
4.数据库逻辑设计 8
5.数据库与数据表设计——物理构造设计 9
5.1数据库与数据表设计 9
5.2数据完整性设计 12
6.数据库操作与实行成果——数据库对象设计 13
6.1建数据库——工资管理库 13
6.2 建表 13
6.3创立视图 16
6.4 触发器 16
6.5 建立索引 17
7.运营和维护 18
7.1简朴查询 18
7.2复杂查询 19
7.3数据库顾客与权限管理 20
7.4数据库备份 22
7.5数据导出与导入 22
8 总结 23
工资管理系统分析和设计
1.引言
1.1编写目
随着科学进步,某些公司不断发展壮大急需一套完整工资管理系统协助公司财务主管部门提高工作效率,实现公司工资管理系统化、规范化和自动化。本系统实现对人员信息、薪资福利、员工社保信息维护和查询,并能迅速精确地完毕考勤分类汇总,生成工资报表等。可以使单位实现工资管理自动化,无疑将给公司管理部门带来很大以便。真正实现公司高效、科学、当代化员工管理。有助于财务部门对员工工资管理,减轻人事部们任务,提高公司效率,节约人力资源从而减少了公司成本。
1.2项目背景
a. 咱们对数据库技术有了初步理解和详细应用;因而,做此分析,由各小构成员合伙做出一种项目。让咱们对学到知识系统结合在一起;考察学生学以致用能力。
b. 由此考察学生动手能力和合伙精神;以打分形式作为一次考察记录。
1.3参照资料
a. 教师发放软件工程文档模板。
b. 网络下载关于资料阐明和某些部门工资管理系统范例。
2.需求分析
2.1功能分析、
工资管理系统重要完毕功能有:
(1) 人员信息管理:公司员工信息(涉及员工基本信息、教诲经历、个人简历、岗位变更、离职登记、离退休信息等)维护和查询。
(2) 考勤管理:管理员工出勤状况(涉及加班、请假、休假等),并提供查询和分类记录功能。
(3) 薪资福利管理:管理员工薪资和福利(涉及当月工资、个人所得税、发放工资历史、员工奖励、员工惩罚等)。
(4) 社会保障管理:管理员工社保信息(涉及单位参保信息、养老保险、医疗保险、住房公积金等),生成社会保险台帐。
(5) 系统管理:涉及代码管理、参数设立、权限设立、更改密码等。
2.2 顶层图
工资管理系统
员工
系统管理员
工资查询
注册登记
信息维护
打印报表
2.3数据流程图
2.4 数据字典分析
数据字典是系统中各类数据描述集合,是进行详细数据收集和数数据分析所获得重要成果。
名字:员工基本信息表
描述:保存员工基本信息
定义:性别+姓名+年龄+部门+员工编号+毕业院校+所学专业+政治面貌
名字:简历表
描述:保存员工求职信息
定义:获奖状况+社会实践状况
名字:离职退休信息表
描述:保存员工离职有关信息
定义:离职因素+离职日期+工龄
名字:部门表
描述:部门信息
定义:部门编号+部门名称+部门人数+部门负责人
名字:社保信息
描述:保存员工社保信息
定义:参保信息+医疗保险+住房公积金+养老保险
名字:员工考勤表
描述:记录员工考勤状况
定义:涉及日期、员工编号、加班、休假、请假
名字:岗位变更表
描述:保存员工岗位变更有关信息
定义:变更日期+初始岗位+当前岗位
名字;员工工资基本表
描述:保存员工基本信息
定义:涉及员工ID,工资发放日期,工资构成各个方面
名字:奖励绩效表
描述:存储员工奖励信息
定义:涉及奖惩时间,奖惩因素,奖惩工资状况
名字:员工考勤表
描述:记录员工考勤状况
定义:涉及日期、员工编号、加班、休假、请假
名字:发放工资历史
描述:发放工资状况信息
定义:涉及发放工资历史记录
名字:社保信息
描述:保存员工社保信息
定义:参保信息+医疗保险+住房公积金+养老保险
3.数据库概念设计
分析前面系统功能规定,需要一种表来存储和管理员工信息,使系统可以接受员工原始各项数据,以实现数据录入、查询或记录员工信息等功能。员工是本系统一种实体。
名字:部门表
描述:保存部门信息
定义:部门编号+部门名称+部门人数+部门负责人
为了能实现查询和记录部门内员工状况等功能,必要有一种表来存储和管理所有部门信息。部门也是一种实体。
工资是以员工工作状况来制定。需要建立一种表来记录各种工资、津贴、扣款信息。它重要为各种查询和记录功能提供工资数据。工资也是一种实体。
考勤管理是为了实现对员工考勤管理,并实现对员工进行查询和分类汇总功能,因而,考勤也是一种实体。
奖惩是以员工受到奖励和惩罚所决定,需建立一种表来记录各种奖励和惩罚。它重要是为各种查询提供数据。
社保信息是为提供基本查询功能而设定一种实体,岗位变更是为记录员工在本部门或不同部门职位变化,并提供查询功能。
员工简历是为了提供员工在过去状况而设定一种实体。
据此可以绘出工资管理系统数据库E-R图如下:
4.数据库逻辑设计
将数据库概念模型转变为关系模型:
实体转变为关系模式有:
由于部门和员工1:N关系,且员工和其她实体也是1:N关系,因此个关系模式为:
部门(部门名称,部门人数,部门负责人)
员工(员工编号,姓名,性别,年龄,学历,政治面貌,毕业学校,所学专业,出生日期,部门名称,退休信息,)
工资(工资ID,员工编号,基本工资,岗位工资,工龄工资,加班工资,个人所得税,缺勤扣款,其她应扣款,其她应加款,应发工资,实发工资,工资年月)
考勤(考勤ID,员工编号,加班,请假,休假,日期,出勤天数)
岗位变更(ID,员工编号,初始岗位,当前岗位,变更日期)
离职信息(ID,员工编号,离职时间,离职因素,批准人)
简历(ID,员工编号,,获奖状况,社会实践)
奖惩(奖惩ID,员工编号,奖罚日期,奖罚因素,解除日期)
工资历史(ID,员工编号,发放金额,发放日期)
社保信息(ID,员工编号,养老保险,医疗保险,住房公积金,参保信息)
顾客信息(员工编号,密码,权限)
带下划线属性为个关系模式外码,字体为粗体属性为各关系模式主码。
5.数据库与数据表设计——物理构造设计
5.1数据库与数据表设计
员工信息数据表定义
字段
字段名
数据类型
长度
1
姓名
Varchar
8
2
性别
char
2
3
年龄
int
4
员工编号
Varchar
10
5
部门名称
Varchar
15
6
毕业院校
Varchar
30
7
政治面貌
Varchar
8
8
所学专业
Varchar
40
9
学历
Varchar
10
10
出身日期
Varchar
15
11
退休信息
Varchar
30
其中“员工编号”是表主键,唯一标记。
“部门名称”是外键。“员工编号”将记录员工编号,在员工信息表中增长这一列时,虽然增长了数据冗余,但可以再查询每个员工信息是,提高系统性能。由于员工信息表记录数相对固定,相比之下,增长这个冗余列对于整个系统来说是有利。通过它,系统将引用到工资信息。
此表取名为“员工”。
岗位变更数据表定义:
字段
字段名称
数据类型
长度
1
员工编号
varchar
10
3
初始岗位
varchar
20
4
变更日期
varchar
20
5
当前岗位
varchar
20
6
ID
int
其中“员工编号”是主键,此表取名为岗位变更。
简历表:
字段
字段名称
数据类型
长度
1
员工编号
varchar
10
2
ID
int
3
获奖状况
varchar
50
4
社会实践状况
varchar
100
此表取名为简历。
离职信息:
字段
字段名称
数据类型
长度
1
员工编号
varchar
10
2
ID
int
3
离职日期
varchar
20
4
离职因素
varchar
40
5
批准人
varchar
8
此表取名为离职信息。
奖惩表:
字段名
数据类型
长度
容许空
主键
奖惩ID
int
Not null
是
员工编号
varchar
9
No null
否
奖惩日期
varchar
15
Null
否
奖惩因素
varchar
15
Null
否
解除日期
varchar
15
Null
否
员工工资基本表
字段名
数据类型
长度
容许空
主键
工资ID
Int
Not null
是
员工编号
varchar
9
Not null
否
基本工资
decimal
5
Not null
否
个人所得税
decimal
5
Not null
否
缺勤扣款工资
decimal
5
Null
否
加班工资
decimal
5
null
否
工龄工资
decimal
5
Not null
否
其她应减款
decimal
5
Not null
否
其她应增款
decimal
5
Not null
否
岗位工资
decimal
5
Not null
否
应发工资
decimal
5
否
实发工资
decimal
5
否
日期
varchar
4
No null
否
发放工资历史
字段名
数据类型
长度
容许空
主键
ID
varchar
9
Null
是
员工编号
varchar
10
Not null
否
发放金额
decimal
9
Not null
否
发放日期
varchar
15
Not null
否
考勤表
字段名
数据类型
长度
容许空
主键
日期
varchar
12
not null
否
员工编号
varchar
25
Not null
否
加班
decimal
40
Null
否
休假
decimal
40
Null
否
请假
decimal
40
Null
否
出勤天数
int
4
Not null
否
考勤ID
Int
Not null
是
社保信息
字段名
数据类型
长度
容许空
主键
ID
INT
NOT NULL
是
员工编号
varchar
10
Null
否
社保信息
varchar
20
Null
否
参保信息
varchar
20
Null
否
医疗保险
varchar
20
Null
否
住房公积金
varchar
20
Null
否
养老保险
varchar
20
Null
否
顾客信息表
字段名
数据类型
长度
容许空
主键
员工编号
varchar
10
Not null
是
密码
Varchar
9
Not null
否
权限
Int
2
Not null
否
部门
字段名
数据类型
长度
容许空
主键
部门名称
varchar
10
Not null
是
部门人数
int
9
Not null
否
部门负责人
varchar
15
Not null
否
5.2数据完整性设计
(1) 给每个表实行主键约束。
主键约束、非空约束
员工:员工编号为主键,因此此项非空
部门:部门编号为主键,因此此项非空
别的正如上面设计
(2) 实行CHECK约束
● 员工表中建立一种检查约束,即员工性别不是男就是女
CHECK(性别IN(‘男’,‘女’))
● 考勤表中建立一种对于出勤天数天数检查约束,即出勤天数在0-20之间
CHECK(出勤天数>=0 and 出勤天数<=20)
(3) 外键约束
FK_员工_部门 FOREIGN KEY (部门名称) REFERENCES 部门(部门名称)
FK_工资_员工 FOREIGN KEY(员工编号)REFERENCES 员工(员工编号)
FK_岗位变更_员工 FOREIGN KEY(员工编号)REFERENCES 员工(员工编号)
FK_简历_员工 FOREIGN KEY(员工编号)REFERENCES 员工(员工编号)
FK_离职_员工 FOREIGN KEY(员工编号)REFERENCES 员工(员工编号)
FK_奖惩_员工 FOREIGN KEY(员工编号)REFERENCES 员工(员工编号)
FK_工资历史_员工 FOREIGN KEY(员工编号)REFERENCES 员工(员工编号)
FK_考勤_员工 FOREIGN KEY(员工编号)REFERENCES 员工(员工编号)
FK_社保_员工 FOREIGN KEY(员工编号)REFERENCES 员工(员工编号)
(4) 惟一约束
每一种表主键都需要定义为惟一性:
对于工资历史表员工编号也要惟一约束。
(5)强制约束
对INSERT和UPDATE操作强制约束,表白后来对员工表中部门名称添加和更新操作都会检查部门表中与否存在与此相应内容。
6.数据库操作与实行成果——数据库对象设计
6.1建数据库——工资管理库
Create database GZGL;
6.2 建表
Create table 员工
(员工编号 varchar(10) not null primary key,
姓名 char(8)not null,
性别 char(2) not null check(性别 in (‘男’,’女’)),
年龄 int not null,
学历 varchar(10) not null,
部门名称 varchar(15) not null,
毕业院校 varchar(30) not null,
政治面貌 varchar(8) not null,
所学专业 varchar(40) not null,
出生日期 varchar(15) not null,
退休信息 varchar(4) not null,
FOREIGN KEY (部门名称) REFERENCES 部门(部门名称)
);
Create table 简历
(ID int primary key identity,
员工编号 varchar(10)not null,
获奖状况 varchar(50),
社会实践状况 varchar(100),
FOREIGN KEY(员工编号)REFERENCES 员工(员工编号)
);
Create table 离职
(ID int primary key identity,
员工编号 varchar(10)not null ,
离职因素 varchar(40),
离职时间 varchar(20),
批准人 varchar(8),
FOREIGN KEY(员工编号)REFERENCES 员工(员工编号)
);
Create table 岗位变更
( ID int primary key identity,
员工编号 varchar(10) not null ,
初始岗位 varchar(20),
变更日期 varchar(20),
当前岗位 varchar(20),
FOREIGN KEY(员工编号)REFERENCES 员工(员工编号)
);
CREATE TABLE 工资
(工资ID int primary key identity,
员工编号 varchar(10)not null,
基本工资 decimal not null,
个人所得税 decimal not null,
缺勤扣款 decimal,
加班工资 decimal ,
工龄工资 decimal not null,
其她应减款 decimal,
其她应增款 decimal,
岗位工资 decimal not null,
应发工资 decimal,
实发工资 decimal,
工资年月 varchar (15),
FOREIGN KEY(员工编号)REFERENCES 员工(员工编号)
);
CREATE TABLE 奖惩
(奖惩ID int primary key identity,
员工编号 varchar (10)not null,
奖惩日期 varchar(15),
奖惩因素 varchar (15),
解除日期 varchar(15)
FOREIGN KEY(员工编号)REFERENCES 员工(员工编号)
);
CREATE TABLE 工资历史
( ID int primary key identity ,
员工编号 varchar(10),
发放金额 decimal,
发放日期 varchar(20),
FOREIGN KEY(员工编号)REFERENCES 员工(员工编号)
);
Create table 考勤
(
考勤ID int primary key identity ,
员工编号 varchar(10) not null ,
加班 int,
休假 int,
请假 int,
日期 varchar(15),
出勤天数 20-请假-休假 int CHECK(出勤天数>=0 and 出勤天数<=20),
FOREIGN KEY(员工编号)REFERENCES 员工(员工编号)
);
Create table 社保
(ID int primary key identity,
员工编号 varchar(10)not null,
参保信息 varchar(20) ,
医疗保险 decimal,
住房公积金 decimal,
养老保险 decimal,
FOREIGN KEY(员工编号)REFERENCES 员工(员工编号)
);
Create table 部门
(部门名称 varchar(15) primary key,
部门人数 int,
部门负责人 varchar(15)
);
Create table 顾客信息
(员工编号 varchar(10) primary key,
密码 varchar(9) not null,
权限 int notnull
);
6.3创立视图
查询员工工资状况
建立一种视图,反映员工姓名及工资状况。
Create view员工_工资
AS
SELECT 员工.姓名,工资.*
from 员工,工资
where 员工.员工编号=工资.员工编号;
6.4 触发器
(1)当考勤表添加一条记录,工资表中“加班工资”“考勤扣款”自动更新
create trigger insert_考勤
on 考勤
after insert
as begin
declare @new_num int
declare @new_num1 int
declare @new_date varchar
select @new_num=(select 加班 from inserted)
select @new_num1=(select 请假 from inserted)
select @new_date=(select 日期 from inserted)
update 工资 set 加班工资=@new_num*100,
缺勤扣款=@new_num1*100 where 员工编号 in (select 员工编号 from inserted)
End;
(2) 当考勤表添加一条记录,考勤表中出勤天数自动添加
Create trigger insert_考勤2
On 考勤
For insert
As begin
update 考勤 set 出勤天数=20-休假-请假 where 员工编号 in (select 员工编号 from inserted)
end;
(3)当工资表中添加一条新记录,“应发工资”和“实发工资”自动填充
create trigger insert_1
on 工资 for insert,update
as begin
update 工资 set 应发工资=基本工资+岗位工资+工龄工资+加班工资+其她应增款-缺勤扣款-其她应减款,
实发工资=基本工资+岗位工资+工龄工资+加班工资+其她应增款-缺勤扣款-其她应减款-个人所得税 where 员工编号 in (select 员工编号 from inserted)
End;
(4) 当工资表中添加一条新记录,表“工资历史”内容自动填充
create trigger insert_2
on 工资 after insert
as begin
declare @bb varchar(10)
declare @cc decimal(12,4)
declare @dd varchar(15)
select @bb=员工编号 from inserted
select @cc=实发工资 from 工资
select @dd=工资年月 from inserted
Insert into 工资历史 values( @bb,@cc,@dd)
End;
(5)当考勤表触发器触发工资表进行update时,工资表中实发工资变化,使“工资历史” 表发放金额自动变化
create trigger insert_3
on 工资 after update
as begin
declare @new_aa decimal
declare @date varchar(15)
set @new_aa=(select 实发工资 from inserted)
set @date=(select 工资年月 from inserted)
update 工资历史 set 发放金额= @new_aa where 员工编号 in (select 员工编号 from inserted)
end;
(6)当员工表删除或增长一种员工时,相应部门人数相应变化
Create trigger delete_员工
on 员工 after delete
as begin
update 部门 set 部门人数=部门人数-1 where 部门名称 in (select 部门名称 from deleted)
end;
create trigger insert_员工
on 员工 after insert
as begin
update 部门 set 部门人数=部门人数+1 where 部门名称 in (select 部门名称 from inserted)
end;
6.5 建立索引
为提高检索性能,为表创立符合索引,其索引项为员工编号、姓名。
Create index 员工编号_姓名_ind
On 员工(员工编号,姓名);
7.运营和维护
7.1简朴查询
(1)员工基本信息状况,代码如下:
(2)员工考勤状况,代码如下
(3)员工基本工资设定,代码如下
(4)按照基本工资和考勤,产生工资,代码如下
select * from 工资;
7.2复杂查询
(1)公司内部财务部工资查询,代码如下:
select 员工.员工编号,员工.姓名,实发工资
from 员工,工资 where 员工.员工编号=工资.员工编号
and 部门名称='财务部';
(2)公司工资报表,能查询单个员工工资
select 员工.员工编号,姓名,工资年月,基本工资,岗位工资,工龄工资,加班工资,缺勤扣款,其她应减款,其她应增款,应发工资,
实发工资
from 工资,员工 where 员工.员工编号=工资.员工编号 and 姓名 like '张%';
(3)每个部门工资状况,按月记录
select 部门名称,avg(实发工资) from 工资,员工
where 员工.员工编号=工资.员工编号 group by 部门名称;
7.3数据库顾客与权限管理
(1)数据库顾客管理
GZGL库顾客
dbo顾客属性
数据库登陆文献夹
Sa登陆属性
建立新顾客:顾客名U1,密码 1234(登陆名login1)
Create login login1 with password=’1234’;
Use GZGL;
Create user U1 for login1;
(2)顾客权限管理
系统权限管理
对象权限管理,设立权限
将员工表录入、查询授予给U1顾客
GRANT SELECT,INSERT ON TABLE 员工 TO U1;
7.4数据库备份
对GZGL库进行备份
单击备份右键进行备份
7.5数据导出与导入
1)数据导出
8 总结
通过这段时间努力,咱们组在教师协助下,基本完毕本次课程设计,基本达到了工资管理系统规定。
通过这次数据库课程设计给咱们留下了很大印象,明白了流程是一切主线,架构是骨骼。实践比一切空谈和理论更能学到东西。在做这个数据库开始无论遇到什么困难,咱们都没有一丝放弃念头。也体会到,在设计过程中一定要慎重,仔细,来不得半点马虎。需求分析是整个课程设计中心,考虑全面,分析彻底。才会为日后设计打下良好基本。否则,前功尽弃,甚至不能完毕任务。做实例过程中要注意一阐明书中数据项类型,数据长度等一致,不能像平时在纸上作业。
最后,通过这次课程设计让咱们学到了诸多,强化了动手能力,加强了合伙意识,为后来找工作奠定了一定基本。
展开阅读全文