人事管理系统实验报告.docx
《人事管理系统实验报告.docx》由会员分享,可在线阅读,更多相关《人事管理系统实验报告.docx(29页珍藏版)》请在冰豆网上搜索。
人事管理系统实验报告
数据库系统课程设计报告
题目:
年级专业:
人事管理系统
12网络工程
学
姓
号:
名:
陈嘉升
小组成员:
贺锦鹏田野指导老师:
完成时间:
2014.06.08
评分:
湖南科技大学计算机科学与工程学院
1系统需求分析
1.1系统功能分析
人事管理系统主要有以下几项功能要求:
●
●
●
●
●
新员工资料的输入
自动分配员工,并且设置初始的用户密码
人事变动的详细记录,包括岗位和部门的调整员工信息的查询和修改,包括员工个人信息和密码等查询人事变更记录
1.2系统功能模块设计
根据系统功能需求,可以将系统分解成几个模块来分别设计应用程序设计界面,如下图所示:
1.3与其它系统的关系
本系统是公司管理信息系统的基础部分。
为其他子系统,如考勤管理系统、工资管理系统和员工培训系统,提供员工的基本信息。
同时为其它的系统提供了员工登录的密码认定和权限分配功能。
1.4数据流程图
人事信息管理系统的数据流程如图所示,所有数据有人事科管理员输入。
1
据
录
个人信息查询结果
1.5数据库需求分析
根据数据流程图,可以列出以下数据项和数据结构:
●
●
●
●
●
●
员工信息:
员工号、密码、权限、姓名、性别、生日、所在部门、职务、受教育程度、专业、家庭住址、电话、电子邮箱、当前状态、备注人事变更记录:
记录号、员工号、变动、详细记录。
所需的外部数据支持:
部门信息:
部门编号、名称、部门经理、简介
受教育程度代码表:
代码、说明
职务代码表:
职务编号、名称
人事变动代码:
代码、描述
2概念结构设计
2.1概念结构设计的步骤
概念结构的设计可分为两步:
第一步是抽象数据并设计局部视图。
第二步是集成局部视图,得到全局的概念结构。
员工实体E-R图:
2
员工号
密码
用户权限
备注
当前状态
电子邮箱
联系电话
家庭住址
姓名
性别
生日
所在部门
专业技能
受教育程度
职务
部门实体E-R图:
部门名称
部门编号
简介
职务代码表E-R图:
部门经理
职务编号
职务名称
教育程度代码表E-R图:
代码
说明
人事变动代码表E-R图
3
代码
描述
人事变更记录表E-R图:
记录编号
员工号
变更代码
详细记录
实体E-R总图:
1
m
拥
有
存
在
1
1
m
1
拥有
1
工
作
m
存在
1
1
3逻辑结构设计
3.1E-R图向关系模型的转换
将总体关系的E-R图转换为关系模型:
员工(员工号、密码、用户权限、姓名、性别、生日、所在部门、职
4
)
务、受教育程度、专业技能、家庭住址、联系电话、电子邮箱、当前状态、备注)
部门(部门号,部门名称,部门经理,简介)
职务(职务号、职务名称)
教育程度(代码,说明)
人事变更记录(记录编号,员工号,变更代码,详细记录)
人事变动代码(代码,描述)
4物理结构设计
4.1数据表的物理结构
根据系统E-R图,本系统需要有两个数据分别来存放工人个人信息和人事变动记录。
并且需要一个外部数据表(部门信息)的支持。
同时部分记录字段需要用代码来表示,因此需要3个代码来分别记录教育程度、职务和人事变更的代码。
这个6个数据表的结构如表1到表6所示。
表1PERSON员工个人信息表
字段名
数据类型
长度
是否为空
说明
ID
int
4
NOTNULL
员工号(主关键字)
PASSWD
varchar
50
NOTNULL
密码
AUTHORITY
varchar
50
NOTNULL
用户权限
NAME
varchar
50
NOTNULL
姓名
SEX
varchar
50
NOTNULL
性别
BIRTHDAY
varchar
50
NULL
生日
DEPARTMENT
varchar
50
NOTNULL
所在部门
JOB
varchar
50
NOTNULL
职务
EDU_LEVEL
varchar
50
NOTNULL
受教育程度
SPCIALTY
varchar
50
NULL
专业技能
ADDRESS
varchar
50
NULL
家庭住址
TEL
varchar
50
NULL
联系电话
EMAIL
varchar
50
NULL
电子邮箱
STATE
varchar
50
NOTNULL
当前状态(T-员工、F-非员工
REMARK
varchar
50
NULL
备注
表2PERSONNEL人事变更记录表
字段名
数据类型
长度
是否为空
说明
ID
int
4
NOTNULL
记录编号
PERSON
varchar
4
NOTNULL
员工号
CHANGE
varchar
4
NOTNULL
变更代码
DESCRIPTION
varchar
16
NULL
详细记录
5
表3EDU_LEVEL受教育程度代码表
字段名
数据类型
长度
是否为空
说明
CODE
int
4
NOTNULL
代码
DESCRIPTION
varchar
50
NULL
描述
表4JOB职务代码表
字段名
数据类型
长度
是否为空
说明
CODE
int
4
NOTNULL
代码
DESCRIPTION
varchar
50
NULL
描述
表5PERSONNEL_CHANGE人事变动代码表
字段名
数据类型
长度
是否为空
说明
CODE
int
4
NOTNULL
代码
DESCRIPTION
varchar
50
NULL
描述
表6DEPANTMENT部门信息表
字段名
数据类型
长度
是否为空
说明
ID
int
4
NOTNULL
部门编号
NAME
varchar
50
NOTNULL
部门名称
MANAGER
varchar
4
NOTNULL
部门经理
INTRO
varchar
50
NULL
简介
表7
受教育程度代码
代码
说明
0
小学
1
初中
2
高中
3
职高
4
大本
5
大专
6
硕士
7
博士
8
博士后
表8
人事变更代码
代码
说明
0
新员工加入
1
职务变动
2
辞退
6
5各功能模块的设计与实现
5.1各功能说明
⏹增加新员工
⏹人事变动
⏹员工信息查询和修改
⏹加密模块
5.2用户界面设计
完成数据库创建和功能说明以后,我们可以进行下一步工作,即设计用户界面。
我们把人事信息系统的窗口分成4个主要部分。
1.登录模块的创建
2.增加新员工窗体的创建
3.人事变动窗体的创建
4.员工信息查询修改窗体的创建
5.加密模块的创建
5.3各功能模块的实现
1.加密模块
窗口设计:
7
由于时间关系只实现了固定的用户名和密码,为实现数据库验证的用户名和密码
相关代码:
//**********************以下实现管理员密码登陆
************************************************************//
//未实现管理员密码的可修改性
voidCMyDlg:
:
OnLoad()
{
//TODO:
AddyourcontrolnotificationhandlercodehereUpdateData(TRUE);
CStringID="admin";
CStringPASSWD="123";
if(m_ID=="")
{
MessageBox("请输入用户名");
return;
}
if(m_PASSWD=="")
{
MessageBox("请输入密码");
return;
}
if(ID!
=""&&PASSWD!
="")
{
if(ID==m_ID&&PASSWD==m_PASSWD)
{
AfxMessageBox("欢迎使用!
");
CAdminBoxa;//调用管理员窗口的一个对象
a.DoModal();//调用函数
}
else
{
AfxMessageBox("用户信息不正确,重新登录!
");
/*time++;
if(time>2)
exit(0);
*/
}
}
}
8
//***************************************************************//
2.主窗口的设计
主窗口只实现相关功能窗口的调用按钮,不实现具体功能//*****************************************************************************
*********************//
//以下实现员工信息修改窗口
voidCAdminBox:
:
OnBUTTONUpdateName()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
CUpdateNamea;
a.DoModal();
}
//*****************************************************************************
*************************************//
//调用人事变动窗口
voidCAdminBox:
:
OnBUTTONPersonnel()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
CPERSONNELa;
a.DoModal();
9
}
//*****************************************************************************
*************************************//
//提供退出系统的功能
voidCAdminBox:
:
OnButtonExit()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
if(MessageBox("确定退出?
",_T(""),MB_YESNO|MB_ICONSTOP)==IDYES)
exit(0);
}
⏹3.人事变动
窗口设计:
实现的功能是在往数据库人事变更表中添加数据的时候同时修改员工信息表中的相关信息
代码如下:
voidCPERSONNEL:
:
OnButton1()
{
//TODO:
AddyourcontrolnotificationhandlercodehereUpdateData(TRUE);
_ConnectionPtrm_pConnection;
:
:
CoInitialize(NULL);
10
//在ADO操作中建议语中要常用try...catch()来捕获错误信息
//因为他有时会经常出现一些想不到的错误
try
{
m_pConnection.CreateInstance("ADODB.Connection");
_bstr_tstrConn="Provider=SQLOLEDB;DataSourse=(local);
InitialCatalog=人事管理系统;UID=sa;PWD=;";
m_pConnection->Open(strConn,"","",adModeUnknown);
if(m_pConnection->State==adStateOpen)MessageBox("成功连接数据库");}
catch(_com_errore)
{
:
:
CoUninitialize();
AfxMessageBox(e.ErrorMessage());
return;
}
//以下插入人事变更记录
_variant_tra;
_bstr_tstrAdd="INSERTINTOPERSONNELVALUES('";
//strAdd=strAdd+m_ID+"','";
strAdd=strAdd+m_PERSON+"','";
strAdd=strAdd+m_CHANGE+"','";
strAdd=strAdd+m_DESCRIPTION+"')";
//AfxMessageBox(strAdd);
m_pConnection->Execute(strAdd,&ra,adCmdText);
//m_pConnection->Close();
//下面同样涉及对其他表数据修改故不能关闭数据库连接
strAdd="UPDATEPERSONSETSTATE=";
if(m_CHANGE=="0")
{
strAdd=strAdd+"'T'whereID="+m_PERSON;
//AfxMessageBox(strAdd);
}
11
elseif(m_CHANGE=="2")
{
strAdd=strAdd+"'F'whereID="+m_PERSON;
//AfxMessageBox(strAdd);
}
m_pConnection->Execute(strAdd,&ra,adCmdText);
m_pConnection->Close();
m_adodc1.SetRecordSource("select*fromPERSONNEL");
m_adodc1.Refresh();
UpdateData(FALSE);
}
⏹3.员工信息查询修改
窗口设计如下:
实现功能:
可以在所有记录上进行相关信息的查询和修改
各部分功能的代码如下
●增加新员工信息//*************************************************************////以下实现按钮触发添加员工信息功能
voidCUpdateName:
:
OnBUTTONAddName()
12
{
//TODO:
AddyourcontrolnotificationhandlercodehereUpdateData(TRUE);
_ConnectionPtrm_pConnection;
:
:
CoInitialize(NULL);
//在ADO操作中建议语中要常用try...catch()来捕获错误信息
//因为他有时会经常出现一些想不到的错误
try
{
m_pConnection.CreateInstance("ADODB.Connection");
_bstr_tstrConn="Provider=SQLOLEDB;DataSourse=(local);
InitialCatalog=人事管理系统;UID=sa;PWD=;PersistSecurityInfo=FALSE";
m_pConnection->Open(strConn,"","",adModeUnknown);
//if(m_pConnection->State==adStateOpen)MessageBox("成功连接数据库");
}
catch(_com_errore)
{
:
:
CoUninitialize();
//AfxMessageBox(e.ErrorMessage());
return;
}
_variant_tra;
m_PASSWD="12345";
m_AUTHORITY="2";
_bstr_tstrAdd="INSERTINTOPERSONVALUES('";
//strAdd=strAdd+m_ID+"','";
strAdd=strAdd+m_PASSWD+"','";
strAdd=strAdd+m_AUTHORITY+"','";
strAdd=strAdd+m_NAME+"','";
strAdd=strAdd+m_SEX+"','";
strAdd=strAdd+m_BIRTHDAY+"','";
strAdd=strAdd+m_DEPARTMENT+"','";
strAdd=strAdd+m_JOB+"','";
strAdd=strAdd+m_EDU_LEVEL+"','";
strAdd=strAdd+m_SPCIALTY+"','";
strAdd=strAdd+m_ADDRESS+"','";
13
●
strAdd=strAdd+m_TEL+"','";
strAdd=strAdd+m_EMAIL+"','";
strAdd=strAdd+m_STATE+"','";
strAdd=strAdd+m_REMARK+"')";
//AfxMessageBox(strAdd);
m_pConnection->Execute(strAdd,&ra,adCmdText);
m_pConnection->Close();
m_adodc1.SetRecordSource("select*fromPERSON");
m_adodc1.Refresh();
UpdateData(FALSE);
}
查询功能
//***************************************************************************////连接上面两个组合框的输入值来响应相应的查询信息
voidCUpdateName:
:
OnBUTTONCheck()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
UpdateData(TRUE);
if((m_SelectYes==1&&m_CheckName=="")||(m_SelectYes==2&&m_CheckID==""))
{
CStringstr="select*fromPERSON";
m_adodc1.SetRecordSource(str);
m_adodc1.Refresh();
UpdateData(FALSE);
return;
}
else
{
if(m_SelectYes==1)
{
CStringstr="select*fromPERSONwhereNAME='"+m_CheckName
+"'";
//AfxMessageBox(str);
m_adodc1.SetRecordSource(str);
m_adodc1.Refresh();
UpdateData(FALSE);
}
elseif(m_SelectYes==2)
14
{
CStringstr="select*fromPERSONwhereID='"+m_CheckID+"'";//AfxMessageBox(str);
m_adodc1.SetRecordSource(str);
m_adodc1.Refresh();
UpdateData(FALSE);
}
}
}
●
删除选定记录
//***************************************************************************////以下实现按钮触发删除当前列表所选择的记录
voidCUpdateName:
:
OnBUTTONDeleteName()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
UpdateData(TRUE);
intColNum=2;
CStringcolVal;
//要包含头文件"Columns.h"
CColumnscols;
//要包含头文件"Column.h"
CColumncol;
VARIANTv_ColNum,v_Value;
cols=m_datagrid1.GetColumns();//调用GetColumns返回CDataGrid对应的CColumns对象
v_ColNum.vt=VT_I2;
//读取ID
v_ColNum.iVal=0;//设置列编号
col=cols.GetItem(v_ColNum);//根据列编号返回CColumn对象
v_Value=col.GetValue();//读取列植
CStringtmp=v_Value.bstrVal;
//intcurRow=atoi(tmp);
CStringtmp2="确认要删除编号为"+tmp+"的记录吗?
";if(MessageBox(tmp2,_T("数据删除提示"),MB_YESNO|MB_ICONSTOP)!
=IDYES)
return;
15
UpdateData(TRUE);
_ConnectionPtrm_pConnection;
:
:
CoInitialize(NULL);
try
{
m_pConnection.CreateInstance("ADODB.Connection");
_bstr_tstrConn="Provider=SQLOLEDB;DataSourse=(local);Initial
Catalog=人事管理系统;UID=sa;PWD=;";
m_pConnection->Open(strConn,"","",adModeUnknown);if(m_pConnection->State==adStateOpen)MessageBox("成功连接数据库");
}
catch(_com_errore)
{
:
:
CoUninitialize();
AfxMessageBox(e.ErrorMessage());
return