【数据库课设】企业员工薪酬系统

本课设出现的问题就是最后做出来的界面只有增删查改,而缺少领导想要的数据报表,所以应该使用聚合函数
在这里插入图片描述

create table Dept
(
Dname varchar(10) primary key,
Manger varchar(10) NOT NULL,
Tnum int
)

在这里插入图片描述

create table Bwage
(
Spos varchar(10)primary key,
Bsalary int
)

在这里插入图片描述

create table Staff
(
Sno char(10) primary key,
Sname varchar(10)NOT NULL,
Ssex char(2) check(Ssex in ('男','女')),
Sage tinyint check(Sage between 18 and 60),
Dname varchar(10),
Spos varchar(10),
Sdate date,
Stel char(11),
Saddr varchar(20),
Card varchar(20),
foreign key(Dname) references Dept(Dname)
on delete cascade
on update cascade,
foreign key(Spos) references Bwage(Spos)
on delete cascade
on update cascade,
)

在这里插入图片描述

create table Remit
(
Sno char(10) primary key,
Stax int NOT NULL,
Sins int NOT NULL,
foreign key (Sno) references Staff(Sno)
on delete cascade
on update cascade
)

在这里插入图片描述

create table Seni
(
Wage tinyint primary key,
Wsub int NULL
)

在这里插入图片描述
更改后
在这里插入图片描述

create table Subi
(
Stype varchar(10) primary key,
Sub int
)

在这里插入图片描述
更改后
在这里插入图片描述

create table RP
(
RPtype varchar(6) primary key,
RPmoney int
)

在这里插入图片描述
更改后
在这里插入图片描述

create table Attend
(
	Sno char(10),
	Adate date,
	Nlate tinyint,
	Nleave tinyint,
	Nevec tinyint,
	Nextra tinyint,
	Nattend tinyint,
	primary key(Sno,Adate),
	foreign key(Sno) references Staff(Sno)
	on delete cascade
	on update cascade

)

在这里插入图片描述
更改后
在这里插入图片描述

create table Pwage
(
Sno char(10),
Rdate date,
Wsub int,
Late int,
Leave int,
Extra int,
Evec int,
Fattend int,
Sala int,
Npay int,
primary key(Sno,Rdate),
foreign key (Sno) references Staff(Sno)
on delete cascade
on update cascade

)

在这里插入图片描述

create table Usr
(
Sno char(10) primary key,
Pwd varchar(16),
Iden nchar(3) check(Iden in ('管理员','员工')),
foreign key (Sno) references Staff(Sno)
on delete cascade
on update cascade

)

2.0

create table Usr
(
Sno char(10) primary key,
Pwd varchar(16),
Iden int,
foreign key (Sno) references Staff(Sno)
on delete cascade
on update cascade

)

视图:

create view V_All_Salary
--工号,发放日期,基本工资,工龄补贴,
--三个补贴,迟到,早退,出差补贴,全勤,加班,个人税,五险一金,应发工资,实发工资
(Sno,Rdate,Basalary,Wsub,
Suba,Subb,Subc,
Late,Leave,Evec,Fattend,Extra,Stax,Sins,Sala,Npay)
as
select Staff.Sno,Rdate,Bsalary,Wsub,
(select Sub from Subi where Stype='餐饮补贴'),
(select Sub from Subi where Stype='交通补贴'),
(select Sub from Subi where Stype='住房补贴'),
Late,Leave,Evec,Fattend,Extra,Stax,Sins,
Sala,Npay from Staff,Bwage,Pwage,Remit
where Staff.Spos=Bwage.Spos and Staff.Sno=Remit.Sno and Staff.Sno=Pwage.Sno



触发器

create trigger t_inst_Staff	--新增员工,改变部门人数
on Staff
after insert
as 
begin
	declare @Dname varchar(10)
	select @Dname=Dname from inserted
	if (@Dname is not null)
	begin
		update Dept
		set Tnum=Tnum+1
		where @Dname=Dept.Dname
	end
end;
go


create trigger t_dele_Staff	--删除员工,改变部门人数
on Staff
after delete
as 
begin
	declare @Dname varchar(10)
	select @Dname=Dname from deleted
	if (@Dname is not null)
	begin
		update Dept
		set Tnum=Tnum-1
		where @Dname=Dept.Dname
	end
