数据库课设——人力资源管理系统(上万字设计文档以及源码)

下面是我大二时数据库课程设计做的人力资源管理系统,包括设计文档以及详细源码,全文上万字左右,如有不足,欢迎指正

系统源码获取:

通过百度网盘分享的文件:人力资源管理系统链接:https://pan.baidu.com/s/1obZ9Gin-yL8uG6jHnk1_vQ?pwd=m1at 提取码:m1at 

系统截图:

  1. 目录

1 选题说明及需求分析... 5

1.1 项目背景... 5

1.2 设计说明... 5

1.3 业务需求... 6

1.4 功能需求... 6

1.4.1 员工管理模块... 6

1.4.2 部门管理模块... 6

1.4.3 招聘管理模块... 6

1.4.4 薪酬管理模块... 6

1.4.5 培训管理模块... 7

1.4.6 绩效管理模块... 7

1.4.7 考勤管理模块... 7

1.4.8 通知管理模块... 7

1.4.9 报表统计模块... 7

1.5 非功能需求... 7

2 数据流图... 8

2.1 顶层数据流图... 8

2.1.1 顶层数据流图说明... 8

2.2 一层数据流图... 19

2.2.1 数据流图说明... 20

2.3 二层数据流图... 29

3 软件功能模块图... 32

4 数据库概念及逻辑结构设计... 34

4.1 ER实体图... 34

4.2 局部ER图... 42

4.3 总的ER图... 43

5 数据设计... 44

5.1 安全性控制... 44

5.2 考核子系统... 45

5.2.1 各部门考核规则... 46

5.2.2 考核情况... 46

5.3 部门管理子系统... 47

5.3.1 员工奖惩情况... 47

5.3.2 部门规则... 47

5.4 招聘子系统... 47

5.4.1 招聘信息... 47

5.4.2 简历信息... 48

5.4.3 员工信息... 50

5.4.4 部门信息... 51

5.4.5 面试信息... 51

5.5 通知子系统... 51

5.5.1 通知信息... 51

5.6 培训子系统... 52

5.6.1 培训信息... 52

5.6.2 培训规则... 52

5.6.3 培训报名信息... 53

5.7 薪酬管理子系统... 53

5.7.1 工资表... 53

5.7.2 薪资计算规则... 55

5.7.3 职位表... 56

5.8 考勤子系统... 56

5.8.1 请假信息... 56

5.8.2 考勤信息... 56

6 总结(感谢和收获) 56

7 参考资料... 57

8 致谢... 58

  1. 选题说明及需求分析
    1. 项目背景

在现代化的企业战略发展过程中,人力资源管理部门的工作十分关键。随着企业规模的扩大和业务的复杂化,传统的人力资源管理方式已无法满足企业高效、准确、便捷的管理需求。因此,开发一套符合企业实际需求的HRMS系统,对于提高人力资源管理效率,优化管理流程、降低管理成本具有重要意义

    1. 设计说明

参考中国人民大学出版社的人力资源管理概论(董克用,李超平主编)一书,可构建出大中型人力资源管理部门的组织结构,如下图所示。

图表 1

故本系统针对人力资源部所需要的功能进行设计,系统角色包括人力资源部部长以及各大主管、其它部门主管还有非人力资源部员工,其中人力资源部部长和副总经理均具有该系统的全部权限,而各主管分别具有该系统的部分权限,其它部门主管对该系统具有查询权限,但不具有修改除自己以外其它员工信息的权限,非人力资源部员工可以仅可以管理查询自己的信息,保证了系统的安全性。

    1. 业务需求
  1. 员工信息的集中管理,包括对于员工基本信息的增删改查。
  2. 部门信息管理,包括对部门信息的增删改查。
  3. 招聘流程管理,包括职位发布,简历搜集,面试安排等。
  4. 薪资管理,包括对于薪资信息的增删改查以及工资条的打印。
  5. 培训管理,包括对于培训信息的增删改查。
  6. 绩效管理,主要记录了员工的奖惩情况。
  7. 考勤管理,主要记录员工的打卡出勤,请假信息,该记录与工资计算挂钩。
  8. 通知管理,包括通知提醒和历史通知管理。
  9. 报表统计功能,便于管理层对于人力资源数据进行统计和分析。
    1. 功能需求
      1. 员工管理模块
  1. 员工信息录入、修改、查询功能
  2. 员工信息导入导出功能
      1. 部门管理模块
  1. 部门信息的录入、删除、修改以及查询
      1. 招聘管理模块
  1. 职位发布功能
  2. 简历搜集功能
  3. 面试安排功能
      1. 薪酬管理模块
    1. 管理员工工资、津贴、奖金等薪酬信息
    2. 自动计算工资和相关税费
    3. 生成工资单和相关税费
      1. 培训管理模块
  1. 规划和安排培训计划
      1. 绩效管理模块
  1. 对员工的奖惩情况进行记录删除修改管理
  2. 查看具体奖励惩罚信息
      1. 考勤管理模块
  1. 打卡记录查询功能
  2. 打卡记录增加删除功能
  3. 请假申请功能
      1. 通知管理模块
  1. 通知的提醒功能
  2. 对旧通知的管理功能
      1. 报表统计模块
  1. 提供多种报表模版,支持自定义报表
  2. 支持报表导出功能(如Excel、PDF等格式)
    1. 非功能需求
  1. 性能需求:系统应当具备良好的响应速度和并发处理能力,确保在高峰时段也能稳定运行。
  2. 安全性需求:系统应具备完善的安全措施,如数据加密,访问控制、审计日志等,确保数据的安全性和完整性。
  3. 易用性需求:系统界面应简洁明了,操作流程应简单易懂,减低用户的学习成本。
  4. 可扩展性需求:系统应具备良好的可扩展性,便于后续功能的添加和修改。
  1. 数据流图
    1. 顶层数据流图

注:因副总经理和人力资源部长被设定为该系统的超级管理员,拥有该系统的全部体内,故不再描述其与系统的交互。

      1. 顶层数据流图说明
        1. 外部项

编号

名称

有关数据流

属性描述

E1

考核主管

F1.1

F1.2

F1.3

F1.4

F1.5

为人力资源部门负责考核功能的主管,主要负责各部门部长的考核和制定大体的考核规则

