数据库课程设计报告范例2人事管理系统.docx
《数据库课程设计报告范例2人事管理系统.docx》由会员分享,可在线阅读,更多相关《数据库课程设计报告范例2人事管理系统.docx(28页珍藏版)》请在冰豆网上搜索。
数据库课程设计报告范例2人事管理系统
目录
一、系统定义…………………………………………………………….1
二、需求分析…………………………………………………………….1
三、系统设计…………………………………………………………….5
四、详细设计……………………………………………………………13
五、课程设计总结………………………………………………………20
六、参考文献……………………………………………………………21
七、附录…………………………………………………………………22
一、系统定义
随着计算机的日益普及和网络的发展,数据库的应用范围越来越广,数据库应用的功能也越来越强,因此编写管理信息系统应用程序也显得尤为重要,在强调管理,强调信息的现代社会中它变得越来越普及。
人事管理是任何企事业单位都需要进行的一项工作,因此,开发制作人事管理系统具有较大的社会现实意义,同时人事管理系统是一切应用系统的典范,它具有一切应用系统的特征,系统结构与现实生活紧密结合,具体直观,具有典范的数据库系统的特性。
人事管理系统主要用于企业内部员工的档案、工资、考勤、评价的管理,便于公司领导掌握人员的动向,及时调整人才的分配,同时也减少了手工操作带来的一些繁琐与不便,使员工情况的记录和统计变得十分简单.这些优点可以极大的提高企业对人事管理的效率.因此,人事管理系统是企事业信息化、智能化、科学化和正规化不可缺少的管理软件。
二、需求分析
(一)系统综合需求
系统开发的总体任务是要实现企业人事信息关系的系统化,规范化和自动化。
系统功能分析是在系统开发的总体任务的基础之上完成的。
人事管理系统主要有以下几项功能:
1.员工档案的管理:
包括员工基本信息,所在部门,工作信息和工作简历的输入,员工信息的查询和修改。
2.员工考勤的管理:
包括考勤的添加,查询,修改和删除。
3.员工工资的管理:
包括工资的添加,工资报表的查询,修改和删除。
4.员工评价的管理:
包括评价的输入,查询和修改。
5.人事变动的详细记录,包括岗位和部门的调整,便于掌握人员的动向,及时调整人才的分配。
6.企业所有部门的查询与管理。
7.管理员以及其它功能模块。
(二)系统逻辑模型
1.
数据流程图
根据系统功能的要求,可以将系统分解成几个功能模块来分别设计,功能模块如图2-1所示:
图2-1系统功能模块图
2.数据字典
该软件的数据库由下述四张数据表组成:
员工信息表:
PERSONNEL.DBF
基础工资设置表:
COURSE.DBF
岗位工资设置表:
RANK.DBF
工龄工资设置表:
GONGLING.DBF
1、员工信息表:
PERSONNEL.DBF
字段
字段名
类型
宽度
说明
1
员工号
字符型
3
数字
2
员工姓名
字符型
10
小于等于5个汉字
3
员工性别
字符型
2
“男”或“女”
4
岗位名称
字符型
14
小于等于7个汉字
5
工龄
数值型
2
1-99之间
6
工资等级
数值型
2
1-99之间
2、基础工资设置表:
COURSE.DBF
字段
字段名
类型
宽度
说明
1
工资等级
数值型
2
1-99之间
2
工资标准
数值型
4
1-9999之间
3、岗位工资设置表:
RANK.DBF
字段
字段名
类型
宽度
说明
1
岗位名称
字符型
14
小于等于7个汉字
2
工资标准
数值型
4
1-9999之间
4、工龄工资设置表:
GONGLING.DBF
字段
字段名
类型
宽度
说明
1
工资等级
数值型
2
1-99之间
2
工资标准
数值型
4
1-9999之间
5、管理员注册表:
ADMINER.DBF
字段
字段名
类型
宽度
说明
1
注册名
字符型
10
任意字符
2
口令
字符型
10
英文字母或数字
三、系统设计
(一)数据库概念设计
分析前面的系统功能要求,需要一个表来存储和管理员工信息,使系统能够接受员工原始的各项数据,以实现数据录入、查询或统计员工信息等功能。
员工是本系统的第一个实体。
为了能实现查询和统计部门内员工情况等功能,必须有一个表来存储和管理所有部门的信息。
部门是本系统的第二个实体。
工资是以员工工作情况来制定的。
需要建立一个表来记录各种工资、津贴、扣款的信息。
它主要为各种查询和统计功能提供工资数据。
工资是第3个实体。
据此可以绘出工资管理系统数据库的E-R图如下:
1
N
MM1
实体属性列表如下:
实体
属性
员工
工号
姓名
性别
年龄
籍贯
身份证号
婚姻状况
学历
部门名称
工种
工龄
职务等级
部门
部门名称
部门负责人
部门人数
工资
工号
工资年月
岗位工资
岗位补贴
出勤天数
加班工时
加班天数
加班类别
加班工资
病假扣款
事假扣款
其他扣款
应发工资
实发工资
(二)数据库逻辑设计
将数据库的概念模型转换为关系模型:
实体转换成的关系模式有:
员工(工号,姓名,性别,年龄,籍贯,身份证号,婚姻状况,学历,部门名称,工种,工龄,职务等级)
部门(部门编号,部门名称,部门负责人,部门人数)
获得(工号,姓名)
工资(工号,工资年月,岗位工资,岗位补贴,出勤天数,加班工时,加班工资,加班天数,加班类别,病假扣除,事假扣除,其它扣除,应发工资,实发工资)
因为,员工与工资是1:
N的关系,所以各关系模式为:
员工(工号,姓名,性别,年龄,籍贯,身份证号,婚姻状况,学历,部门名称,工种,工龄,职务等级)
部门(部门名称,部门负责人,部门人数)
工资(工号,工资年月,岗位工资,岗位补贴,出勤天数,加班工时,加班工资,加班天数,加班类别,病假扣除,事假扣除,其它扣除,应发工资,实发工资)
带下划线的属性为各关系模式的外码,字体为粗体的属性为各关系模式的主码。
关系规范式:
工资管理系统∈1NF每个属性均不可再分
(三)数据库与数据表设计——物理结构设计
在SQL数据库中需要建立3个数据表:
员工信息数据表、部门信息数据表和工资数据表。
1.数据库与数据表设计
①员工信息数据表定义
其中,“工号”是表的主键,惟一标识。
“部门名称”是外键。
“工号”将记录员工的编号,在员工信息表中增加这一列时,虽然增加了数据冗余,但可以在查询每个员工信息时,提高系统的性能。
因为员工信息表的记录数相对固定,相比之下,增加这个冗余的列对于整个系统来说是有利的。
通过它,系统将引用到工资信息。
此表取名为“员工”
②部门信息数据表定义
其中,部门名称是该表的主键,惟一标识一个部门。
此表取名为“部门”
③工资数据表定义
其中,“工号”作为该表的主键,唯一标识,保证客房信息表数据的参照完整性。
此表表取名为“工资”
根据上面三个数据表的设计,可执行下面的步骤创建数据表
1)打开企业管理器,在本地服务器上创建新的数据库“工资管理库”
2)创建表员工、部门、工资
2.数据完整性设计
1)给每个表实施主键约束。
①主键约束、非空值约束
员工:
工号为主键,所以此项非空
部门:
部门名称为主键,所以此项非空
工资:
工号为主键,所以此项非空
2)实施CHECK约束
●员工表中建立一个检查约束,即员工性别不是‘男’就是‘女’
CHECK(性别IN('男','女')
●工资表中建立一个对于出勤天数的检查约束,即出勤天数在0-20天之间
check(出勤天数>=0and出勤天数<=20)
3)外键约束
员工表中,工号、部门名称为外键。
FK_员工_工资FOREIGNKEY(工号)REFERENCES工资(工号)
FK_员工_部门FOREIGNKEY(部门名称)REFERENCES部门(名称)
通过此键建立3个表的联系
4)惟一约束
a)每个表的主键需定义为惟一性:
对于工资表,因为工号是主键,联系着员工表,所以建立唯一性
altertable工资addconstraintUQ_工号unique(工号)
b)对于员工表,员工的工号、身份证号、部门名称都是用于识别员工身份,所以建立唯一约束
altertable员工addconstraintUQ_工号unique(工号)
5)强制约束
对INSERT和UPDATE操作强制约束,表明以后对员工表中的工号、部门名称的添加和更新操作都会分别检查在工资表、部门表中是否存在与此相应的内容。
6)规则
1)为了检查员工表中输入的身份证号码是有效位数,可以创建一个规则绑定到该列;在数据操作时进行检查。
规则的定义语句为:
(LEN((@身份证号)=15)OR(LEN(@身份证号)=18)
四、详细设计
(一)建数据库——工资管理库
IFEXISTS(SELECT*FROMsysdatabasesWHEREname='工资管理库')
dropdatabase工资管理库
GO
CREATEDATABASE工资管理库
ONPRIMARY(
NAME=工资管理库,
FILENAME='D:
\工资管理库_data.mdf',
SIZE=4MB,
MAXSIZE=6MB,
FILEGROWTH=2MB
)
LOGON(NAME='工资管理库_log',
FILENAME='D:
\工资管理库.ldf',
SIZE=1MB,MAXSIZE=25MB,FILEGROWTH=10%)
(二)建表——员工信息表、部门信息表、工资信息表
●IFEXISTS(SELECT*FROMsysobjectsWHEREname='员工')
DROPTABLE员工
GO
createtable员工(
工号VARCHAR(50)NOTNULLprimarykey,
姓名VARCHAR(50)NOTNULL,
性别CHAR
(2)DEFAULT'男'CHECK(性别IN('男','女')),
年龄CHAR(10)NOTNULL,
籍贯VARCHAR(50)NOTNULL,
身份证号VARCHAR(50)UNIQUENOTNULL,
婚姻情况VARCHAR(50),
学历VARCHAR(50),
部门名称VARCHAR(50)NOTNULL,
工种VARCHAR(50),
工龄VARCHAR(50)NOTNULL,
职务等级VARCHAR(50)
)GO
●IFEXISTS(SELECT*FROMsysobjectsWHEREname='部门')
DROPTABLE部门
GO
createtable部门(
部门名称VARCHAR(50)primarykeyNOTNULL,
部门负责人VARCHAR(50)NOTNULL,
部门人数VARCHAR(50)
)
GO
●IFEXISTS(SELECT*FROMsysobjectsWHEREname='工资')
DROPTABLE工资
GO
CREATETABLE工资(
工号varchar(50)notnullprimarykey,
工资年月varchar(50)notnull,
岗位工资decimalnotnull,
岗位补贴decimal,
出勤天数decimalnotnull,
加班工时decimal,
加班工资decimal,
加班天数decimal,
加班类别varchar(50),
病假扣款decimal,
事假扣款decimal,
其他扣款decimal,
应发工资decimalnotnull,
实发工资decimalnotnull
)
GO
(三)视图
(1)查询员工工资情况
建立一个视图,反映员工姓名及工资情况。
CREATEVIEW员工_工资
AS
SELECT员工.姓名,工资.*
FROM员工,工资
WHERE员工.工号=工资.工号
(四)存储过程
(1)指定员工工资情况的查询
定义一个名为stsffCost的存储过程,该存储过程以以工资年月(@staffgongzi)、出勤天数(@staffchuqin)、加班工资(@staffjiaban)、应发工资(@staffying)、实发工资(@staffshi)为输入参数返回指定员工工资信息的存储过程。
stsffCost代码如下:
CREATEPROCEDUREstaffCost
@staffgongzidecimal,
@staffchuqindecimal,
@staffjiabandecimal,
@staffyingdecimal,
@staffshidecimal
AS
SELECT*
FROM工资
WHERE工资年月=@staffgongziAND
出勤天数=@staffchuqinAND
加班工资=@staffjiabanAND
应发工资=@staffyingAND
实发工资=@staffshi
GO
(2)指定范围的员工的信息查询。
以员工工号、部门编号为输入参数返回指定员工基本信息的存储过程,要求输入部分员工信息查询员工全部信息。
定义一个名为stsffInfo的存储过程,该存储过程以员工工号(@staffNum)、部门编号(@bmNum)作为输入参数,存储过程返回查询到的结果集。
satffInfo的定义代码如下:
CREATEPROCEDUREstaffInfo
@staffNumVARCHAR(50)='%',
@bmNumVARCHAR(50)='%'
AS
SELECT*
FROM员工,部门
WHERE员工.部门名称=部门.部门名称AND
((员工.工号LIKE@staffNumVARCHAR(50)+'%')AND
(部门编号LIKE@bmNumVARCHAR(50)+'%'))
GO
(3)统计指定年份各部门每个月份的工资总额。
以年份为输入参数,以总工资金额为输出参数,产生该年度12个月份的每部门工资统计的存储过程。
定义该存储过程名为bmMonhSum,输入参数为@ThisYear,实现代码如下:
CREATEPROCEDUREbmMonthSum
@ThisYearCHAR(10)
AS
SELECTDATEPART(MM,工资年月)AS员工工资月份,SUM(实发工资)AS部门人数
FROM员工,工资,部门
WHERE员工.工号=工资.工号AND员工.部门名称=部门.部门名称ANDDATEPART(YYYY,工资年月)=@ThisYear
GROUPBYDATEPART(MM,工资年月)
GO
(五)触发器
(1)关键操作,在工资表里添加一条新的记录,实发工资会自动更新新的数据。
定义这个触发器名称为insert_工资。
代码如下:
createtriggerinsert_工资on工资forinsert
as
declare@ichar(20)
declare@bbint
set@i=case
when@bb=0001then'实发工资'
when@bb=0002then'实发工资'
end
print@i
(2)员工新调入
进行员工新调入操作是在员工信息表中添加一条新的记录,可以为员工信息表设计一个Insert触发器,当员工信息表执行Insert操作后自动更改出部门信息表相应记录的数据。
定义这个触发器名称为staff_insert。
其代码如下:
CREATETRIGGERstaff_insertON员工
FORINSERT
ASIF(SELECTCOUNT(*)
FROM部门,inserted,工资
WHERE部门.部门人数=inserted.部门人数AND工资.工号=inserted.工号)=0
ROLLBACKTRANSACTION
GO
(3)员工调出
进行员工调出操作是在员工信息表中删除该员工的记录,可以为员工信息表设计一个Delete触发器,当员工信息表执行Delete操作后,工资表、部门表中的记录也将全部删除。
定义这个触发器名称为staff_delete。
其实现代码如下:
CREATETRIGGERstaff_deleteON员工
FORDELETE
ASSELECTCOUNT(*)
FROM部门,工资,deleted
WHERE部门.部门人数=deleted.部门人数AND工资.工号=deleted.工号
GO
(4)员工内部调动
为员工表设计一个名为staff_update的UPDATE触发器,当系统对员工表进行UPDATE操作后,将会自动触发它。
该触发器将相应记录的部门人数、部门名称、工资更新。
下面是client_update触发器的定义代码;
CREATETRIGGERstaff_updateON员工
FORUPDATE
ASSELECTCOUNT(*)
FROMupdated,部门
WHERE部门.部门名称=updated.部门名称
GO
(六)索引
为提高检索性能,为表创建符合索引,其索引项为工号、姓名。
CREATEINDEX工号_姓名_ind
ON员工(工号,姓名)
GO
(七)运行和维护
1.关系图的建立
使用SQLServer2000的企业管理器创建工资管理系统关系图
工资管理系统的关系图
2.简单查询
1)员工基本信息情况
代码如下:
select*from员工;
2)员工考勤情况;
代码如下:
select出勤天数,工号
from工资;
3)员工每个工种基本工资的设定。
代码如下:
select工种,岗位工资,职务等级
from工资,员工
where工资.工号=员工.工号;
4)加班津贴管理,根据加班时间和类型给予不同的加班津贴;
代码如下:
select加班工时,加班天数,加班类别,加班工资
from工资
WHERE加班工资>0
5)按照不同工种的基本工资情况、员工的考勤情况产生员工的每月的月工资;
代码如下:
select工种,职务等级,岗位工资,出勤天数,实发工资
from员工,工资
WHERE员工.工号=工资.工号
;
6)员工津贴信息情况,反映员工的加班时间,加班类别、加班天数、津贴情况等;
代码如下:
select员工.工号,员工.姓名,加班工时,加班天数,加班类别,加班工资
from工资,员工
WHERE员工.工号=工资.工号;
3.复杂查询
1)员工年终奖金的生成,员工的年终奖金计算公式=(员工本年度的工资总和+津贴的总和)/12;
代码如下:
Select姓名,avg(应发工资+岗位补贴+加班工资)
from工资,员工
where工资.工号=员工.工号
groupby姓名
2)企业内财务部的工资情况查询:
代码如下:
select员工.工号,姓名,职务等级,实发工资
from工资,员工
where工资.工号=员工.工号AND部门名称='财务部'
3)企业工资报表。
能够查询单个员工的工资情况
代码如下:
select工号,工资年月,岗位工资,病假扣款,事假扣款,应发工资,实发工资
from工资,员工
WHERE工资.工号=员工.工号AND姓名LIKE‘闵%;’
4)每个部门的工资情况,按月的工资统计
代码如下:
Select部门名称,avg(实发工资)
from工资,员工
where工资.工号=员工.工号
groupby部门名称
5)员工月工资情况:
年,月,职工号,姓名,部门名,基本工资,病假扣款,事假扣款,应发工资,实发工资。
代码如下:
select工资年月,员工.工号,姓名,部门名称,岗位工资,病假扣款,事假扣款,应发工资,实发工资
from工资,员工
where工资.工号=员工.工号;
4.数据库的用户与权限管理
(1)数据库的用户管理
工资管理库的用户:
Dbo用户属性:
数据库登陆文件夹:
Sa登陆属性
建立新用户:
用户名stu,密码1234(登录名login1)
CREATELOGINlogin1WITHPASSWORD='1234';
USEMaster;
CREATEUSERstuFROlogin1;
GO
(2)用户的权限管理
a)系统权限管理
b)对象权限管理
设置权限
将员工表的录入、查询权限授予给了用户人事部部长
GRANTINSERT,SELECTON员工
TOpublic
WITHGRANTOPTION
5.数据库的备份
对工资管理库进行备份
SQLsever代理启动
单击备份右键,进行数据库备份
6.数据的导入与导出
(1)数据的导出服务
进入Excel查看
(2)数据的导入服务
五、课程设计总结
经过一周的时间,在同学和老师的帮助下,基本完成本次课程设计,基本达到了工资管理系统的要求。
这次数据库课程设计给我的最大的印象是:
流程是一切的根本;架构是重要的,想像的还要重要;实践比一切空谈和理论更能学到东西。
从做这个数据库开始无论遇到什么困难,我都没有一丝的放弃的念头。
在设计过程中一定要慎重,仔细。
来不得半点马虎。
需求分析是整个课程设计的中心,考虑要全面,分析彻底。
才会为后来的设计打下良好的基础。
否则,前功尽弃,甚至不能完成任务。
做实例过程中要注意与说明书中数据项数据类型,数据长度等的一致,命令中心输入任何命令都要谨记一条原则,那就是严格按照格式来,不能像平时在纸上作业。
在本系统的设计与实现的过程中主要讲述了企业人事管理信息系统的系统设计部分,包括功能模块设计、数据库结构设计等。
系统设计为整个程序构建了骨架,各个功能模块实现各个细节部分。
系统的详细设计根据系统分析阶段的结论将系统具体化,并完成了各个模块的添加、修改、删除与查询的功能,直到最后形成一个完整的可行性的管理系统。
最后,再次感谢老师的耐心指导和同学的帮助,没有你们的无私教导和帮助,就没有今天的工资管理系统的实现,衷心感谢你们!
六、参考文献
[1] ****加数据库:
****出版社,20****;
七、附录
部分源代码