end;
go

create trigger t_upda_Staff	--员工转部门,改变人数
on Staff
after update
as 
begin
	declare @Dname1 varchar(10)
	declare @Dname2 varchar(10)
	select @Dname1=Dname from deleted
	select @Dname2=Dname from inserted
	if (@Dname1 is not null)
	begin
		update Dept
		set Tnum=Tnum-1
		where @Dname1=Dept.Dname

		update Dept
		set Tnum=Tnum+1
		where @Dname2=Dept.Dname
	end
end;

2.0 修改增加员工表,并且设置usr 密码默认值

create trigger t_inst_Staff	--新增员工,改变部门人数,Usr表新增信息
on Staff
after insert
as 
begin
	declare @Dname varchar(10)
	select @Dname=Dname from inserted
	if (@Dname is not null)
	begin
		update Dept
		set Tnum=Tnum+1
		where @Dname=Dept.Dname
	end

	declare @Sno varchar(8)
	select @Sno=Sno from inserted
	if (@Sno is not null)
	begin
		insert 
		into Usr
		values(@Sno,'888',0)
	end
end;
create trigger t_update_remit 
on staff 
after update 
as 
begin  
declare @Sno char(10),@old_Spos varchar(10),@new_Spos varchar(10);  declare @Bsalary int,@Stax int,@Sins int;
select @Sno = Sno,@old_Spos = Spos from deleted;  select @new_Spos = Spos from ins
erted;  
if(@old_Spos != @new_Spos)begin   
	select @Bsalary = Bsalary from Bwage where Spos = @new_Spos;
	set @Sins = @Bsalary * 0.1;   
	exec @Stax =  S_tax @Bsalary;   
	update Remit set Stax = @Stax,Sins = @Sins where Sno = @Sno;  
	end    
end
```sql
create trigger t_add_remit  
on staff  
after insert  
as  
begin  
	declare @Sno char(10),@Spos varchar(10);  
	declare @Bsalary int,@Stax int,@Sins int;  
	select @Sno = Sno,@Spos = Spos from inserted;  
	select @Bsalary = Bsalary from Bwage where Spos = @Spos;  
	set @Sins = @Bsalary * 0.1;  
	exec @Stax =  S_tax @Bsalary;  
	insert  into Remit  
 	values(@Sno,@Stax,@Sins);  
   
end

create trigger t_update_bwage		--修改职位工资时,对应的税和五险一金的改变
on Bwage after update
as begin
	declare @Spos varchar(10),@Bsalary int,@Sno char(10);
	declare @Stax int,@Sins int;

	select @Spos = Spos,@Bsalary = Bsalary from inserted;
	declare cur cursor for select Sno from Staff where Spos = @Spos;
	open cur

	while @@FETCH_STATUS = 0
	begin
		fetch next from cur into @Sno;
		set @Sins = @Bsalary * 0.1;
		exec @Stax = S_tax @Bsalary;
		update Remit set Stax = @Stax,Sins = @Sins where Sno = @Sno;  

	end

	close cur;
	deallocate cur;
end

存储过程




```sql
create procedure p_get_Wsub
@Sno char(10),@Pdate date
as
begin
	declare @year int,@money int;
	set @money = 0;
	declare @Wage tinyint,@Wsub int;
	select @year = DATEDIFF(day,Staff.Sdate,@Pdate)/365 from Staff where Sno = @Sno;
	declare cur cursor for select Wage,Wsub from Seni order by Wage desc
	open cur
	while @@FETCH_STATUS = 0
	begin
		fetch next from cur into @Wage,@Wsub;
		if(@year >= @Wage)
		begin
			set @money = @Wsub;
			break
		end
		
		
	end

	close cur
	deallocate cur
	return @money
end

