当前位置:文档之家› 网络数据库工资管理系统设计项目设计报告.doc

网络数据库工资管理系统设计项目设计报告.doc

网络数据库工资管理系统设计项目设计报告.doc
网络数据库工资管理系统设计项目设计报告.doc

《网络数据库》

课程项目设计

课程名称网络数据库

设计题目工资管理系统

专业班级计应0602班

学生姓名XXX 学号18

指导教师YYYY

QQQQ年P 月R日

目录

一、项目名称:工资管理系统设计 (1)

二、系统功能的基本要求 (1)

三、课程设计的目的和意义 (1)

四、应掌握的知识点 (1)

五、应训练的能力点 (1)

六、数据库设计内容 (2)

(一)需求分析 (2)

(二)概念结构设计 (2)

(三)逻辑结构设计 (3)

(四)数据库与数据表设计——物理结构设计 (4)

1.数据库与数据表设计 (4)

2.数据完整性设计 (5)

七、数据库操作实施与结果——数据库对象的设计 (5)

(一)建数据库——工资管理库 (5)

(二)建表——员工信息表、部门信息表、工资信息表 (6)

(三)视图 (7)

(四)存储过程 (7)

(五)触发器 (8)

(六)索引 (9)

(七)运行和维护 (9)

1. 关系图的建立 (9)

2. 简单查询 (9)

3. 复杂查询 (11)

八、总结 (12)

九、参考文献 (13)

一、项目名称:工资管理系统设计

二、系统功能的基本要求:

?员工每个工种基本工资的设定;

?加班津贴管理,根据加班时间和类型给予不同的加班津贴;

?按照不同工种的基本工资情况、员工的考勤情况产生员工的每月的月工资;

?员工年终奖金的生成,员工的年终奖金计算公式=(员工本年度的工资总和+津贴的总和)/12;

企业工资报表。能够查询单个员工的工资情况、每个部门的工资情况、按月的工资统计。

三、课程设计的目的和意义

《网络数据库》是实践性教学环节之一,是《网络数据库》课程的辅助教学课程。通过课程设计,使学生掌握数据库的基本概念,结合实际的操作和设计,巩固课堂教学内容,使学生掌握数据库系统的基本概念、原理和技术,将理论与实际相结合,应用现有的数据建模工具和数据库管理系统软件,规范、科学地完成一个小型数据库的设计与实现,把理论课与实验课所学内容做一综合,并在此基础上强化学生的实践意识、提高其实际动手能力和创新能力。

实训目的:

●了解数据库系统的理论

●掌握数据库设计的基本方法,熟悉数据库设计的步骤;

●通过设计数据库系统应用课题,进一步熟悉数据库管理系统的操作技术,提高动手能力,

提高分析问题和解决问题的能力

●学习基本数据库编程方法

●快速跟踪数据库系统软件的新技术及市场应用动态。

四、应掌握的知识点

●数据库基本原理

●关系数据库的设计方法、设计思路

●初步掌握一种关系数据库语言

五、应训练的能力点

●SQL Server 2000的操作与使用

●数据库的概念设计与逻辑设计

●数据库的建立与管理、数据表的建立与操作

●SQL查询语言的使用与编程

●设计和开发一个数据库应用系统的数据库设计部分

六、数据库设计内容

(一)需求分析

本系统要求实现以下主要功能:

1.数据录入功能

主要任务是对各种工资信息进行日常的管理,如工资信息的输入、查询、修改、增加、删除,迅速准确地完成各种工资信息的统计计算和汇总,快速打印出报表。

2.数据查询功能

系统需要提供以下查询功能:

1)员工考勤情况

2)员工工种情况,反映员工的工种、等级,岗位工资等信息

3)员工津贴信息情况,反映员工的加班时间,加班类别、加班天数、岗位补贴情况等

4)员工基本信息情况

5)员工月工资情况:年,月,职工号,姓名,部门名,基本工资,病假扣款,事假扣款,.

应发工资,实发工资

3.数据统计功能

1)统计员工年终奖金

2)统计每部门月工资情况

(二)概念结构设计

分析前面的系统功能要求,需要一个表来存储和管理员工信息,使系统能够接受员工原始的各项数据,以实现数据录入、查询或统计员工信息等功能。员工是本系统的第一个实体。