E2

薪酬主管

F2.1

F2.2

F2.3

F2.4

F2.5

F2.6

为人力资源部门负责薪资方面功能的主管,主要负责制定薪酬体系,包括薪酬的结构、发放的方式、确定的标准等等以及核算员工的具体薪酬数额

E3

招聘主管

F3.1

F3.2

F3.3

F3.4

F3.5

F3.6

F3.7

F3.8

为人力资源部门负责招聘方面功能的主管,根据规定确定招聘的时间,范围,发布招聘信息

,对招聘人员进行面试,给新员工办理各种手续

E4

普通员工

F4.1

F4.2

F4.3

F4.4

F4.5

F4.6

F4.7

普通员工主要可以登录系统进行基本信息的查询,修改个人信息,进行打卡、请假等操作。

E5

培训主管

F5.1

F5.2

F5.3

F5.4

F5.5

为人力资源部门负责培训方面功能的主管,主要负责制定培训体系,包括培训的形式、培训的项目、培训的责任等。

E6

简历投递人员(游客)

F6.1

F6.2

F6.3

为浏览官方网站投递简历信息的人,不需要登录信息。

E7

各部门部长

F7.1

F7.2

F7.3

F7.4

F7.5

F7.6

主要是对部门员工进行管理,包括审批员工请假信息,录入详细的部门规则,以及对员工的奖惩记录等

        1. 处理逻辑

编号

名称

功能描述

处理频度

P1

人力资源管理系统

以web网站的形式管理人力资源

每次登录选择相应的功能时

        1. 数据流
  1. 数据流名称:F1.1、F3.5、F5.2、F2.5、F4.2、F7.1、F6.2

数据流说明:反馈信息

数据项

数据类型

长度

备注

反馈内容

字符型

500

是外部项对系统输入指令后的反馈结果

  1. 数据流名称:F1.3、F3.2、F5.1、F2.4、F4.1、F7.3、F6.1

数据流说明:查询条件

数据项

数据类型

长度

备注

查询条件

字符型

500

是外部项对系统输入输入的查询条件

  1. 数据流名称:F1.4、F3.6、F5.3、F2.2、F4.8、F7.2

数据流说明:通知信息

数据项

数据类型

长度

备注

通信信息编号

数字型

整型

编号

通知信息内容

字符型

500

是系统对外部项的通知信息

  1. 数据流名称:F1.2

数据流说明:员工考核情况

数据项

数据类型

长度

备注

考核编号

数字型

整型

员工编号

数字型

整型

主管编号

数字型

整型

考核情况

字符型

10

考核情况包括:优秀,良好,及格,不及格

考核时间

日期/时间

考核地点

字符型

50

  1. 数据流名称:F1.5

数据流说明:各部门考核规则

数据项

数据类型

长度

备注

考核规则编号

数字型

整型

考核名称

字符型

10

部门编号

数字型

整型

规则描述

字符型

255

url

生效日期

日期/时间

失效时间

日期/时间

创建时间

日期/时间

修改时间

日期/时间

  1. 数据流名称:F3.1

数据流说明:员工信息

数据项

数据类型

长度

备注

员工编号

数字型

整型

员工照片

字符型

255

url

员工姓名

字符型

10

员工账号密码

字符型

10

员工账号默认为员工编号,员工密码初始为123456

身份证号码

字符型

20

入职时间

日期/时间

部门编号

数字型

整型

职位编号

数字型

整型

  1. 数据流名称:F3.8

数据流说明:部门信息

数据项

数据类型

长度

备注

部门编号

数字型

整型

部门名称

字符型

10

  1. 数据流名称:F3.3

数据流说明:招聘职位信息

数据项

数据类型

长度

备注

招聘信息编号

数字型

整型

招聘岗位

字符型

10

招聘要求

字符型

255

url

招聘人数

数字型

整型

简历投递链接

字符型

255

url

发布人编号

数字型

整型

截止时间

日期/时间

  1. 数据流名称:F3.4

数据流说明:面试安排信息

数据项

数据类型

长度

备注

面试信息编号

数字型

整型

面试地点

字符型

50

面试时间

日期/时间

面试考官编号

数字型

整型

面试考官名称

字符型

10

面试人名称

字符型

10

面试人联系方式

字符型

20

  1. 数据流名称:F3.7

数据流说明:员工调度指令

数据项

数据类型

长度

备注

指令内容

字符型

500

包含删除、添加、修改员工信息等指令

  1. 数据流名称:F5.5

数据流说明:培训规则

数据项

数据类型

长度

备注

培训规则编号

数字型

整型

培训规则名称

字符型

10

培训规则具体内容

字符型

255

url

生效日期

日期/时间

失效日期

日期/时间

创建时间

日期/时间

修改时间

日期/时间

  1. 数据流名称:F5.4

数据流说明:培训信息

数据项

数据类型

长度

备注

培训编号

数字型

整型

培训内容

字符型

255

url

培训对象

字符型

500

培训开始时间

日期/时间

培训结束时间

日期/时间

  1. 数据流名称:F2.1

数据流说明:薪资调度指令

数据项

数据类型

长度

备注

指令内容

字符型

500

包含计算、修改、删除、添加薪资信息的指令

  1. 数据流名称:F2.6

数据流说明:薪资计算规则

数据项

数据类型

长度

备注

薪资计算规则编号

数字型

整型

税率

浮点型

缺勤罚款

货币

迟到罚款

货币

薪资计算规则具体内容

字符型

255

url

生效日期

日期/时间

失效日期

日期/时间

建立日期

日期/时间

修改日期

日期/时间

  1. 数据流名称:F2.3

数据流说明:员工薪资信息

数据项

数据类型

长度

备注

工资编号

数字型

整型

员工编号

数字型

整型

时间

日期/时间

员工基本工资

货币

奖金金额

货币

迟到次数

数字型

整型

缺勤次数

数字型

整型

罚款金额

货币

税前工资

货币

税后工资

货币

薪资计算规则编号

数字型

整型

  1. 数据流名称:F4.7

数据流说明:培训报名信息

数据项

数据类型

长度

备注

员工编号

数字型

整型

培训编号

数字型

整型

报名时间

日期/时间

  1. 数据流名称:F4.6

