员工工资管理系统设计
职务(职务编号、职务名称)
4.3存储过程
(1)指定员工工资情况的查询
定义一个名为stsffCost的存储过程,该存储过程以以工资年月(@staffgongzi)、出勤天数(@staffchuqin)、加班工资(@staffjiaban)、应发工资(@staffying)、实发工资(@staffshi)为输入参数返回指定员工工资信息的存储过程。
stsffCost代码如下:
CREATE PROCEDURE staffCost @staffgongzi decimal, @staffchuqin decimal, @staffjiaban decimal, @staffying decimal, @staffshi decimal AS
SELECT * FROM 工资
WHERE 工资年月=@staffgongzi AND 出勤天数=@staffchuqin AND 加班工资=@staffjiaban AND 应发工资=@staffying AND 实发工资=@staffshi GO
(2)指定范围的员工的信息查询。
以员工工号、部门编号为输入参数返回指定员工基本信息的存储过程,要求输入部分员工信息查询员工全部信息。
定义一个名为stsffInfo的存储过程,该存储过程以员工工号(@staffNum)、部门编号(@bmNum)作为输入参数,存储过程返回查询到的结果集。
satffInfo的定义代码如下:
CREATE PROCEDURE staffInfo @staffNum VARCHAR(50)='%', @bmNum VARCHAR(50)='%' AS
SELECT *
FROM 员工,部门
WHERE 员工.部门名称=部门.部门名称 AND
((员工.工号 LIKE @staffNum VARCHAR(50)+'%') AND (部门编号 LIKE @bmNum VARCHAR(50)+'%')) GO
14
员工工资管理系统设计
(3)统计指定年份各部门每个月份的工资总额。
以年份为输入参数,以总工资金额为输出参数,产生该年度12个月份的每部门工资统计的存储过程。定义该存储过程名为bmMonhSum,输入参数为@ThisYear,实现代码如下:
CREATE PROCEDURE bmMonthSum @ThisYear CHAR(10) AS
SELECT DATEPART(MM,工资年月) AS 员工工资月份,SUM(实发工资) AS 部门人数 FROM 员工,工资,部门
WHERE 员工.工号=工资.工号 AND 员工.部门名称=部门.部门名称 AND DATEPART(YYYY,工资年月)=@ThisYear GROUP BY DATEPART(MM,工资年月) GO
4.4触发器的实现
(1)关键操作,在工资表里添加一条新的记录,实发工资会自动更新新的数据。定义这个触发器名称为insert_工资。
代码如下:
create trigger insert_工资 on 工资 for insert as
declare @i char(20) declare @bb int set @i=case
when @bb=0001 then '实发工资' when @bb=0002 then '实发工资' end
print @i
(2)员工新调入
进行员工新调入操作是在员工信息表中添加一条新的记录,可以为员工信息表设计一个Insert触发器,当员工信息表执行Insert操作后自动更改出部门信息表相应记录的数据。定义这个触发器名称为staff insert。
其代码如下:
CREATE TRIGGER staff insert ON 员工 FOR INSERT
AS IF (SELECT COUNT (*)
FROM 部门,inserted,工资
WHERE 部门.部门人数=inserted.部门人数 AND 工资.工号=inserted.工号)=0 ROLLBACK TRANSACTION GO
15
员工工资管理系统设计
(3)员工调出
进行员工调出操作是在员工信息表中删除该员工的记录,可以为员工信息表设计一个Delete触发器,当员工信息表执行Delete操作后,工资表、部门表中的记录也将全部删除。定义这个触发器名称为staff_delete。
其实现代码如下:
CREATE TRIGGER staff_delete ON 员工 FOR DELETE
AS SELECT COUNT(*)
FROM 部门,工资,deleted
WHERE 部门.部门人数=deleted.部门人数 AND 工资.工号=deleted.工号 GO
(4)员工内部调动
为员工表设计一个名为staff update的UPDATE触发器,当系统对员工表进行UPDATE操作后,将会自动触发它。该触发器将相应记录的部门人数、部门名称、工资更新。
下面是client update触发器的定义代码; CREATE TRIGGER staff_update ON 员工 FOR UPDATE
AS SELECT COUNT(*)
FROM updated,部门
WHERE 部门.部门名称=updated.部门名称 GO
五、总结与心得
经过一周的时间,在同学和老师的帮助下,基本完成本次课程设计,基本达到了工资管理系统的要求。
这次数据库课程设计给我的最大的印象是:流程是一切的根本;架构是重要的,想像的还要重要;实践比一切空谈和理论更能学到东西。从做这个数据库开始无论遇到什么困难,我都没有一丝的放弃的念头。在设计过程中一定要慎重,仔细。来不得半点马虎。需求分析是整个课程设计的中心,考虑要全面,分析彻底。才会为后来的设计打下良好的基础。否则,前功尽弃,甚至不能完成任务。做实例过程中要注意与说明书中数据项数据类型,数据长度等的一致,命令中心输入任何命令都要谨记一条原则,那就是严格按照格式来,不能像平时在纸上作业。
在本系统的设计与实现的过程中主要讲述了企业人事管理信息系统的系统设计部分,包括功能模块设计、数据库结构设计等。系统设计为整个程序构建了骨架,各个功能模块实现各个细节部分。
系统的详细设计根据系统分析阶段的结论将系统具体化,并完成了各个模块的添加、修改、删除与查询的功能,直到最后形成一个完整的可行性的管理系统。
16