为了能实现查询和统计部门内员工情况等功能,必须有一个表来存储和管理所有部门的信息。部门是本系统的第二个实体。

工资是以员工工作情况来制定的。需要建立一个表来记录各种工资、津贴、扣款的信息。它主要为各种查询和统计功能提供工资数据。工资是第3个实体。

据此可以绘出工资管理系统数据库的E-R图如下:

实体属性列表如下:

(三)逻辑结构设计

将数据库的概念模型转换为关系模型:

实体转换成的关系模式有:

员工信息(工号,姓名,性别,年龄,籍贯,学历,工种,工龄,职务等级,部门名称)

关系-----→工作(工号,部门名称)

部门(部门编号,部门名称,部门负责人,部门人数)

关系------→获得(工号,姓名)

工资(工号,岗位工资,岗位补贴,出勤天数,加班工时,加班工资,加班天数,加班类别,病假扣除,事假扣除,其它扣除,应发工资,实发工资,部门名称)因为,员工与工资是1:N的关系,所以各关系模式为:

员工信息(工号,姓名,性别,年龄,籍贯,学历,工种,工龄,职务等级,部门名称)部门(部门编号,部门名称,部门负责人,部门人数)

工资(工号,岗位工资,岗位补贴,出勤天数,加班工时,加班工资,加班天数,加班类别,病假扣除,事假扣除,其它扣除,应发工资,实发工资,部门名称)带下划线的属性为各关系模式的外码,字体为粗体的属性为各关系模式的主码。

关系规范式:工资管理系统∈1NF 每个属性均不可再分

(四)数据库与数据表设计——物理结构设计

在SQL数据库中需要建立3个数据表:员工信息数据表、部门数据表和工资数据表。

1.数据库与数据表设计

①员工信息数据表定义

其中,“工号”是表的主键,惟一标识。

“部门名称”是外键。“工号”将记录员工的编号,在员工信息表中增加这一列时,虽然增加了数据冗余,但可以在查询每个员工信息时,提高系统的性能。因为员工信息表的记录数相对固定,相比之下,增加这个冗余的列对于整个系统来说是有利的。通过它,系统将引用到工资信息。

此表取名为“员工信息”

②部门数据表定义

其中,部门名称是该表的主键,惟一标识一个部门。

此表取名为“部门”

③工资数据表定义

其中,“工号”作为该表的主键,唯一标识,保证客房信息表数据的参照完整性。

此表表取名为“工资”

根据上面三个数据表的设计,可执行下面的步骤创建数据表

1)打开企业管理器,在本地服务器上创建新的数据库“工资管理库”

2)创建表员工信息、部门、工资

2.数据完整性设计

1)给每个表实施主键约束。

①主键约束、非空值约束

员工:工号为主键,所以此项非空

部门:部门名称为主键,所以此项非空

工资:工号为主键,所以此项非空

2)实施CHECK约束

员工表中建立一个检查约束,即员工性别不是‘男’就是‘女’

CHECK(性别 IN('男','女')

3)外键约束

员工信息表中,部门名称为外键。工号为主键

工资FOREIGN KEY(部门名称) REFERENCES 部门(部门名称)

通过此键建立3个表的联系

4)惟一约束

a)每个表的主键需定义为惟一性:

对于工资表,因为工号是主键,联系着员工表,所以建立唯一性

alter table 工资add constraint UQ_工号unique(工号)

b)对于员工表,员工的工号、部门名称都是用于识别员工身份,所以建立唯一约束

alter table 员工add constraint UQ_工号unique(工号)

七、数据库操作实施与结果——数据库对象的设计

(一)建数据库——工资管理库

IF EXISTS(SELECT * FROM sysdatabases WHERE name='工资管理库') drop database 工资管理库

GO

CREATE DATABASE 工资管理库

ON PRIMARY(

NAME=工资管理库,

FILENAME='D:\工资管理库_data.mdf',

SIZE=4MB,

MAXSIZE=6MB,

FILEGROWTH=2MB

)

LOG ON (NAME ='工资管理库_log',

FILENAME ='D:\工资管理库.ldf',

SIZE=1MB,MAXSIZE=25MB,FILEGROWTH=10%)

(二)建表——员工信息表、部门信息表、工资信息表

●IF EXISTS(SELECT * FROM sysobjects WHERE name='员工')

