人事管理系统课程设计报告Word文件下载.docx
《人事管理系统课程设计报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《人事管理系统课程设计报告Word文件下载.docx(11页珍藏版)》请在冰豆网上搜索。
“排序记录”功能可以用来用户对数据库中的所有人员根据职工编号进行排序。
使用该功能后按下一个记录键,可以看到所有的人员已按照职工编号排好顺序了。
基本内容:
每一个界面都是一个类,类上的选择按钮由该类的成员函数实现,而职工信息则是数据成员。
主界面的类是:
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"
人事管理系统.h"
#include"
Add.h"
Dguolv.h"
人事管理系统Set.h"
人事管理系统Doc.h"
人事管理系统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:
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()
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)
ModifytheWindowclassorstylesherebymodifying
//theCREATESTRUCTcs
returnCRecordView:
PreCreateWindow(cs);
OnInitialUpdate()
m_pSet=&
GetDocument()->
m_mySet;
OnInitialUpdate();
GetParentFrame()->
RecalcLayout();
ResizeParentToFit();
/////////////////////////////////////////////////////////CMyViewprinting
OnPreparePrinting(CPrintInfo*pInfo)
//defaultpreparation
returnDoPreparePrinting(pInfo);
OnBeginPrinting(CDC*/*pDC*/,CPrintInfo*/*pInfo*/)
addextrainitializationbeforeprinting
OnEndPrinting(CDC*/*pDC*/,CPrintInfo*/*pInfo*/)
addcleanupafterprinting
//CMyViewdiagnostics
AssertValid()const
AssertValid();
Dump(CDumpContext&
dc)const
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
OnBUTTONAdd()
Addyourcontrolnotificationhandlercodehere
Adda;
//建立对话框Add的对象
//CDataExchange*pDX;
if(a.DoModal()==IDOK)//打开对话框Add
{
m_pSet->
AddNew();
m_zgbh=a.m_zgbh;
m_zgxm=a.m_zgxm;
m_zgxb=a.m_zgxb;
m_zgnl=a.m_zgnl;
m_jbgz=a.m_jbgz;
m_zc=a.m_zc;
m_jl=a.m_jl;
m_szdm=a.m_szdw;
m_gzsj=a.m_gzsj;
//DDX_DateTimeCtrl(pDX,IDC_DATETIMEPICKER_GZSJ,m_pSet->
Update();
//更新记录集
Requery();
//重新提取数据
MoveLast();
//移动下一条记录
UpdateData(FALSE);
//更新视图
OnBUTTONDel()
m_pSet->
Delete();
MoveNext();
if(m_pSet->
IsEOF())
IsBOF())
SetFieldNull(NULL);
OnBUTTONFind()
CDguolvDlgquery;
CStringvalue;
if(Dlgquery.DoModal()==IDOK)//“模式窗口方式打开,结束前不能操纵父窗口”
value="
职工编号=+"
+Dlgquery.m_guol+"
"
;
m_strFilter=value;
}
OnBUTTONSort()
m_strSort="
职工编号"
}忽略此处..