数据流说明:请假信息

数据项

数据类型

长度

备注

请假编号

数字型

整型

员工编号

数字型

整型

审核主管编号

数字型

整型

开始时间

日期/时间

结束时间

日期/时间

审核意见

字符型

10

通过/未通过/未审核

审核时间

日期/时间

  1. 数据流名称:F4.5

数据流说明:考勤信息

数据项

数据类型

长度

备注

员工编号

数字型

整型

时间

日期/时间

考勤状态

字符型

10

迟到、缺勤、正常、请假

  1. 数据流名称:F4.4

数据流说明:信息修改内容

数据项

数据类型

长度

备注

员工编号

数字型

整型

修改前内容

字符型

50

修改后内容

字符型

50

  1. 数据流名称:F7.5

数据流说明:员工奖惩情况

数据项

数据类型

长度

备注

奖惩编号

数字型

整型

员工编号

数字型

整型

主管编号

数字型

整型

奖惩情况

字符型

10

奖励/惩罚

奖惩内容

字符型

500

简要描述内容

处理时间

日期/时间

  1. 数据流名称:F7.4

数据流说明:详细的部门规则

数据项

数据类型

长度

备注

部门规则编号

数字型

整型

部门编号

数字型

整型

部门规则

字符型

255

url

  1. 数据流名称:F7.6

数据流说明:员工请假信息审核

数据项

数据类型

长度

备注

请假编号

数字型

整型

审核意见

字符型

10

通过/未通过/未审核

  1. 数据流名称:F6.3

数据流说明:简历信息

数据项

数据类型

长度

备注

简历编号

数字型

整型

照片

字符型

255

url

姓名

字符型

10

身份证号码

字符型

20

联系方式

字符型

20

家庭住址

字符型

20

简历内容

字符型

255

url

    1. 一层数据流图

注:所以的外部项和查询处理逻辑均有查询条件和查询反馈的交互,鉴于篇幅过小,仅以招聘主管与查询的交互为例。

      1. 数据流图说明

2.2.1.1外部项

同一层

2.2.1.2处理逻辑

编号

名称

功能描述

处理频度

P1.1

考核子系统

对员工进行考核并制定考核规则

每次考核

P1.2

部门管理

主要是各部门主管负责制定本部门的部门规则,并根据部门规则记录员工的奖惩情况

每次制定规则

P1.3

招聘子系统

发布招聘信息,组织面试,搜集简历并录入管理员工信息和部门信息

每次招聘

P1.4

通知

是不同角色之间交互的媒介,通过每日通知还有历史通知来提醒员工日常需要进行的任务

每天

P1.5

培训子系统

制定培训规制,并定期发布培训信息,员工报名之后记录报名信息

每次培训

P1.6

薪酬管理子系统

制定薪资计算规则,并管理薪资信息,负责计算核对员工的薪资信息

每次工资结算

P1.7

考勤子系统

记录员工请假信息、考勤信息和主管的审核信息

每次考勤

P1.8

信息修改

员工提出信息修改申请修改信息

每次申请

P1.9

查询

外部项输入查询指令,系统反馈信息

每次查询

2.2.1.2数据存储

    1. 数据存储代号:D1.1.1

数据存储名称:各部门考核规则

数据项

数据类型

长度

备注

考核规则编号

数字型

整型

考核名称

字符型

10

部门编号

数字型

整型

规则描述

字符型

255

url

生效日期

日期/时间

失效时间

日期/时间

创建时间

日期/时间

修改时间

日期/时间

    1. 数据存储代号:D1.1.2

数据存储描述:考核情况

数据项

数据类型

长度

备注

考核编号

数字型

整型

员工编号

数字型

整型

主管编号

数字型

整型

考核情况

字符型

10

考核情况包括:优秀,良好,及格,不及格

考核时间

日期/时间

考核地点

字符型

50

    1. 数据存储代号:D1.2.2

数据存储描述:员工奖惩情况

数据项

数据类型

长度

备注

奖惩编号

数字型

整型

员工编号

数字型

整型

主管编号

数字型

整型

奖惩情况

字符型

10

奖励/惩罚

奖惩内容

字符型

500

简要描述

处理时间

日期/时间

    1. 数据存储代号:D1.2.1

数据存储描述:部门规则

数据项

数据类型

长度

备注

部门规则编号

数字型

整型

部门编号

数字型

整型

部门规则

字符型

255

url

    1. 数据存储代号:D1.3.1

数据存储描述:简历信息

数据项

数据类型

长度

备注

简历编号

数字型

整型

照片

字符型

255

url

姓名

字符型

10

身份证号码

字符型

20

联系方式

字符型

20

家庭住址

字符型

20

简历内容

字符型

255

url

    1. 数据存储代号:1.3.2

数据存储描述:员工信息

数据项

数据类型

长度

备注

员工编号

数字型

整型

员工照片

字符型

255

url

员工姓名

字符型

10

员工账号密码

字符型

10

员工账号默认为员工编号,员工密码初始为123456

身份证号码

字符型

20

入职时间

日期/时间

部门编号

数字型

整型

职位编号

数字型

整型

    1. 数据存储代号:1.3.3

数据存储描述:部门信息

数据项

数据类型

长度

备注

部门编号

数字型

整型

部门名称

字符型

10

    1. 数据存储代号:1.3.4

数据存储描述:面试信息

数据项

数据类型

长度

备注

面试信息编号

数字型

整型

面试地点

字符型

50

面试时间

日期/时间

面试考官编号

数字型

整型

面试考官名称

字符型

10

面试人名称

字符型

10

面试人联系方式

字符型

20

    1. 数据存储代号:1.3.5

数据存储描述:招聘信息

数据项

数据类型

长度

备注

招聘信息编号

数字型

整型

招聘岗位

字符型

10

招聘要求

字符型

255

url

招聘人数

数字型

整型

简历投递链接

字符型

255

url

发布人编号

数字型

整型

截止时间

日期/时间

    1. 数据存储代号:1.4.1

数据存储描述:通知信息

数据项

数据类型

长度

备注

通信信息编号

数字型

整型

编号

通知信息内容

字符型

500

是系统对外部项的通知信息

    1. 数据存储代号:1.5.1

数据存储描述:培训信息

