资源描述
河南城建学院
《数据库技术及其应用》课程设计报告书
题 目: 工资管理系统
系 部: 数理系
专 业: 数学与应用数学
班 级:
姓 名:
学 号:
指导教师: --------------
河南城建学院
2013年 1 月 11日
目录
第一章 选题的背景和意义 1
1 选题的背景 1
1.2选题的意义 1
第二章 数据库结构设计 2
2.1需求分析 2
2.2 概念结构设计 3
第三章 程序代码实现 6
3.1创建表 7
3.2数据导入: 9
3.3查询功能的实现: 9
3.4其他实现: 14
第四章 课程设计总结 15
参考文献: 16
第一章 选题的背景和意义
1 选题的背景
随着公司业务的扩展,人员的增多,传统的手工作业已经不再适合公司发展的需要所以引进计算机技术对企业内部员工进行方便的管理,这样有诸多好处,各层管理人员可以对企业众多的员工信息进行动态的管理,例如基本资料的修改,添加,删除,查询等。有利于减少错误,减轻人事部门的任务,提高效率,节约人力资源,降低企业成本。
1.2选题的意义
随着经济的发展,企业正向着大型化、规模化发展,而对于大中型企业,员工、职称等跟工资管理有关的信息随之急剧增加。在这种情况下单靠人工来处理员工的工资不但显得力不从心,而且极容易出错。如何设计一个小型企业工资的数据库管理系统,由计算机代替人工执行一系列诸如增加新员工,删除旧员工,工资查询,统计等操作。这样就使办公人员可以轻松快捷地完成工资管理的任务。
对于企、事业单位的工资发放来说,不需要太大型的数据库系统。只需要一个操作方便,功能实用,能同时满足财务部门、单位其他相关部门及代发单位三方对数据的管理及需求的系统。企业的目标就是在于利用数据库编程设计一个操作方便、简单实用的工资管理系统。
实现工资的集中管理。可供管理人员对本单位的人员以及工资进行增加、删除、修改、查询,对人事的管理及工资发放中的应发工资合计等项目由系统自动进行计算;同时系统还可对人事及工资管理情况进行多角度查询。
利用数据库对小型企业的工资进行管理,不仅可以节省开支,而且还可以节省时间,充分发挥了其小却精的特点,通过对这个数据库的编程,也是企业认识到了自己在很多方面的不足,也掌握了很多应用方面的技巧。
第二章 数据库结构设计
2.1需求分析
本系统开发的主要目标是要企事业单位工资管理实现计算机管理,使管理员能够有序的管理每一位职工的各项工资条款的发放,以及企业工资的统计,使企业运用现代化技术创造更多更高的经济效益,在此基础上开发一个工资管理系统。实现本单位财务部门对工资发放的集中管理。可供财务人员对本单位的人员进行增加、修改、删除、更新、查询,对工资发放中的应发工资合计,同时本系统还可以对工资发放情况进行多角度查询,能够按不同的条件进行查询。
2.1.1 总体需求
(1).建立对企业员工工资全面管理的信息系统;
(2).对所有的职工提供全面管理;
(3).对系统的安全提供全面管理;
(4).对职工信息的添加、删除提供全面管理;
2.1.2 功能需求
(1) 对工资记录进行录入。
(2) 对工资信息进行查找。
(3) 对多个工资记录进行浏览。
(4) 对记录进行满足各种实际需要的修改。
(5) 对各项工资的总和和总的人数进行统计。
数据介绍
静态数据:职工基本信息,职工出缺勤信息。
动态数据:职工基本信息,职工工资信息,奖金,职工出缺勤信息。
数据库介绍
职工基本信息数据库:包括职工的工号,姓名,所属部门
职工出缺勤信息数据库:包括职工的工号,姓名,缺勤次数
职工工资信息数据库:包括职工的工号,姓名,基本工资,原始奖金,缺勤金,实际工资
功能描述
职工基本信息管理系统:
采集职工的工号,姓名,所属部门,并可以进行查询和修改。
职工出勤管理系统:
采集职工的工号,姓名,缺勤次数,并可以进行查询
职工工资管理系统:
为实际工资及奖金计算提供数据源,向各部门传输标准工资信息
安全性分析
采用严格的用户验证与权限控制,用户需要通过身份验证才能进入本系统,没用权限的用户不能使用本系统,每个用户只能修改自己的密码,保密性良好,确保系统安全可靠。
2.2 概念结构设计
部门
部门负责人
员工
工资
基本工资
加班工资
其他奖金
工号
姓名
部门号
工种
性别
电话
1
1
1
n
1
1
n
1
图2-1员工工资管理系统关系图
1
员工
从事
工种
工作
工作时间
工资
核准
部门
设置
图2-2 ER关系图
2.3逻辑结构设计
将管理系统的E-R图转换为关系数据库的数据模型,其关系模式为:
(1)员工档案(姓名,性别,职位,电话,状态,部门号),其中员工编号为主键,部门号为外键;
(2)出勤记录(出勤编号,员工号,签到时间,签出时间),出勤编号为主键,员工号为外键;
(3)工资记录(员工号,基本工资,岗位津贴,加班补贴,出差补贴,违纪扣除,发薪日期),工资编号为主键,员工号为外键。
(4)部门记录(部门编号,名称,领导人号),部门编号为主键。 将工资管理系统定名为“工资管理系统”。
2.4物理结构设计
由于该系统主要用于员工的工资增加、删除、更改和查询,所以应用程序这要就是这几个功能。
我们建立数据库的存储模式,文件结构,指定数据库文件的名称,并为设计好的关系模型设计表结构。
员工(姓名,工号,部门,工种,性别,生日,电话)
工种(工种号,基本工资,时加班津贴)
月工作时间(工号,每日上班时间,每日下班时间)
部门(部门号,负责人,负责人电话)
表2-1员工
字段名
类型
宽度
小数
主键/索引
参照表
约束
Null值
工号(id)
文本型
10
↑(主)
姓名(sn)
文本型
10
部门号(dps)
文本型
20
工种(ws)
文本型
12
性别(sex)
文本型
2
男 or 女
生日(birth)
日期型
电话(tele)
文本型
11
表2-2部门
字段名
类型
宽度
小数
主键/索引
参照表
约束
Null值
部门号(dps)
文本型
10
↑(主)
部门(dp)
文本型
20
负责人(rs)
文本型
8
负责人电话(rt)
文本型
11
表2-3工种
字段名
类型
宽度
小数
主键/索引
参照表
约束
Null值
工种(ws)
文本型
12
↑(主)
部门(dp)
文本型
20
基本工资(fs)
文本型
4
时加班津贴(sub)
文本型
4
表2-4月工作时间(每个月生成一个表)
字段名
类型
宽度
小数
主键/索引
参照表
约束
Null值
工号(id)
文本型
10
↑
员工
月初上班时间(st1)
日期型
月初下班时间(dt1)
日期型
-------------
日期型
-------------
日期型
-------------
日期型
月末上班时间(st1)
日期型
月末下班时间(dt1)
日期型
(1) 给每个表实施主键约束:
主键约束、非空值约束 ;
员工:工号为主键,所以此项非空 ;
部门:部门名称为主键,所以此项非空 ;
工资:工号为主键,所以此项非空。
(2)外键约束
员工表中,工号、部门名称为外键。
(3)惟一约束
每个表的主键需定义为惟一性: 对于工资表,因为工号是主键,联系着员工表,所以建立唯一性 。
图2-3数据关系图
第三章 程序代码实现
3.1创建表:
表一:department
Create table dbo.department
dp nchar(20) collate Chinese_prc_ci_as null,
dp snchar(10) collate Chinese_prc_ci_as not null,
rs nchar(8) collate Chinese_prc_ci_as not null,
rt nchar(11) collate Chinese_prc_ci_as not null,
Constrant pk_部门表 primary key clustered
[dps] asc
with (ignore_dup_key = off) on primary
on primary
表二: monthtime
CREATE TABLE [dbo].[monthtime](
[id] [nchar](10) COLLATE Chinese_PRC_CI_AS NOT NULL,
[st1] [datetime] NULL,[dt1] [datetime] NULL,[st2] [datetime] NULL,[dt2] [datetime] NULL,[st3] [datetime] NULL,[dt3] [datetime] NULL,[st4] [datetime] NULL,[dt4] [datetime] NULL,[st5] [datetime] NULL,[dt5] [datetime] NULL,[st6] [datetime] NULL,[dt6] [datetime] NULL,[st7] [datetime] NULL,[dt7] [datetime] NULL,[st8] [datetime] NULL,[dt8] [datetime] NULL,[st9] [datetime] NULL,[dt9] [datetime] NULL,[st10] [datetime] NULL,[dt10] [datetime] NULL,[st11] [datetime] NULL,[dt11] [datetime] NULL,[st12] [datetime] NULL,[dt12] [datetime] NULL,[st13] [datetime] NULL,[dt13] [datetime] NULL,[st14] [datetime] NULL,[dt14] [datetime] NULL,[st15] [datetime] NULL,[dt15] [datetime] NULL,[st16] [datetime] NULL,[dt16] [datetime] NULL,[st17] [datetime] NULL,[dt17] [datetime] NULL,[st18] [datetime] NULL,[dt18] [datetime] NULL,[st19] [datetime] NULL,[dt19] [datetime] NULL,[st20] [datetime] NULL,[dt20] [datetime] NULL,[st21] [datetime] NULL,[dt21] [datetime] NULL,[st22] [datetime] NULL,[dt22] [datetime] NULL,[st23] [datetime] NULL,[dt23] [datetime] NULL,[st24] [datetime] NULL,[dt24] [datetime] NULL,[st25] [datetime] NULL,[dt25] [datetime] NULL,[st26] [datetime] NULL,[dt26] [datetime] NULL,[st27] [datetime] NULL,[dt27] [datetime] NULL,[st28] [datetime] NULL,[dt28] [datetime] NULL,[st29] [datetime] NULL,[dt29] [datetime] NULL,[st30] [datetime] NULL,[dt30] [datetime] NULL,
CONSTRAINT [PK_月工作时间表] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
表三: profession
CREATE TABLE [dbo].[profession](
[ws] [nchar](12) COLLATE Chinese_PRC_CI_AS NOT NULL,
[dp] [nchar](20) COLLATE Chinese_PRC_CI_AS NULL,
[sub] [int] NULL,
[fs] [int] NULL,
CONSTRAINT [PK_工种表] PRIMARY KEY CLUSTERED
(
[ws] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
表四: worker
CREATE TABLE [dbo].[worker](
[sn] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL,
[id] [nchar](10) COLLATE Chinese_PRC_CI_AS NOT NULL,
[dps] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL,
[ws] [nchar](12) COLLATE Chinese_PRC_CI_AS NULL,
[sex] [nchar](2) COLLATE Chinese_PRC_CI_AS NULL,
[birth] [datetime] NULL,
[tele] [nchar](11) COLLATE Chinese_PRC_CI_AS NULL,
CONSTRAINT [PK_员工表] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
3.2数据导入:
表3-1department
部门(dp)
部门号(dps)
负责人(rs)
负责人电话(rt)
研发部
1000
张鹏程
稽核部
1001
李晨
宣传部
1002
魏晨
表3-2monthtime
表3-3profession
工种(ws)
部门(dp)
时加班津贴(sub)
基本工资(fs)
干事
宣传部
100
3500
经理
稽核部
100
4500
文书
稽核部
90
3000
表3-4worker
3.3查询功能的实现:
考勤信息记录作为一种原始的数据资料,作为核算员工工资的根本依据,一般不允许用户对其进行编辑和删除。因此该模块的主要功能是对考勤机发来的原始数据的存储和对现有考勤记录的显示。由于考勤数据量较大再用窗体的显示方法显然是不合适的,因此这里通过列表控件来显示记录集中的数据。
企业进行考勤的目的是为了有效控制员工的迟到、早退及旷工等不良现象。但不能简单的根据某员工缺少某天的考勤记录就认定该员工违反工作纪律。例如:员工在请过事病假并得到领导批准、因工作需要外派而不能在有效时间内赶回公司刷卡的现象就应在月末汇总时剔除在外。
(1) 计算每个员工的工资,生成临时表如下(每个月统计结果):
表3-5工资条
姓名
工号
基本工资
加班津贴
其他补贴
迟到
早退
请假
SQL查询语言如下:
(1) 将有考勤机获得的员工上班时间(我们在此仅取五天的上下班情况)
由年月日时分转换成有时分,形成一个新表格new_table(员工号,月初上班时间,-- -- -- --,月末下班时间)新表格中的时间不含有年月日,以便于与上班时间比较和简化存储量。
new_table表格的SQL语言形成如下:
use 工资管理系统
go
select id as "员工号",convert(varchar(10),st1,108) as "1日上班时间",
convert(varchar(10),dt1,108) as "1日下班时间",
convert(varchar(10),st2,108) as "2日上班时间",
convert(varchar(10),dt2,108) as "2日下班时间",
convert(varchar(10),st3,108) as "3日上班时间",
convert(varchar(10),dt3,108) as "3日下班时间",
convert(varchar(10),st4,108) as "4日上班时间",
convert(varchar(10),dt4,108) as "4日下班时间",
convert(varchar(10),st5,108) as "5日上班时间",
convert(varchar(10),dt5,108) as "5日下班时间"
into new_table from monthtime
表3-6上下班时间表
(2)形成每个月的考勤表,利用上面形成的表格做为参照表,建立考勤表(正常,迟到,早退,加班,请假,缺勤情况(即上下班时间为空值时仅视为缺勤)。当然也可以建立存储过程worker_id,方便查询。
use 工资管理系统
go
select id
case when datediff(minute,convert(varchar(10),st1,108),'8:00')<0
then '迟到'
when convert(varchar(10),st1,108) is null then '缺勤' else '正常'
end as "1号上班情况",
case when datediff(minute,convert(varchar(10),dt1,108),'18:00')>0
then '早退'
when datediff(minute,'18:00',convert(varchar(10),dt1,108))>=0
and datediff(minute,'18:00',convert(varchar(10),dt1,108))<25
then'正常'
when datediff(minute,'18:00',convert(varchar(10),dt1,108))>=25
then'加班' end as "1号下班情况",
case when datediff(minute,convert(varchar(10),st2,108),'8:00')<0
then '迟到'
when convert(varchar(10),st2,108) is null then '缺勤'
else '正常' end as "2号上班情况",
case when datediff(minute,convert(varchar(10),dt2,108),'18:00')>0
then '早退'
when datediff(minute,'18:00',convert(varchar(10),dt2,108))>=0
and datediff(minute,'18:00',convert(varchar(10),dt2,108))<25
then'正常'
when datediff(minute,'18:00',convert(varchar(10),dt2,108))>=25
then'加班' end as "2号下班情况",
case when datediff(minute,convert(varchar(10),st3,108),'8:00')<0
then '迟到'
when convert(varchar(10),st3,108) is null then '缺勤'
else '正常'
end
as "3号上班情况",
case
when datediff(minute,convert(varchar(10),dt3,108),'18:00')>0
then '早退'
when datediff(minute,'18:00',convert(varchar(10),dt3,108))>=0
and datediff(minute,'18:00',convert(varchar(10),dt3,108))<25
then'正常'
when datediff(minute,'18:00',convert(varchar(10),dt3,108))>=25
then'加班' end as "3号下班情况",
case when datediff(minute,convert(varchar(10),st4,108),'8:00')<0
then '迟到'
when convert(varchar(10),st4,108) is null then '缺勤'
else '正常' end as "4号上班情况",
case when datediff(minute,convert(varchar(10),dt4,108),'18:00')>0
then '早退'
when datediff(minute,'18:00',convert(varchar(10),dt4,108))>=0
and datediff(minute,'18:00',convert(varchar(10),dt4,108))<25
then'正常'
when datediff(minute,'18:00',convert(varchar(10),dt4,108))>=25
then'加班' end as "4号下班情况",
case when datediff(minute,convert(varchar(10),st5,108),'8:00')<0
then '迟到'
when convert(varchar(10),st5,108) is null
then '缺勤'
else '正常' end as "5号上班情况",
case when datediff(minute,convert(varchar(10),dt5,108),'18:00')>0
then '早退'
when datediff(minute,'18:00',convert(varchar(10),dt5,108))>=0
and datediff(minute,'18:00',convert(varchar(10),dt5,108))<25
then'正常'
when datediff(minute,'18:00',convert(varchar(10),dt5,108))>=25
then'加班' end as "5号下班情况"
from monthtime
生成表格如下:
表3-7考勤表
有上述生成的表格,属于交叉表的类型,在数据统计的过程中,需要进行行列置换,通过SQL中的piovt运算符实现交叉表的行列互换,然后运用循环语句统计迟到,早退及缺勤的次数。
(3)对员工的工作时间汇总,统计出每个月员工每天个工作时间(在此统计五天的工作时间)。利用该表来计算工资时,不考虑由于迟到所扣除的工资,月份中所包含的节假日给予的特殊的工资以及加班所工作的时间作为迟到时间个弥补和加班时间不足25分钟的不予考虑。表中时间的单位以分钟计。
SQL语言程序如下:对于加班时间不足一小时的,不统计在加班时间之内。
生成表如下:
use 工资管理系统
go
select worker.sn ,monthtime.id ,datediff(minute,st1,dt1) as "1号工作时间",
datediff(minute,st2,dt2) as "2号工作时间",
datediff(minute,st3,dt3) as "3号工作时间",
datediff(minute,st4,dt4) as "4号工作时间",
datediff(minute,st5,dt5) as "5号工作时间"
into 月时间总表
from monthtime,worker
where worker.id=monthtime.id
表3-8工作时间统计表
(4)计算每个员工的每个月的工资形成如下表格:
表3-9工资表内容
姓名
工号
基本工资
加班津贴
其他补贴
加班总时间
SQL程序如下:在计算工资时,我们暂不考虑周末及节假日的工资情形,分
别求出员工每天加班的时间,然后得到月总加班时间,对于因为迟到,早退等叩工资的情况,暂不在程序的求解范围之内。
在此,我们仅求5天的工资情况。
select worker.sn as "员工名",worker.id as "员工号",fs as "基本工资",
"1号工作时间"+"2号工作时间"+"3号工作时间"+"4号工作时间"+"5号工作时间"-5*8 as "加班总时间",
(floor(("1号工作时间"+"2号工作时间"+"3号工作时间"
+"4号工作时间"+"5号工作时间")/30)-5*8*60-10)*fs/50*2+fs/25 as "工资"
into 工资条
from worker,profession,月时间总表
where worker.ws=profession.ws and worker.id=月时间总表.id
计算出结果如下表:
表3-10工资表
3.4其他实现:
通过四个表的关联,还可以实现生成公司的企业报表,和核算公司的劳务成本等。也可以计算出每个员工每个月迟到,早退的次数,缺勤的次数以及相应时间,但是没有能够对节假日,换假,换班,部门岗位调动,轮班等一些太多涉及认为因素的情况做出详细的分析。
第四章 课程设计总结
刘保朋小结:
我主要负责第二章的部分内容和一些小的细节,包括需求分析和逻辑设计。其中需求分析主要是了解用户的要求和处理要求并写成说明书,在这一步骤中我通过搜索查询相关资料了解了工资管理系统所需要的数据及处理要求,而逻辑设计则是数据模式的转换。
其中涉及到了员工的各种信息及其工资情况和奖金方面的数据,还有对其进行一些几班操作的功能和安全性分析。
在这次课程设计中,我学到了很多,刚开始只是知道理论,上机的时候也只是对整个数据库的一部分进行实践操作,像这样的全面的分析还是第一次,又加上掌握的知识不是特别牢固,所以刚开始的时候非常迷茫,不知道如何下手,经过与组员的讨论交流,老师的指导以及对有关资料的查询使我们终于有了落脚点,经过我们组的努力最终完成了这次课程设计。通过这次课程设计是我进一步的了解了数据库技术,深感自己学到的只是皮毛中的皮毛,更激起了我进一步学习数据库的热情。这次课程设计中还有很多方面没有考虑全面及一些功能无法实现。往后我会更加努力的学习数据库技术,掌握更多相关的知识做出更好的设计。
参考文献:
[1]孙明丽 王斌 《sql server 2005 数据库系统开发》 人民邮电出版社 2007
[2]姜桂洪 张龙波等 《SQL Sever 2005 数据库应用与开发》 清华大学出版社 2010
[3]贺利坚等 《数据库技术与应用》 北京:北京希望电子出版社 2002
[4]丁宝康等 《数据库实用教程》 北京:清华大学出版社 2001
[5] 李建中等 《数据库系统原理》 北京:电子工业出版社 1998
[6]施伯乐等 《数据库技术》 北京:科学出版社 2002
[7] 徐洁磐 《现代数据库系统教程》 北京:北京希望电子出版社 2002
展开阅读全文