设 计 报 告
课题名称: 工资管理系统
学    院:
专业班级:
学    号:
学    生:
指导教师:
学    生
 
指导教师
课题名称
工资管理系统
设计时间
设计地点
设计目的
数据库系统课程设计是对学生学习完成《数据库原理与技术》课程的一次理论与实践的综合设计,旨在学生更好掌握数据库原理的理论知识,并且能根据所学习的数据库知识构建完善标准的数据库系统
一、设计目的
工资管理是一项琐碎、复杂而又十分细致的工作,一般不允许发生差错。手工进行工资发放工作,需要反复地进行抄写、计算,不仅花费财务人员大量的时间,而且往往由于抄写不慎,出现张冠李戴,或者由于计算机的疏忽,出现工资发放错误的现象。计算机进行工资发放工作,不仅能够保证工资核算正确无误、快速输出,而且还可以利用工资数据库对有关工资的各种信息进行统计,服务于财务部门其他方面的核算和财务处理。实现企业员工工资管理的系统化、规范化和自动化,能够和人事管理系统、考勤管理系统相结合,真正实现企业高效、科学、现代化的员工管理。
二、数据库功能分析
A.信息输入功能
1)输入员工的基本信息。包括:员工编号、姓名、性别、出生年月、参加工作时间、所属部门、职务、职称、政治面貌、婚姻状况等基本信息。
2)输入员工的工资信息。包括:基本工资、岗位工资、住房补贴、津贴、工会会费、水电费、住房公积金、养老保险、奖惩。
3)输入员工的部门信息。包括:部门编号、部门名称、部门负责人、部门人数。
B.数据修改删除功能
1)修改和删除员工的基本信息。当单位人员的信息发生变化,如职称的改变,工作部门变动,或调离本单位等,系统应能修改员工的信息或将其从员工信息表中删除。
2)修改和删除员工的工资信息。员工升职加薪、工资普调是企业中常见的事情,这就需要系统能方便对员工工资进行个别及批量的修改;如员工调离本单位,就应当从员工信息表中删除这个员工信息,将其工资信息表中相应的数据删除。
3)修改和删除部门信息。当撤消一个部门时,能从部门信息表中将其删除。而当一个部门的名称发生改变时,系统中所有该项部门的名称应一致的改变。
C.查询和统计功能
1)  能够查询指定员工的基本信息。
2)  能够查询指定某个部门或全部部门的基本信息
3)  查询某个员工的工资信息。
4)  统计、汇总指定年份企业各部门或某个部门每个月或全年工资总额,汇总各部门的人数或本单位的总人数。
5)  工资表月工资记录的生成功能。生成当月所有员工或某个部门的工资记录,同时能进行员工工资的计算,即计算应发金额、应扣金额及实发金额。
三、数据库设计
1.需求分析
《工资发放管理系统》针对的用户是中小企业或学校,工资项目比较少,较为固定,工资管理涉及企业管理的多个方面,如员工职务工种变化、员工考勤情况、员工加班情况、等等。根据这些信息,在每个月的某个固定时间,生成企业全体员工的月工资。对于月工资,能够实现按照员工、部门、月、年进行统计分析,产生相应报表
需求信息整理(DFD图)如下:
                        基本工资
                                     
   
                                                       
                                      第1层DFD图
2.概念分析(E-R图)
3.逻辑设计:
a.数据字典
1          员工津贴表jt
 
数据类型
可否为空
 
emp_no
varchar(8)
not null
员工号(主键一)
Jiaban_month
varchar(10)
not null
加班时间(主键二)
jbtianshu
char(2)
null
加班天数
Jiaban_jiangjin
float
null
加班工资
 
2          考勤信息统计表格kq
 
数据类型
可否为空
 
emp_no
varchar(8)
not null
员工号(主键一)
Kaoqin_month
varchar(10)
not null
时间(主键二)
queqin
char
null
缺勤天数
Kaoqin_gongzi
float
null
考勤工资
3          工资标准表格gzbz
 
数据类型
delete in
可否为空
 
Zw
Varchar(10)
not null
工种(主键)
Jibengongzi
Float
null
基本工资
 
5          员工基本情况表yg
 
数据类型
可否为空
 
emp_no
VARCHAR(8)
NOT NULL
员工号(主键)
emp_name
VARCHAR(10)
NULL
员工名称
sex
Char(2)
NULL
性别
Department_id
Char(4)
Not null
员工部门
Emp_time
VARCHAR2(6)
NOT NULL
入公司时间
    Marry
    Varchar(4)
    Null
    婚姻状况
    Telephon
    Char(11)
    Null
    电话号码
6          员工月工资表ygz
 
数据类型
可否为空
 