数据项

数据类型

长度

备注

培训编号

数字型

整型

培训内容

字符型

255

url

培训对象

字符型

500

培训开始时间

日期/时间

培训结束时间

日期/时间

    1. 数据存储代号:1.5.2

数据存储描述:培训规则

数据项

数据类型

长度

备注

培训规则编号

数字型

整型

培训规则名称

字符型

10

培训规则具体内容

字符型

255

url

生效日期

日期/时间

失效日期

日期/时间

创建时间

日期/时间

修改时间

日期/时间

    1. 数据存储代号:1.5.3

数据存储描述:培训报名信息

数据项

数据类型

长度

备注

员工编号

数字型

整型

培训编号

数字型

整型

报名时间

日期/时间

    1. 数据存储代号:1.6.1

数据存储描述:工资表

数据项

数据类型

长度

备注

工资编号

数字型

整型

员工编号

数字型

整型

时间

日期/时间

员工基本工资

货币

奖金金额

货币

迟到次数

数字型

整型

缺勤次数

数字型

整型

罚款金额

货币

税前工资

货币

税后工资

货币

薪资计算规则编号

数字型

整型

    1. 数据存储代号:1.6.2

数据存储描述:薪资计算规则

数据项

数据类型

长度

备注

薪资计算规则编号

数字型

整型

税率

浮点型

缺勤罚款

货币

迟到罚款

货币

薪资计算规则具体内容

字符型

255

url

生效日期

日期/时间

失效日期

日期/时间

建立日期

日期/时间

修改日期

日期/时间

    1. 数据存储代号:1.6.3

数据存储描述:职位表

数据项

数据类型

长度

备注

职位编号

数字型

整形

职位名称

字符型

10

基本工资

货币

    1. 数据存储代号:1.7.1

数据存储描述:考勤信息

数据项

数据类型

长度

备注

员工编号

数字型

整型

时间

日期/时间

考勤状态

字符型

10

迟到、缺勤、正常、请假

    1. 数据存储代号:1.7.2

数据存储描述:请假信息

数据项

数据类型

长度

备注

请假编号

数字型

整型

员工编号

数字型

整型

审核主管编号

数字型

整型

开始时间

日期/时间

结束时间

日期/时间

审核意见

字符型

10

通过/未通过/未审核

审核时间

日期/时间

    1. 二层数据流图

招聘子系统细化

考勤子系统细化

薪资管理子系统细化

培训子系统细化

  1. 软件功能模块图

以薪资管理子系统为例

总的功能模块图

  1. 数据库概念及逻辑结构设计
    1. ER实体图

注:因为在图中详细描述了实体的属性,且在数据字典中也详细描述了各表属性结构,故不单独以文字的形式再次描述关系模式。

1)各部门考核规则表

2)考核情况表

3)员工奖惩情况表

4)部门规则表

5)简历信息表

6)员工信息表

7)部门信息

8)面试信息

9)招聘信息

10)通知信息

11)培训信息

12)培训规则

13)培训报名信息

14)工资表

15)薪资计算规则

16)职位表

17)考勤信息表

18)请假信息

    1. 局部ER图

以薪资管理系统为例

    1. 总的ER图
  1. 数据设计
    1. 安全性控制

 --安全性

--创建角色——这里以培训主管为例

CREATE ROLE Training_Supervisor

GRANT SELECT,INSERT,UPDATE ON TrainingRegistrations TO  Training_Supervisor

GRANT SELECT,INSERT,UPDATE ON TrainingInfo TO  Training_Supervisor

GRANT SELECT,INSERT,UPDATE ON TrainingRules TO  Training_Supervisor

注:本来是想实现除了招聘主管之外,其它角色对于员工信息表的操作只可以修改更新自己的信息,但是经过查询,发现该操作在数据库中比较难以实现,因为数据库中的权限往往是对应一整个表,而不是特定的某行。

--密码加密函数

CREATE FUNCTION EncryptByPassPhraseTest

(@pwd varchar(15),@MemberID INT)

RETURNS VARBINARY(256)

WITH ENCRYPTION

BEGIN

      DECLARE @EncryptPWD VARBINARY(256)

      SET @EncryptPWD= EncryptByPassPhrase('这是密码',@pwd,1,CONVERT(VARBINARY,@MemberID))

      RETURN @EncryptPWD

END

--会员注册过程

CREATE PROC Register

      @MemberID INT

      ,@PWD VARCHAR(15)

AS

BEGIN

      SET NOCOUNT ON

      DECLARE @EncryptPWD VARBINARY(256)

      SELECT @EncryptPWD=dbo.EncryptByPassPhraseTest(@PWD,@MemberID)

      UPDATE Employees

      SET AccountPassword=@EncryptPWD

      WHERE Employees.EmployeeID=@MemberID

END  

--密码解密

CREATE FUNCTION DencryptByPassPhraseTest

(@pwd VARBINARY(256),@MemberID INT)

RETURNS VARCHAR(15)

WITH ENCRYPTION

BEGIN

      DECLARE @DencryptPWD VARCHAR(15)

      SET @DencryptPWD= CONVERT(VARCHAR(15),DECRYPTBYPASSPHRASE('这是密码',@pwd,1,CONVERT(VARBINARY,@MemberID)))

      RETURN @DencryptPWD

END

--密码验证过程

CREATE PROC MemberLogin

      @MemberID INT

      ,@PWD VARCHAR(15)

AS

BEGIN

    SET NOCOUNT ON

    DECLARE @DencryptPWD VARCHAR(15)

    DECLARE @EncryptPWD VARBINARY(256)

    SELECT  @EncryptPWD =CONVERT(varbinary,AccountPassword)

    FROM    Employees

    WHERE   EmployeeID = @MemberID

    SELECT @DencryptPWD=dbo.DencryptByPassPhraseTest(@EncryptPWD,@MemberID)

    IF @DencryptPWD=@PWD

          PRINT '成功登陆'

    ELSE

          PRINT '密码和会员号不匹配,请重新输入'

END

    1. 考核子系统
      1. 各部门考核规则

--各部门考核规则

