用C#和sql server语言编写的人事管理系统
博主作为一位新人刚自学完C#语言和SQL server也是第一次在****这个程序猿的大家庭上发表博客,想通过这一篇博客与各位前辈进行学习交流,如写的不好的地方请各位大佬多担待和指出来,让我们一起共同学习、共同进步。
介绍
通常人事管理系统的用户是某企业或事业单位的人力资源管理人员,日常的业务主要围绕着人的管理。因此需求分析时,应当紧紧围绕人事管理业务以及工资系统展开。人事管理是复杂的,包括员工基本信息管理、单位部门管理、岗位管理、员工培训信息管理、薪酬管理、考勤管理以及劳动合同管理等功能。
功能模块:
1.考勤管理模块中,需要读取员工进出厂区的刷卡信息,而每天的刷卡记录大约8000条,其中有一些是真正的上班刷卡记录,厂区工人采用轮班制,每天三个班次,四组人员。需要根据有效的记录进行考勤核算;
2、员工的薪酬管理系统,根据员工的工资套账,计算员工的五险一金、奖惩、请假、出差、考勤工资、大病统筹、效益工资以及税率等进行核算,对于特殊的计件、计时工资需要进行特殊处理。
3.岗位管理主要是进行部门的人事调动以及职位的变动,这个依据员工的出勤情况、他的奖惩状况来进行升迁或者是降职。
…………………………
开发环境及工具
1.开发环境:Windows 10
2.数据库管理系统:MS SQL SERVER 2017数据库
系统分析
安全性控制的方法有用户的标识和鉴定,存取控制,定义视图,数据加密和审计等,在本系统中的安全性体现在用户的标识和鉴定,例如在登陆界面时,首先会输入账户名称,系统内部记录着所有合法用户的标识,每次用户要求进入系统时,由系统进行核实,通过鉴定后才提供机器上对数据库的使用权。当你不是该系统的合法用户时,则账号是错误的就无法进入该系统。就用户存取权限控制而言,在系统登陆界面时会选择是一般用户登陆还是管理员登陆,当为一般用户登陆时,只能查询员工信息和部门信息,而不能对其进行管理。当以管理员身份登陆时不仅仅可以查询部门和员工的基本信息,也可以对其进行添加、删除、修改等操作。
数据库的完整性是指保护数据库中数据的正确性、有效性和相容性,防止错误的数据进入数据库造成无效操作。在本系统中对数据类型的约束,包括数据的类型、长度、单位和精度等。例如规定员工性别的数据类型应为字符型,长度为2.对数据格式的约束例如规定出生日期的数据格式为XXXX.XX.XX。对取值范围的约束,例如月份的取值范围为1-12月,日期为1-31号。对空格的约束,例如员工姓名和编号不能为空,但是员工出生日期即可为空。实体完整性束说明了关系主键(主码)的属性列必须唯一,其职不能为全空或部分为空
系统框架设计
1.数据库字典表
数据项 来源 数据类型 数据大小 约束条件
部门号 部门表 char 10 primary key
部门名 部门表 char 10 not null
*号 员工表 char 10 not null
出差编号 出差表 char 10 primary key
出差起始 出差表 char 10
出差结束 出差表 char 10 not null
出勤号 出勤表 char 6 primary key
上班日期 出勤表 datetime not null
上班时间 出勤表 datetime not null
下班时间 出勤表 datetime not null
刷卡机号 刷卡机表 char 4 primary key
打卡次数 出勤表 nchar 10
工龄记录号 工龄表 char 10 primary key
入职日期 工龄表 datetime
工资编号 工资表 char 6 primary key
基本工资 工资表 money not null
罚款 工资表 money
起始时间 工资表 datetime
截止日期 工资表 datetime
发薪日期 工资表 datetime
管理员账号 管理员表 char 10 primary key
密码 管理员表 char 10 not null
级别 管理员表 char 10
合同编号 合同表 char 10 primary key
合同起始日期 合同表 datetime
合同终止日期 合同表 datetime
加班编号 加班表 char 10 primary key
加班起始 加班表 datetime
加班结束 加班表 datetime
奖惩编号 奖惩记录表 char 6 primary key
奖惩类型 奖惩记录表 char 4
奖惩金额 奖惩记录表 money
奖惩日期 奖惩记录表 datetime
批复部门号 部门表 char 10
批复日期 奖惩记录表 datetime
奖惩原因 奖惩记录表 varchar 50
离职编号 离职表 char 10 primary key
离职日期 离职表 char 10
培训编号 培训表 char 10 primary key
培训项目 培训表 char 10
培训成绩 培训表 char 10
开始日期 培训表 datetime
结束日期 培训表 datetime
请假编号 请假记录表 char 6 primary key
请假时间 请假记录表 datetime
销假时间 请假记录表 datetime
请假天数 请假记录表 int
审批人编号 请假记录表 char 4
登记编号 新员工表 char 10 primary key
职位 新员工表 char 10
入职日期 新员工表 datetime
姓名 员工表 char 10 not null
性别 员工表 char 2
出生日期 员工表 dateime
学历 员工表 varchar 32 not null
身份证号 员工表 varchar 32 not null
民族 员工表 varchar 16 not null
职称 员工表 char 10
员工编号 员工表 char 10 primary key
调动前职务 员工表 char 10
调动后职务 员工表 char 10
调动部门号 部门表 char 10 not null
调动日期 职务调动表 datetime
批复日期 职务调动表 datetime
调动原因 职务调动表 varchar 50
调动编号 职务调动表 char 10 primary key
2.系统 E-R图
数据库逻辑设计
由E-R图,可得以下关系
部门表(部门号 部门名 *号)
出差表(出差编号 员工编号 出差起始 出差结束)
出勤表(出勤号 员工编号 上班日期 上班时间 下班时间 刷卡机号 打卡次数)
工龄表(工龄记录号 员工编号 工龄 入职日期)
工资表(工资编号 员工编号 基本工资 罚款 起始时间 截止时间 发薪日期)
管理员表(管理员账号 职工编号 密码 级别)
合同表(合同编号 员工编号 合同起始日期 合同到期日期)
加班表(加班编号 员工编号 加班起始 加班结束)
奖惩记录表(奖惩编号员工编号 奖惩类型 奖惩金额 奖惩日期 批复部门号 批复日期 奖惩原因)
离职表(离职编号 员工编号 部门 职位 离职日期)
培训表(培训编号 员工编号 培训项目 培训成绩 开始日期 结束日期)
请假记录表(请假编号 员工编号 请假时间 销假时间 请假天数 审批人编号)
刷卡机表(刷卡机号)
实习员工表(登记编号 员工编号 部门 职位 入职日期)
员工表(员工编号 姓名 性别 出生日期 学历 身份证号 民族 职称 部门号)
职务调动表(调动编号 员工编号 调动前职务 调动后职务 调动部门号 调动日期 批复日期 调动原因)
建立员工表
create table 员工表(
员工编号 char(10) primary key,
姓名 char(10) not null,
性别 char(2) check(性别 in(‘男’,‘女’)) not null,
出生日期 datetime not null,
学历 varchar(32)
身份证号 varchar(32) not null,
民族 varchar(16) default ‘汉’,
职位 char(10),
部门号 char(10),
);
建立实习员工表:
create table 新员工表(
登记编号 char(10) primary key,
员工编号 char(10),
部门号 char(10),
职位 char(10),
入职日期 datetime,
foreign key(员工编号) references 员工表(员工编号)
);
建立离职表:
create table 离职表(
离职编号 char(10) primary key,
员工编号 char(10),
部门 char(10),
职位 char(10),
离职日期 char(10),
离职原因nvarchar(50),
foreign key(员工编号) references 员工表(员工编号)
);
建立职务调动表:
create table 职务调动表(
调动编号 char(10) primary key,
员工编号 char(10),
调动前职称 char(10),
调动后职称 char(10),
调后部门号 char(10),
批复日期 datetime,
调动日期 datetime,
调动原因 char(50),
foreign key(员工编号) references 员工表(员工编号)
);
建立合同表:
create table 合同表(
合同编号 char(10) primary key,
员工编号 char(10),
合同起始 datetime,
合同到期 datetime,
foreign key(员工编号) references 员工表(员工编号)
);
建立奖惩表:
create table 奖惩记录表(
奖惩编号 char(6) primary key,
员工编号 char(10),
奖惩类型 char(4),
奖惩金额 money,
奖惩日期 datetime,
批复部门号 char(10),
批复日期 datetime,
奖惩原因 varchar(50),
foreign key(员工编号) references 员工表(员工编号)
);
建立加班表:
create table 加班表(
加班编号 char(10) primary key,
员工编号 char(10),
加班起始 datetime,
加班结束 datetime,
foreign key(员工编号) references 员工表(员工编号)
);
建立出差表:
create table 出差表(
出差编号 char(10) primary key,
员工编号 char(10),
出差起始 datetime,
出差结束 datetime,
foreign key(员工编号) references 员工表(员工编号)
);
建立出勤表:
create table 出勤表(
出勤编号 char(10) primary key,
员工编号 char(10),
上班日期 datetime,
上班时间 datetime,
下班时间 datetime,
刷卡机号 char(4),
打卡次数 nchar(10),
foreign key(员工编号) references 员工表(员工编号)
);
建立工资表:
create table 工资表(
工资编号 char(6) primary key,
员工编号 char(10),
基本工资 money,
实发工资 money,
起始时间 datetime,
截止时间 datetime,
发薪日期 datetime,
foreign key(员工编号) references 员工表(员工编号)
);
建立管理人员表:
create table 管理人员(
管理员编号 char(10) primary key,
员工编号 char(10),
密码 char(10),
级别 char(10),
);
建立工龄表
create table 工龄表(
工龄记录号 char(10) primary key,
员工编号 char(10),
工龄 char(10),
入职日期 datetime,
foreign key(员工编号) references 员工表(员工编号)
);
建立培训表
create table 培训表(
培训编号 char(10) primary key,
员工编号 char(10),
培训项目 char(10),
培训成绩 char(10),
开始时间 datetime,
结束时间 datetime,
foreign key(员工编号) references 员工表(员工编号)
);
请假记录
create table请假记录表(
请假编号 char(6) primary key,
员工编号 char(10),
请假时间 datetime,
销假时间 datetime,
请假天数 int,
审批人编号 char(4),
foreign key(员工编号) references 员工表(员工编号)
);
建立部门表
create table 部门表(
部门名 char(10) primary key,
部门号 char(10),
*号 char(10),
foreign key(员工编号) references 员工表(员工编号)
);
索引的建立
Go
/索引的建立/
create index部门_*号_index on部门(*号)
create index 出勤_学历_index on 出勤(学历 )
create index 出勤_出生日期_index on 员工(出生日期 )
create index 出勤_上班日期_index on 出勤(上班日期 )
create index 工资_基本工资_index on 工资(基本工资 )
create index 职务调动_调动前职务_index on 职务调动(调动前职务 )
create index 奖惩记录_奖惩类型_index on 奖惩记录(奖惩类型 )
create index 请假记录_请假天数_index on 请假记录(请假天数)
Go
视图的建立
(1)建立一个视图,反映员工姓名及工资情况。
create view 员工_工资
as
select 员工.姓名, 工资.*
from 员工,工资
where 员工.员工编号=工资表.员工编号
登录界面用户名和密码与数据库建立联系
数据库与VS2013的连接
首先在头文件加上这两个文件
using System.Data;
using System.Data.SqlClient;
然后将数据连接的语句string sqlStr = “server=MK96;database=人事管理系统;Trusted_Connection=yes”;加在窗体加载过程中或者是放在button里面
进行用户的区分,如果所输入用户名和密码能够在人事管理系统的数据库中读取到匹配到则说明该用户是这个公司的员工,然后在进行下一步的判断将该员工的用户名在人事管理系统数据库中的管理员表匹配,如果能读取到则界面将跳转到管理人员的界面,否则将跳到员工界面。
如果用户名在不能在数据库中读取到则系统会提示,用户名与密码不匹配请重新输入。
管理人员表
**完整程序及数据库下载地址:链接:https://pan.baidu.com/s/1pL2s6l1DnCPQJe0JA0CE2g