人事管理系统实验报告文档格式.docx
《人事管理系统实验报告文档格式.docx》由会员分享,可在线阅读,更多相关《人事管理系统实验报告文档格式.docx(29页珍藏版)》请在冰豆网上搜索。
第一步是抽象数据并设计局部视图。
第二步是集成局部视图,得到全局的概念结构。
员工实体E-R图:
部门实体E-R图:
职务代码表E-R图:
教育程度代码表E-R图:
人事变动代码表E-R图
人事变更记录表E-R图:
实体E-R总图:
3逻辑结构设计
3.1E-R图向关系模型的转换
将总体关系的E-R图转换为关系模型:
员工(员工号、密码、用户权限、姓名、性别、生日、所在部门、职务、受教育程度、专业技能、家庭住址、联系电话、电子邮箱、当前状态、备注)
部门(部门号,部门名称,部门经理,简介)
职务(职务号、职务名称)
教育程度(代码,说明)
人事变更记录(记录编号,员工号,变更代码,详细记录)
人事变动代码(代码,描述)
4物理结构设计
4.1数据表的物理结构
根据系统E-R图,本系统需要有两个数据分别来存放工人个人信息和人事变动记录。
并且需要一个外部数据表(部门信息)的支持。
同时部分记录字段需要用代码来表示,因此需要3个代码来分别记录教育程度、职务和人事变更的代码。
这个6个数据表的结构如表1到表6所示。
表1PERSON员工个人信息表
字段名
数据类型
长度
是否为空
说明
ID
int
4
NOTNULL
员工号(主关键字)
PASSWD
varchar
50
密码
AUTHORITY
用户权限
NAME
姓名
SEX
varchar
性别
BIRTHDAY
NULL
生日
DEPARTMENT
所在部门
JOB
职务
EDU_LEVEL
varchar
受教育程度
SPCIALTY
专业技能
ADDRESS
家庭住址
TEL
联系电话
EMAIL
电子邮箱
STATE
当前状态(T-员工、F-非员工)
REMARK
备注
表2PERSONNEL人事变更记录表
记录编号
PERSON
员工号
CHANGE
变更代码
DESCRIPTION
16
详细记录
表3EDU_LEVEL受教育程度代码表
CODE
4
代码
NULL
描述
表4JOB职务代码表
字段名
数据类型
长度
int
NOTNULL
表5PERSONNEL_CHANGE人事变动代码表
表6DEPANTMENT部门信息表
是否为空
部门编号
部门名称
MANAGER
部门经理
INTRO
简介
表7受教育程度代码
小学
1
初中
2
高中
3
职高
大本
5
大专
6
硕士
7
博士
8
博士后
表8人事变更代码
新员工加入
职务变动
辞退
5各功能模块的设计与实现
5.1各功能说明
⏹增加新员工
⏹人事变动
⏹员工信息查询和修改
⏹加密模块
5.2用户界面设计
完成数据库创建和功能说明以后,我们可以进行下一步工作,即设计用户界面。
我们把人事信息系统的窗口分成4个主要部分。
1.登录模块的创建
2.增加新员工窗体的创建
3.人事变动窗体的创建
4.员工信息查询修改窗体的创建
5.加密模块的创建
5.3各功能模块的实现
1.加密模块
窗口设计:
由于时间关系只实现了固定的用户名和密码,为实现数据库验证的用户名和密码
相关代码:
//**********************以下实现管理员密码登陆************************************************************//
//未实现管理员密码的可修改性
voidCMyDlg:
:
OnLoad()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
UpdateData(TRUE);
CStringID="
admin"
;
CStringPASSWD="
123"
if(m_ID=="
"
)
{
MessageBox("
请输入用户名"
);
return;
}
if(m_PASSWD=="
请输入密码"
if(ID!
="
&
&
PASSWD!
if(ID==m_ID&
PASSWD==m_PASSWD)
{
AfxMessageBox("
欢迎使用!
CAdminBoxa;
//调用管理员窗口的一个对象
a.DoModal();
//调用函数
}
else
用户信息不正确,重新登录!
/*time++;
if(time>
2)
exit(0);
*/
}
//***************************************************************//
2.主窗口的设计
主窗口只实现相关功能窗口的调用按钮,不实现具体功能
//**************************************************************************************************//
//以下实现员工信息修改窗口
voidCAdminBox:
OnBUTTONUpdateName()
CUpdateNamea;
a.DoModal();
//******************************************************************************************************************//
//调用人事变动窗口
OnBUTTONPersonnel()
CPERSONNELa;
//提供退出系统的功能
OnButtonExit()
if(MessageBox("
确定退出?
_T("
),MB_YESNO|MB_ICONSTOP)==IDYES)
exit(0);
⏹3.人事变动
实现的功能是在往数据库人事变更表中添加数据的时候同时修改员工信息表中的相关信息
代码如下:
voidCPERSONNEL:
OnButton1()
_ConnectionPtrm_pConnection;
:
CoInitialize(NULL);
//在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());
//以下插入人事变更记录
_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);
elseif(m_CHANGE=="
2"
F'
m_adodc1.SetRecordSource("
select*fromPERSONNEL"
m_adodc1.Refresh();
UpdateData(FALSE);
⏹3.员工信息查询修改
窗口设计如下:
实现功能:
可以在所有记录上进行相关信息的查询和修改
各部分功能的代码如下
●增加新员工信息
//*************************************************************//
//以下实现按钮触发添加员工信息功能
voidCUpdateName:
OnBUTTONAddName()
{
PersistSecurityInfo=FALSE"
//if(m_pConnection->
State==adStateOpen)MessageBox("
//AfxMessageBox(e.ErrorMessage());
m_PASSWD="
12345"
m_AUTHORITY="
INSERTINTOPERSONVALUES('
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+"
strAdd=strAdd+m_TEL+"
strAdd=strAdd+m_EMAIL+"
strAdd=strAdd+m_STATE+"
strAdd=strAdd+m_REMARK+"
//AfxMessageBox(strAdd);
select*fromPERSON"
●查询功能
//***************************************************************************//
//连接上面两个组合框的输入值来响应相应的查询信息
OnBUTTONCheck()
if((m_SelectYes==1&
m_CheckName=="
)||(m_SelectYes==2&
m_CheckID=="
))
CStringstr="
m_adodc1.SetRecordSource(str);
m_adodc1.Refresh();
UpdateData(FALSE);
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)
select*fromPERSONwhereID='
+m_CheckID+"
●删除选定记录
//以下实现按钮触发删除当前列表所选择的记录
OnBUTTONDeleteName()
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)
AfxMessag