人事管理系统课程设计报告.docx
《人事管理系统课程设计报告.docx》由会员分享,可在线阅读,更多相关《人事管理系统课程设计报告.docx(11页珍藏版)》请在冰豆网上搜索。
人事管理系统课程设计报告
1.应用程序的名称:
人事管理系统
2.应用程序的主题和目的:
制作能用于创建人事信息管理的系统,
创建人事管理数据表,反映职工的基本信息。
其中含有,“职工编号”,“职工姓名”,“职工性别”,“职工年龄”,“基本工资”,“所在部门”。
“工作时间”,“简历”,“职称”等字段。
可以对人员信息进行适当的处理,以满足单位或企业需要。
能够执行以下四种操作:
(1)可以输入职工的完整信息以增加新成员
(2)可以选择性的删除职工的信息
(3)可以实现对职工人员进行排序
(4)可以实现对某个职工进行筛选
3.应用程序的简介:
设计目的:
创建人事管理数据表,该表反映职工的基本信息,其中包含职工编号、职工姓名、职工性别、所在部门、职工年龄、工作日期、基本工资、职称、职务和简历等字段。
应用系统主控界面应包括记录编辑和记录查询等功能模块。
记录编辑功能完成职工记录编辑的“增加记录”、“删除记录”、“筛选记录”和“排序记录”等功能。
功能介绍:
“增加记录”功能可以弹出提示信息对话框,对话框含有九个分别对应人员信息的静态控件,和九个编辑框,用于用户输入要增加的人员的九条信息。
“删除记录”功能可以用来删除某个人员或某些人员的信息。
系统中会显示该信息已被删除。
该信息也会从数据库中删除。
“筛选记录”功能可以用来提供给用户筛选出需要查看的人员的信息,该人事管理系统会弹出一个对话框,提示用户输入要筛选的人员的职工编号,从而筛选出该人员的信息。
此时系统会弹出被筛选出的人员的全部信息。
“排序记录”功能可以用来用户对数据库中的所有人员根据职工编号进行排序。
使用该功能后按下一个记录键,可以看到所有的人员已按照职工编号排好顺序了。
基本内容:
每一个界面都是一个类,类上的选择按钮由该类的成员函数实现,而职工信息则是数据成员。
主界面的类是:
CMyView,成员函数有OnButtonAdd()(增加记录);OnButtonDel()(删除记录);OnButtonPaiXu()(排序记录);OnButtonSort()(筛选记录)
CMySet,定义指针为:
m_pSet调用数据成员。
(1)所有的人员信息都存在Access数据库中。
用Office中的Access软件创建数据库,创建“人事管理数据表”输入所有的人员信息,然后配置ODBC数据源。
(2)用VC++创建人事管理应用程序框架。
在VC++中创建一个MFC。
(3)制作人事管理主窗口,放入九个静态标签控件和九个编辑框控件,分别在九个静态控件属性中设置名称分别与“职工编号”,“职工姓名”,“职工性别”,“工作时间”等九条信息对应。
加完控件后设置完属性。
最后为每个编辑框绑定数据源字段。
(4)错误分析与排除:
在绑定后唯独“工作时间”无法绑定,用方法二进行排除错误哦。
不用Cstring定义工作时间,删掉原有编辑框控件,添加“日期时间选取器”控件。
并与m_gzsj绑定。
此时便有唯一映射,然后修改函数DoDateExchange();编译运行并按下一条记录。
(5)为系统实现“增加记录”,“删除记录”,“筛选记录”,“排序记录”功能,添加四个功能按钮。
为“增加记录”,和“筛选记录”创建新的对话框和创建新类及类成员变量,再分别绑定。
创建“增加记录”功能对话框用于提醒用户输入人员信息。
双击四个按钮分别输入四段代码以实现四个人事管理功能。
(6)最后的运行,分别测试四个功能。
并保存。
主要技术:
面向对象设计与MFC,数据库
运行环境:
此设计采用VC++编译,并能在WIN7下运行
。
4.运行程序总体设计结构图,类层次图,主要运行界面介绍
(1)总体设计结构图:
人事管理系统
主界面
增加记录
删除记录
排序记录
筛选记录
(2)类层次图
CRecordView
CDialog
_Dlquery
CDguolv
CMyView
_a
CAdd
(3)运行界面
5.创新和难点
如果完全按照课程设计指导书模板的进行,当进行到“增加记录”功能时便出现问题。
总是输不进去,增加不了新成员,而且还会突然跳到最后一个人员信息。
即覆盖了之前的信息。
最初运行到此处时,不知如何是好。
编译有无错,却运行不出来,经过搜书,XX等方式明白关键所在,需要新建资源对话框,并新建类和类成员变量以实现信息的录入。
于是我添加了一的Dialog对话框并添加九个静态控件和九个编辑框控件然后绑定此类变量。
并在voidCMyView:
:
OnBUTTONAdd()中添加相应代码把新建立的类对象a对应的数据成员值赋值给m-pSet,最终得以实现添加功能。
并且在点击“增加记录”功能按钮时会弹出:
“请输入要增加的人员信息”对话框,用户可直接在编辑框中输入要增加的人员信息即可把该成员添加到人事管理系统中去。
看上去更美观,明白。
有关数据源的问题,当再次打开或放到别的机子上运行时老是会出现LINK2001,2011等问题。
6.课程设计中目前存在的问题
“筛选记录”功能实现一次后,无法恢复,必须再次运行后才可以实现其他功能。
否则如果先运行“筛选记录”那么无法返回运行其他三个功能。
7.设计实践过程中的心得体会。
通过这次的课程设计,我对与MFC有了初步了解,在调试,编译,运行的过程中,加深了对面向对象的理解。
最初创建MFC做这个人事管理系统时,C++面向对象的可视化让我对此产生了兴趣,但慢慢的当我在做“增加记录”功能时,由于老是出现问题,我开始没了耐心。
心里浮躁了起来,越是浮躁就越找不出错误原因所在。
于是在整个过程中,我明白,编程过程一定要有耐心,要多尝试,多思考。
还有在学习编程的过程中培养自学能力很重要。
以这种可视化的方式可以让我们讲理论与实践结合起来,培养起兴趣。
附录
1.安装使用说明:
(1)双击.exe文件后,就会弹出一个人事管理系统的对话框。
此对话框中上面四分之三空间是职工的九条信息名称和对应的信息,底部是四个功能按钮,分别是:
“增加记录”,“删除记录”,“排序记录”,“筛选记录”。
(2)点击“增加记录”后会弹出新的窗口,此窗口和主窗口类似,用户输入要增加的职工信息后,点击“确定”键即可将该成员信息增加到人事管理系统中。
(3)点击“删除记录”后,系统会删除当前的成员信息,并在主窗口显示已删除。
(4)点击“排序记录”按钮后,所有的人员按“职工编号”进行有小到大的排序。
按左右转换记录键即可观察到。
(5)点击“筛选记录”按钮后,弹出一个对话框,提醒用户输入要筛选的成员“职工编号”,系统会筛选出该成员,并显示该成员的所有信息。
2.源代码
//人事管理系统View.cpp:
implementationoftheCMyViewclass
#include"stdafx.h"
#include"人事管理系统.h"
#include"Add.h"
#include"Dguolv.h"
#include"人事管理系统Set.h"
#include"人事管理系统Doc.h"
#include"人事管理系统View.h"
#ifdef_DEBUG
#definenewDEBUG_NEW
#undefTHIS_FILE
staticcharTHIS_FILE[]=__FILE__;
#endif
////////////////////
//CMyView
IMPLEMENT_DYNCREATE(CMyView,CRecordView)
BEGIN_MESSAGE_MAP(CMyView,CRecordView)
//{{AFX_MSG_MAP(CMyView)
ON_BN_CLICKED(IDC_BUTTON_Add,OnBUTTONAdd)
ON_BN_CLICKED(IDC_BUTTON_Del,OnBUTTONDel)
ON_BN_CLICKED(IDC_BUTTON_Find,OnBUTTONFind)
ON_BN_CLICKED(IDC_BUTTON_Sort,OnBUTTONSort)
//}}AFX_MSG_MAP
//Standardprintingcommands
ON_COMMAND(ID_FILE_PRINT,CRecordView:
:
OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT,CRecordView:
:
OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW,CRecordView:
:
OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////
//CMyViewconstruction/destruction
CMyView:
:
CMyView()
:
CRecordView(CMyView:
:
IDD)
{
//{{AFX_DATA_INIT(CMyView)
m_pSet=NULL;
//}}AFX_DATA_INIT
//TODO:
addconstructioncodehere
}
CMyView:
:
~CMyView()
{
}
voidCMyView:
:
DoDataExchange(CDataExchange*pDX)
{
CRecordView:
:
DoDataExchange(pDX);
//{{AFX_DATA_MAP(CMyView)
DDX_DateTimeCtrl(pDX,IDC_DATETIMEPICKER_GZSJ,m_pSet->m_gzsj);
DDX_FieldText(pDX,IDC_EDIT_JBGZ,m_pSet->m_jbgz,m_pSet);
DDX_FieldText(pDX,IDC_EDIT_JL,m_pSet->m_jl,m_pSet);
DDX_FieldText(pDX,IDC_EDIT_SZDW,m_pSet->m_szdm,m_pSet);
DDX_FieldText(pDX,IDC_EDIT_ZC,m_pSet->m_zc,m_pSet);
DDX_FieldText(pDX,IDC_EDIT_ZGBH,m_pSet->m_zgbh,m_pSet);
DDX_FieldText(pDX,IDC_EDIT_ZGNL,m_pSet->m_zgnl,m_pSet);
DDX_FieldText(pDX,IDC_EDIT_ZGXB,m_pSet->m_zgxb,m_pSet);
DDX_FieldText(pDX,IDC_EDIT_ZGXM,m_pSet->m_zgxm,m_pSet);
//}}AFX_DATA_MAP
}
BOOLCMyView:
:
PreCreateWindow(CREATESTRUCT&cs)
{
//TODO:
ModifytheWindowclassorstylesherebymodifying
//theCREATESTRUCTcs
returnCRecordView:
:
PreCreateWindow(cs);
}
voidCMyView:
:
OnInitialUpdate()
{
m_pSet=&GetDocument()->m_mySet;
CRecordView:
:
OnInitialUpdate();
GetParentFrame()->RecalcLayout();
ResizeParentToFit();
}
/////////////////////////////////////////////////////////CMyViewprinting
BOOLCMyView:
:
OnPreparePrinting(CPrintInfo*pInfo)
{
//defaultpreparation
returnDoPreparePrinting(pInfo);
}
voidCMyView:
:
OnBeginPrinting(CDC*/*pDC*/,CPrintInfo*/*pInfo*/)
{
//TODO:
addextrainitializationbeforeprinting
}
voidCMyView:
:
OnEndPrinting(CDC*/*pDC*/,CPrintInfo*/*pInfo*/)
{
//TODO:
addcleanupafterprinting
}
/////////////////////////////////////////////////////////
//CMyViewdiagnostics
#ifdef_DEBUG
voidCMyView:
:
AssertValid()const
{
CRecordView:
:
AssertValid();
}
voidCMyView:
:
Dump(CDumpContext&dc)const
{
CRecordView:
:
Dump(dc);
}
CMyDoc*CMyView:
:
GetDocument()//non-debugversionisinline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMyDoc)));
return(CMyDoc*)m_pDocument;
}
#endif//_DEBUG
////////////////////////////////////////////////////////
//CMyViewdatabasesupport
CRecordset*CMyView:
:
OnGetRecordset()
{
returnm_pSet;
}
///////////////////////////////////////////////////////////CMyViewmessagehandlers
voidCMyView:
:
OnBUTTONAdd()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
Adda;//建立对话框Add的对象
//CDataExchange*pDX;
if(a.DoModal()==IDOK)//打开对话框Add
{
m_pSet->AddNew();
m_pSet->m_zgbh=a.m_zgbh;
m_pSet->m_zgxm=a.m_zgxm;
m_pSet->m_zgxb=a.m_zgxb;
m_pSet->m_zgnl=a.m_zgnl;
m_pSet->m_jbgz=a.m_jbgz;
m_pSet->m_zc=a.m_zc;
m_pSet->m_jl=a.m_jl;
m_pSet->m_szdm=a.m_szdw;
m_pSet->m_gzsj=a.m_gzsj;
//DDX_DateTimeCtrl(pDX,IDC_DATETIMEPICKER_GZSJ,m_pSet->m_gzsj);
m_pSet->Update();//更新记录集
m_pSet->Requery();//重新提取数据
m_pSet->MoveLast();//移动下一条记录
UpdateData(FALSE);//更新视图
}
}
voidCMyView:
:
OnBUTTONDel()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
m_pSet->Delete();
m_pSet->MoveNext();
if(m_pSet->IsEOF())
m_pSet->MoveLast();
if(m_pSet->IsBOF())
m_pSet->SetFieldNull(NULL);
UpdateData(FALSE);
}
voidCMyView:
:
OnBUTTONFind()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
CDguolvDlgquery;
CStringvalue;
if(Dlgquery.DoModal()==IDOK)//“模式窗口方式打开,结束前不能操纵父窗口”
{
value="职工编号=+"+Dlgquery.m_guol+"";
m_pSet->m_strFilter=value;
m_pSet->Requery();
UpdateData(FALSE);
}
}
voidCMyView:
:
OnBUTTONSort()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
m_pSet->m_strSort="职工编号";
m_pSet->Requery();
UpdateData(FALSE);
}忽略此处..