CREATE TABLE EvaluationRules ( 

    RuleID INT IDENTITY(1,1) PRIMARY KEY,  -- 考核规则编号,整型,自增主键 

    DepartmentID VARCHAR(10) NOT NULL,           -- 考核名称

    DepartmentID INT NOT NULL,               -- 部门编号

    RuleDescription VARCHAR(255),             -- 规则描述

    EffectiveDate DATETIME NOT NULL,         -- 生效日期

    ExpirationDate DATETIME,                 -- 失效时间

    CreateTime DATETIME DEFAULT GETDATE(),  -- 创建时间,默认值为当前时间 

    UpdateTime DATETIME DEFAULT NULL          -- 修改时间 

);

--建立外键

ALTER TABLE EvaluationRules

ADD CONSTRAINT FK_Eva FOREIGN KEY(DepartmentID) REFERENCES Departments(DepartmentID)

--建立触发器更新修改时间

CREATE TRIGGER TRIG_Eva

ON EvaluationRules

FOR UPDATE

AS

BEGIN

IF UPDATE(RuleName) OR UPDATE(RuleDescription) OR UPDATE(EffectiveDate) OR UPDATE(ExpirationDate)

BEGIN

UPDATE EvaluationRules

SET UpdateTime=GETDATE()

WHERE EvaluationRules.RuleID IN (SELECT RuleID FROM INSERTED)

END

END;

      1. 考核情况

-建立考核情况表

CREATE TABLE EvaluationRecords ( 

    EvaluationID INT IDENTITY(1,1) PRIMARY KEY,            -- 考核编号 

    EmployeeID INT NOT NULL,                  -- 员工编号 

    SupervisorID INT NOT NULL,                         -- 主管编号 

    EvaluationStatus VARCHAR(10) NOT NULL CHECK(EvaluationStatus IN ('优秀','良好','及格','不及格')),    -- 考核情况 

    EvaluationDateTime DATETIME DEFAULT GETDATE(),              -- 考核时间 

    EvaluationLocation VARCHAR(50) NOT NULL           -- 考核地点

);

--建立外键

ALTER TABLE EvaluationRecords

ADD CONSTRAINT FK_EvaR1 FOREIGN KEY(EmployeeID) REFERENCES Employees(EmployeeID)

ALTER TABLE EvaluationRecords

ADD CONSTRAINT FK_EvaR2 FOREIGN KEY(SupervisorID) REFERENCES Employees(EmployeeID)

    1. 部门管理子系统
      1. 员工奖惩情况

--建立员工奖惩情况表

CREATE TABLE RewardsAndPunishments ( 

    RewardPunishmentID INT IDENTITY(1,1) PRIMARY KEY,       -- 奖惩编号 

    EmployeeID INT NOT NULL,                   -- 员工编号 

    SupervisorID INT NOT NULL,                          -- 主管编号 

    RewardPunishmentType VARCHAR(10) NOT NULL CHECK(RewardPunishmentType IN ('奖励','惩罚')), -- 奖惩情况(奖励/惩罚) 

    RewardPunishmentContent varchar(500),             -- 奖惩内容(简要描述),使用TEXT类型以支持更长的文本 

    ProcessingDateTime DATETIME DEFAULT GETDATE()       -- 处理时间 

);

--建立外键

ALTER TABLE RewardsAndPunishments

ADD CONSTRAINT FK_Rew1 FOREIGN KEY(EmployeeID) REFERENCES Employees(EmployeeID)

ALTER TABLE RewardsAndPunishments

ADD CONSTRAINT FK_Rew2 FOREIGN KEY(SupervisorID) REFERENCES Employees(EmployeeID)

      1. 部门规则

--建立部门规则表

CREATE TABLE DepartmentRules ( 

    DepartmentRuleID INT IDENTITY(1,1) PRIMARY KEY,       -- 部门规则编号 

    DepartmentID INT NOT NULL,              -- 部门编号 

    DepartmentRule VARCHAR(255) NOT NULL     -- 部门规则(这里假设为URL) 

);

--建立外键

ALTER TABLE DepartmentRules

ADD CONSTRAINT FK_Dep FOREIGN KEY(DepartmentID) REFERENCES Departments(DepartmentID)

    1. 招聘子系统
      1. 招聘信息

--建立招聘信息表

CREATE TABLE JobPostings ( 

    JobPostingID INT IDENTITY(1,1) PRIMARY KEY,    -- 招聘信息编号 (唯一标识符) 

    JobPosition VARCHAR(10) NOT NULL,               -- 招聘岗位 

    JobRequirements VARCHAR(255) NOT NULL,                  -- 招聘要求

    NumberOfPositions INT NOT NULL,                 -- 招聘人数 

    ResumeSubmissionLink VARCHAR(255) NOT NULL,     -- 简历投递链接 (假设为URL格式) 

    Deadline DATETIME NOT NULL,                      -- 截止时间 

    SupervisorID INT                                --发布人编号

);

ALTER TABLE JobPostings

ADD CONSTRAINT FK_Job FOREIGN KEY(SupervisorID) REFERENCES Employees(EmployeeID);

      1. 简历信息

--建立简历信息表

CREATE TABLE Resumes ( 

    ResumeID INT IDENTITY(1,1) PRIMARY KEY,           -- 简历编号 

    PhotoURL VARCHAR(255) NOT NULL,           -- 照片(URL) 

    Name VARCHAR(10) NOT NULL,           -- 姓名 

    IDCardNumber VARCHAR(20) NOT NULL,   -- 身份证号码 

    ContactWay VARCHAR(20) NOT NULL,     -- 联系方式 

    HomeAddress VARCHAR(20) NOT NULL,        -- 家庭住址 

    ResumeContent VARCHAR(255) NOT NULL          -- 简历内容

);

--建立约束检查身份证号的合法性

--建立函数检查身份证号的合法性

CREATE FUNCTION IsvalidIDCard ( @IDCardNo VARCHAR(20) )

RETURNS BIT

AS

BEGIN

DECLARE @Length INT ,

@Loop INT ,

@Sum INT

DECLARE @SingleChar CHAR

SET @Sum = 0

IF LTRIM(RTRIM(@IDCardNo)) = ''

BEGIN

RETURN 0

END

SET @Length = LEN(@IDCardNo)

--判断位数

IF @Length < > 18

AND @Length < > 15

BEGIN

RETURN

END

