C++ 人事管理系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录
摘要 (1)
1 设计目的 (2)
2 设计需求 (3)
2.1 主界面 (3)
2.2 设计概述 (3)
2.3 数据库表 (4)
2.4 数据库及数据表的设计 (5)
3 运行界面及使用说明 (11)
4 主要程序 (16)
4.1 登入模块源程序 (16)
4.2 录入编辑模块源程序 (17)
4.3 查询模块源程序 (19)
4.4 统计模块源程序 (20)
4.5 管理员账号管理模块源程序 (22)
4.6 档案备份模块源程序 (22)
4.7 档案还原模块源程序 (23)
5 总结 (25)
参考资料 (26)
摘要
人事档案管理是现代社会的企业、工厂、政府部门等都需要进行的一个人事管理。
为方便人事档案管理,我们设计开发出了能在计算机上运行来进行人事档案管理的系统。
该人事档案管理系统的总体设计目的是:在数据库和Visual C++6.0的发平台上,开发出一个能扩充的、具备良好人机交互界面的人事档案管理系统,以实现机关、企业、事业等对人事档案的计算机管理,同时为人事档案管理提供准确、迅速的档案信息。
本系统采用Visual C++6.0作为开发平台,应用Access文档为数据库,使用ODBC及ADO控件链接数据库的方法进行系统设计。
该人事档案管理系统具备的基本功能包括档案的录入编辑、查询、统计、档案备份、档案还原和管理员的帐号管理等几个方面。
关键字:人事档案管理 Visual C++6.0 数据库
1 设计目的
该人事档案管理系统的总体设计目的是:在数据库和Visual C++6.0的发平台上,开发出一个能扩充的、具备良好人机交互界面的人事档案管理系统,以实现机关、企业、事业等对人事档案的计算机管理,同时为人事档案管理提供准确、迅速的档案信息。
本系统采用Visual C++6.0作为开发平台,应用Access文档为数据库,使用ODBC及ADO控件链接数据库的方法进行系统设计。
该人事档案管理系统具备的基本功能包括档案的录入编辑、查询、统计、档案备份、档案还原和管理员的帐号管理等几个方面。
2 设计需求
该人事档案管理系统具备的基本功能包括档案的录入编辑、查询、统计、档案备份、档案还原和管理员的帐号管理等几个方面。
2.1 主界面
进入系统后的系统主界面如图2-1所示:
图2-1 主界面示意图
2.2 设计概述
该系统能实现人事管理的基本功能。
包括进行代码表及个人档案信息的录入编辑、进行上一条及下一条档案信息的显示、按照档案表的形式显示实现按姓名或职工号查询个人档案信息、实现按照文化程度、性别、职称进行档案简单信息的列表显示与统计相关人数,而且还增加了对档案的备份功能和还原功能以及管理员对帐号的管理功能。
系统功能结构图如图2-2所示:
图2-2 系统功能结构图
2.3 数据库表
由于本系统所需的数据信息量不多,结构也不复杂,因此我们选用了较为简单易行的Access数据库而不选择相对复杂的SQL数据库。
该系统设计所需的数据库表如下:
①表名:m_dadj(档案登记表)
⑤表名:bm_wh(文化程度编码表)
2.4 数据库及数据表的设计
该设计建立的数据库命名为Demo01.mdb,以下是在数据库设计过程中的部分视图:
图2-3 数据库列表视图
图2-4 部门表设计视图
图2-5 文化程度表设计视图
图2-6 职称表设计视图
图2-7 主要关系表设计视图
图2-8 档案登记表设计视图
图2-9 帐户表设计视图
图2-10 各个表之间的关系图
3 运行界面及使用说明
经测试,该系统的登陆、录入编辑、查询、统计、档案备份、档案还原和管理员管理账号等功能均能实现,基本完成了系统设计的要求。
运行界面及使用说明如下列各图所示:
打开系统后的界面如图3-1所示。
此时需要输初始用户名和密码:用户名“test”密码“test”
或用户名“admin”密码“admin”
图3-1 登入界面示意图
进入系统后的主界面如图3-2所示:
图3-2 主界面示意图
这时,用户可根据需要分别选择实现功能。
图3-3所示为实现录入编辑的示意图。
该功能能够实现在人事档案的里新增录入和修改编辑,简单方便,容易操作。
图3-3 录入编辑示意图
图3-4所示为实现查询界面示意图。
在该功能中,可以根据档案中的人员姓名和人员编号直接查询到你所需要的信息。
图3-4 查询界面示意图
图3-5所示为实现统计界面示意图。
在该功能中,可以根据档案中的人员姓名、人员职称和文化程度直接查询到你所需要的信息并统计出相关人数。
图3-5 统计界面示意图
图3-6所示为实现管理员账号管理示意图。
在该功能中,可以实现管理员对系统登录的用户名和密码的自主修改、添加、删除等功能。
图3-6 管理员帐户管理示意图
图3-7所示为实现数据库档案备份示意图。
在该功能中,可以对当前档案进
行备份,以便当你在丢失某些重要档案后,可根据档案备份轻松找回。
图3-7 档案备份示意图
图3-8所示为实现数据库档案还原示意图。
该功能可以对之前备份的档案进行还原,以便轻松找回你之前在档案里的人事信息。
图3-8 档案还原示意图
4 主要程序
4.1 登入模块源程序
void CDemo01Dlg::OnOK()
{
// TODO: Add extra validation here
UpdateData(TRUE);
CUserRecordSet m_UserRecordSet;
try
{
if(m_UserRecordSet.IsOpen())
m_UserRecordSet.Close();
m_UserRecordSet.m_strFilter.Format("UserName = '%s' and UserPwd = '%s'",m_strUserName,m_strUserPwd);
m_UserRecordSet.Open(CRecordset::snapshot,NULL,CRecordset::none);
if(m_UserRecordSet.IsEOF())
{
m_UserRecordSet.Close();
AfxMessageBox("密码错误,请重试!");
return;
}
else
{
m_UserRecordSet.Close();
AfxMessageBox("密码正确,登录成功!");
ZJM dlg;
dlg.DoModal();
}
}
catch(CDBException*e)
{
e->ReportError ();
//e->Delete ();
return;
}
CDialog::OnOK();
}
4.2 录入编辑模块源程序
控件属性设置如下:
主要源程序如下:
BOOL LRBJ::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
m_adodc.SetRecordSource("Select zgbm AS 职工编码,xm AS 姓名, xb AS 性别, mz AS 民族, csny AS 出生年月, hyzk AS 婚姻状况,whcd AS 文化程度编码,Jkzk AS 健康状况,zzmm AS 政治面貌,zcbm AS 职称编码,jg AS 籍贯,sfzh AS 身份证号码,byxx AS 毕业学校,zytc AS 专业或特长,hkszd AS 户口所在地,hkxz AS 户口性质,xzz AS 现住址,zw AS 职务,Gzm AS 工种名,jspx AS 何时技术培训,jlcf AS 何时奖励和处分,smwt AS 需要说明问题,tbrqm AS 填表人签名,tbrq AS 填表日期,gsyj AS 公司审查意见,scrq AS 审查日期,Ryxz AS 人员性质,Rcsj AS 入厂时间, Ryzt AS 人员状态,bz AS 备注, bmbm AS 部门编码 FROM m_dadj ");
m_adodc.Refresh(); //刷新结果集的内容
//设置列宽度
_variant_t vIndex;
vIndex=long(0); //将整型值转换为_variant_t 类型
m_datagrid.GetColumns().GetItem(vIndex).SetWidth(30);
vIndex=long(1);
m_datagrid.GetColumns().GetItem(vIndex).SetWidth(100);
vIndex=long(2);
m_datagrid.GetColumns().GetItem(vIndex).SetWidth(80);
vIndex=long(3);
m_datagrid.GetColumns().GetItem(vIndex).SetWidth(60);
vIndex=long(4);
m_datagrid.GetColumns().GetItem(vIndex).SetWidth(60);
vIndex=long(6);
m_datagrid.GetColumns().GetItem(vIndex).SetWidth(100); vIndex=long(7);
m_datagrid.GetColumns().GetItem(vIndex).SetWidth(100); vIndex=long(8);
m_datagrid.GetColumns().GetItem(vIndex).SetWidth(100); vIndex=long(9);
m_datagrid.GetColumns().GetItem(vIndex).SetWidth(100); vIndex=long(10);
m_datagrid.GetColumns().GetItem(vIndex).SetWidth(100); vIndex=long(11);
m_datagrid.GetColumns().GetItem(vIndex).SetWidth(100); vIndex=long(12);
m_datagrid.GetColumns().GetItem(vIndex).SetWidth(100); vIndex=long(13);
m_datagrid.GetColumns().GetItem(vIndex).SetWidth(100); vIndex=long(14);
m_datagrid.GetColumns().GetItem(vIndex).SetWidth(100); vIndex=long(15);
m_datagrid.GetColumns().GetItem(vIndex).SetWidth(100); vIndex=long(16);
m_datagrid.GetColumns().GetItem(vIndex).SetWidth(100); vIndex=long(17);
m_datagrid.GetColumns().GetItem(vIndex).SetWidth(100); vIndex=long(18);
m_datagrid.GetColumns().GetItem(vIndex).SetWidth(100); vIndex=long(19);
m_datagrid.GetColumns().GetItem(vIndex).SetWidth(100); vIndex=long(20);
m_datagrid.GetColumns().GetItem(vIndex).SetWidth(100); vIndex=long(21);
m_datagrid.GetColumns().GetItem(vIndex).SetWidth(100); vIndex=long(22);
m_datagrid.GetColumns().GetItem(vIndex).SetWidth(100); vIndex=long(23);
m_datagrid.GetColumns().GetItem(vIndex).SetWidth(100); vIndex=long(24);
m_datagrid.GetColumns().GetItem(vIndex).SetWidth(100); vIndex=long(25);
m_datagrid.GetColumns().GetItem(vIndex).SetWidth(100); vIndex=long(26);
m_datagrid.GetColumns().GetItem(vIndex).SetWidth(100); vIndex=long(27);
m_datagrid.GetColumns().GetItem(vIndex).SetWidth(100);
vIndex=long(29);
m_datagrid.GetColumns().GetItem(vIndex).SetWidth(100);
vIndex=long(30);
m_datagrid.GetColumns().GetItem(vIndex).SetWidth(100);
vIndex=long(31);
m_datagrid.GetColumns().GetItem(vIndex).SetWidth(100);
return TRUE; // return TRUE unless you set the focus to a control
}
4.3 查询模块源程序
void CX::OnOK()
{
// TODO: Add extra validation here
if (m_flg==1)
{
UpdateData(TRUE);
sql.Format("SELECT zgbm AS 职工编码,xm AS 姓名, xb AS 性别, mz AS 民族, csny AS 出生年月, hyzk AS 婚姻状况,whcd AS 文化程度编码,Jkzk AS 健康状况,zzmm AS 政治面貌,zcbm AS 职称编码,jg AS 籍贯,sfzh AS 身份证号码,byxx AS 毕业学校,zytc AS 专业或特长,hkszd AS 户口所在地,hkxz AS 户口性质,xzz AS 现住址,zw AS 职务,Gzm AS 工种名,jspx AS 何时技术培训,jlcf AS 何时奖励和处分,smwt AS 需要说明问题,tbrqm AS 填表人签名,tbrq AS 填表日期,gsyj AS 公司审查意见,scrq AS 审查日期,Ryxz AS 人员性质,Rcsj AS 入厂时间, Ryzt AS 人员状态,bz AS 备注, bmbm AS 部门编码 FROM m_dadj WHERE zgbm='%s' ",m_filterValue);
m_adodc.SetRecordSource((_bstr_t)sql);
m_adodc.Refresh();
//Invalidate();
}else if(m_flg==2)
{
UpdateData(TRUE);
sql.Format("SELECT zgbm AS 职工编码,xm AS 姓名, xb AS 性别, mz AS 民族, csny AS 出生年月, hyzk AS 婚姻状况,whcd AS 文化程度编码,Jkzk AS 健康状况,zzmm AS 政治面貌,zcbm AS 职称编码,jg AS 籍贯,sfzh AS 身份证号码,byxx AS 毕业学校,zytc AS 专业或特长,hkszd AS 户口所在地,hkxz AS 户口性质,xzz AS 现住址,zw AS 职务,Gzm AS 工种名,jspx AS 何时技术培训,jlcf AS 何时奖励和处分,smwt AS 需要说明问题,tbrqm AS 填表人签名,tbrq AS 填表日期,gsyj AS 公司审查意见,scrq AS 审查日期,Ryxz AS 人员性质,Rcsj AS 入厂时间, Ryzt AS 人员状态,bz AS 备注, bmbm AS 部门编码 FROM m_dadj WHERE xm='%s' ",m_filterValue);
m_adodc.SetRecordSource((_bstr_t)sql);
m_adodc.Refresh();
}else
{
}
//CDialog::OnOK();
}
4.4 统计模块源程序
void TJ::OnOK()
{
// TODO: Add extra validation here
CString m_filterValue;
int m_int;
switch (radio)
{
case 0:{break;}
case 1:{
//UpdateData(FALSE);
UpdateData(TRUE);
m_int=m_shuru.GetCurSel();
// UpdateData(FALSE);
switch (m_int)
{
case 0:{m_filterValue="初中";break;}
case 1:{m_filterValue="高中";break;}
case 2:{m_filterValue="大学";break;}
case 3:{m_filterValue="研究";break;}
}
sql.Format("SELECT zgbm AS 职工编码,xm AS 姓名, xb AS 性别, mz AS 民族, csny AS 出生年月, hyzk AS 婚姻状况,whcd AS 文化程度编码,Jkzk AS 健康状况,zzmm AS 政治面貌,zcbm AS 职称编码,jg AS 籍贯,sfzh AS 身份证号码,byxx AS 毕业学校,zytc AS 专业或特长,hkszd AS 户口所在地,hkxz AS 户口性质,xzz AS 现住址,zw AS 职务,Gzm AS 工种名,jspx AS 何时技术培训,jlcf AS 何时奖励和处分,smwt AS 需要说明问题,tbrqm AS 填表人签名,tbrq AS 填表日期,gsyj AS 公司审查意见,scrq AS 审查日期,Ryxz AS 人员性质,Rcsj AS 入厂时间, Ryzt AS 人员状态,bz AS 备注, bmbm AS 部门编码 FROM m_dadj WHERE whcd='%s' ",m_filterValue);
m_tjb.SetRecordSource((_bstr_t)sql);
m_tjb.Refresh();
m_tj=m_tjb.GetRecordset().GetRecordCount();
UpdateData(FALSE);
break;
}
case 2: {
UpdateData(TRUE);
m_int=m_shuru.GetCurSel();
// UpdateData(FALSE);
switch (m_int)
{
case 0:{m_filterValue="男";break;}
case 1:{m_filterValue="女";break;}
}
sql.Format("SELECT zgbm AS 职工编码,xm AS 姓名, xb AS 性别, mz AS 民族, csny AS 出生年月, hyzk AS 婚姻状况,whcd AS 文化程度编码,Jkzk AS 健康状况,zzmm AS 政治面貌,zcbm AS 职称编码,jg AS 籍贯,sfzh AS 身份证号码,byxx AS 毕业学校,zytc AS 专业或特长,hkszd AS 户口所在地,hkxz AS 户口性质,xzz AS 现住址,zw AS 职务,Gzm AS 工种名,jspx AS 何时技术培训,jlcf AS 何时奖励和处分,smwt AS 需要说明问题,tbrqm AS 填表人签名,tbrq AS 填表日期,gsyj AS 公司审查意见,scrq AS 审查日期,Ryxz AS 人员性质,Rcsj AS 入厂时间, Ryzt AS 人员状态,bz AS 备注, bmbm AS 部门编码 FROM m_dadj WHERE xb='%s' ",m_filterValue);
m_tjb.SetRecordSource((_bstr_t)sql);
m_tjb.Refresh();
m_tj=m_tjb.GetRecordset().GetRecordCount();
UpdateData(FALSE);
break;
}
case 3: {
UpdateData(TRUE);
m_int=m_shuru.GetCurSel();
// UpdateData(FALSE);
switch (m_int)
{
case 0:{m_filterValue="L";break;}
case 1:{m_filterValue="M";break;}
case 2:{m_filterValue="H";break;}
}
sql.Format("SELECT zgbm AS 职工编码,xm AS 姓名, xb AS 性别, mz AS 民族, csny AS 出生年月, hyzk AS 婚姻状况,whcd AS 文化程度编码,Jkzk AS 健康状况,zzmm AS 政治面貌,zcbm AS 职称编码,jg AS 籍贯,sfzh AS 身份证号码,byxx AS 毕业学校,zytc AS 专业或特长,hkszd AS 户口所在地,hkxz AS 户口性质,xzz AS 现住址,zw AS 职务,Gzm AS 工种名,jspx AS 何时技术培训,jlcf AS 何时奖励和处分,smwt AS 需要说明问题,tbrqm AS 填表人签名,tbrq AS 填表日期,gsyj AS 公司审查意见,scrq AS 审查日期,Ryxz AS 人员性质,Rcsj AS 入厂时间, Ryzt AS 人员状态,bz AS 备注, bmbm AS 部门编码 FROM m_dadj WHERE zcbm='%s' ",m_filterValue);
m_tjb.SetRecordSource((_bstr_t)sql);
m_tjb.Refresh();
m_tj=m_tjb.GetRecordset().GetRecordCount();
UpdateData(FALSE);
break;
}
}
//CDialog::OnOK();
}
4.5 管理员账号管理模块源程序
BOOL ZHGL::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
m_adodc.SetRecordSource("Select UserName AS 管理员姓名,UserPwd AS 密码 FROM pUser");
m_adodc.Refresh(); //刷新结果集的内容
//设置列宽度
return TRUE; // return TRUE unless you set the focus to a control
}
4.6 档案备份模块源程序
void CCopydlg::OnButtoncheckml()
{
// TODO: Add your control notification handler code here
CString ReturnPach; //定义一个字符串变量保存存储路径
TCHAR szPath[_MAX_PATH];
BROWSEINFO bi; //定义一个对话框实例
bi.hwndOwner=NULL;
bi.pidlRoot=NULL;
bi.lpszTitle=_T("请选择备份文件夹"); //设置窗口标题
bi.pszDisplayName=szPath;
bi.ulFlags=BIF_RETURNONLYFSDIRS;
bi.lpfn=NULL;
bi.lParam=NULL;
LPITEMIDLIST pItemIDList=SHBrowseForFolder(&bi); //获得选择路径
if(pItemIDList) //判断路径是否为空
{
if(SHGetPathFromIDList(pItemIDList,szPath))
ReturnPach=szPath; //如果路径不为空则将路径赋给字符串
}
else
ReturnPach=""; //路径为空字符串同时为空m_Edit.SetWindowText(ReturnPach); //将路径显示在文本框中
}
void CCopydlg::OnOK()
{
UpdateData();
CString str,strpath;
m_Edit.GetWindowText(str); //获取文本框中的路径地址strpath = str+"\\"+m_Name+".mdb"; //将路径和要求的文件名以固定的格式组合
char buf[256];
::GetCurrentDirectory(256,buf);
strcat(buf,"\\Demo01.mdb"); //获取当前程序的数据库地址
CopyFile(buf,strpath,false); //复制文件,false代表遇到同文件名进行覆盖
MessageBox("备份完成!","系统提示",MB_OK|MB_ICONEXCLAMATION);
CDialog::OnOK();
}
4.7 档案还原模块源程序
void CReturndly::OnButtonliulan()
{
// TODO: Add your control notification handler code here
CFileDialog dlg(TRUE,"mdb",NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "(*.mdb)|*.mdb",NULL);//创建一个文件对话框并且只显示文件后缀名为mdb的文件if(dlg.DoModal()==IDOK) //弹出文件对话框判断是否单击OK按钮
{
CString str;
str = dlg.GetPathName(); //获取选择的文件路径
m_Edit.SetWindowText(str); //将路径添加至文本框控件中
}
}
BOOL CReturndly::OnInitDialog()
{
CDialog::OnInitDialog();
char buf[256];
::GetCurrentDirectory(256,buf);
strcat(buf,"\\Demo01.mdb"); //获取当前数据库路径地址
return TRUE;
}
void CReturndly::OnBUTTONreturn()
{
// TODO: Add your control notification handler code here
UpdateData();
CString str;
m_Edit.GetWindowText(str); //获取需还原数据库路径
char buf[256];
CopyFile(str,buf,false); //将数据库文件复制到数据库文件
MessageBox("还原完成!","系统提示",MB_OK|MB_ICONEXCLAMATION);
CDialog::OnOK();
}
5 总结
本次课程设计是由我和同学合作设计完成的,界面设计,数据库设计以及录入编辑功能模块由同学设计完成,查询和统计模块由我完成。
该设计使用Visual C++6.0作为开发平台以及Access数据库来编写人事档案管理程序。
在设计过程中主要经过了审题、需求与可行性分析,然后形成设计思路,设计所要实现的功能,最后进行程序的编写与调试。
在整个设计过程中不断的出现问题并不断的进行修改,从中感受到亲自动手实践的重要性。
通过老师和同学的帮助,解决了过程中出现的各种问题。
通过本次课程设计,发现了自己在应用数据库,使用VC++6.0和编程上有很大的不足,希望在以后的学习中能够加强学习,提高实际应用能力和解决问题的能力。
参考资料
[1]Visual C++程序设计教程与上机指导[M],高志伟、宋雅娟,北京:北京工
业出版社,2008
[2]Visual C++程序设计使用案例教程[M],于永彦、王志坚、娄渊胜、束玉琴,
北京:北京大学出版社,2010
[3]Visual C++深入详解[M],孙鑫、余安萍,北京:电子工业出版社,2006
[4]Visual C++项目开发案例全程实录(第二版)[M],刘锐宁、梁水、李伟明,
北京:清华大学出版社,2011。