DROP TABLE 员工

GO

create table 员工信息

(

工号 int NOT NULL primary key,

姓名 VARCHAR(50) NOT NULL,

性别 CHAR(2) DEFAULT'男'CHECK(性别 IN('男','女')),

年龄 int NOT NULL,

籍贯 VARCHAR(50) NOT NULL,

学历 VARCHAR(50),

工种 VARCHAR(50),

工龄 VARCHAR(50) NOT NULL,

职务等级 VARCHAR(50),

部门名称 char(10) NOT NULL foreign key references

部门(部门名称)

)GO

●IF EXISTS(SELECT * FROM sysobjects WHERE name='部门')

DROP TABLE 部门

GO

create table 部门(

部门编号 int,

部门名称 char(10) primary key,

部门负责人 VARCHAR(50) NOT NULL,

部门人数 VARCHAR(50)) GO

IF EXISTS(SELECT * FROM sysobjects WHERE name='工资')

DROP TABLE 工资

GO

CREATE TABLE 工资(

工号 int NOT NULL primary key,

岗位工资 decimal not null,

岗位补贴 decimal,

出勤天数 decimal not null,

加班工时 decimal,

加班工资 decimal,

加班天数 decimal,

加班类别 varchar(50),

病假扣款 decimal,

事假扣款 decimal,

其他扣款 decimal,

应发工资 decimal not null,

实发工资 decimal not null,

部门名称 char(10) NOT NULL foreign key references

部门(部门名称)

) GO

(三)视图

(1)查询员工工资情况

建立一个视图,反映员工姓名及工资情况。

CREATE VIEW 员工信息_工资

AS

SELECT 员工信息.姓名, 工资.*

FROM 员工信息,工资

WHERE 员工信息.工号=工资.工号

(四)存储过程

(1)指定员工工资情况的查询

定义一个名为staffCost的存储过程,该存储过程以以出勤天数(@staffchuqin)、加班工资(@staffjiaban)、应发工资(@staffying)、实发工资(@staffshi)为输入参数返回指定员工工资信息的存储过程。

stsffCost代码如下:

CREATE PROCEDURE staffCost

@staffchuqin decimal,

@staffjiaban decimal,

@staffying decimal,

@staffshi decimal

AS

SELECT *

FROM 工资

WHERE 出勤天数=@staffchuqin AND

加班工资=@staffjiaban AND

应发工资=@staffying AND

实发工资=@staffshi

GO

(2)指定范围的员工的信息查询。

以员工工号、部门编号为输入参数返回指定员工基本信息的存储过程,要求输入部分员工信息查询员工全部信息。

定义一个名为stsffInfo的存储过程,该存储过程以员工工号(@staffNum)、部门编号(@bmNum)作为输入参数,存储过程返回查询到的结果集。

satffInfo的定义代码如下:

CREATE PROCEDURE staffInfo

@staffNum V ARCHAR(50)='%',

@bmNum V ARCHAR(50)='%'

AS

SELECT *

FROM 员工信息,部门

WHERE 员工信息.部门名称=部门.部门名称AND

((员工信息.工号LIKE @staffNum V ARCHAR(50)+'%') AND

(部门编号LIKE @bmNum V ARCHAR(50)+'%'))

GO

(3)统计某职工年终工资总额。

以工号为输入参数,以奖金总额为输出参数,产生该年度12个月份的每员工奖金统计的存储过程。定义该存储过程名为bmMonhSum,输入参数为@staffNum,实现代码如下:CREATE PROCEDURE bmMonthSum

@staffNum CHAR(10)

AS

SELECT sum(实发工资+岗位补贴)/12 AS 奖金总额

FROM 员工信息,工资,部门

WHERE 员工信息.工号=工资.工号 AND 员工信息.部门名称=部门.部门名称 AND 工号=102

GO

(五)触发器

(1)关键操作,在工资表里添加一条新的记录,实发工资会自动更新新的数据。定义这个

触发器名称为insert_工资。

代码如下:

create trigger insert_工资 on 工资 for insert

as

declare @i char(20)

declare @bb int

set @i=case

when @bb=100 then ‘工资’

when @bb=102 then ‘实发工资’

end

print @i

(六)索引

为提高检索性能,为表创建符合索引,其索引项为工号、姓名。