IF @Length = 18

BEGIN

IF ISNUMERIC(LEFT(@IDCardNo, 17)) = 0

BEGIN 

RETURN 0

END

IF ISDATE(SUBSTRING(@IDCardNo, 7, 4) + ' - '

+ SUBSTRING(@IDCardNo, 11, 2) + ' - '

+ SUBSTRING(@IDCardNo, 13, 2)) = 0

BEGIN

RETURN 0

END

SET @Loop = 17

WHILE ( @Loop >= 1 )

BEGIN

SET @Sum = @Sum

+ CONVERT(INT, REPLACE(SUBSTRING(@IDCardNo, @Loop,

 1), '.', ''))

* ( POWER(2, ( 18 - @Loop )) % 11 )

SET @Loop = @Loop - 1

END

SET @Loop = @Sum % 11

IF @Loop = 0

BEGIN

SET @SingleChar = '1'

END

ELSE

IF @Loop = 1

BEGIN

SET @SingleChar = '0'

END

ELSE

IF @Loop = 2

BEGIN

SET @SingleChar = 'X'

END

ELSE

BEGIN

SET @SingleChar = CONVERT(VARCHAR(2), ( 12- @Loop ))

END

IF LOWER(RIGHT(@IDCardNo, 1)) < > LOWER(@SingleChar)

BEGIN

RETURN 0

END

END

ELSE

IF @Length = 15

BEGIN

IF ISNUMERIC(@IDCardNo) = 0

BEGIN

RETURN 0

END 

IF ISDATE('19' + SUBSTRING(@IDCardNo, 7, 2) + ' - '

    + SUBSTRING(@IDCardNo, 9, 2) + ' - '

    + SUBSTRING(@IDCardNo, 11, 2)) = 0

BEGIN

RETURN 0

END

END

RETURN 1

END

--建立触发器当输入身份证号码的时候自动触发

CREATE TRIGGER TRG_Re_IDCARD

ON Resumes

FOR INSERT,UPDATE

AS

BEGIN

DECLARE @IDCardNumber VARCHAR(20)

SELECT @IDCardNumber=IDCardNumber FROM INSERTED

IF dbo.IsvalidIDCard(@IDCardNumber)=0

BEGIN

PRINT '身份证号码不准确,请检查输入的数据!'

ROLLBACK

END

END

--验证联系方式的准确性,经过查询得知一般在通过第三方服务进行验证,在到达数据库时已经正确,故而在此处不再验证

      1. 员工信息

--建立员工信息表

CREATE TABLE Employees ( 

    EmployeeID INT PRIMARY KEY,                   -- 员工编号 

    EmployeePhoto VARCHAR(255) NOT NULL,              -- 员工照片URL 

    EmployeeName VARCHAR(10) NOT NULL,             -- 员工姓名  

    AccountPassword VARCHAR(255) DEFAULT '123456' NOT NULL,         -- 员工密码(加密后存储) 

    IDCardNumber VARCHAR(20) NOT NULL,            -- 身份证号码 

    HireDate DATETIME NOT NULL,                   -- 入职时间 

    DepartmentID INT NOT NULL,                             -- 部门编号 

    PositionID INT NOT NULL,                               -- 职位编号 

);

--建立外键约束

ALTER TABLE Employees

ADD CONSTRAINT FK_Emp1 FOREIGN KEY(DepartmentID) REFERENCES Departments(DepartmentID)

ALTER TABLE Employees

ADD CONSTRAINT FK_Emp2 FOREIGN KEY(PositionID) REFERENCES Positions(PositionID)

--建立约束检查身份证号的合法性

--验证身份证号码合法性的函数详见Resumes

--建立触发器当输入身份证号码的时候自动触发

CREATE TRIGGER TRG_Em_IDCARD

ON Employees

FOR INSERT,UPDATE

AS

BEGIN

DECLARE @IDCardNumber VARCHAR(20)

SELECT @IDCardNumber=IDCardNumber FROM INSERTED

IF dbo.IsvalidIDCard(@IDCardNumber)=0

BEGIN

PRINT '身份证号码不准确,请检查输入的数据!'

ROLLBACK

END

END

      1. 部门信息

---建立部门信息

CREATE TABLE Departments ( 

    DepartmentID INT PRIMARY KEY,                 -- 部门编号,作为主键 

    DepartmentName VARCHAR(10) NOT NULL,                  -- 部门名称,不允许为空

    SupervisorID INT NOT NULL                       --部门负责人编号

);

ALTER TABLE Departments

ADD CONSTRAINT FK_Dep FOREIGN KEY(SupervisorID) REFERENCES Employees(EmployeeID);

      1. 面试信息

--建立面试信息表

CREATE TABLE Interviews ( 

    InterviewID INT IDENTITY(1,1) PRIMARY KEY,       -- 面试信息编号 (唯一标识符) 

    InterviewLocation VARCHAR(50) NOT NULL,           -- 面试地点 

    InterviewTime DATETIME NOT NULL,                  -- 面试时间 

    InterviewerID INT NOT NULL,                                -- 面试考官编号

    InterviewerName VARCHAR(10) NOT NULL,              -- 面试考官名称 

    CandidateName VARCHAR(10) NOT NULL,                -- 面试人名称 

    CandidateContactInfo VARCHAR(20) NOT NULL          -- 面试人联系方式 

); 

--建立外键

ALTER TABLE Interviews

ADD CONSTRAINT FK_Int FOREIGN KEY(InterviewerID) REFERENCES Employees(EmployeeID)

    1. 通知子系统
      1. 通知信息

--建立通知信息表

CREATE TABLE CommunicationInfo ( 

    CommunicationID INT IDENTITY(1,1) PRIMARY KEY, -- 通信信息编号(唯一标识符) 

    NotificationContent VARCHAR(500) NOT NULL               -- 通知信息内容(是系统对外部项的通知信息) 

);

    1. 培训子系统
      1. 培训信息

--建立培训信息表

CREATE TABLE TrainingInfo ( 

    TrainingID INT IDENTITY(1,1) PRIMARY KEY,       -- 培训编号(唯一标识符) 

    TrainingContent VARCHAR(255) NOT NULL,           -- 培训内容(URL格式)

    TrainingTarget VARCHAR(500) NOT NULL,            -- 培训对象 

    TrainingStartTime DATETIME NOT NULL,              -- 培训开始时间 

    TrainingEndTime DATETIME NOT NULL                 -- 培训结束时间 

);

      1. 培训规则

