资源描述
数据库课程设计报告
工资管理系统数据库设计报告
设计题目:工资管理系统
学 院:信息技术学院
专 业:信息管理与信息系统
小组成员及分工
组员
分工
分数
编写代码及测试运行
概念设计
物理结构设计
需求分析
需求分析
需求分析
需求分析
目录
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 (‘男’,’女’)),
年龄 intnot 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,
基本工资 decimalnot null,
个人所得税 decimalnot null,
缺勤扣款decimal,
加班工资 decimal,
工龄工资 decimalnot null,
其他应减款 decimal,
其他应增款 decimal,
岗位工资 decimalnot 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-请假—休假 intCHECK(出勤天数>=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 工资 afterupdate
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 总结
经过这段时间的努力,我们组在老师的帮助下,基本完成本次的课程设计,基本达到了工资管理系统的要求。
经过这次数据库课程设计给我们留下了很大的印象,明白了流程是一切的根本,架构是骨骼。实践比一切的空谈和理论更能学到东西。在做这个数据库开始无论遇到什么困难,我们都没有一丝的放弃念头。也体会到,在设计过程中一定要慎重,仔细,来不得半点马虎.需求分析是整个课程设计的中心,考虑全面,分析彻底。才会为后来的设计打下良好的基础。否则,前功尽弃,甚至不能完成任务。做实例过程中要注意一说明书中数据项类型,数据长度等一致,不能像平时在纸上作业。
最后,通过这次课程设计让我们学到了很多,强化了动手能力,加强了合作意识,为以后找工作奠定了一定的基础。
15
展开阅读全文