create procedure p_wage  
@Rdate date  
as  
begin  
 declare @Sno char(10);  
 declare @Wsub int = 0,@Late int = 0,@Leave int = 0,@Extra int =0,  
 @Evec int =0,@Fattend int = 0,@Bsalary int,@Sala int,@Npay int;  
  
  
 declare @Msub int,@Tsub int,@Hsub int  
 select @Msub = Sub from Subi where Stype = '餐饮补贴';  
 select @Tsub = Sub from Subi where Stype = '交通补贴';  
 select @Hsub = Sub from Subi where Stype = '住房补贴';  
  
  
 declare @RP_late int,@RP_leave int,@RP_extra int,@RP_evec int,@RP_attend int;  
 select @RP_late = RPmoney from RP where RPtype = '迟到';  
 select @RP_leave = RPmoney from RP where RPtype = '早退';  
 select @RP_extra = RPmoney from RP where RPtype = '加班';  
 select @RP_evec = RPmoney from RP where RPtype = '出差';  
 select @RP_attend = RPmoney from RP where RPtype = '全勤';  
  
   
  
 declare @Stax int = 0,@Sins int = 0;  
   
 declare cur1 cursor for select Sno from Staff;  
 open cur1  
 fetch next from cur1 into @Sno;  
 while @@FETCH_STATUS = 0  
 begin  
    
  declare @Nlate int,@Nleave int,@Nextra int,@Nevec int,@Nattend int;--考勤  
  
  select @Bsalary = Bsalary from Staff,Bwage   
  where Sno = @Sno and Staff.Spos = Bwage.Spos;--基本工资  
  
  select @Stax = Stax ,@Sins = Sins from Remit where Sno = @Sno;--税和五险一金  
  
  exec @Wsub = p_get_Wsub @Sno,@Rdate;--工龄工资  
  
  select @Nlate = Nlate,@Nleave = Nleave,@Nextra = Nextra,  
  @Nevec = Nevec,@Nattend = Nattend   
  from Attend where Sno = @Sno and Adate = @Rdate;  
  
  set @Sala = @Bsalary + @Msub+@Tsub+@Hsub+@Wsub;  
  
  if(@Nlate is not null)begin  
   set @Late = @Nlate * @RP_late  
   set @Sala += @Late  
   set @Nlate = null;  
  end  
  if(@Nleave is not null)begin  
   set @Leave = @Nleave * @RP_leave  
   set @Sala += @Leave  
   set @Nleave = null  
  end  
  if(@Nextra is not null)begin  
   set @Extra = @Nextra * @RP_extra  
   set @Sala += @Extra  
   set @Nextra = null;  
  end  
  if(@Nevec is not null)begin  
   set @Evec = @Nevec * @RP_evec  
   set @Sala += @Evec  
   set @Nevec = null  
  end  
  if(@Nattend >= 22)begin  
   set @Fattend = @RP_attend  
   set @Sala += @Fattend  
   set @Nattend = null;  
  end  
  
  set @Npay = @Sala - @Stax - @Sins;  
  
  insert into Pwage values(@Sno,@Rdate,@Wsub,@Late,  
  @Leave,@Extra,@Evec,@Fattend,@Sala,@Npay);  
  
  fetch next from cur1 into @Sno;  
  set @Late = 0  
  set @Leave = 0  
  set @Extra = 0  
  set @Evec = 0  
  set @Fattend = 0  
 end  
 close cur1  
 deallocate cur1  
  
end
create procedure S_tax 
@Salary int 
as 
begin  
set @Salary *= 0.9;  
declare @Stax int;  
if(@Salary < 5000)   
	set @Stax = 0;  
else if(@Salary < 10000)
   set @Stax = 0.03 * (@Salary - 5000);  
else if(@Salary < 30000)
   set @Stax = 150 + (@Salary - 10000) * 0.
05;  
else if(@Salary < 50000)
   set @Stax = 1150 + (@Salary - 30000) * 0.07;  
else    
	set @Stax = 2550 + (@Salary - 50000) * 0.1;  
return @Stax; 
end

插入数据

Bwage

insert into Bwage values
('产品经理',40000),
('副总经理',50000),
('技术总监',45000),
('技术组长',35000),
('软件工程师',25000),
('总经理',70000),
('财务经理',35000),
('后勤经理',28000),
('客服经理',31000),
('人事经理',25000),
('销售经理',32000),
('财务部员',8000),
('后勤部员',6000),
('客服部员',5000),
('人事部员',4500),
('销售部员',7000),
('技术经理',38000)

Dept