--建立培训规则表

CREATE TABLE TrainingRules ( 

    TrainingRuleID INT IDENTITY(1,1) PRIMARY KEY,       -- 培训规则编号(唯一标识符) 

    TrainingRuleName VARCHAR(10) NOT NULL,               -- 培训规则名称 

    TrainingRuleContent VARCHAR(255) NOT NULL,                   -- 培训规则具体内容(URL格式)

    EffectiveDate DATETIME NOT NULL,                     -- 生效日期 

    ExpirationDate DATETIME,                            -- 失效日期(如果规则永不过期,则可以为NULL) 

    CreateTime DATETIME NOT NULL DEFAULT GETDATE(), -- 创建时间

    UpdateTime DATETIME-- 修改时间

);

--建立触发器自动更新修改时间

CREATE TRIGGER TRIG_Tra

ON TrainingRules

FOR UPDATE

AS

BEGIN

IF UPDATE(TrainingRuleName) OR UPDATE(TrainingRuleContent) OR UPDATE(EffectiveDate) OR UPDATE(ExpirationDate)

BEGIN

UPDATE TrainingRules

SET UpdateTime=GETDATE()

WHERE TrainingRules.TrainingRuleID IN (SELECT TrainingRuleID FROM INSERTED)

END

END;

      1. 培训报名信息

-REATE TABLE TrainingRegistrations ( 

    EmployeeID INT NOT NULL,               -- 员工编号 

    TrainingID INT NOT NULL,               -- 培训编号 

    RegistrationDate DATETIME DEFAULT GETDATE() NOT NULL,    -- 报名时间(日期/时间) 

    PRIMARY KEY (EmployeeID, TrainingID),  -- 主键由员工编号和培训编号组合而成 

);

--建立外键

ALTER TABLE TrainingRegistrations

ADD CONSTRAINT FK_TraR1 FOREIGN KEY(EmployeeID) REFERENCES Employees(EmployeeID)

ALTER TABLE TrainingRegistrations

ADD CONSTRAINT FK_TraR2 FOREIGN KEY(TrainingID) REFERENCES TrainingInfo(TrainingID)--建立触发器实现如果报名时间晚于培训结束时间,则报名失败

CREATE TRIGGER TRG_CHE

ON TrainingRegistrations

FOR INSERT

AS

BEGIN

DECLARE @TrainingID INT

DECLARE @TraingDate DATE

SELECT @TrainingID=INSERTED.TrainingID

FROM INSERTED

SELECT @TraingDate=TrainingInfo.TrainingEndTime

FROM TrainingInfo

WHERE @TrainingID=TrainingInfo.TrainingID

IF GETDATE()>@TraingDate

BEGIN

PRINT '培训时间已过,无法报名!'

ROLLBACK

END

END

    1. 薪酬管理子系统
      1. 工资表

--建立工资表

CREATE TABLE EmployeeSalaries ( 

    SalaryID INT IDENTITY(1,1) PRIMARY KEY,     -- 工资编号(自动递增) 

    EmployeeID INT NOT NULL,                     -- 员工编号 

    SalaryDate DATE NOT NULL,                    -- 时间(日期) 

    BaseSalary DECIMAL(10, 2) NOT NULL,          -- 员工基本工资 

    BonusAmount DECIMAL(10, 2) DEFAULT 0,        -- 奖金金额 

    LateTimes INT DEFAULT 0,                   -- 缺勤次数 

    AbsentTimes INT DEFAULT 0,                   -- 缺勤次数 

    FineAmount DECIMAL(10, 2) DEFAULT 0,         -- 罚款金额 

    GrossSalary DECIMAL(10, 2) NOT NULL,

    NetSalary DECIMAL(10, 2)NOT NULL,

    SalaryCalculationRuleID INT              --采用哪套规则计算薪资

);

--建立工资表的相关处理逻辑

CREATE PROC EXRC_EMPL(@EmployeeID INT,@SalaryDate DATE,@SalaryCalculationRuleID INT)

AS

BEGIN

DECLARE @GrossSalary DECIMAL(10, 2) 

DECLARE @NetSalary DECIMAL(10, 2) 

DECLARE @BaseSalary DECIMAL(10, 2)

DECLARE @BonusAmount DECIMAL(10, 2) 

DECLARE @FineForLate DECIMAL(10, 2) -- 迟到的罚款金额 

DECLARE @FineForAbsence DECIMAL(10, 2) -- 缺勤的罚款金额 

DECLARE @LateTimes INT

DECLARE @AbsenceTimes INT

DECLARE @FineAmount DECIMAL(10, 2)

DECLARE @TaxRate DECIMAL(10, 2)

SET @FineAmount=(SELECT FineAmount FROM SalaryCalculationRules WHERE @SalaryCalculationRuleID=SalaryCalculationRules.SalaryCalculationRuleID)

SET @FineForAbsence=(SELECT FineForAbsence FROM SalaryCalculationRules WHERE @SalaryCalculationRuleID=SalaryCalculationRules.SalaryCalculationRuleID)

SET @TaxRate=(SELECT TaxRate FROM SalaryCalculationRules WHERE @SalaryCalculationRuleID=SalaryCalculationRules.SalaryCalculationRuleID)

SELECT  

@BaseSalary = BaseSalary, 

@BonusAmount = BonusAmount 

FROM  

EmployeeSalaries  

WHERE  

EmployeeID = @EmployeeID

SELECT

@LateTimes=(SELECT COUNT(*) FROM EmployeeAttendance

WHERE EmployeeAttendance.AttendanceStatus='迟到'

AND EmployeeAttendance.EmployeeID=@EmployeeID)

SELECT

@LateTimes=(SELECT COUNT(*) FROM EmployeeAttendance

WHERE EmployeeAttendance.AttendanceStatus='缺勤'

AND EmployeeAttendance.EmployeeID=@EmployeeID)

SET @FineAmount = (@FineForLate * @LateTimes) + (@FineForAbsence * @AbsenceTimes)-- 计算罚款金额   

