数据库课程设计报告人事管理.docx
《数据库课程设计报告人事管理.docx》由会员分享,可在线阅读,更多相关《数据库课程设计报告人事管理.docx(25页珍藏版)》请在冰豆网上搜索。
数据库课程设计报告人事管理
数据库课程设计报告
人事与工资管理系统
班级:
地信
序号:
姓名:
地球科学学院地信系
2014-06-21
目录
1概述1
2需求分析1
2.1问题陈述1
2.2功能分析1
2.3操作流程2
2.4ER模型图2
3数据库逻辑设计4
4数据库设计部分(T-SQL)6
4.1为id创建规则6
4.2创建视图sworker7
4.3创建视图tf,并建触发器7
4.4创建的主外键关系图8
5软件功能设计8
6界面设计9
6.1登陆界面9
6.2新员工信息录入10
6.3职工信息查询10
6.4个人信息修改11
6.5资源管理11
7应用程序12
7.1个人信息录入12
7.2随机生成员工号14
7.3取身份证后6位为初始密码14
7.4模糊查询14
8实验数据示例19
9心得19
1概述
开发环境
操作系统:
windowsXP或windows7
数据库平台:
SQLServer2008
编程工具:
MicrosoftVisualStudio2010
2需求分析
2.1问题陈述
企业人事管理系统主要用于员工个人资料的录入、职务变动的记录和管理。
使用人事管理系统,便于公司领导掌握人员的动向,及时调整人才的分配。
计算各员工每个月工实发工资计算,计算的项目包括基本工资、奖金、福利、津贴等。
2.2功能分析
(1)新员工资料的输入。
(2)自动分配员工号,并且设置初始的用户密码。
(3)人事变动的详细记录,包括岗位和部门的调整。
(4)员工信息的查询和修改,包括员工个人信息和密码等。
(5)员工基本工资的设定。
(6)资金以及褔利补贴的设置。
(7)实发工资计算公式的调整。
(8)根据出勤统计结果计算本月各项实际金额
(9)输出工资报表。
2.3操作流程
2.4ER模型图
个人资料(身份证号,姓名,性别,出生年月,年龄,联系电话,地址,
专业,毕业院校,毕业时间)
部门表(部门号,部门名称,部门基本工资比,部门全勤奖励比)
职业表(职业号,职业名称,基本工资,全勤奖)
职工表(职工号,身份证号,初始密码,现在密码,部门号,职业号码)
职位调动表(职工号,原部门号,原职业号,调动部门号,调动职业号,调动时间)
工资表(职工号,基本工资,福利,津贴,奖惩,全勤奖励,实发工资)
全勤表(职工号,全勤记录)
3数据库逻辑设计
ER模型图转换为关系表
表名
列名
说明
数据类型
是否允许空
主外键
约束
默认值
个人资料
(PersonalInfomation)PI
id
身份证号
char(18)
否
主键
18位数字,最后一位可为X
name
姓名
char(10)
否
sex
性别(1:
男,0:
女)
bit
是
1
birthday
出生年月
smalldatetime
是
age
年龄
int
是
根据生日自动计算
telephone
联系电话
char(11)
是
address
地址
char(20)
是
major
专业
char(10)
是
school
毕业院校
char(16)
是
graduate
毕业时间
smalldatetime
是
部门
(Department)DP
dnumber
部门号
char
(2)
否
主键
dname
部门名称
char(8)
否
radio
基本工资比
float
1
scale
部门全勤奖励比
float
1
职业表
(Profession)PF
pnumber
职业号
char
(2)
否
pname
职业名称
char(8)
否
basic
基本工资
int
1500
qqj
全勤奖
int
200
职工表
(Worker)W
number
职工号(入职年份+)
char(10)
否
主键
id
身份证号
char(18)
否
来源于个人信息表
fpassword
初始密码
char(6)
否
身份证后6位
password
现密码
char(6)
否
与初始密码相同
dnumber
部门号
char
(2)
是
来源于部门表
pnumber
职业号
char
(2)
是
来源于职业表
职工调动表(TransformeWorker)TW
number
职工号
char(10)
否
主键
来源于职工表
fdnumber
原部门号
char
(2)
否
主键
来源于职工表
fpnumber
原职业号
char
(2)
否
主键
来源于职工表
ndnumber
新部门号
char
(2)
否
主键
来源于部门表
npnumber
新职业号
char
(2)
否
主键
来源于职业表
time
调动时间
smalldatetime
是
主键
系统当前时间
出勤表
(Attendance)AT
number
职工号
char(10)
否
主键
来源于职工表
record
全勤记录(工作日)
int
是
0
工资表
(SalaryTable)ST
number
职工号
char(10)
否
主键
来源于职工表
sbasic
基本工资
float
否
根据部门与职业计算
职业
welfare
福利
int
是
0
allowance
津贴
int
是
0
reward
奖惩
int
是
0
faa
全勤奖励
float
是
根据部门、职业和出勤时间计算
salary
实发工资
float
否
4数据库设计部分(T-SQL)
4.1为id创建规则
限制身份号码为18且第一位不能为0和不能为100000000000000000
USEPA
GO
CREATERULEru_id
AS
(@idlike'[1-9][0-9][0-9][0-9][0-9][0-9][1-2][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
or@idlike'[1-9][0-9][0-9][0-9][0-9][0-9][1-2][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][X]')
and@idnotlike'[1][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0]'
GO
EXECsp_bindrule'ru_id','PI.id'
GO
4.2创建视图sworker
USEPA
GO
CREATEVIEWsworkerWITHENCRYPTION
AS
SELECTPI.idas'身份证号',numberas'工号',nameas'姓名',sexas'性别',ageas'年龄',majoras'专业',schoolas'学校',xuelias'学历',dnameas'部门',pnameas'职务',W.dnumberas'部门号',W.pnumberas'职务号'
FROMPI,W,DP,PF
WHEREPI.id=W.idANDW.dnumber=DP.dnumberANDW.dnumber=PF.pnumber
GO
4.3创建视图tf,并建触发器
实现向视图插入数据时实现向职工调动表插入相应记录
USEPA
GO
CREATEVIEWtf
as
SELECTnumber,ndnumber,npnumber
fromTW
GO
USEPA
GO
CREATETRIGGERT
ONtfinsteadofinsert
AS
BEGIN
DECLARE@NCHAR(8),@DNCHAR
(2),@PNchar
(2)
select@N=number,@DN=ndnumber,@PN=npnumberfrominserted
INSERTINTOTW(number,ndnumber,npnumber)VALUES(@N,@DN,@PN)
UPDATEWSETdnumber=@DN,pnumber=@PNwherenumber=@N
END
4.4创建的主外键关系图
5软件功能设计
人事管理系统
资源管理
新员工入职
工资管理
信息管理
信息录入
分配职务
职工信息查询
个人信息修改
部门管理
职业管理
职工调动管理
职工调动查询
报表输出
工资计各算项设定
6界面设计
6.1登陆界面
6.2新员工信息录入
6.3职工信息查询
6.4个人信息修改
6.5资源管理
7应用程序
7.1个人信息录入
privatevoidbutton1_Click(objectsender,EventArgse)
{
OpenFileDialogopenFileDialog=newOpenFileDialog();openFileDialog.InitialDirectory=Environment.GetFolderPath(Environment.SpecialFolder.Personal);
openFileDialog.Filter="jpg图片|*.jpg|gif图片|*.gif|所有文件(*.*)|*.*";
if(openFileDialog.ShowDialog(this)==DialogResult.OK)
{
stringFileName=openFileDialog.FileName;
pictureBox1.Image=Image.FromFile(FileName);
textBox9.Text=FileName;
}
}
publicvoidbutton2_Click(objectsender,EventArgse)
{
if(textBox1.Text==""||textBox2.Text==""||textBox3.Text=="")
{
MessageBox.Show("请输入完整!
");
return;//如果没输入完整则返回
}
stringsqlStr;
SqlConnectionconn=newSqlConnection(strcon);
if(textBox9.Text.Trim()!
="")//如果选择了照片
{sqlStr="insert[PI]([id],[name],[sex],[birthday],[telephone],[address],[major],[school],[xueli],[graduate],[photo])values(@ID,@Name,@Sex,@Birthday,@Telephone,@Address,@Major,@School,@Xueli,@Gradulate,@Photo)";//设置Sql语句
}
else//如果没现在照片{sqlStr="insert[PI]([id],[name],[sex],[birthday],[telephone],[address],[major],[school],[xueli],[graduate])values(@ID,@Name,@Sex,@Birthday,@Telephone,@Address,@Major,@School,@Xueli,@Gradulate)";//设置Sql语句
}
SqlCommandcmd=newSqlCommand(sqlStr,conn);//添加参数cmd.Parameters.Add("@ID",SqlDbType.Char,18).Value=textBox1.Text.Trim()cmd.Parameters.Add("@Name",SqlDbType.Char,10).Value=textBox2.Text.Trim();
if(radioButton1.Checked==true)
{
cmd.Parameters.Add("@Sex",SqlDbType.Bit).Value=true;
}
elseif(radioButton2.Checked==true)
{
cmd.Parameters.Add("@Sex",SqlDbType.Bit).Value=false;
}
else
{
MessageBox.Show("请选择性别");
}cmd.Parameters.Add("@Birthday",SqlDbType.Date).Value=Convert.ToDateTime(textBox3.Text.Trim());cmd.Parameters.Add("@Telephone",qlDbType.Char,11).Value=textBox4.Text.Trim();cmd.Parameters.Add("@Address",SqlDbType.Char,20).Value=textBox5.Text.Trim();
cmd.Parameters.Add("@Major",SqlDbType.Char,10).Value=textBox6.Text.Trim();
cmd.Parameters.Add("@School",SqlDbType.Char,16).Value=textBox7.Text.Trim();
cmd.Parameters.Add("@xueli",SqlDbType.Char,4).Value=comboBox1.Text;cmd.Parameters.Add("@Gradulate",SqlDbType.Date).Value=Convert.ToDateTime(textBox8.Text.Trim());
if(textBox9.Text.Trim()!
="")
{
FileStreamfs=null;
fs=newFileStream(textBox9.Text.Trim(),FileMode.Open,FileAccess.Read);
MemoryStreammem=newMemoryStream();
byte[]data1=newbyte[fs.Length];
fs.Read(data1,0,(int)fs.Length);
cmd.Parameters.Add("@Photo",SqlDbType.Image);//这里选择Image类型
cmd.Parameters["@Photo"].Value=data1;//把照片变化成字节数组
}
try
{
conn.Open();//打开数据库连接
cmd.ExecuteNonQuery();//执行SQL语句
MessageBox.Show("保存成功!
");
this.pITableAdapter.Fill(this.pADataSet24.PI);
}
catch(Exceptionex)
{
MessageBox.Show("出错!
"+ex.Message);
}
finally
{
conn.Close();//关闭数据库连接
}
}
7.2随机生成员工号
DateTimenow=DateTime.Now;//取当前时间
Stringstr1=Convert.ToString(now.Year);//取当前时间的年份并转换为字符串
System.Randoma=newRandom(System.DateTime.Now.Millisecond);
intRandKey=a.Next(10000);//用当前时间做种子生成4位随机号码
Stringstr2=Convert.ToString(RandKey);
cmd.Parameters.Add("@Number",SqlDbType.Char,8).Value=str1+str2;//组合为员工号
7.3取身份证后6位为初始密码
cmd.Parameters.Add("@Fpassword",SqlDbType.Char,6).Value=str3.Substring(12,6);
cmd.Parameters.Add("@Password",SqlDbType.Char,6).Value=str3.Substring(12,6);
7.4模糊查询
(按部门、职业、性别任意组合查询)
privatevoidbutton1_Click(objectsender,EventArgse)
{
intSEX;
intD;
intP;
StringDn;
StringPn;
if(comboBox3.Text=="男"){SEX=1;}
elseif(comboBox3.Text=="女"){SEX=1;}
elseSEX=-1;
if(comboBox1.Text==""){D=0;}
elseD=1;
Dn=comboBox1.Text;
if(comboBox2.Text==""){P=0;}
elseP=1;
Pn=comboBox2.Text;
if(D==0&&P==0&&SEX==-1)
{
MessageBox.Show("请输入查询条件!
");
return;//如果没输入完整则返回
}
SqlConnectionconn=newSqlConnection(strcon);
if(D==1&&P==0&&SEX==-1)
{
stringsqlStrSelect="select[工号],[身份证号],[姓名],[性别],[年龄],[专业],[学校],[学历],[职务]from[sworker]where[部门号]='"+Dn+"'";
try
{
SqlDataAdapteradapter=newSqlDataAdapter(sqlStrSelect,conn);
DataSetdstable=newDataSet();
adapter.Fill(dstable,"testTable");
dataGridView1.DataSource=dstable.Tables["testTable"];
dataGridView1.Show();
}
catch(Exceptionex)
{
MessageBox.Show(ex.Message);
}
finally
{
conn.Close();
}
}
if(D==1&&P==0&&SEX!
=-1)
{
stringsqlStrSelect="select[工号],[身份证号],[姓名],[年龄],[专业],[学校],[学历],[职务]from[sworker]where[部门号]='"+Dn+"'and[性别]='"+SEX+"'";
try
{
SqlDataAdapteradapter=newSqlDataAdapter(sqlStrSelect,conn);
DataSetdstable=newDataSet();
adapter.Fill(dstable,"testTable");
dataGridView1.DataSource=dstable.Tables["testTable"];
dataGridView1.Show();
}
catch(Exceptionex)
{
MessageBox.Show(ex.Message);
}
finally
{
conn.Close();
}
}
if(D==1&&P==1&&SEX!
=-1)
{
stringsqlStrSelect="select[工号],[身份证号],[姓名],[年龄],[专业],[学校],[学历]from[sworker]where[部门号]='"+Dn+"'and[性别]='"+Pn+"'and[职务号]='"+Pn+"'";
try
{
SqlDataAdapteradapter=newSqlDataAdapter(sqlStrSelect,conn);
DataSetdstable=newDataSet();
adapter.Fill(dstable,"testTable");
dataGridView1.DataSource=dstable.Tables["testTable"];
dataGridView1.Show();
}
catch(Exceptionex)
{
MessageBox.Show(ex.Message);
}
finally
{
conn.Close();
}
}
if(D==1&&P==1&&SEX==-1)
{
stringsqlStrSelect="select[工号],[身份证号],[姓名],[性别],[年龄],[专业],[学校],[学历]from[sworker]where[部门号]='"+Dn+"'and[职务号]='"+Pn+"'";
try
{
SqlDataAdapteradapter=newSqlDataAdapter(sqlStrSelect,