insert into Dept values
('财务部','周元',0),
('后勤部','李洛',0),
('技术部','牧尘',0),
('客服部','唐三',0),
('人事部','萧炎',0),
('销售部','林动',0)

Subi

insert into Subi  values
('餐饮补贴',200),
('交通补贴',200),
('住房补贴',200)

RP

insert into RP values
('迟到',-20),
('出差',50),
('加班',50),
('全勤',100),
('早退',-20)

Staff

insert
into Staff
values('20210001','李洛','男',40,'后勤部','后勤经理',
'2011-03-01','15142877198','安徽省芜湖市','71258632142245577')

insert
into Staff
values('20210002','唐三','男',45,'客服部','客服经理',
'2012-04-21','15142875498','安徽省芜湖市','59885645577')

insert
into Staff
values('20210003','牧尘','男',43,'技术部','技术经理',
'2008-07-01','15142765498','安徽省合肥市','598856455897')

insert
into Staff
values('20210004','周元','女',35,'财务部','财务经理',
'2015-03-01','15181875498','安徽省合肥市','1325478455897')

insert
into Staff
values('20210005','萧炎','男',35,'人事部','人事经理',
'2014-03-01','18181875498','安徽省合肥市','9587128455897')

insert
into Staff
values('20210006','林动','女',47,'销售部','销售经理',
'2015-03-01','18381875498','安徽省合肥市','1325478458127')

insert
into Staff
values('20210007','王德','男',40,'后勤部','后勤部员',
'2016-03-01','15142877198','安徽省芜湖市','7125863228717')

insert
into Staff
values
('20210008','徐望','男',30,'客服部','客服部员',
'2017-03-01','15142875498','安徽省芜湖市','5958564615717')
insert
into Staff
values
('20210009','李飞','男',33,'技术部','技术部员',
'2018-03-01','15142765498','安徽省合肥市','6788564558917')
insert
into Staff
values
('20210010','周冰','女',38,'财务部','财务部员',
'2019-06-21','15181875498','安徽省合肥市','9585478455897')
insert
into Staff
values
('20210011','吕洞宾','男',32,'人事部','人事部员',
'2017-05-27','18181875498','安徽省蚌埠市','1057128455897')
insert
into Staff
values
('20210012','林菲菲','女',29,'销售部','销售部员',
'2018-06-01','18381875498','安徽省淮南市','5215478458127')
insert
into Attend
values('20210001','2021-4-28',0,0,0,5,22)

insert
into Attend
values('20210002','2021-4-28',0,1,0,10,22)

insert
into Attend
values('20210003','2021-4-28',0,0,0,0,21)

insert
into Attend
values('20210004','2021-4-28',0,2,0,8,22)

insert
into Attend
values('20210005','2021-4-28',0,0,0,10,22)

insert
into Attend
values('20210006','2021-4-28',1,0,0,0,22)

insert
into Attend
values('20210007','2021-4-28',0,0,2,15,22)

insert
into Attend
values('20210008','2021-4-28',0,0,0,0,20)

insert
into Attend
values('20210009','2021-4-28',0,0,2,0,22)

insert
into Attend
values('20210010','2021-4-28',1,0,0,0,22)

insert
into Attend
values('20210011','2021-4-28',0,2,0,0,22)

insert
into Attend
values('20210012','2021-4-28',1,0,0,10,22)



insert
into Attend
values('20210001','2021-1-28',1,0,0,5,22)

insert
into Attend
values('20210002','2021-1-28',0,1,0,2,22)

insert
into Attend
values('20210003','2021-1-28',0,2,0,0,21)

insert
into Attend
values('20210004','2021-1-28',0,2,0,6,22)

insert
into Attend
values('20210005','2021-1-28',0,0,0,1,22)

insert
into Attend
values('20210006','2021-1-28',0,2,0,0,20)

insert
into Attend
values('20210007','2021-1-28',1,0,2,3,22)

insert
into Attend
values('20210008','2021-1-28',0,0,0,0,18)

insert
into Attend
values('20210009','2021-1-28',1,0,2,0,22)

insert
into Attend
values('20210010','2021-1-28',1,0,0,0,22)

insert
into Attend
values('20210011','2021-1-28',0,2,0,2,20)

insert
into Attend
values('20210012','2021-1-28',0,0,0,10,22)

课设源码

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值