SET @GrossSalary = @BaseSalary + @BonusAmount - @FineAmount-- 计算总工资和净工资   

SET @NetSalary = @GrossSalary * @TaxRate;

INSERT INTO EmployeeSalaries (EmployeeID, SalaryDate, BaseSalary, BonusAmount, FineAmount, GrossSalary, NetSalary)  -- 插入新的工资记录到EmployeeSalaries表中 

VALUES (@EmployeeID, @SalaryDate, @BaseSalary, @BonusAmount, @FineAmount, @GrossSalary, @NetSalary); 

DELETE FROM EmployeeAttendance--每次计算完工资就清除该员工的考勤记录表

WHERE EmployeeAttendance.EmployeeID=@EmployeeID

END;

--建立外键

ALTER TABLE EmployeeSalaries

ADD CONSTRAINT FK_ES1 FOREIGN KEY(EmployeeID) REFERENCES Employees(EmployeeID)

ALTER TABLE EmployeeSalaries

ADD CONSTRAINT FK_ES2 FOREIGN KEY(ESalaryCalculationRuleID) REFERENCES SalaryCalculationRules(SalaryCalculationRuleID)

      1. 薪资计算规则

---建立薪资计算规则表

CREATE TABLE SalaryCalculationRules ( 

SalaryCalculationRuleID INT PRIMARY KEY,           -- 薪资计算规则编号 

TaxRate DECIMAL(10, 2) NOT NULL,                     --税率

FineAmount DECIMAL(10, 2) NOT NULL,                  --迟到罚款

FineForAbsence DECIMAL(10, 2) NOT NULL,                  --缺勤罚款

SalaryCalculationDetails VARCHAR(255) NOT NULL,    -- 薪资计算规则具体内容,url

EffectiveDate DATETIME NOT NULL,                   -- 生效日期 

ExpirationDate DATETIME,                          -- 失效日期

CreationDate DATETIME NOT NULL DEFAULT GETDATE(), -- 建立日期

UpdateTime DATETIME NULL                      -- 修改日期

);

--建立触发器自动更新修改时间

CREATE TRIGGER TRIG_SCR

ON SalaryCalculationRules

FOR UPDATE

AS

BEGIN

IF UPDATE(SalaryCalculationDetails) OR UPDATE(SalaryCalculationDetails) OR UPDATE(EffectiveDate) OR UPDATE(ExpirationDate)

BEGIN

UPDATE SalaryCalculationRules

SET UpdateTime=GETDATE()

WHERE SalaryCalculationRules.SalaryCalculationRuleID IN (SELECT SalaryCalculationRuleID FROM INSERTED)

END

END

      1. 职位表

--建立职位表

CREATE TABLE Positions ( 

    PositionID INT IDENTITY(1,1) PRIMARY KEY, -- 职位编号(自动递增) 

    PositionName VARCHAR(10) NOT NULL,        -- 职位名称 

    BaseSalary DECIMAL(10, 2) NOT NULL         -- 基本工资 

);

    1. 考勤子系统
      1. 请假信息

CREATE TABLE LeaveRequests ( 

    LeaveID INT IDENTITY(1,1) PRIMARY KEY, -- 请假编号(自动递增) 

    EmployeeID INT NOT NULL,                -- 员工编号 

    SupervisorID INT NOT NULL,              -- 审核部长编号 

    StartTime DATETIME NOT NULL,            -- 开始时间(日期/时间) 

    EndTime DATETIME NOT NULL,              -- 结束时间(日期/时间) 

    ApprovalStatus VARCHAR(10) NOT NULL DEFAULT '未审核' CHECK (ApprovalStatus IN ('通过', '未通过', '未审核')), -- 审核意见 

    ApprovalTime DATETIME,                  -- 审核时间(日期/时间) 

);

--建立外键

ALTER TABLE LeaveRequests

ADD CONSTRAINT FK_LR1 FOREIGN KEY(EmployeeID) REFERENCES Employees(EmployeeID)

ALTER TABLE LeaveRequests

ADD CONSTRAINT FK_LR2 FOREIGN KEY(SupervisorID ) REFERENCES Employees(EmployeeID)

      1. 考勤信息

--建立考勤信息表

CREATE TABLE EmployeeAttendance ( 

    EmployeeID INT NOT NULL,               -- 员工编号 

    AttendanceTime DATETIME NOT NULL,      -- 时间(日期/时间) 

    AttendanceStatus VARCHAR(10) NOT NULL CHECK (AttendanceStatus IN ('迟到', '缺勤', '正常', '请假')), -- 考勤状态 

    PRIMARY KEY (EmployeeID, AttendanceTime), -- 主键由员工编号和考勤时间组合而成 

);

--建立外键

ALTER TABLE EmployeeAttendance

ADD CONSTRAINT FK_EA FOREIGN KEY(EmployeeID) REFERENCES Employees(EmployeeID)

--每次计算完工资之后清理考勤信息表(在工作表已实现)

--建立考勤时间的降序索引

CREATE NONCLUSTERED INDEX NON_EMP

ON EmployeeAttendance (AttendanceTime DESC)

  1. 总结(感谢和收获)

在写本篇文档的时候,刚开始的设计是划分了四个角色,主管,总经理,普通员工,还有简历投递人员,但是如果单从主管来划分权限,其它部门的主管应当不具备删除,增加员工信息这项功能的,但是他们又应该具有部门管理的功能,所以进行了修改。但是因为时间的关系,该数据库的设计还不够完善,比如在安全性设计这一部分,不完善,还有对于薪资计算规则等部分表的设计不够具体,会影响计算结果,比如对于薪资计算规则表,用的是url来存储文件路径,但是在数据库中没有存储具体规则,在计算工资的时候就比较困难,还有对于想实现的显示培训进度的功能,不同的员工具有不同的培训要求,但是在培训规则表中,也没有具体规则,所以对于显式计算进度会比较困难,如果时间允许的话,把各种规则细化会比较符合实际情况。在编写此篇文档的时候确实花费了不少的时间,后面就比较疲乏了,对于一些细节上的东西可能考虑得不仔细,但是也学到了很多,比如如何验证身份证号码的正确性,如何对密码进行加密存储等内容,对数据库的一些操作也更加熟悉了。

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值