CREATE INDEX 工号_姓名_ind

ON 员工信息(工号,姓名)

GO

(七)运行和维护

1. 关系图的建立

使用SQL Server 2000的企业管理器创建工资管理系统关系图

工资管理系统的关系图

2.简单查询

1) 员工基本信息情况

代码如下:

select * from 员工信息

2)员工考勤情况;

代码如下:

select 出勤天数,工号

from 工资

3)员工每个工种基本工资的设定。

代码如下:

Select 岗位工资,职务等级

from 工资,员工信息

where 工资.工号=员工信息.工号

4)加班津贴管理,根据加班时间和类型给予不同的加班津贴;

代码如下:

select 加班工时,加班天数,加班类别,加班工资

from 工资

WHERE 加班工资>0

5)按照不同工种的基本工资情况、员工的考勤情况产生员工的每月的月工资;代码如下:

select 工资.部门名称,职务等级,岗位工资,出勤天数,实发工资

from 员工,工资

WHERE 员工信息.工号=工资.工号

;

3.复杂查询

1)员工年终奖金的生成,员工的年终奖金计算公式=(员工本年度的工资总和+津贴的总和)/12;

代码如下:

SELECT 姓名,sum(实发工资+岗位补贴)/12 AS 奖金总额

FROM 员工信息,工资,部门

WHERE 员工信息.工号=工资.工号group by 姓名

2)企业内财务部的工资情况查询:

代码如下:

select 员工信息.工号,姓名,职务等级,实发工资

from 工资,员工信息

where 工资.工号=员工信息.工号 AND 工资.部门名称='财务部'

3)企业工资报表。能够查询单个员工的工资情况

代码如下:

select 工资.工号,岗位工资,病假扣款,事假扣款,应发工资,实发工资

from 工资,员工信息

WHERE 工资.工号=员工信息.工号AND 姓名LIKE '李%'

4)员工月工资情况:月,职工号,姓名,部门名,基本工资,病假扣款,事假扣款,应发工资,实发工资。

代码如下:

select 员工信息.工号, 姓名,员工信息.部门名称,岗位工资,病假扣款,事假扣款,应发工资,实发工资

from 工资,员工信息

where 工资.工号=员工信息.工号;

八、总结

经过一周的时间,在同学和老师的帮助下,基本完成本次课程设计,基本达到了工资管理系统的要求。

这次数据库课程设计给我的最大的印象是:流程是一切的根本;架构是重要的,想像的还要重要;实践比一切空谈和理论更能学到东西。从做这个数据库开始无论遇到什么困难,我都没有一丝的放弃的念头。在设计过程中一定要慎重,仔细。来不得半点马虎。需求分析是整个课程设计的中心,考虑要全面,分析彻底。才会为后来的设计打下良好的基础。否则,前功尽弃,甚至不能完成任务。做实例过程中要注意与说明书中数据项数据类型,数据长度等的一致,命令中心输入任何命令都要谨记一条原则,那就是严格按照格式来,不能像平时在纸上作业。

同时我认为我们的工作是一个团队的工作,团队需要个人,个人也离不开团队,必须发扬团结协作的精神。某个人的离群都可能导致导致整项工作的失败。实习中只有一个人知道原理是远远不够的,必须让每个人都知道,否则一个人的错误,就有可能导致整个工作失败。团结协作是我们实习成功的一项非常重要的保证。而这次实习也正好锻炼我们这一点,这也是非常宝贵的。

对我们而言,知识上的收获重要,精神上的丰收更加可喜。挫折是一份财富,经历是一份拥有。这次实习必将成为我人生旅途上一个非常美好的回忆!

通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。

这次课程设计终于顺利完成了,在设计中遇到了很多专业知识问题,最后在老师的辛勤指导下,终于游逆而解。同时,在老师的身上我们学也到很多实用的知识,在次我们表示感谢!同时,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢!

此次课程设计,学到了很多课内学不到的东西,比如独立思考解决问题,出现差错的随机应变,和与人合作共同提高,都受益非浅,今后的制作应该更轻松,自己也都能扛的起并高质量的完成项目。

九、参考文献

《数据库原理及应用教程》、《数据库系统概论》、《数据库设计教程》、网络资源。

相关主题
文本预览
相关文档 最新文档