emp_no
VARCHAR2(6)
NOT NULL
员工号(主键一)
jbgz
NUMBER(6)
NOT NULL
基本工资
jt
NUMBER(6)
NULL
津贴
Kq
NUMBER(6)
NULL
缺勤扣除
Ygz_total
NUMBER(6)
NULL
总月工资
ygz_date
VARCHAR2(6)
NOT NULL
月工资时间(主键二)
b.关系模式
员工信息表(员工编号,员工姓名,性别,出生年月,参加工作时间,所属部门,职务,,婚姻状况,政治面貌,电话号码)
员工出勤表(员工编号统计时间,员工姓名,矿工次数,考勤工资) 
员工津贴表(员工编号统计时间,员工姓名,加班天数,津贴工资) 
员工月工资表(员工编号,基本工资,住房补贴,津贴,工会会费,水电费,位房公积金,养老保险,奖惩,总工资)
部门信息表(部门编号,部门名称,部门负责人,部门人数)
政治面貌)
基本工资表(职位,基本工资)
各表的属性都不能被分解,所有非主属性都完全依赖每一个候选关键属性,也没有传递依赖,因此符合1,2,3范式。
4. 物理设计
数据库最终是要存储在物理设备上的,为一个给定的逻辑数据模型选取一个最适合应用环境的物理结构(存储结构与存取方法)的过程,就是数据库的物理设计。数据库的物理结构依赖于给定的计算机系统和DBMS。
5. 实施与维护
确定了数据库的逻辑结构和物理结构后,就可以用所选用的DBMS提供的数据定义语言(DDL)来严格定义数据库,包括建立表、定义表的约束等。数据库系统投入运行后,对数据库设计进行评价、调整、修改等维护工作。
四、程序源代码及其说明
1.创建数据库
create database 工资管理
on
(
name=sales_dat,
filename='d:\sales.mdf'
)
2. 创建表
create table 员工
(
emp_no varchar(8) not null primary key,  --职工编号
emp_name varchar(10) not null ,        --姓名
sex char(2)                          --性别
check (sex='男'or sex='女'),     
birth_date datetime  not null,        --出生日期
hir_date datetime  not null,          --参加工作日期
department_id char(4) not null,        --所属部门
zhiwu varchar(10)  not null,          --职务
zhengzhimm varchar(10),              --政治面貌
marry varchar(4),                    --婚姻状况
telephon char(11),                    --电话号码
constraint old check (datediff(year,birth_date,hir_date)>18)
)
create table 部门
(
department_id char(4)  not null primary key,  --部门号
department_name varchar(6) not null,        --部门名称
manager varchar(6),                      --部长
dep_renshu varchar(4)                    --人数
)
create table 考勤
(
emp_no varchar(8) not null ,                -- 职工编号           
kaoqin_month varchar(10) not null,          --月份
queqin char(2),                          --缺勤天数
kaoqin_gongzi float,                      --奖惩工资
constraint e_k primary key(emp_no,kaoqin_month)
)
create table 津贴
(
emp_no varchar(8) not null ,                --职工编号 
jiaban_month varchar(10) not null,          --月份
jiabantianshu char(2),                    --加班天数
jaban_jiangjin float,                      --津贴工资
constraint e_j primary key(emp_no,jiaban_month)
)
create table 基本工资
(
  zhiwu varchar(10)  not null primary key,
  jibengongzi float default 1500,
)
create table 月工资
(
  emp_no varchar(8) not null ,
  department_id char(4) not null,
  jibengongzi float default 1500,            --基本工资
  zhufangbutie float,                      --住房补贴
  gz_month varchar(10) not null,
  jaban_jiangjin float,                    --奖惩
  kaoqin_gongzi float,                    --津贴
  gonghuihuifei float,                      --工会会费
  zhfgjjin  float,                        --住房公积金
  yanglaobaoxian  float,                  --养老保险
  wagecount as jibengongzi+zhufangbutie+jaban_jiangjin+kaoqin_gongzi+gonghuihuifei+zhfgjjin+yanglaobaoxian
  constraint e_g primary key(emp_no,gz_month)
)
3.插入数据
insert 员工values('20070101','狄一','男','1985-1-1','2007-1-1','01','部长','团员','否','1234567890')
insert 员工values('20070102','狄二','女','1985-1-2','2007-1-2','01','员工','党员','否','1234567891')
insert 部门values('01','人事部','狄一','20')
insert 部门values('02','财务部','狄六','10')
insert 考勤values('20070101','200905','0',0)
insert 考勤values('20070101','200906','2',-60)
insert 津贴values('20070101','2000905','05',15)
insert 津贴values('20070101','2000906','0',0)
insert 基本工资values('员工',1500)
insert 基本工资values('组长',2000)
insert 月工资values('20070101','01',2000,0,'2000905',0,15,0,0,0)
insert 月工资values('20070102','01',1500,0,'2000905',-30,0,0,0,0)
4.创建、绑定默认值
create default gongzi_defa  as 0
exec sp_bindefault gongzi_defa,'考勤.kaoqin_gongzi'
exec sp_bindefault gongzi_defa,'津贴.jaban_jiangjin'
exec sp_bindefault gongzi_defa,'月工资.gonghuihuifei'
exec sp_bindefault gongzi_defa,'月工资.zhfgjjin'
exec sp_bindefault gongzi_defa,'月工资.yanglaobaoxian'
exec sp_bindefault gongzi_defa,'月工资.zhufangbutie'
5.创建触发器
a. 员工表中删除一条信息,其他表相应员工信息删除
create trigger em on 员工                                 
for delete
as
delete from 考勤 where emp_no in (select emp_no from deleted)
delete from 津贴 where emp_no in (select emp_no from deleted)
delete from 月工资 where emp_no in (select emp_no from deleted)
验证:
delete from 员工 where emp_no='20070101'                   
b. 一个部门删除,此部门中的员工信息删除
create trigger bm on 部门                                 
for delete
as
delete from 员工 where department_id in (select department_id from deleted)
验证:
delete from 部门 where department_id='01'
c.员工职务变动,基本工资改变
create trigger jbgz                                       
on 员工
for update,insert
as
declare @q varchar(12)
declare @m varchar(12)
declare @s float
select @q=emp_no from Deleted
select @m=zhiwu from Inserted
select @s=jibengongzi from 基本工资 where zhiwu=@m
update 月工资
set jibengongzi=@s
where 月工资.Emp_no=@q
6.创建函数
a.函数查询员工基本信息
create function ygxx(@yg_id varchar(10))   
returns table
as
return(select * from 员工 where emp_no=@yg_id)
验证:
select * ('20070202')       
b.函数查询部门信息
create function bumen(@bumen_id varchar(4))
returns table
as
return(select * from 部门 where department_id=@bumen_id)
验证:
select * from dbo.bumen('03')             
7.创建存储过程
a.存储过程查询员工基本信息
create proc ygxx2                         
@yg_id varchar(10)
as
select * from 员工 where emp_no=@yg_id
b.存储过程查询指定某个部门或全部部门的基本信息
create proc bumen2                       
@bumen_id2 varchar(4)
as
select * from 部门 where department_id=@bumen_id2
create proc bumenq
as
select * from 部门
c.存储过程查询某个员工的工资信息
create proc gzxx                          -
@yg_id varchar(10)
as
select * from 月工资
where emp_no=@yg_id
d.汇总部门月份工资
create proc gzhz
@dep_id varchar(04),@month_year varchar(10)
as
select department_id,gz_month from 月工资
where department_id=@dep_id and gz_month=@month_year
order by department_id,gz_month
e.汇总工资总和
exec gzhz '03','200905'
create proc sum_sum
as
select department_name,gz_month,sum(wagecount) from 部门,月工资
where 部门.department_id=月工资.department_id  group by  department_name,gz_month
五、总结
1.过程
(1)在对员工表创建删除触发器时,无法删除表记录,删除与其他表的外键约束后,触发器能正常运行。
(2)触发器、存储过程等的建立与使用语句同时运行无法实现,先创建再执行程序正常运行。
(3)在创建员工表时职务的类型是text,但在创建基本工资表时职务作为主键出现错误。把职务改成varchar类型后运行正常
(4)在插入数据时文字长度超出数据类型的长度出现文字被截取的现象。
(5)对基本的SQL语句掌握不牢固,通过查询资料后基本掌握。
2.体会
此系统的规划虽然已经完成,功能基本实现了目标规划一些重要功能,但由于时间仓促,所以只满足了基本要求,并没有过多考虑到系统的技术含量,在这次系统的开发过程中学到了好多知识,而且更加深入,而且更加熟练地掌握了Microsoft SQL Server数据库,锻炼了我的项目开发能力,使我对软件工程的知识有了更深刻的理解、更贴切的感受。在这过程中有许多不顺利的时候,然后就和我就同学讨论,实在讨论不出来,就到图书馆、上网查资料培养了自己查资料和同学讨论的好习惯,这些对即将走上工作岗位的我是有很大的帮助的,相信我以后工作时在这些方面会做的更好。
3.建议
实践上机时间过少,限制了我们做出更完善的数据库,希望能有更充足的实践时间。
4.回顾
通过这次的数据库实习,对许多原来不太清楚的知识点有了更进一步的了解,写代码的时候要细心,注意代码中的一切标点符号都要用英文,创建表插入记录时新插入的记录要加单引号,插入记录时新插入的元组顺序与属性的顺序要一致,常见存储过程时,需要用到变量的要先声明变量,创建了外键约束时,要先对不被约束的表进行操作。
指导教师
评语
系部教研室
意 见

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。