数据库课程设计工资管理系统.docx
《数据库课程设计工资管理系统.docx》由会员分享,可在线阅读,更多相关《数据库课程设计工资管理系统.docx(14页珍藏版)》请在冰豆网上搜索。
数据库课程设计工资管理系统
课程设计要求:
1.对各个系统进行系统功能需求分析
2.数据库设计分析阶段,进行详细的数据库需求分析,进行概念数据库的设计,画出数据库的E-R图(局部和整体E-R图)
3.设计出详细的逻辑数据库结构,将各个实体和联系转化为相应的二维表即关系模式,指定各个关系的主关键字和外部关键字,并对各个关系的约束加以限定
4.通过企业管理器或是查询分析器实现各个二维关系(建议最好用SQL代码实现),要求建立相关的索引
5.根据系统功能需求设计相应的查询视图
6.要求根据系统功能需求建立存储过程
7.根据功能需求建立相应的触发器以保证数据的一致性
8.通过建立用户和权限分配实现数据库一定的安全性,考虑数据库的备份与恢复(此内容选作)
一、需求分析
企业的工资管理是公司管理的一个重要内容。
随着科学技术的发展,一些公司的规模也越来越大,职工的数量也在不断的增加,企业的管理工作也变得越来越复杂。
工资管理既涉及到企业劳动人事的管理,同时也是企业财务的重要组成部分。
面对如此大的信息量,单凭传统的表格、手工操作已不能满足实际的需要。
因此,我设计工资管理系统来提高财务管理方面的效率。
通过这个系统可以使信息的管理更加规范,统计更科学。
模块功能分析:
(1)部门模块:
用来管理部门;
(2)工资模块:
用来管理员工的工资;
(3)职工模块:
用来管理工厂的职工信息;
二、概念结构设计
经分析,本系统的e-r图如下:
三、逻辑结构设计
1.工资管理基本信息表
①department(部门)
列名
数据类型
长度
是否允许空
备注
department_no
(部门号)
char
8
否
主关键字
department_name
(部门名)
char
15
否
depart_manage
(部门经理)
char
6
否
depart_people
(部门人数)
int
6
否
②staff(职工)
列名
数据类型
长度
是否允许空
备注
staff_no
(职工号)
char
10
否
主关键字
staff_name
(职工姓名)
char
20
否
staff_sex
(职工姓别)
char
25
否
默认
”男”
Enducational
(学历)
char
10
否
dapartment_no(部门号)
char
8
否
department_name
(部门名称)
char
15
否
③salary(工资)
列名
数据类型
长度
是否允许空
备注
staff_no
(职工工号)
char
10
否
外键
m_salary
(月薪)
int
6
否
默认3000
Allowance
(津贴)
int
10
是
默认0
out_days
(出勤天数)
int
2
否
out_days<=31andout_days>=0
work_overtim
(加班时间)
datetime
10
是
w_overtime_days
(加班天数)
int
2
否
默认0
w_overtime_days>=0andw_overtime_days<=31
Deduct
(事故扣薪)
int
4
否
默认0
issue_salary
(应发薪水)
int
4
否
iss_salary
(实发薪水)
Int
4
否
①建库
createdatabasesalary_manage
on
(name=salary_manage_data,
filename='d:
\salary_manage_data.mdf',
size=25,
maxsize=35,
filegrowth=5)
logon
(name=manage_log,
filename='d:
\salary_manage_data.ldf',
size=25,
maxsize=35,
filegrowth=5)
②建表
/建立职工表/
createtablestaff
(staff_nochar(10)primarykey,/*职工工号*/
staff_namechar(20)notnull,/*职工姓名*/
staff_sexchar(25)notnulldefault'男'check(staff_sexin('男','女')),/*性别*/
enducationalchar(10)default'本科',/*学历*/
dapartment_nochar(8)notnull,/*部门编号*/
department_namechar(15))/*部门名称*/
/*建立工资表*/
createtablesalary
(staff_nochar(10)notnullforeignkeyreferencesstaff(staff_no),/*职工工号*/
m_salaryintdefault3000,/*月薪*/
allowanceintdefault0,/*津贴*/
out_daysintnotnullcheck(out_days<=31andout_days>=0),/*出勤天数*/
work_overtimedatetime(10),/*加班时间*/
w_overtime_daysintdefault0check(w_overtime_days>=0andw_overtime_days<=31),/*加班天数*/
deductintdefault0,/*事故扣薪*/
add_moneyintdefault0,/*加班费*/
issue_salaryint(4)notnull,/*应发薪水*/
iss_salaryint(4)notnull)/*实发薪水*/
/*建立部门表*/
createtabledepartment
(department_nochar(8)primarykey,/*部门编号*/
department_namechar(15)notnull,/*部门名称*/
depart_managechar(6)notnull,/*部门经理*/
depart_peopleint(6)/*部门人数*/
③添加记录
insertintodepartment
values('071011','A部门','王经理',100);
insertintodepartment
values('071012','B部门','李经理',200);
insertintodepartment
values('071013','C部门','张经理',100);
insertintostaff
values('0610','李明','男','本科','071011','A部门');
insertintostaff
values('0613','张三','男','专科','071011','A部门');
insertintostaff
values('0611','刘丽','女','本科','071012','B部门');
insertintostaff
values('0612','张新','男','本科','071013','C部门');
insertintosalary
values('0610',3000,100,30,'2011-10-8',2,50,0,3000,3200);
insertintosalary
values('0611',3000,0,20,'',0,0,500,3000,2500);
insertintosalary
values('0612',3000,100,31,'2011-10-10',1,50,0,3000,3150);
四、功能处理
1、查询
①表查询
select*fromdepartment/*查询部门表*/
select*fromstaff/*查询职工表*/
select*fromsalary/*查询工资表*/
②数据查询
selectsalary.staff_no,staff_name,issue_salary,iss_salary
fromsalary,staff
whereiss_salary>3000andsalary.staff_no=staff.staff_no
orderbysalary.staff_no
selectstaff_no,staff_namefromstaff
wherestaff_namelike'刘%';
2、数据更新
①插入(前面已插入)
②修改
updatesalary
setiss_salary=1.2*iss_salary
whereiss_salary<2600;
③删除
deletefromstaff
whereenducational='专科';
3.索引
①建立索引
createindexj
onsalary(staff_no,issue_salary,iss_salary)
createuniqueindexindex_staff
onstaff(staff_name)
createuniqueindexindex_depart
ondepartment(depart_people)
②查询索引
execsp_helpindexsalary
execsp_helpindexstaff
execsp_helpindexdepartment
③修改索引
execsp_rename'salary.j','salary_index'
④删除索引
dropindexindex
4.视图
①创建视图
createviewtable_salary(staff_no,staff_name,issue_salary,iss_salary)
asselectsalary.staff_no,staff_name,issue_salary,iss_salary
fromsalary,staff
wheresalary.staff_no=staff.staff_no
②查找视图
select*fromtable_salary
③/*修改视图*/
Alterviewtable_salary
(staff_no,staff_name,department_name,issue_salary,iss_salary)
asselectsalary.staff_no,staff_name,department_name,issue_salary,iss_salary
fromsalary,staff
wheresalary.staff_no=staff.staff_no;
④删除视图
dropviewtable_salary
5.存储过程
①创建存储过程。
createprocedurepro_staff
(@staff_nochar(10),
@staff_namechar(25),
@staff_sexchar(25),
@enducationalchar(10),
@department_nochar(8),
@department_namechar(15))
as
insertintostaffvalues
(@staff_no,@staff_name,@staff_sex,@enducational,@department_no,@department_name)
updatedepartment
setdepart_people=depart_people+1
wheredepartment_no=@department_no
createprocedurepro_salary
as
(@m_salaryint,
@allowanceint,
@add_moneyint,
@deductint
)
as
updatesalary
setiss_salary=(@m_salary+@allowance+@add_money-@deduct)
wherem_salary=@m_salaryandallowance=@allowanceandadd_money=@add_moneyanddeduct=@deduct
②查看存储过程
execsp_helptextpro_staff
execsp_helptextpro_salary
③执行存储过程
execpro_staff@staff_no='0614',@staff_name='王敏',@staff_sex='女',@enducational='本
科',@department_no='071011',@department_name='A部门';
④删除存储过程
dropprocedurepro_staff
6.触发器
①创建触发器
createtriggerm
onsalary
forupdate
as
ifupdate(m_salary)
begin
rollbacktransaction
print'月薪不能修改,请联系财务科'
end
CREATETRIGGERTRI_salary
ONsalary
FORupdate,insert
AS
BEGIN
updatesalarysetadd_money=(w_overtime_days*50)
updatesalarysetissue_salary=m_salary
updatesalarysetiss_salary=(m_salary+allowance+add_money-deduct)
END
createtriggertri_department
ondepartment
forinsert
as
declare@staff_nochar(8)
declare@department_nochar(15)
updatedepartment
setdepart_people=depart_people+1
wheredepartment_no=@department_no
createtriggertri_change
onstaff
fordelete
as
begin
delete
fromsalary
wheresalary.staff_no=any(selectstaff_nofromdeleted)
updatedepartment
setdepart_people=depart_people-1
wheredepartment_no=any(selectdepartment_nofromdeleted)
end
②触发器的删除
droptriggertri_department;
7.用户与权限
/*创建登陆账号*/
execsp_addlogin'zhangsan','1234','salary_manage',null
/*把用户加入到数据库中*/
execsp_adduser'zhangsan'
/*删除登陆账号*/
execsp_droplogin'zhangsan'
/*系统权限*/
grantcreatetable
tozhangsan
/*收回系统权限*/
revokecreatetable
fromzhangsan
/*对象权限*/
grantall
onstaff
tozhangsan
withgrantoption
grantselect
onsalary
topublic
/*收回系对象权限*/
revokeselectonsalary
fromzhangsan
五.实验总结
本报告主要介绍的是对自建的一个工资管理系统数据库,利用在数据库中的表、存储过程、视图、约束等组合,设计出比较实用的应用软件代码;对表中的信息能够进行简单的查询,子查询,视图的创建、修改与删除,与约束的创建,存储过程与触发器的创建与删除等基本操作,加深对SQLServer数据库的进一步研究。
通过这次实训,是我对SQL有了进一步了解,虽然在此期间遇到过麻烦,但通过查阅资料与尝试解决问题,使我更加了解SQL的基础知识,从中学到了新知识。
六.心得体会
通过这次的课程设计实验,我发现自己对数据库课程的兴趣有了很大提高,而且对课本的知识更加的了解并有了一定的掌握,通过实验我懂得了如何创建索引、视图、存储过程以及触发器。
以前不懂为何要创建触发器、视图等,现在终于知道它们的优点了。
在自己没做数据库课程设计以前,总是觉得自己什么都不懂什么都不会,但是现在做出来了,所以我觉得自己还是有能力做一些实际操作方面的东西。
我相信以后通过自己自学其它课程,我一定会做出一个更好的数据库。
七、参考资料
1.陈志泊编。
数据库原理与应用教程(第二版)。
人民邮电出版社